AlCalzone / ioBroker.zwave2

Z-Wave for ioBroker. Better. Faster. Stronger.
MIT License
23 stars 13 forks source link

Basic.currentValue" has value "255" greater than max "99" #685

Open jolichter opened 3 years ago

jolichter commented 3 years ago

Hallo, seit Admin 5 erscheint bei mir folgender Fehler im Log:

State value to set for "zwave2.0.Node_013.Basic.currentValue" has value "255" greater than max "99"

Die Warnung erscheint mir als richtig, denn im Objekt steht "max: 99". Wie kann ich das fixen? Wenn ich das auf "max: 255" ändere, wird der Wert beim nächsten Triggern wieder auf 99 gesetzt und die Warnung im Log erscheint wieder.

{
  "type": "state",
  "common": {
    "role": "value",
    "read": true,
    "write": false,
    "name": "Current value",
    "type": "number",
    "min": 0,
    "max": 99
  },

PS: nutze den Wert "Basic.currentValue" in keinem Script.

Z-Wave2: 1.10.2 Admin: 5.1.23 Node.js: v12.22.4 NPM: 6.14.14

Danke Jo

jolichter commented 3 years ago

zwavejs_2021-08-07.log

ZWAVE2 Log im Anhang, das steht am Ende des Logs:

2021-08-07T09:03:56.675Z SERIAL « 0x010d0004000d03200100c70001213e                                    (15 bytes)
2021-08-07T09:03:56.677Z SERIAL » [ACK]                                                                   (0x06)
2021-08-07T09:03:56.678Z DRIVER « [Node 013] [REQ] [ApplicationCommand]
                                  └─[BasicCCSet]
                                      target value: 0
2021-08-07T09:03:56.682Z CNTRLR   [Node 013] treating BasicCC::Set as a report
2021-08-07T09:03:56.683Z CNTRLR   [Node 013] [~] [Basic] currentValue: 255 => 0                     [Endpoint 0]
2021-08-07T09:03:56.894Z SERIAL « 0x01140004000d0a7105060000ff06170000c700012193                      (22 bytes)
2021-08-07T09:03:56.898Z CNTRLR   [Node 013] [~] [Notification] notificationMode: "push" [Endpoint 0] [internal]
                                   => "push"
2021-08-07T09:03:56.899Z SERIAL » [ACK]                                                                   (0x06)
2021-08-07T09:03:56.901Z DRIVER « [Node 013] [REQ] [ApplicationCommand]
                                  └─[NotificationCCReport]
                                      notification type:   Access Control
                                      notification status: 255
                                      notification state:  Window/door is closed
2021-08-07T09:03:56.905Z CNTRLR   [Node 013] [~] [Notification] Access Control[Door state]: 22 => 2 [Endpoint 0]
                                  3
2021-08-07T09:03:58.996Z SERIAL « 0x010d0004000d032001ffc3000121c5                                    (15 bytes)
2021-08-07T09:03:58.997Z SERIAL » [ACK]                                                                   (0x06)
2021-08-07T09:03:58.998Z DRIVER « [Node 013] [REQ] [ApplicationCommand]
                                  └─[BasicCCSet]
                                      target value: 255
2021-08-07T09:03:59.000Z CNTRLR   [Node 013] treating BasicCC::Set as a report
2021-08-07T09:03:59.001Z CNTRLR   [Node 013] [~] [Basic] currentValue: 0 => 255                     [Endpoint 0]
2021-08-07T09:03:59.190Z SERIAL « 0x01140004000d0a710506ff00ff06160000c40001216e                      (22 bytes)
2021-08-07T09:03:59.191Z CNTRLR   [Node 013] [~] [Notification] notificationMode: "push" [Endpoint 0] [internal]
                                   => "push"
2021-08-07T09:03:59.192Z SERIAL » [ACK]                                                                   (0x06)
2021-08-07T09:03:59.193Z DRIVER « [Node 013] [REQ] [ApplicationCommand]
                                  └─[NotificationCCReport]
                                      notification type:   Access Control
                                      notification status: 255
                                      notification state:  Window/door is open
2021-08-07T09:03:59.195Z CNTRLR   [Node 013] [~] [Notification] Access Control[Door state]: 23 => 2 [Endpoint 0]
AlCalzone commented 3 years ago

Ich fürchte du musst vorerst das Loglevel von zwave2 auf warn stellen. Das Problem ist mir bekannt, ist aber nicht mal eben so gefixt.

jolichter commented 3 years ago

OK, Danke für die Info!

GabeHH78 commented 3 years ago

Nur zur Info ich habe das gleiche Problem bei einem Fibargroup FGMS001

AlCalzone commented 3 years ago

Jup, gleiches zugrundeliegendes Problem.

FredF63 commented 3 years ago

Das trifft auch beim Aeotec Multisensor 6 zu

AlCalzone commented 3 years ago

Das trifft auch beim Aeotec Multisensor 6 zu

Den kannst du konfigurieren dass er Binary Switch statt Basic zum Reporten nutzt.

FredF63 commented 3 years ago

Das trifft auch beim Aeotec Multisensor 6 zu

Den kannst du konfigurieren dass er Binary Switch statt Basic zum Reporten nutzt.

Danke für den Tipp, nun ist wieder Ruhe im Busch

jolichter commented 2 years ago

Hallo AlCalzone, da die Logwarnung immer noch erscheint, wollte ich endlich mal aufräumen und das Loglevel von zwave2 auf warn stellen. Wie soll das gehen? Finde keine Möglichkeit dazu.

Kann natürlich den Host-Log Level von info auf warn stellen, dann gilt das jedoch für alle Logs.

Habe ich was übersehen?


Aktuelle Config: Pi4-8GB | Raspbian GNU/Linux 11 (bullseye) mit LTS Kernel 5.10.63 Node.js 14.18.1 | NPM 6.14.15 | admin 5.1.25 | zwave2 2.2.5

AlCalzone commented 2 years ago

Unter Instanzen im Expertenmodus geht das

jolichter commented 2 years ago

Ahh, danke für die schnelle Antwort! Musste das leider eine Stufe höher auf error setzen, damit diese Warnung bei mir nicht mehr erscheint:

warn | State value to set for "zwave2.0.Node_013.Basic.currentValue" has value "255" greater than max "99"

Karkas66 commented 1 year ago

Ist das Thema echt immer noch ein Ding? Ich hab nach wie vor Meldungen wie diese:

warn | State value to set for "zwave2.0.Node_026.Basic.currentValue" has value "255" greater than max "99"

Gerät ist übrigens ein Vision Security ZP3111-5 Motion Sensor

AlCalzone commented 1 year ago

Tja wenn keiner sagt welche Geräte betroffen sind, kann man nix ändern 🤷🏻‍♂️ Bei deinem sensor höre ich gerade zum ersten Mal davon.

Wenn ich so sehe was du andererorts schreibst, solltest du deinen Ton gegenüber denjenigen, die in ihrer Freizeit an diesen Dingen arbeiten, mal grundlegend überdenken.

Außerdem: https://github.com/zwave-js/node-zwave-js/issues/5129

Karkas66 commented 1 year ago

Alles cool, gönn dir den Urlaub. Sagt ja keiner, dass morgen ein Update da sein muss

jolichter commented 1 year ago

Hallo, wollte nur informieren, dass ich gerade noch einmal getestet habe. Kurzzeitig habe ich mein Loglevel von zwave2 auf Info zurückgesetzt. Dadurch erhalte ich wieder folgende Fehlermeldung:

State value to set for "zwave2.0.Node_013.Basic.currentValue" has value "255" greater than max "99"

Mein Verständnis ist, dass die 'max'-Eigenschaft, die ich im ioBroker sehe, vom Z-Wave2-Adapter basierend auf den Informationen festgelegt wird, die er vom Gerät selbst erhält. Wenn der Adapter das Gerät erneut abfragt oder das Gerät seinen Wert aktualisiert, kann er diese Eigenschaft zurücksetzen. Das würde erklären, warum meine manuellen Änderungen immer überschrieben werden.

Allerdings finde ich es ungewöhnlich, dass das Gerät Werte sendet, die über dem vom Adapter angegebenen Maximum liegen. Könnte es einen Fehler in der Firmware des Geräts oder in der Implementierung des Z-Wave2-Adapters geben, der dazu führt, dass das Maximum falsch berichtet wird?

Meine Vermutung ist, dass es an der Firmware des Geräts liegt und daher nicht so einfach über den Z-Wave2-Adapter zu beheben ist. Hat jemand ähnliche Erfahrungen gemacht oder eine Idee, wie man dieses Problem lösen könnte?

Z-Wave2: 3.0.5 Admin: 6.3.5 Node.js: 18.16.0 NPM: 9.5.1 Vision Security ZD2102 mit Firmware 5.1

Apollon77 commented 1 year ago

Und es ist sicher das das vom Adapter kommt? Du zeigst leider nie die vollständige Logzeile. Steht das auch zuwave2.0 oder so als "originator"?

jolichter commented 1 year ago

Ja die Quelle ist "zwave2.0", hier die vollständige Logzeile von heute: zwave2.0 2023-05-15 19:32:23.539 warn State value to set for "zwave2.0.Node_013.Basic.currentValue" has value "255" greater than max "99"

War der Meinung das mein Logfile oben im Beitrag 2 ausreicht. Ich hänge hier ein aktuelles Logfile von heute an (bei Zeile 468 passiert das): zwavejs_2023-05-15.log

Du erwähntest, das es nicht mal eben so gefixt werden kann. Ich hatte mir das letzte Woche noch einmal angeschaut und fand es ungewöhnlich, dass das Gerät Werte sendet, die über dem vom Adapter angegebenen Maximum liegen.

Daher meine Frage, das schaut aus wie ein Firmware Bug? Ist das per Software, also deinem zwave2 zu fixen, oder bin ich da auf dem Holzweg?

AlCalzone commented 1 year ago

Und es ist sicher das das vom Adapter kommt?

Ja

Du erwähntest, das es nicht mal eben so gefixt werden kann. Ich hatte mir das letzte Woche noch einmal angeschaut und fand es ungewöhnlich, dass das Gerät Werte sendet, die über dem vom Adapter angegebenen Maximum liegen.

Das liegt daran, dass manche Geräte (v.a. Bewegungsmelder) Steuerbefehle (schalte an/ schalte aus) senden, da sie auf diese Weise z.B. verbundene Lichter direkt steuern können. Diese Befehle sind entweder 255 (AN) oder 0 (AUS).

Die Bedeutung dieser Befehle ist hier aber eher eine Statusmeldung (Bewegung erkannt / Bewegung nicht erkannt), weshalb die Befehle zu ebendieser umgedeutet werden. Für die verwendete Basic CC liegt der gültige Wertebereich für eine Statusmeldung aber bei 0-99, und 255 damit außerhalb.

Der Trick besteht jetzt darin, eine allgemeingültige Lösung für dieses Thema zu finden, ohne dabei mögliche andere use cases für diese Befehle kaputt zu machen.

jolichter commented 1 year ago

OK, vielen Dank für dein Feedback. Es scheint ziemlich aufwendig zu sein. Ich habe die Warnungen in zwave2 wieder deaktiviert.

btw, es ist schade, dass der Hersteller keinen Boolean verwendet hat, da es "anscheindend" nur 2 Zustände gibt. Ich vermute, dass eine Abfrage von 0 oder >0 aufgrund möglicher anderer Probleme oder der Möglichkeit von mehr Zuständen nicht ideal wäre. Vielleicht wäre eine Objektabfrage eine Option? Da der Min- und Max-Wert dort angegeben ist (nur eine Idee, ohne deinen Code zu kennen).

{
  "type": "state",
  "common": {
    "role": "value",
    "read": true,
    "write": false,
    "name": "Current value",
    "type": "number",
    "min": 0,
    "max": 99
  },