К Raspberry Pi 3 Model B подключен датчик температуры DHT11 и нужно чтобы он передавал данные температуры и влажности в Majordomo сервис которой установлен на купленное для этих целей оборудование, а именно 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.