Bin noch neu bei z-Wave, also bitte um Entschuldigung falls ich euch ungerechtfertigt beschuldige.
Mir scheint aber das beim ZW_ThermostatSetPointSet() Kommando etwas falsch geht.
Hier mal ein Debug log:
gesendet habe in Reihenfolge:
ZW_ThermostatSetPointSet(47281 /[Z-Wave Thermostat (NodeID 006)]/, 0,16); --> alles richtig
ZW_ThermostatSetPointSet(47281 /[Z-Wave Thermostat (NodeID 006)]/, 1,16); --> alles richtig
ZW_ThermostatSetPointSet(47281 /[Z-Wave Thermostat (NodeID 006)]/, 7,16); --> es wird 11 (0x0B) anstatt 7 gesendet, mein Spirit Regelventil erwartete sich 0x0B also 11 und reagiert richtig
ZW_ThermostatSetPointSet(47281 /[Z-Wave Thermostat (NodeID 006)]/, 3,16); --> es wird 7 anstatt 3 gesendet
ZW_ThermostatSetPointSet(47281 /[Z-Wave Thermostat (NodeID 006)]/, 0x0B,16); --> es wird 0x0F anstatt 0x0B gesendet
lt. Doku akzeptiert mein Ventil für ThermostatSetpoint
0x01 für Heat
0x0B für HeatEconomy
Eure Doku nennt Optionen, von 0-6, und ab 7 fängt der Befehl an Müll zu senden.
Scheint als ob ihr das Octal mit HEX/DEZ verwirbelt.
oder verstehe ich da was ganz falsch ?
Wie gesagt, bin eben erst in Z-Wave reingehüpft.
Mir fällt auch auf das ihr für Thermostat_Mode und Thermostat_Setpoint ganz andere Optionen (zb. kühlen !!) anbietet als das device lt. Doku und Device List
kann.
Vieleicht kommt die Verwirrung ja von da her.
Kann man irgendwo nachlesen wie das mit den Klassen funktioniert ? Ich mein wie ihr wißt welche Kommandos gültig sind und was sie bewirken. Holt ihr euch die Info von Home oder ist alles händisch eingepflegt ?
Das würde debugging erleichtern.
Beim SetPoint haben wir vor sehr sehr langer Zeit ein Enum zwischengeschaltet, welche nicht alle Werte enthielt, da man laut Protokoll die Werte 3,4,5,6 eh niemals braucht.
Somit gibt es da eine Lücke in unserer Implementation. Wenn du auf Z-Wave Werte umrechnen willst, ist 0, 1, 2 korrekt und ab 3 wird +4 gerechnet. Die Werte 3,4,5,6 kannst du also nicht senden, da diese seitens Z-Wave auch nicht belegt sind.
Leider ist dies bei Z-Wave keine Seltenheit, dass das Protokoll gewachsen ist und verschiedene Version der selben Klasse Unterschiede haben. Bei viele älteren Geräten gab es zudem Fehler, die man zusätzlich umschiffen musste. Mittlerweile ist die Zertifizierung jedoch besser und die großen Hersteller haben auch vernünftige Geräte im Angebot. Manchmal wirkt es trotzdem alles komplizierter als es sein muss.
Danke für die Erklärung.
Damit ist klar warum ich „7“ senden muß damit „0x0B“ rausgeht.
Blöd ist halt das jeder irgendwannmal in die Falle treten wird.
Denn wenn in der Doku steht das „0x0B“ für eine bestimmte Funktion gesendet werden muß dann trage ich das auch erstmal so ein.
Das da eine Lücke ist und umgemapped wird ist schon sehr speziell.
Die Links werd ich mir heute mal reinziehen, vieleicht hilft es beim debug der anderen Absonderlichkeiten die mir so begegnet sind.
0x0B ist ja auch sogesehen ein korrekter Wert. Aber bei dem Befehl kannst wegen dem Ummapping aus Kompatibilitätsgründen nicht 1:1 die Werte der Z-Wave Doku senden.