Задача: Хочу видеть в 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.