rdmtc / RedMatic-HomeKit

HAP-Nodejs based Node-RED nodes to create (bridged) HomeKit Accessories
Apache License 2.0
61 stars 22 forks source link

Probleme mit Datentyp bei TemperaturSensor (universal node - zeigt keine negativen Temperaturen) #342

Closed Richtation closed 2 years ago

Richtation commented 2 years ago

Hello,

Ich habe RedMatic auf dem Raspberry mit "redmatic-homekit" in der Version 3.3.0 installiert. Ebenso ein paar Homematic Temperatur&Luftfeuchtigkeitssensoren (HM-WDS40-TH-I) sowie ein paar ESP8266 mit DHT22 im Einsatz - letztere schicken die Daten via MQTT rein. Zusätzlich speichere ich die Werte noch in einer InfluxDB um sie via Grafana zu visualisieren.

Jetzt habe ich mir Flows angelegt, um MQTT an ein Homekit-Device zu übergeben (und dann an die Influx) - soweit alles gut und positive Werte sind auch super, aber sobald die Temperatur unter 0 geht zeigt er keine negativen Werte an sondern immer nur 0,0. Wenn ich die Werte aus dem HomematicGerät übergebe, wird ein negativer Wert sauber übergeben. Die negativen Werte kommen auch sauber in InfluxDB und Grafana an.

Ich habe ein Universal-Device/Node genommen und dort 2 Service Definitions für Temperatur und Luftfeuchtigkeit hinterlegt. Dann habe ich mir die https://github.com/homebridge/HAP-NodeJS/blob/master/src/lib/definitions/CharacteristicDefinitions.ts angeschaut. Hier steht:

`/**

Bildschirmfoto 2021-12-31 um 18 26 26

Ich habe es auch mit "Number()" versucht, aber auch das macht keinen Unterschied. Was ich nicht verstehe ist, wieso es bei den normalen Homekit-Devices ohne Probleme geht. Auch bei positiven Zahlen, bei negativen aber nicht aber diese trotzdem bei InfluxDB als Type "number" sauber ankommen und ausgelesen werden können…

Vielen Dank für eure Unterstützung und einen guten Rutsch.

dehsgr commented 2 years ago

Versuch mal folgendes Inject-Node an Deinem HomeKit-Gerät – dann sollte die Temperatur auch unter Null fallen. ;-)

[{"id":"fb7ed0ea.1cd11","type":"inject","z":"50dbdcf2.3d8994","name":"Allow Temperature < 0°C","props":[{"p":"payload","v":"{ \"minValue\": -100 }","vt":"json"},{"p":"topic","v":"0/CurrentTemperature","vt":"string"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"0/CurrentTemperature","payload":"{ \"minValue\": -100 }","payloadType":"json","x":470,"y":100,"wires":[["df91bf8b.f595a","29649e1b.2b6a8a","236d2961.9029fe","525f9716.9b40b8","5f16cbdb.20bc0c","20f74f55.5bc27"]]}]

Richtation commented 2 years ago

Uih, ich werd verrückt! 🥇 Ist der Hammer, klappt wie's soll! Vielen vielen Dank 👍

P.S: warum ist das nicht standardmäßig mit drinnen oder könnte man da nen Button/Checkbox in die Node mit reinmachen, damit das ggf. auch bei anderen klappt?

dehsgr commented 2 years ago

Nunja. Es wäre ja kein Universal Node, wenn da schon vorab Temperatur-Spezifika mit drin wären, oder?

Freut mich, dass ich helfen konnte. ;-)

Richtation commented 2 years ago

Hi @dehsgr , vielen vielen Dank! Ok, verzeih dann noch eine Frage: muss ich jede Spezifika in dieser Form bei der Node mit reingeben? Lese ich die aus den Characteristics mit raus? Da dort steht:

format: Formats.FLOAT, perms: [Perms.NOTIFY, Perms.PAIRED_READ], unit: Units.CELSIUS, minValue: -270, maxValue: 100, minStep: 0.1,

bin ich irgendwie davon ausgegangen, dass ich mich innerhalb des Rahmens (minValue und maxValue) einfach mit der passenden Zahl (Formats.Float) bewegen kann. Woher erkenne ich, welche Spezifika ich mir anschauen muss?

P.P.S: hättest du noch einen Tip für mich, wo/wie man ein weiteres Homekit erzeugt, dessen Spezifika nicht in der Liste steht? Ich hätte gern „Bodenfeuchtigkeitssensoren“, die halt auch nicht bei nem Raum sich mit den Werten der Luftfeuchtigkeitssensoren zum allgemeinen Durchschnitt vermischen, wenn du weißt, was ich meine… Vielen vielen Dank!

dehsgr commented 2 years ago

Nein. Die eine Spezifika reicht m.W. Mit dem Luftfeuchtigkeitssensor kann ich Dir so spontan leider auch nicht weiterhelfen. Hast Du schon einen Blick in die Anleitung/Wiki geworfen?