
Предупреждение. Не используйте Raspbian Stretch, на ней WebIOPi вообще не запускается. Найдите в Сети предыдущую версию. Все описанное относится к версии Raspbian Jessie.
При использовании старых дистрибутивов при работе в терминале можно давать команду sudo apt-get update, но ни в коем случае не вводите команду sudo apt-get upgrade. Это может нарушить работу уже установленных программ.
Скачать Raspbian Jessie версия от 2016-05-27 архив ZIP 1.4 Gb
Raspbian Jessie и Stretch сейчас уже старые дистрибутивы, но вы их можете скачать по ссылке downloads.raspberrypi.org/raspbian/images/. Историю версий можно посмотреть по ссылке https://en.wikipedia.org/wiki/Raspberry_Pi_OS. При использовании старых дистрибутивов можно давать команду sudo apt update для обновления списка пакетов, но не давайте команду sudo apt upgrade для обновления пакетов - это может нарушить работу системы.
За основу взят проект https://github.com/swkim01/webiopi-dht . Перевод оригинала в статье DHT11, DHT22 в Raspberry Pi и WebIOPi . Из проекта удалены схема со светодиодом, управление режимами работы. Оставлена только индикация температуры и влажности в браузере и добавлены графики температуры и влажности.
На моем Pi 3 установлен Raspbian - jessie версия от 2016-05-27.
Я скачал исходный код WebIOPi с http://sourceforge.net/. В терминале выполните следующие команды:
wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz
tar xvzf WebIOPi-0.7.1.tar.gz
Установите модуль Adafruit Python DHT командами:
sudo apt-get install build-essential python-dev
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install
Соберите электрическую схему:

После сборки схемы вы можете проверить датчик командами:
cd Adafruit_Python_DHT
sudo python examples/AdafruitDHT.py 22 18
Если у вас датчик DHT11, то вместо 22 поставьте 11, 18 - номер контакта GPIO, т.е. GPIO18 (используется BCM нумерация).

Склонируйте репозиторий на Pi.
cd
git clone https://github.com/swkim01/webiopi-dht.git
В домашнем каталоге создастся папка webiopi-dht.
Если вы используете Raspberry Pi1 Модель B, тогда пропатчите исходники следующим образом.
cd /home/pi/webiopi-dht
patch -p1 < /home/pi/webiopi-dht/webiopi-0.7.1-rpi1-py2.7-dht.diff
Если вы используете Raspberry Pi2 или Pi3, тогда пропатчите исходники таким образом:
cd /home/pi/webiopi-dht
patch -p1 < /home/pi/webiopi-dht/webiopi-0.7.1-rpi2-py2.7-dht.diff
Запустите установку WebIOPi командами:
cd /home/pi/WebIOPi-0.7.1/
sudo ./setup.sh
В конце инсталляции выдается запрос на установку Weaved. Я отказался от установки, нажав n.
Если вы используете версию raspbian jessie, вы должны скопировать файл webiopi.service командой:
cd /home/pi/webiopi-dht
sudo cp webiopi.service /lib/systemd/system
Для старта WebIOPi при включении системы обычно рекомендуют дать команду sudo update-rc.d webiopi defaults, но тогда на Raspberry Pi3 WebIOPi запускается ненадежно. Часто после этого приходится перезагружать систему. Для надежного запуска лучше прописать команду запуска WebIOPi в rc.local. Для этого запустите редактор nano командой
sudo nano /etc/rc.local
и в файл /etc/rc.local добавьте команду
sudo /etc/init.d/webiopi start
перед строкой exit 0.
Чтобы включить DHT в WebIOPi, отредактируйте файл /etc/webiopi/config.
sudo nano /etc/webiopi/config
...
[DEVICES]
...
dht0 = DHT22 pin:18

После перезагрузки WebIOPi вы можете видеть значения температуры/влажности на странице 'device-monitor' WebIOPi.
sudo /etc/init.d/webiopi restart
В браузере введите примерно следующее
192.168.1.29:8000/app/devices-monitor
т.е. IP адрес Raspberry Pi, номер порта (8000) и путь к devices-monitor

Программа запрашивает логин - webiopi и пароль - raspberry.
Фреймворк WebIOPi - программа привередливая, при малейшей ошибке в файле /etc/webiopi/config она не запускается, в браузере выдается страница с сообщением "Нет доступа, в соединении отказано". Исправьте ошибку в файле config и перезапустите сервис командой sudo /etc/init.d/webiopi restart
После этого фреймворк WebIOPi должен заработать.
ПО проекта состоит из трех HTML-файлов и файла скрипта Python. HTML-код содержит веб-контент для отслеживания и вывода на экран температуры и влажности, а также для построения графиков температуры и влажности. Код скрипта обеспечивает считывание значений температуры и влажности и запись их в файлы данных data_DHT.txt и data_humi.txt соответственно. Снятие показаний повторяется в соответствии с заданными вами интервалами времени.
Отредактируйте файл /etc/webiopi/config в соответствии с расположением HTML-файлов и файла скрипта Python.
...
[SCRIPTS]
myproject = /home/pi/webiopi-dht/examples/python/script.py
...
[HTTP]
...
doc-root = /home/pi/webiopi-dht/examples/html
...

В Python'e важны отступы в начале строки. Строго соблюдайте величину отступов в начале каждой строки кода.
Показания датчиков записываются в файлы данных каждую минуту (60 сек) - строка webiopi.sleep(60).
Файл script.py:
import webiopi
import datetime
import time
from time import strftime
def loop():
dht = webiopi.deviceInstance("dht0")
celsius = dht.getCelsius() # get current temperature
humi = dht.getHumidityPercent()
f = open('/home/pi/webiopi-dht/examples/html/data_DHT.txt', 'a')
data_entry = "{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),"%.1f" % celsius)
f.write(data_entry)
f.close()
f = open('/home/pi/webiopi-dht/examples/html/data_humi.txt', 'a')
data_entry = "{0},{1}\n".format(strftime("%Y-%m-%d %H:%M:%S"),"%.1f" % humi)
f.write(data_entry)
f.close()
webiopi.sleep(60)
Файл index.html

Файл temp.html

Файл humi.html

Файлы данных data_DHT.txt и data_humi.txt

Для построения графиков используется готовая библиотека dygraph. Библиотеку dygraph-combined-dev.js можно скачать с сайта dygraphs.com или взять из каталога файлов вместе с другими файлами проекта.
Скачать файлы проекта
Разархивируйте скачанный архив и скопируйте папки html и python в каталог /home/pi/webiopi-dht/examples. Это надо сделать как пользователь pi, т.е. не использовать команду sudo. Иначе при работе могут возникнуть проблемы с правами доступа. У меня, например, каталоги html и python имеют права 755, их владелец pi и группа pi. Сами файлы в папках имеют права 644, владелец и группа pi. Можете для гарантии дать права 777.
Перезагрузите WebIOPi и откройте веб-браузер на другом компьютере в вашей локальной сети.
sudo /etc/init.d/webiopi restart
В браузере введите примерно так:
192.168.1.29:8000
Возможна такая ошибка — ваш браузер вместо открытия страницы начинает поиск по этому адресу и выводит кучу сообщений о невозможности найти такой текст. Значит вам надо изменить настройки браузера. В настройках браузера отмените поиск по адресной строке. В Mozilla Firefox в разделе Поиск снимите галку "Использовать адресную строку для поиска и навигации". Теперь браузер должен открывать адрес, а не начинать поиск.
Ждите! Показания датчика считываются с периодичностью в 7 секунд (строка setInterval(updateUI, 7000);) в файле index.html, интервал указан в миллисекундах.

Щелкните по ссылке График температуры. Через пару секунд на экране появится график температуры.

Аналогично по щелчку График влажности должен построиться график влажности.

Очистите файлы данных data_DHT.txt, data_humi.txt от информации, оставив только первые строчки в начале файлов. Теперь в них будет писаться ваша информация.
И напоследок. По техусловиям на датчики DHT11/22 показания могут считываться не чаще, чем один раз в две секунды. В этом проекте показания для браузера считываются через 7 секунд, а для записи в файлы данных через 60 секунд. Старайтесь не делать длительности этих интервалов кратными друг другу. Например, если первый интервал 5 секунд, а второй -60 секунд, то через 12 считываний по первому интервалу моменты обращений к датчику могут совпасть, что приведет к сбою в показаниях. Это проявляется в записях данных по влажности. В файле data_humi.txt появляется запись влажности около 3000%. На графике это проявляется в виде пика, на фоне которого обычная влажность смотрится почти прямой линией. Это легко исправить. Просто найдите и удалите эту запись из файла и график снова вернется к нормальному виду. При указанных значениях сбоев в течение месяца не наблюдалось.
Графики масштабируемы, можно левой кнопкой мыши выделить нужный период и он предстанет в более подробном виде. Подведя курсор мыши к линии графика, можно увидеть показания датчика в этой точке.
Если вам мало одного датчика температуры, то можно подключить еще несколько датчиков DS18B20 по шине 1-wire. Для шины 1-wire в Raspberry Pi2 / Pi3 используется вход GPIO4 (BCM нумерация). Это контакт 7 на 40-контактном разъеме GPIO. Я подключил один датчик для измерения температуры наружного воздуха, второй прилепил к батарее отопления. Для батареи отопления надо использовать датчик в металлическом корпусе и обеспечить хороший тепловой контакт. Способ крепления датчика см. в статье Монитор атмосферного давления и температуры на Raspberry Pi 3.


Схема подключения датчиков DS18B20
Инициализируйте датчики командами
sudo modprobe w1-gpio
sudo modprobe w1-therm
sudo nano /boot/config.txt
и добавьте строку в конец файла, если ее там нет
dtoverlay=w1-gpio
перезагрузите систему
sudo reboot
Проверьте каталоги датчиков командой
ls -l /sys/bus/w1/devices
в выводе команды должны отобразиться два каталога наподобие 28-0416508db4ff, 28-041654f0dcff

Осталось прописать датчики в файле config фреймворка WebIOPi в секции DEVICES командой
nano /etc/webiopi/config
вставьте строки temp0, temp1
temp0 = DS18B20 slave:28-0416508db4ff
temp1 = DS18B20 slave:28-041654f0dcff
идентификаторы датчиков укажите, естественно, свои. Снова перезапустите WebIOPi командой
sudo /etc/init.d/webiopi restart

Для мониторинга использовал devices-monitor фреймворка WebIOPi. В браузере в адресной строке введите, например:
192.168.1.28:8000/app/devices-monitor

Показания обновляются каждые 5 секунд.
Если вы будете использовать devices-monitor, то становится излишним вывод на экран показаний температуры и влажности в файле index.html. Можно удалить этот блок кода и оставить только ссылки на построение графиков. Это уменьшит вероятность конфликтов при считывании показаний датчиков. Вместо обычной ссылки можно использовать картинку, при щелчке по которой на экран будет выводиться график.

Закиньте в ту же папку, что и index.html подходящие картинки размером примерно 200 на 200 пикселей. Отредактируйте файл index.html, например, так:

Если график строится очень долго, значит файл данных слишком большой. Удалите часть устаревших данных, можно также увеличить интервал считывания показаний датчиков.
Для удобства пользования devices-monitor можно добавить несколько строк справки в файл index.html, расположенный по пути /usr/share/webiopi/htdocs/app/devices-monitor. Перейдите в этот каталог и дайте команду sudo mcedit index.html или sudo nano index.html. Вставьте строки после <h1>Devices Monitor</h1> до строки <div id="content">, каждую строку закончите тегом <br>.

После редактирования файла не забудьте перезапустить WebIOPi командой sudo /etc/init.d/webiopi restart.
P.S. Не обновляйте без острой нужды пакеты и систему. Ранее у меня подобный монитор исправно работал на WebIOPi, но в один прекрасный день после обновления системы и пакетов монитор сломался. Devices Monitor выводил показания датчиков, а графики параметров перестали строиться. Скрипты на Python'е для записи показаний в файлы данных отказались работать. По слухам в интернете, разработчик WebIOPi сменил работу и забросил проект. В Raspbian, начиная, кажется, с версии ядра 4.9 (kernel 4.9) скрипты на Python'е, использующие библиотеку webiopi, не работают и показания датчиков не записываются в текстовые файлы. Если после обновления системы WebIOPi запускается, а запись показаний в файлы не идет, то попробуйте другой вариант - скрипт без webiopi:
script2.py

Для удобства скопируйте script2.py в ту же папку, что и script.py. В файле /etc/webiopi/config в секции [SCRIPTS] закомментируйте все строки. Запуск script2.py пропишите в rc.local после запуска WebIOPi перед командой exit 0:
sudo /etc/init.d/webiopi start
nohup /home/pi/webiopi-dht/examples/python/script2.py &
exit 0
Дайте скрипту права на выполнение командой
chmod +x /home/pi/webiopi-dht/examples/python/script2.py
и перезагрузите - sudo reboot.
За основу взят скрипт Tony DiCola (simpletest.py) Adafruit Industries 2014, фрагмент записи данных - ресурс electromost.com.
Использованные ресурсы.
https://github.com/swkim01/webiopi-dht
lock.3dn.ru/news/raspberry_pi_dlja_domashnej_avtomatizacii_grafiki_parametrov/2015-09-18-136
https://masterkit.ru/zip/ds18b20-rus.pdf
http://lock.3dn.ru/news/raspberry_pi_dlja_domashnej_avtomatizacii_shina_1_wire/2015-09-12-134
|