Closed Baenker closed 5 years ago
gib doch mal den exakten Wert "lc" eines Alarm-States aus. Was meinst Du mit "Du hast die schonmal geändert"? Diese "ALARM" sind spezielle ioBroker-States ... Im Zweifel musst Du prüfen ob "...lc" einen Wert hat und nur dann die Differenz bilden oder sonst "0" annehmen.
Ich erhalte:
`script.js.Test.lc_Abfrage: ohne Format state 1563827400004
script.js.Test.lc_Abfrage: ohne Format unreach_ALARM 2019-07-19T11:05:28.000Z`
Mit verändert meine ich das sowohl der UNREACH_ALARM als auch der STICKY_UNREACH_ARLAM sich regelmäßig ändern und zwar immer dann wenn eine Kommunikationsstörung vorliegt. Dann springt der Status von 2 (Kommunikation war gestört) oder 0 (keine Kommunaktionsstörung) auf 1. In der CCU hat man dann eine Servicemeldung. Kurze Zeit später wechselt der Status dann i. d. R. wieder auf 2. Somit ist die Störung in der CCU nicht mehr sichtbar.
Wie man im Log sieht ist das Ergebnis unterschiedlich und das sollte nicht sein...
Einmal abgefragte auf State und einmal auf UNREACH_ALARM
Nein, Problem ist, dass die Alarm States die lc Werte selbst setzen, sprich es werden die Zeitangaben aus Rega genutzt. Hierbei wird anscheinend nicht zu Date geparsed.
Das funktioniert:
var dif = Math.round((aktuelles_Datum - new Date(getState(id_unreach).lc).getTime()) / 1000);
Jedoch sollte das schon der Adapter korrekt machen.
Bitte 2.4.2 probieren. Der Fehler wurde früher schon mal gemeldet, daraufhin habe ich es als Date geparsed und laut Tester hatte es angeblich funktioniert. Jedoch muss es als ms angegeben werden. Habe dies nun gefixt und dein Example läuft nun bei mir. Bedenke, dass hm-rega für nie getriggerte Alarme den 01-01-1970 liefert also 0 ms.
Werde ich heute Abend testen. Mit den 01-01-1970 ist mir bekannt.
Wie nicht anders zu erwarten funktioniert nun alles wie es soll. Die Ausgabe von Dif ergibt einen Wert und die Ausgabe von lc hat das gleiche Format wie von state.
Ich habe es schon öfters geschrieben: Vielen, vielen Dank @foxriver76 für den Bugfix und für Deinen Einsatz. Ohne Dich wäre der Adapter wirklich nur halb so gut. Und das ganze bei jeden Problem innerhalb weniger Stunden eine Lösung.
Danke und Grüße
Gerne 👌
Ich kann mit Alarm States keine Dif bilden.
Natürlich hat der State sich schon einmal verändert.
Ich erhalte folgende Ausgabe:
var aktuelles_Datum = new Date();
var id_state = "hm-rpc.0.OEQ1544741.1.STATE"/Wohnzimmer Stehlampe:1.STATE/; var id_sticky_unreach = "hm-rpc.0.OEQ1544741.0.STICKY_UNREACH_ALARM"/Wohnzimmer Stehlampe:0.STICKY_UNREACH_ALARM/; var id_unreach = "hm-rpc.0.OEQ1544741.0.UNREACH_ALARM"/Wohnzimmer Stehlampe:0.UNREACH_ALARM/; var dif = Math.round((aktuelles_Datum - getState(id_unreach).lc)/1000); var dif1 = Math.round((aktuelles_Datum - getState(id_sticky_unreach).lc)/1000); var dif2 = Math.round((aktuelles_Datum - getState(id_state).lc)/1000);
log('Letzte Änderung am Sate: ' +formatDate(getState(id_state).lc, "TT.MM.JJ SS:mm:ss")+' Uhr '); log('Letzte Änderung am sticky_unreach: ' +formatDate(getState(id_sticky_unreach).lc, "TT.MM.JJ SS:mm:ss")+' Uhr '); log('Letzte Änderung am unreach: ' +formatDate(getState(id_unreach).lc, "TT.MM.JJ SS:mm:ss")+' Uhr '); log('dif ' +dif); log('dif1 ' +dif1); log('dif2 ' +dif2);