NEWS
Umsetzung JS Logik nach Alias Konverter?
-
Hallo zusammen,
ich habe hier eine kleine Blockly / JS funktion gebaut, um bei veralteten Werten einen Fehlerindikator auf true zu setzen:var DiffSekunden, DiffTage; schedule("10 */2 * * *", async function () { DiffSekunden = parseFloat((new Date().getSeconds())) - getDateObject(getState("alias.0.TemperaturWohnzimmer.LastUpdate").val).getSeconds(); DiffTage = parseFloat(DiffSekunden) / 86400; if (DiffTage >= 2) { console.log('netatmo error = true'); setState("0_userdata.0.Geraete.Netatmo_Wohnzimmer.error"/*error*/, true, true); } else if (DiffTage < 2) { console.log('netatmo error = false'); setState("0_userdata.0.Geraete.Netatmo_Wohnzimmer.error"/*error*/, false, true); } });bzw. als blockly

ich würde das aber gern in eine Alias-konvertier-funktion überführen, da ich diese Logik nicht für alle Devices manuell basteln möchte, die keine richtigen Fehler-Indikatoren besitzen.
Ich vermute, dass es geht, aber ich habe keine Idee, wie die Syntax dort aussehen müßte:

Könnte mir da jemand mit JS KnowHow unter die Arme greifen?
Viele Grüße
Christoph -
Hallo zusammen,
ich habe hier eine kleine Blockly / JS funktion gebaut, um bei veralteten Werten einen Fehlerindikator auf true zu setzen:var DiffSekunden, DiffTage; schedule("10 */2 * * *", async function () { DiffSekunden = parseFloat((new Date().getSeconds())) - getDateObject(getState("alias.0.TemperaturWohnzimmer.LastUpdate").val).getSeconds(); DiffTage = parseFloat(DiffSekunden) / 86400; if (DiffTage >= 2) { console.log('netatmo error = true'); setState("0_userdata.0.Geraete.Netatmo_Wohnzimmer.error"/*error*/, true, true); } else if (DiffTage < 2) { console.log('netatmo error = false'); setState("0_userdata.0.Geraete.Netatmo_Wohnzimmer.error"/*error*/, false, true); } });bzw. als blockly

ich würde das aber gern in eine Alias-konvertier-funktion überführen, da ich diese Logik nicht für alle Devices manuell basteln möchte, die keine richtigen Fehler-Indikatoren besitzen.
Ich vermute, dass es geht, aber ich habe keine Idee, wie die Syntax dort aussehen müßte:

Könnte mir da jemand mit JS KnowHow unter die Arme greifen?
Viele Grüße
Christoph@chris299 sagte: Blockly / JS funktion gebaut, um bei veralteten Werten einen Fehlerindikator auf true zu setzen
DiffSekunden = parseFloat((new Date().getSeconds())) - getDateObject(getState("alias.0.TemperaturWohnzimmer.LastUpdate").val).getSeconds();getSeconds() liefert die Sekunden der Uhrzeit, ist also ungeeignet.
-
@chris299 sagte: Blockly / JS funktion gebaut, um bei veralteten Werten einen Fehlerindikator auf true zu setzen
DiffSekunden = parseFloat((new Date().getSeconds())) - getDateObject(getState("alias.0.TemperaturWohnzimmer.LastUpdate").val).getSeconds();getSeconds() liefert die Sekunden der Uhrzeit, ist also ungeeignet.
@paul53 danke für den Hinweis. ich vermute getTime() ist dann besser, oder?
DiffSekunden = parseFloat((new Date().getTime())) - getDateObject(getState("alias.0.TemperaturWohnzimmer.LastUpdate").val).getTime();weisst Du ob ich in der Alias Read-funktion überhaupt auf Date() zugreifen kann?
-
@paul53 danke für den Hinweis. ich vermute getTime() ist dann besser, oder?
DiffSekunden = parseFloat((new Date().getTime())) - getDateObject(getState("alias.0.TemperaturWohnzimmer.LastUpdate").val).getTime();weisst Du ob ich in der Alias Read-funktion überhaupt auf Date() zugreifen kann?
-
@paul53 danke für den Hinweis. ich vermute getTime() ist dann besser, oder?
DiffSekunden = parseFloat((new Date().getTime())) - getDateObject(getState("alias.0.TemperaturWohnzimmer.LastUpdate").val).getTime();weisst Du ob ich in der Alias Read-funktion überhaupt auf Date() zugreifen kann?
-
@paul53 so sieht das bei mir aus:


{ "type": "state", "common": { "name": "Last update", "type": "string", "role": "value.datetime", "read": true, "write": false }, "from": "system.adapter.netatmo.0", "user": "system.user.admin", "ts": 1630135482115, "_id": "netatmo.0.wetter@CW-(wetter@CW).Wohnzimmer.LastUpdate", "acl": { "object": 1636, "state": 1636, "file": 1632, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } } -
@paul53 so sieht das bei mir aus:


{ "type": "state", "common": { "name": "Last update", "type": "string", "role": "value.datetime", "read": true, "write": false }, "from": "system.adapter.netatmo.0", "user": "system.user.admin", "ts": 1630135482115, "_id": "netatmo.0.wetter@CW-(wetter@CW).Wohnzimmer.LastUpdate", "acl": { "object": 1636, "state": 1636, "file": 1632, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } } -
@chris299
Wie sieht der Wert ("string") aus?
Wenn er sich wandeln lässt, kann alias.read für "0_userdata.0.Geraete.Netatmo_Wohnzimmer.error" so aussehen:
-
@chris299
Wie sieht der Wert ("string") aus?
Wenn er sich wandeln lässt, kann alias.read für "0_userdata.0.Geraete.Netatmo_Wohnzimmer.error" so aussehen:
-
@chris299 sagte: das sieht sehr gut aus.
Du musst allerdings dafür sorgen, dass der Zeitstempel des Datenpunktes regelmäßig aktualisiert wird, da es andernfalls nicht zur Prüfung kommt.
-
@paul53 den Hinweis verstehe ich nicht so richtig. meinst Du das hier:

bzw wie kann ich dafür sorgen? -
@chris299
Der Alias setzt voraus, dass der Original-Datenpunkt triggert, also seinen Zeitstempel ändert. Nur in diesem Moment kann die die Prüfung in alias.read erfolgen. Wenn der Datenpunkt allerdings "tot" ist, findet auch keine Prüfung statt. -
@chris299
Der Alias setzt voraus, dass der Original-Datenpunkt triggert, also seinen Zeitstempel ändert. Nur in diesem Moment kann die die Prüfung in alias.read erfolgen. Wenn der Datenpunkt allerdings "tot" ist, findet auch keine Prüfung statt.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden