Задача: Хочу видеть в Domoticz
текущую температуру, значения которой снимаются с помощью утилиты weather.
Сегодня я для себя покажу, каким я способом решил поставленную задачу. Для чего это? А просто так, просто уже на основе этого я смогу что-либо еще таким образом сделать, да и интересно. Делаю через скрипт на Bash
который получает значение, приводит его к виду, который отправляется через json
запрос в Domoticz.
Шаг №1:
Подключаюсь к своему Domoticz
ekzorchik@navy:~$ srv-domoticz
я все еще на версии
Version: 2020.2 Build Hash: b63341bc0 Compile Date: 2020-04-26 14:47:55 dzVents Version: 3.0.2 Python Version: 3.8.0 (default, Oct 28 2019, 16:14:01) [GCC 8.3.0] Uptime: 203 Дней, 21 Часов, 47 Минут, 45 Секунды
Шаг №2:
Устанавливаю в систему утилиту weather-util:
ekzorchik@srv-domoticz:~$ apt-cache search weather-util weather-util - command-line tool to obtain weather conditions and forecasts weather-util-data - optional correlation data for weather-util search feature ekzorchik@srv-domoticz:~$ ekzorchik@srv-bionic:~$ sudo apt-get install -y weather-util
Шаг №3:
Получать информацию буду с аэропорта домодедово, как ближайшую точку, относящуюся к моему местоположению:
ekzorchik@srv-domoticz:~$ weather UUDD Searching via station... [caching result Moscow / Domodedovo, Russia] Current conditions at Moscow / Domodedovo, Russia (UUDD) 55-24N 037-54E Last updated Dec 26, 2021 - 10:00 AM EST / 2021.12.26 1500 UTC Temperature: 21 F (-6 C) Relative Humidity: 79% Wind: from the WSW (240 degrees) at 16 MPH (14 KT) Windchill: 6 F (-14 C) (холодный ветел) Ощущается, как Weather: heavy snow showers; Cumulonimbus clouds observed Sky conditions: mostly cloudy (сильные снегопады; Наблюдались кучево-дождевые облака Состояние неба: в основном пасмурно) ekzorchik@srv-domoticz:~$
из этого вывода я хочу извлекать:
Температуры в градусах
Влажность
Ощущается, как
ekzorchik@srv-domoticz:~$ weather UUDD | grep Temperature | awk '{print $4}' | cut -c 2,3,4 -6 ekzorchik@srv-domoticz:~$ weather UUDD | grep Humidity | awk '{print $3}' | cut -c 1,2 79 ekzorchik@srv-domoticz:~$ weather UUDD | grep Windchill | awk '{print $4}' | cut -c 2,3,4 -14
Шаг №4:
Создаю в Domoticz
шаблон на виртуальный сенсор = Dummy:
http://IP&DNS:8080 (http://srv-domoticz) - user&pass - Настройка - Оборудование -
Включено: Активировано
Имя: Dummy
Тип: Dummy (Does nothing, use for virtual switches only)
Задержка данных: Отключен
и нажимаю "Добавить"
Затем на основе данного шаблона создаю виртуальный датчик
нажимаю на "Создать виртуальный датчик"
и параметры создания виртуального датчика:
Имя: Температура Улица
Тип датчика: Custom Sensor
Метки оси: ° С
и нажимаю "ОК"
Созданный виртуальный датчик размещается во вкладке "Вспомогательные"
Шаг №5:
Чтобы передать значение из скрипта получения температуры, влажности и ощущается как в виртуальный датчик вкладки "Вспомогательные"
нужно знать его IDX.
Его можно посмотреть если у виртуального датчика с именем "Температура (Улица)"
нажать "Редактировать"
у меня idx: 19
либо перейти:
http://IP&DNS:8080 (http://srv-domoticz) - user&pass - Настройка - Устройства
после на основе добавленного создаю виртуальный датчик
Шаг №6:
Пробую передать произвольное значение в виртуальный датчик через запрос посредством утилиты curl:
ekzorchik@srv-domoticz:~$ curl -s -i -H "Accept: application/json" "http://127.0.0.1:8080/json.htm?type=command¶m=udevice&idx=19&svalue=-6" HTTP/1.1 200 OK Content-Length: 49 Cache-Control: no-cache Pragma: no-cache Access-Control-Allow-Origin: * Content-Type: application/json;charset=UTF-8 { "status" : "OK", "title" : "Update Device" } ekzorchik@srv-domoticz:~$ ekzorchik@srv-domoticz:~$ -s, --silent Silent mode -i, --include Include protocol response headers in the output -H, --header <header/@file> Pass custom header(s) to server
Результат:
Шаг №7:
А теперь создаю скрипт который полученный результат получения температура улица на текущий момент присвоит виртуальному датчику по его IDX:
ekzorchik@srv-domoticz:~$ sudo mkdir domoticz/scripts/customscripts/ mkdir: cannot create directory ‘domoticz/scripts/customscripts/’: File exists ekzorchik@srv-domoticz:~$ sudo nano domoticz/scripts/customscripts/weather.sh #!/bin/bash #setup host=localhost port=8080 #username=domoticzuser #password=domoticzpassword weathertemperature=`weather UUDD | grep Temperature | awk '{print $4}' | cut -c 2,3,4` #IDX Virtual Sensor idxweather=19 curl -s -i -H "Accept: application/json" "http://$host:$port/json.htm?type=command¶m=udevice&idx=$idxweather&svalue=$weathertemperature" exit 0 ekzorchik@srv-domoticz:~$ sudo chmod +x domoticz/scripts/customscripts/weather.sh
В bash
есть опция -x
, которая будет показывать вам команды по мере их выполнения (запустите сценарий с bash -x script.sh
вместо bash script.sh
или ./script.sh
)., это покажет вам команды в правильных кавычках и будет более полезно, чем печатать их с помощью echo.
ekzorchik@srv-domoticz:~$ sudo bash -x domoticz/scripts/customscripts/weather.sh + host=localhost + port=8080 ++ cut -c 2,3 ++ awk '{print $4}' ++ grep Temperature ++ weather UUDD + weathertemperature=-7 + idxweather=19 + curl -s -i -H 'Accept: application/json' 'http://localhost:8080/json.htm?type=command¶m=udevice&idx=19&svalue=-7' HTTP/1.1 200 OK Content-Length: 49 Cache-Control: no-cache Pragma: no-cache Access-Control-Allow-Origin: * Content-Type: application/json;charset=UTF-8 Set-Cookie: DMZSID=27c7689066cc80353fff1b888eef87d8_YmVkODlhNzQtYWU3OC00OGRiLTlhMWUtMDBlZWQ1N2Y5ODE5.1640533967; HttpOnly; path=/; Expires=Sun, 26 Dec 2021 15:52:47 GMT { "status" : "OK", "title" : "Update Device" } ekzorchik@srv-domoticz:~$
Отлично текущая температура успешно передалась в Domoticz.
Шаг №8:
Чтобы скрипт отрабатывал каждый час и тем самым обновлял значение в Domoticz
создаю задание в системе Ubuntu 18.04:
Время запуска представляется в таком виде:
Минута час день_месяца месяц день_недели команда
# m h dom mon dow command
Символ “*” подразумевает – любое значение
ekzorchik@srv-bionic:~$ sudo crontab -e @reboot /usr/sbin/ntpdate -s 0.pool.ntp.org > /dev/null @hourly /home/ekzorchik/domoticz/scripts/customscripts/weather.sh
Шаг №9:
По такому же принципу выше создаю "Вспомогательный датчик"
с типом "Custom Sensor"
для "Влажности"
и "Ощущается как":
ekzorchik@srv-domoticz:~$ sudo cp domoticz/scripts/customscripts/weather.sh domoticz/scripts/customscripts/humidity.sh ekzorchik@srv-domoticz:~$ sudo cp domoticz/scripts/customscripts/weather.sh domoticz/scripts/customscripts/windchill.sh 00 01-23 * * * /home/ekzorchik/domoticz/scripts/customscripts/weather.sh 00 01-23 * * * /home/ekzorchik/domoticz/scripts/customscripts/humidity.sh 00 01-23 * * * /home/ekzorchik/domoticz/scripts/customscripts/windchill.sh
Шаг №10:
Ниже история работы скрипт и получаемых значений с боевого Domoticz:
Итого я разобрал данную задачу оформив в шагах как ее реализовать. Правда не так изящно, но все же есть теперь от чего отталкиваться.
На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.