Seite 2 von 2

Re: Temperatur aus openweathermap binding auf knx GA

Verfasst: 4. Mai 2021 06:36
von udo1toni
sst-net hat geschrieben: 3. Mai 2021 18:32 Der KNX-Channel im Item "localCurrentTemperature" hat mich verwundert, wenn doch sowieso eine Rule definiert werden soll. Kann es sein, dass das ein (unnötiges) Überbleibsel aus vorherigen Versuchen ist? Oder gibt es konkrete Gründe, das zusätzlich zur Rule drin stehen zu lassen?
Typischer Copy&Paste Fehler... Es ging ja darum, dass diese Verknüpfung eben nicht funktioniert.
sst-net hat geschrieben: 3. Mai 2021 18:32 hier wurde recht schnell auf die Units of Measurements abgehoben. Wie konnte das - außer über Erfahrung - so schnell und sicher eingegrenzt werden? Oder anders formuliert: wie müsste ich in einem solchen Problemfall am besten Vorgehen, um selbst auf diese Problemanalyse zu kommen?
Sagen wir mal so: Es gibt typische Fehlerbilder. Der Blick ins Log hat hier natürlich auch geholfen (immer prima, wenn solche Dinge gleich mit dabei sind...), denn dort steht ja schon im Klartext, dass der Wert auf 21.35 °C geändert wurde. es wird also eine Unit mit angezeigt, was nur bei UoM Items der Fall ist. Da knx (noch?) kein UoM unterstützt, war der Fall damit klar.
Also ja, die Schnelligkeit war vielleicht der Erfahrung geschuldet ;) aber mit offenen Augen und grundsätzlichem Verständnis von openHAB kann man solche Fehler auch finden.

Re: Temperatur aus openweathermap binding auf knx GA

Verfasst: 11. Feb 2022 22:51
von EMaster
Ich habe einen Temperatur-Channel eines HUE Bewegungsmelders und würde diesen Temperaturwert gerne an KNX übergeben. Gateway ist online, Thing + Channels sind angelegt. Kann man das eigentlich auch über die GUI verknüpfen oder über eine Rule oder ...? - Ich werde da irgendwie nicht schlau draus.

Danke für Eure Hilfe!

Re: Temperatur aus openweathermap binding auf knx GA

Verfasst: 12. Feb 2022 01:05
von udo1toni
Das Problem ist hier (wie oben auch schon erwähnt...) UoM. Der Sensor liefert die Temperatur und übergibt dabei (vorbildlich) auch die Information, dass er in °C misst. knx (das Binding) ist so alt, dass es nichts von UoM weiß. Du könntest es also zwar so drehen, dass der Wert an knx gesendet wird, aber knx würde den Wert nicht korrekt interpretieren. Es führt also leider kein Weg an einer Rule vorbei. Dafür ist der Inhalt aber nicht weiter komplex. Über die GUI:
Administration -> Einstellungen -> Rules -> Add (unten rechts weißes Plus in blauem Kreis) -> Unique ID setzen (auf einen sinnvollen Wert, z.B. send_Temperature oder sowas) -> Name (muss eindeutig sein, ist aber ansonsten frei, also z.B. auch Temperatur nach knx senden.
Die Description bietet noch mehr Platz, um zu dokumentieren, was die Rule machen soll.
-> When -> Add trigger -> Item Event -> Das Temperatur-Item auswählen -> Pick -> Changed -> Done -> Then -> Add Action -> Run Script -> Rule DSL (das ist die einfachste Möglichkeit!) -> Im Code-Fenster eingeben:

Code: Alles auswählen

TR_Badezimmer_virtuell.sendCommand((TR_Sensor_Badezimmer.state as Number).floatValue)
-> Save -> Back -> Code.
Es sollte eine Ansicht ähnlich dieser erscheinen:

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: TR_Sensor_Badezimmer
    type: core.ItemStateChangeTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: TR_Badezimmer_virtuell.sendCommand((TR_Sensor_Badezimmer.state as Number).floatValue)
    type: script.ScriptAction
Ab sofort sollte es bei jeder Temperaturänderung auch ein Update an die GA 5/0/1 geben.

Re: Temperatur aus openweathermap binding auf knx GA

Verfasst: 12. Feb 2022 09:01
von EMaster
Danke Dir schon Mal, Udo!

Ich bekomme aber folgenden Fehler im LOG.

Code: Alles auswählen

2022-02-12 08:57:51.093 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'send_HUE_TR_to_KNX' failed:  ___ TR_Badezimmer_virtuell.sendCommand((TR_Sensor_Badezimmer.state as Number).floatValue)
   The method or field TR_Badezimmer_virtuell is undefined; line 1, column 0, length 22
Das Script schaut so aus.

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: TR_Sensor_Badezimmer
    type: core.ItemStateChangeTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: TR_Badezimmer_virtuell.sendCommand((TR_Sensor_Badezimmer.state as
        Number).floatValue)
    type: script.ScriptAction
Alternativ habe ich die Rule Mal so probiert.

Code: Alles auswählen

rule "set temp at knx bus"
when
    Item TR_Sensor_Badezimmer changed
then
    if(TR_Sensor_Badezimmer.state instanceof Number)
        TR_Badezimmer_Virtuell.sendCommand((TR_Badezimmer_Virtuell.state as Number).floatValue)
end
Auch hier übergibt er den Wert nicht bei einer Änderung. Das Item bleibt NULL.

Re: Temperatur aus openweathermap binding auf knx GA

Verfasst: 12. Feb 2022 20:11
von EMaster
Fehler gefunden!

Code: Alles auswählen

TR_Badezimmer_virtuell.sendCommand((TR_Sensor_Badezimmer.state as
        Number).floatValue)
virtuell vs. Virtuell

Aber die Rule im herkömmlichen Textformat funktioniert nicht.
Wo könnte denn da der Fehler sein?

Re: Temperatur aus openweathermap binding auf knx GA

Verfasst: 13. Feb 2022 01:31
von udo1toni
Du meinst als normale Rule in einer *.rules Datei? Dort hast Du versehentlich zweimal das gleiche Item genutzt:

Code: Alles auswählen

if(TR_Sensor_Badezimmer.state instanceof Number)
        TR_Badezimmer_Virtuell.sendCommand((TR_Badezimmer_Virtuell.state as Number).floatValue)
Es muss aber

Code: Alles auswählen

if(TR_Sensor_Badezimmer.state instanceof Number)
        TR_Badezimmer_Virtuell.sendCommand((TR_Sensor_Badezimmer.state as Number).floatValue)
heißen.