[GELÖST] Für Thermostate mit OldReadingsNum alten Zustand herstellen

Begonnen von roemi, 28 November 2023, 22:55:55

Vorheriges Thema - Nächstes Thema

roemi

Hallo,

ich habe zwei DECT Thermostate über die fritzbox eingebunden und kann mit
set Thermostat6 desired-temp {(OldReadingsNum("Thermostat6","desired-temp","8"))}problemlos die vorhergehende Temperatur wiederherstellen.

Bei meinen Thermostate von AVATTO ME167 kann ich mit
set MQTT2_FHEM_Server publish zigbee2mqtt/Thermostat2/set {"current_heating_setpoint":8}problemlos jede Temperatur einstellen.

Es geht aber nicht mit
set MQTT2_FHEM_Server publish zigbee2mqtt/Thermostat2/set {"current_heating_setpoint":(OldReadingsNum("Thermostat2","current_heating_setpoint","16"))}den alten Zustand herzustellen.

Im Eventmonitor sieht man
2023-11-28 22:36:10 MQTT2_SERVER MQTT2_FHEM_Server lastPublish: zigbee2mqtt/Thermostat2/set:{"current_heating_setpoint":16}
2023-11-28 22:36:15 MQTT2_DEVICE Thermostat2 current_heating_setpoint: 16
2023-11-28 22:38:01 MQTT2_SERVER MQTT2_FHEM_Server lastPublish: zigbee2mqtt/Thermostat2/set:{"current_heating_setpoint":(OldReadingsNum("Thermostat2","current_heating_setpoint","16"))}
das die Anweisung nicht ausgeführt wird bzw. nichts zurück gibt.

Es gibt aber auch keine Fehlermeldung.

Ich bin mir sicher ... es ist wie immer nur eine Kleinigkeit.
Hilft mir wer auf die Sprünge?

Danke

Römi

https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren

TomLee

Hallo,

was hat das denn mit DOIF zu tun ?

In deinem Fall muss man den Topic-Teil (zigbee2mqtt/Thermostat2/set) und die payload ({"current_heating_setpoint":(OldReadingsNum("Thermostat2","current_heating_setpoint","16"))}) in Perl ausführen/zusammensetzen.

So kann ich mir vorstellen dürfte das klappen:

set MQTT2_FHEM_Server publish {my $chs=OldReadingsNum('Thermostat2','current_heating_setpoint',16);return qq(zigbee2mqtt/Thermostat2/set {"current_heating_setpoint":$chs}) }

roemi

Hallo und Danke.

Da ich das als DOIF ausführe, dachte ich das es auch zu DOIF gehört. Wenn dem nicht so ist, dann weis ich nicht wo ich die Frage am besten stelle. 8)

Woran erkenne ich, das zwei augenscheinlich gleiche Vorgänge so unterschiedlich angegangen werden müssen?

Danke für Deine Mühe

Römi
https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren

TomLee

ZitatWoran erkenne ich, das zwei augenscheinlich gleiche Vorgänge so unterschiedlich angegangen werden müssen?

Kann nur von mir sprechen. Da ich mich schon viel mit MQTT2_DEVICE beschäftigt und damit meine Erfahrungen gesammelt habe, ist einfach klar das Topic und Payload in Perl umgesetzt werden müssen, wenn man Perl in der payload verwendet (da geht nur $EVENT, $EVTPARTX), das ist halt einfach so.

Und wenn das in setlist von MQTT2_DEVICE so ist, war die Schlußfolgerung das es bei der MQTT_SERVER-Definition nicht anders sein kann, auch wenn das nicht in der Bedienungsanleitung steht.

In MQTT2_DEVICE steht was dazu:

ZitatHinweise:
Argumente für den Set-Befehl werden an die veröffentlichte Nachricht angehängt (dies gilt nicht für den Perl-Ausdruck).

Die Befehlsargumente sind als $EVENT, $EVTPART0 usw. verfügbar, der Name des Geräts als $NAME, beides im Perl-Ausdruck und der ,,normalen" Topic-Variante.
Der Perl-Ausdruck muss eine Zeichenfolge zurückgeben, die das Thema und die Nachricht enthält, getrennt durch ein Leerzeichen. Wenn es ,,", undef oder 0" zurückgibt, wird keine MQTT-Nachricht gesendet.
SetExtensions wird aktiviert, wenn der Themenname mit :r endet, dann wird das Retain-Flag gesetzt, wenn das gesamte Argument in {} eingeschlossen ist, dann wird es als Perl-Ausdruck ausgewertet.
Die zurückgegebene Zeichenfolge wird wie oben beschrieben interpretiert.

roemi

Hallo und Danke.

Dann werde ich mich mal an Deinem Vorschlag entlang hangeln und schauen das ich das auf Kette bekommen.

Dir vielen Dank!!!

Römi
https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren

roemi

Ich habe es hinbekommen  ;D
(set MQTT2_FHEM_Server publish zigbee2mqtt/Thermostat2/set {"current_heating_setpoint":{(OldReadingsNum("Thermostat2","current_heating_setpoint","0"))}})Danke für die Hilfe.

Römi
https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren

TomLee

Tatsache, das klappt auch, wieder was gelernt. Mir war das in der Kombination nicht klar, selbst die runden Klammern um OldReadingsNum braucht es.