Статья

Погода с OpenWeatherMap на Node-RED в HomeKit

В русскоязычном интернете пока мало статей о такой среде программирования, как Node-RED. Данная статья покажет, на примере создания с помощью Node-RED, погодного информера и добавление его в умный дом HomeKit полностью в графическом виде, без написания какого-либо кода.

Предполагается, что Node-RED у вас уже установлен. Если нет, тогда перейдите по ссылке и установите любой удобный для вас вариант - на компьютер, Raspberry, WB и т.д. В моем случае, Node-RED установлен на WB. Данный flow  требует установки дополнительных библиотек, скачать которые можно по ссылке.

Вот наглядный образец моего флоу.

Как видите, не так много элементов. Так что для новичков в этом деле - самое то.

Начнем с того, что пройдем регистрацию на сайте OpenWeatherMap для получения ключа api. Также здесь можно взять нужную широту и долготу.

Прошли регистрацию, ждем ключ на электронную почту, который может задержаться. Я получил на следующий день. Теперь перейдем к Node-Red.

Вносим свой полученный на почту ключ, простым копированием, затем выбираем свой населенный пункт и переходим к ноде, которая прокидывает данные в кит. Вписываем название моста и придумываем код сопряжения.

Жмем деплой для активации флоу и смотрим - под каждой вкладкой появятся ваши показания.

Идем в кит и добавляем наш новый виртуальный метео датчик. Мост будет называться WeatherHB, код сопряжения вы указали при настройке. Вот и все, ловим показания для вашего места проживания.

Давление, как вы видите, в мм ртутного столба, кит их не отображает, поэтому данные в люксах.

Для тех, кто заинтересовался повторением данного алгоритма, выкладываю flow, который у меня работает и не дает сбоев.

[{"id":"b4dd91ee.24e39","type":"tab","label":"Weather","disabled":false,"info":""},{"id":"7db723f0.304fd4","type":"inject","z":"b4dd91ee.24e39","name":"20 min","topic":"","payload":"","payloadType":"date","repeat":"1200","crontab":"","once":true,"onceDelay":"0","x":100,"y":100,"wires":[["9821c705.ce458"]]},{"id":"1e475542.59d013","type":"debug","z":"b4dd91ee.24e39","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","x":650,"y":40,"wires":[]},{"id":"9821c705.ce458","type":"openweathermap","z":"b4dd91ee.24e39","name":"OpenWeatherMap","wtype":"current","lon":"","lat":"","city":"Bataysk","country":"Russia","language":"ru","x":310,"y":100,"wires":[["1e475542.59d013","1b018384.019c2c","ad85c24d.85bc4","d67aacad.47681"]]},{"id":"1b018384.019c2c","type":"function","z":"b4dd91ee.24e39","name":"Температура","func":"var characteristic = {};\n\ncharacteristic.CurrentTemperature = (msg.payload.tempc)*1.0^0;\nglobal.set (\"Temperature\",characteristic.CurrentTemperature);\nnode.status();\nmsg.payload = characteristic;\nreturn msg;","outputs":1,"noerr":0,"x":650,"y":105,"wires":[["d1ab8ae5.ca7a08"]]},{"id":"ad85c24d.85bc4","type":"function","z":"b4dd91ee.24e39","name":"Влажность","func":"var characteristic = {};\ncharacteristic.CurrentRelativeHumidity = msg.payload.humidity;\nglobal.set (\"Humidity\",characteristic.CurrentRelativeHumidity);\nnode.status();\nmsg.payload = characteristic;\nreturn msg;","outputs":1,"noerr":0,"x":640,"y":180,"wires":[["dc4bcb0c.070ab"]]},{"id":"d67aacad.47681","type":"function","z":"b4dd91ee.24e39","name":"Давление","func":"var characteristic = {};\ncharacteristic.CurrentAmbientLightLevel = ((msg.payload.pressure*0.75 - 13.5)*1.0^0);\nglobal.set (\"Pressure\",characteristic.CurrentAmbientLightLevel);\nnode.status();\nmsg.payload = characteristic;\nreturn msg;","outputs":1,"noerr":0,"x":640,"y":255,"wires":[["461ef01.501af1"]]},{"id":"d1ab8ae5.ca7a08","type":"homekit-service","z":"b4dd91ee.24e39","isParent":true,"bridge":"9d55c626.65a7b","accessoryCategory":"SENSOR","parentService":"","name":"Temperature","serviceName":"TemperatureSensor","topic":"","filter":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":"","cameraConfigMaxWidth":"","cameraConfigMaxHeight":"","cameraConfigMaxFPS":"","cameraConfigMaxBitrate":"","cameraConfigVideoCodec":"","cameraConfigAudioCodec":"","cameraConfigAudio":false,"cameraConfigPacketSize":"","cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"","cameraConfigMapAudio":"","cameraConfigVideoFilter":"","cameraConfigAdditionalCommandLine":"","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","characteristicProperties":"{}","x":865,"y":105,"wires":[[],[]]},{"id":"dc4bcb0c.070ab","type":"homekit-service","z":"b4dd91ee.24e39","isParent":true,"bridge":"9d55c626.65a7b","accessoryCategory":"SENSOR","parentService":"","name":"Humidity","serviceName":"HumiditySensor","topic":"","filter":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":"","cameraConfigMaxWidth":"","cameraConfigMaxHeight":"","cameraConfigMaxFPS":"","cameraConfigMaxBitrate":"","cameraConfigVideoCodec":"","cameraConfigAudioCodec":"","cameraConfigAudio":false,"cameraConfigPacketSize":"","cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"","cameraConfigMapAudio":"","cameraConfigVideoFilter":"","cameraConfigAdditionalCommandLine":"","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","characteristicProperties":"{}","x":855,"y":180,"wires":[[],[]]},{"id":"461ef01.501af1","type":"homekit-service","z":"b4dd91ee.24e39","isParent":true,"bridge":"9d55c626.65a7b","accessoryCategory":"SENSOR","parentService":"","name":"Atmospheric Pressure","serviceName":"LightSensor","topic":"","filter":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","cameraConfigVideoProcessor":"","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":"","cameraConfigMaxWidth":"","cameraConfigMaxHeight":"","cameraConfigMaxFPS":"","cameraConfigMaxBitrate":"","cameraConfigVideoCodec":"","cameraConfigAudioCodec":"","cameraConfigAudio":false,"cameraConfigPacketSize":"","cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"","cameraConfigMapAudio":"","cameraConfigVideoFilter":"","cameraConfigAdditionalCommandLine":"","cameraConfigDebug":false,"cameraConfigSnapshotOutput":"disabled","characteristicProperties":"{}","x":895,"y":255,"wires":[[],[]]},{"id":"10f7af7d.b6b539","type":"comment","z":"b4dd91ee.24e39","name":"Open weather map","info":"","x":110,"y":40,"wires":[]},{"id":"9d55c626.65a7b","type":"homekit-bridge","z":"","bridgeName":"WeatherHB","pinCode":"190-00-190","port":"","allowInsecureRequest":false,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","customMdnsConfig":false,"mdnsMulticast":true,"mdnsInterface":"","mdnsPort":"","mdnsIp":"","mdnsTtl":"","mdnsLoopback":true,"mdnsReuseAddr":true,"allowMessagePassthrough":true}]

Огромная благодарность Евгению Лузину за подсказки ))))


Вернуться назад
Вернуться назад