Z-Wave Thermostat Eurotronic Spirit

Begonnen von mthome, 06 Oktober 2017, 07:24:59

Vorheriges Thema - Nächstes Thema

mdescher

Und noch eine andere Frage an alle die das Teil haben. Mit "get {device} smStatus" bekomme ich die Temoeratur in "temperature" und mit "get {device} swmStatus" die Ventilstellung in "reportedState". Habe ich das richtig verstanden? Theoretisch sollte der Spirit beides (wenn config byte 5 bzw. 6 richtig gesetzt sind) auch automatiasch reporten. Sollten diese automatischen Reports dann auch in den beiden Readings landen? Ich habe zumindest den Eindruck, dass das nicht funktioniert. Hat da jemand die gleiche oder andere Erfahrungen gemacht?

Gruß
Michael

rudolfkoenig

ZitatUNPARSED THERMOSTAT_MODE 0440031f00
Dein Geraet liefert thermostatMode:manual mit einem zusaetzlichen Argument 00.
Was auch immer dieses Argument bedeuten soll, das ZWave Modul ist darauf nicht vorbereitet.
Welche Version hat deine THERMOSTAT_MODE Klasse?

Falls ein Geraet irgendetwas automatisch meldet, dann landen die Ergebnisse in den gleichen Reports wie beim get.
Typische Ursache einer fehlender Automatik sind fehlende Assoziation oder Konfiguration, beides Geraetespezifisch.

mdescher


mdescher

Zitat von: mdescher am 18 Oktober 2017, 09:07:45
automatisch reporten. [...] Ich habe zumindest den Eindruck, dass das nicht funktioniert.

Nehme ich zurück, es funktioniert wie gewünscht.

krikan

Zitat von: rudolfkoenig am 18 Oktober 2017, 09:52:53
UNPARSED THERMOSTAT_MODE 0440031f00
Das Argument 00 ist nach meiner Lesart von http://zwavepublic.com/sites/default/files/command_class_specs_2017A/SDS13781-4%20Z-Wave%20Application%20Command%20Class%20Specification.pdf Pdf-Seite 541 "Funkmüll"
Bit 5-7 des 1. Bytes nach CommandIdentifier = No of Manufacturer Data fields = 0 = es gibt keine Manufacturer Data

Gibt es UNPARSED Meldungen mit einem von 00 abweichenden Argument?

mdescher

Zitat von: krikan am 18 Oktober 2017, 11:36:28
Gibt es UNPARSED Meldungen mit einem von 00 abweichenden Argument?

Hier die Logausgabe. Immer "set tmXXX" gefolgt von einem "get thermostatMode".
tmCooling und tmFan ändern den Mode wie erwartet nicht. tmAuto scheint zugunsten von tmHeating und tmEnergySaveHeating auch nicht unterstützt zu werden. Die Ausgabe nach dem initialen tmAuto ist die von tmOff (so war es vorher eingestellt).

2017-10-18_12:42:32 EG.wz.THERM tmAuto
2017-10-18_12:42:41 EG.wz.THERM UNPARSED: THERMOSTAT_MODE 0440030000
2017-10-18_12:43:07 EG.wz.THERM tmCooling
2017-10-18_12:43:13 EG.wz.THERM UNPARSED: THERMOSTAT_MODE 0440030000
2017-10-18_12:43:31 EG.wz.THERM tmEnergySaveHeating
2017-10-18_12:43:34 EG.wz.THERM UNPARSED: THERMOSTAT_MODE 0440030b00
2017-10-18_12:43:41 EG.wz.THERM tmFan
2017-10-18_12:43:46 EG.wz.THERM UNPARSED: THERMOSTAT_MODE 0440030b00
2017-10-18_12:43:57 EG.wz.THERM tmFullPower
2017-10-18_12:44:02 EG.wz.THERM UNPARSED: THERMOSTAT_MODE 0440030f00
2017-10-18_12:44:10 EG.wz.THERM tmHeating
2017-10-18_12:44:15 EG.wz.THERM UNPARSED: THERMOSTAT_MODE 0440030100
2017-10-18_12:44:21 EG.wz.THERM tmManual
2017-10-18_12:44:27 EG.wz.THERM UNPARSED: THERMOSTAT_MODE 0440031f00
2017-10-18_12:44:31 EG.wz.THERM tmOff
2017-10-18_12:44:34 EG.wz.THERM UNPARSED: THERMOSTAT_MODE 0440030000

mdescher

Hab grad nochmal in die Doku des Spirit geschaut, die Modes entsprechen der Doku:

0x00 = Off
0x01 = Heat
0x0b = Energy Heat
0x0f = Full Power
0x1f = Manufacturer Specific (Manual)

Bleibt also die Frage was das 0x00 am Ende ist.

rudolfkoenig

ZitatBleibt also die Frage was das 0x00 am Ende ist.
Vmtl. Firmware-Bug.
@krikan: bist du mit einer Ersetzung von "0340" durch "0.40" im THERMOSTAT_MODE Block  einverstanden?

mdescher

Zitat von: krikan am 12 Oktober 2017, 20:54:43
Nach https://products.z-wavealliance.org/ProductManual/File?folder=&filename=Manuals/2543/Spirit%20Z-Wave%20Plus_DRAFT_V4.pdf Seite 16 muss FHEM eine Nachricht im beschrieben Aufbau der Class MULTILEVEL_SENSOR an den Sprit schicken. Hierzu kannst Du mit "get <ZWDongle> raw <HEXCode>" einmal experimentieren.

Nachdem ich jetzt schonmal die nötige Doku zum genauen Aufbau der MULTILEVEL_SENSOR Nachricht gefunden habe, fehlt mir noch ein Hinweis darauf wie ich "get raw" genau verwende. Ich muss ja noch das Device adressieren (vermutlich über die Node-ID) und ggf. gibt es ja auch noch weiteres Z-Wave-Protokoll-Beiwerk. Gibts da ne Doku oder einen kurzen Hinweis über die Details? Habe leider bisher nichts gefunden.

Danke + Gruß
Michael

krikan

Zitat von: rudolfkoenig am 18 Oktober 2017, 13:13:25
bist du mit einer Ersetzung von "0340" durch "0.40" im THERMOSTAT_MODE Block  einverstanden?
Warum sollte ich nicht?  :-\

Zitat von: mdescher am 18 Oktober 2017, 13:33:32
Nachdem ich jetzt schonmal die nötige Doku zum genauen Aufbau der MULTILEVEL_SENSOR Nachricht gefunden habe, fehlt mir noch ein Hinweis darauf wie ich "get raw" genau verwende. Ich muss ja noch das Device adressieren (vermutlich über die Node-ID) und ggf. gibt es ja auch noch weiteres Z-Wave-Protokoll-Beiwerk. Gibts da ne Doku oder einen kurzen Hinweis über die Details?
Mir ist keine Doku bekannt.

Developer schauen sich dazu sicherlich den Code von 00_ZWDongle.pm und 10_ZWave.pm an oder passen ihn direkt an.

Ich hingegen setze dazu
attr <ZWDongle> verbose 5
Setze dann einen Befehl an das Device ab,
kopiere den Hex-Code aus dem Log,
packe den Hex-Code um die passenden Stellen gekuerzt in einen get-raw Befehl, setze ihn ab und kontrolliere im Log sowie Device, ob das Ergebnis dem ursprünglichen Code entspricht.
Ersetze die passenden Stellen im gefundenen raw-Befehl mit dem gewünschten Hex-Code und beobachte/kontrolliere Erfolg.

Gruss, Christian

rudolfkoenig

ZitatWarum sollte ich nicht?
Weil du evtl. was siehst, was ich nicht :)
Habe die Aenderung eingecheckt.

mdescher

Zitat von: krikan am 18 Oktober 2017, 19:09:10
attr <ZWDongle> verbose 5
Setze dann einen Befehl an das Device ab,
kopiere den Hex-Code aus dem Log,
packe den Hex-Code um die passenden Stellen gekuerzt in einen get-raw Befehl, setze ihn ab und kontrolliere im Log sowie Device, ob das Ergebnis dem ursprünglichen Code entspricht.
Ersetze die passenden Stellen im gefundenen raw-Befehl mit dem gewünschten Hex-Code und beobachte/kontrolliere Erfolg.

Die Idee hatte ich auch schon und nach etwas Experimentieren habe ich jetzt auch herausgefunden was ich genau angeben muss. Danke für die Unterstützung.

krikan

Zitat von: mdescher am 19 Oktober 2017, 07:51:50
Die Idee hatte ich auch schon und nach etwas Experimentieren habe ich jetzt auch herausgefunden was ich genau angeben muss. Danke für die Unterstützung.
Wäre schön, wenn Du abschließend die Lösung hier festhalten könntest. Danke.

mdescher

Zitat von: krikan am 19 Oktober 2017, 09:31:57
Wäre schön, wenn Du abschließend die Lösung hier festhalten könntest. Danke.

get EG.wz.ZWDongle.Aeotec raw 13xx0631050122yyyy

xx ist die nodeIdHex des Spirit-Thermostats und yyyy ist der Temperaturwert mit 10 multipliziert in Hex. Da meine Thermometer die Temperatur mit einer Nachkommastelle liefern, ergibt sich durch die Multiplikation mit 10 ein ganzzahliger Wert für yyyy. Die 0x22 davor sagt, dass der Wert mit einer Precision von 1 in Celsius in 2 Byte angegeben ist. Die Reaktion des Thermostats (Ventilstellung abfragen) nach dem Setzen einiger Werte wie 0 Grad, 30 Grad und 21,5 Grad bei einer Soll-Temperatur von 22 Grad sah plausibel aus.

Als Komplettlösung habe ich ein Notify auf die Temperaturänderung des Thermometers gesetzt, der bei Änderungen von mindestens 0,2 Grad oben genannten Befehl zusammenbaut und abschickt. Ob das ganze in Summe funktioniert werden die kälteren Tage der nächsten Wochen zeigen (momentan ist die Heizung noch aus).

Gruß
Michael

krikan

Den raw-Code solltest Du zur Sicherheit noch um Transmit-Flag TF und eventuell Callback-Id CB ergaenzen, auch wenn es haeufig ohne funktionieren wird:
get EG.wz.ZWDongle.Aeotec raw 13xx0631050122yyyyTFCB
TF = 05 ohne Explorer Frames oder 25 mit Explorer Frames
CB = beliebige Nummer, die in der ACK-Antwort des Zielgeraetes 0013CB00.... wieder vorkommt

Gruß, Christian