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

и нажимаю "Добавить"

Затем на основе данного шаблона создаю виртуальный датчик

нажимаю на "Создать виртуальный датчик"

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

  • Имя: Температура Улица
  • Тип датчика: Custom Sensor
  • Метки оси: ° С

и нажимаю "ОК"

Создаю виртуальный датчик с типом "Custom Sensor"

Созданный виртуальный датчик размещается во вкладке "Вспомогательные"

Созданный виртуальный датчик размещается во вкладке "Вспомогательные"

Шаг №5: Чтобы передать значение из скрипта получения температуры, влажности и ощущается как в виртуальный датчик вкладки "Вспомогательные" нужно знать его IDX. Его можно посмотреть если у виртуального датчика с именем "Температура (Улица)" нажать "Редактировать"

у меня idx: 19

либо перейти:

http://IP&DNS:8080 (http://srv-domoticz) - user&pass - Настройка - Устройства

Узнаю IDX виртуального датчика вкладке "Вспомогательные"

после на основе добавленного создаю виртуальный датчик

Шаг №6: Пробую передать произвольное значение в виртуальный датчик через запрос посредством утилиты curl:

ekzorchik@srv-domoticz:~$ curl -s -i -H "Accept: application/json" "http://127.0.0.1:8080/json.htm?type=command&param=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

Результат:

Отправленное произвольное значение через curl в IDX

Шаг №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&param=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&param=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:

Получаемые значения из утилиты weather в карточки Domoticz

Итого я разобрал данную задачу оформив в шагах как ее реализовать. Правда не так изящно, но все же есть теперь от чего отталкиваться.

На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.