Датчик температуры DHT11 и MajorDoMo

Posted by

К подключен датчик температуры и нужно чтобы он передавал данные температуры и влажности в сервис которой установлен на купленное для этих целей оборудование, а именно HP MicroServer Gen8 с осью Ubuntu Trusty Server

Почему датчик температуры DHT11 потому что он есть в наличии и комплектуется всего тремя ножками подключения:

  • GND = земля => 6 PIN on Raspberry Pi 3 Model B
  • DATA = данные => 7 PIN on Raspberry Pi 3 Model B
  • VCC = питание, 3.3V => 1 PIN on Raspberry Pi 3 Model B

Работаю с тем что есть, а как пойму что это действительно мне нужно, то и будут покупать, но с одним условием не в России, т.к. у нас все дорого.

Шаг №1: Устанавливаю python модуль через который идет взаимодействие по извлечению данных с подключенного датчика температуры:

pi@raspberrypi:~ $ sudo apt-get install build-essential python-dev python-openssl -y

pi@raspberrypi:~ $ git clone https://github.com/adafruit/Adafruit_Python_DHT.git

pi@raspberrypi:~ $ cd Adafruit_Python_DHT/

pi@raspberrypi:~/Adafruit_Python_DHT $ sudo python setup.py install

pi@raspberrypi:~/Adafruit_Python_DHT $ sudo examples/AdafruitDHT.py 11 4

Temp=24.0* Humidity=17.0%

где 4 - это GPIO4 на плате Raspberry Pi 3 Model B

Как видно все достаточно просто. Вот еще одна задумка, кстати у меня так всегда, когда я что-то разобрался, то начинаю придумывать самому себе задачки с интересуемым/изучаемым материалом дабы лучше понять.

Значит мне нужно будет из сервиса MajorDoMo дергать подключение к этой системе на базе Raspberry Pi 3 Model B чтобы получать необходимые значения, а потому нужно упростить путь вызова Python-скрипта:

pi@raspberrypi:~ $ sudo mkdir /etc/script

pi@raspberrypi:~ $ sudo cp Adafruit_Python_DHT/examples/AdafruitDHT.py /etc/script/

pi@raspberrypi:~ $ sudo /etc/script/AdafruitDHT.py 11 4

Temp=24.0* Humidity=19.0%

pi@raspberrypi:~ $ sudo nano /etc/sudoers

ekzorchik ALL=(ALL) NOPASSWD:/etc/script/AdafruitDHT.py

pi@raspberrypi:~ $ /etc/script/AdafruitDHT.py 11 4

Temp=24.0* Humidity=19.0%

Шаг №2: Теперь переключаюсь на систему Ubuntu Trusty Server с ролью MajorDoMo и настраиваю подключение к Rasbperry Pi 3 Model B через ssh:

ekzorchik@srv-trusty:~$ sudo apt-get install sshpass -y

ekzorchik@srv-trusty:~$ /usr/bin/sshpass -p 712mbddr@ ssh -o StrictHostKeyChecking=no pi@10.9.9.161 'echo 712mbddr@ | sudo -S /etc/script/AdafruitDHT.py 11 4'

Temp=24.0* Humidity=19.0%

Шаг №3: Теперь составляю два сценария в системе MajorDoMo, где одним буду получать температуру, а другим влажность выраженную в процентах:

ekzorchik@srv-trusty:~$ /usr/bin/sshpass -p 712mbddr@ ssh -o StrictHostKeyChecking=no pi@10.9.9.161 'echo 712mbddr@ | sudo -S /etc/script/AdafruitDHT.py 11 4' | awk '{print $1}' | cut -c 6-9

24.0

ekzorchik@srv-trusty:~$ /usr/bin/sshpass -p 712mbddr@ ssh -o StrictHostKeyChecking=no pi@10.9.9.161 'echo 712mbddr@ | sudo -S /etc/script/AdafruitDHT.py 11 4' | awk '{print $2}' | cut -c 10-13

18.0

Шаг № 4: Создаю класс

http://IP&DNS — Панель управления — (Объекты) Объекты — Добавить новый класс

  • Название: DHT11

после нажимаю «Добавить», затем в данном классе переключаюсь на вкладку «Объекты» и нажимаю «Добавить новый объект»

  • Название: temp
  • Класс: DHT11

и нажимаю «Добавить».

Шаг №5: После нужно создать сценарий, выполнив который в созданном объекты создастся свойства со значения выполненного сценария

http://IP&DNS — Панель управления — (Объекты) Сценарии — Новый сценарий

  • Название: temphumi

нажимаю «Добавить», а затем

Код (PHP):

$temp = shell_exec("/usr/bin/sshpass -p 712mbddr@ ssh -o StrictHostKeyChecking=no pi@10.9.9.161 'echo 712mbddr@ | sudo -S /etc/script/AdafruitDHT.py 11 4' | awk '{print $1}' | cut -c 6-7");

echo $temp;

echo "\t";

sg("Temp.temp",$temp);

$humi = shell_exec("/usr/bin/sshpass -p 712mbddr@ ssh -o StrictHostKeyChecking=no pi@10.9.9.161 'echo 712mbddr@ | sudo -S /etc/script/AdafruitDHT.py 11 4' | awk '{print $2}' | cut -c 10-11");

echo $humi;

echo "\t";

sg("Temp.humi",$humi);

И нажимаем «Сохранить», теперь нужно перейти по ссылке сформированного сценария (находится она чуть ниже кнопки «Сохранить»). Если ошибок нет то сценарий выполнится и на странице браузера появится итог выполнения:

24.0 18.0

Эти значения присвоились созданному выше объекту temp в качестве свойств. Итого:

  • temp.temp = 24.0
  • temp.humi = 18.0

Шаг №6: Теперь имея объект.свойство можно оперировать данными, к примеру создать шаблон поведения, если я говорю или пишу слово «темпи» в «История событий» выводится текущая температура рядом с датчиком:

  • 14:00 Алиса: Сегодня 25.0
  • 14:00 Admin: темпи

http://IP&DNS — Панель управления — (Объекты) — Шаблоны поведения — Добавить новую запись

  • Название: температура
  • Шаблон: [Т^т]емпи
  • Код (PHP):

runScript('temphumi');

$status.="Сегодня ".gg("temp.temp")."градуса";

say("$status",2);

и нажимаю «Сохранить».

Можно сделать полный код для вывода температуры и влажности:

runScript('temphumi');

$status.="Сегодня ".gg("temp.temp")."градуса";

say("$status",2);

$status2.="и ".gg("temp.humi")."процента влажности";

say("$status2",2);

Замечу, что не претендую на совершенство настройки, я учусь, а учусь я сперва делая ошибки, а потом и вовсе исключая.

Но мне кажется не красиво в «Шаблоне поведения» использовать команду запуска сценария явно, надо бы поручить самой системе MajorDoMo к примеру раз в 10 минут извлекать данные, а как это сделать? Просто с этой системой, как MajorDoMo да и программированием в целом я просто не знаю с какой стороны подступиться. Думаю у многих так и я не исключение. Потому заметка в процессе. На этом у меня пока все, с уважением автор блога Олло Александр aka ekzorchik.