Inkonsistenz bei ZW_ThermostatSetPointSet

Hallo

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:
Unbenannt.JPG

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.

greez
Bernhard

Nachtrag:

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.

gruß
bb

Mittlerweile sind viele der Klasse öffentlich beschrieben. Schau mal hier: Z-Wave the Public Standard |

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.

Schau mal hier: http://zwavepublic.com/sites/default/files/command_class_specs_2017A/SDS13781-5%20Z-Wave%20Application%20Command%20Class%20Specification.pdf

Ungefähr Seite 534

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.

paresy

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.

schöne Grüße
Bernhard

mal schnell reingezoomed:

Seite 513/514: Ihr unterstützt scheinbar Version1, inzwischen gibt es Version3
Da taucht dann auch mein 0x0B als legaler Wert auf.

greez
bb

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.

paresy