NEWS
WARN im Log verhindern wenn getState null ist
-
var lastChange = getState("mysensors.0.192_168_178_87.0.8_DOOR.V_TRIPPED"); if(lastChange.notExist !== true) {
produziert
javascript.0 2018-03-17 15:14:00.144 warn at Object. (script.js.common.98_check_recent:25:26) javascript.0 2018-03-17 15:14:00.141 warn getState "mysensors.0.192_168_178_87.0.8_DOOR.V_TRIPPED" not found (3) states[id]=null
… Warum und wie kann ich das verhindern? Mein Script läuft alle 15 Sekunden und müllt den Log somit zu.
Für einige Sensoren ist einfach noch kein Wert hinterlegt, weil diese sich noch nie gemeldet haben ..
-
wie kann ich das verhindern? Mein Script läuft alle 15 Sekunden und müllt den Log somit zu. `
Den State erzeugen, dann kommt die Warnung nur noch einmal.const id1 = "mysensors.0.192_168_178_87.0.8_DOOR.V_TRIPPED"; if(getState(id1).notExist) setState(id1, 0); else { mache was }
Alternativ können auch im Reiter "Objekte" Werte eingegeben werden, wenn nicht "write": false im Objekt angegeben ist.
-
@paul53: Erstmal danke für den Tipp. Der Wert ist jedoch ready-only (mysensors).
Wenn ich mit setState den gleichen Pfad angebe wird dieser unter javascript erzeugt und nicht im adapter mysensors. Bin recht neu bei iobroker und vllt. bin ich hier noch nicht ganz durchgestiegen warum ich mit getState von beliebigen Adaptern lesen kann, mit setState jedoch im javascript-adapter lande.
-
warum ich mit getState von beliebigen Adaptern lesen kann, mit setState jedoch im javascript-adapter lande. `
Es ist nicht so. Man kann mit setState(id, val) den Datenpunktwert in jedem Adapter setzen. Was man nicht kann, ist mittels createState(name) einen Datenpunkt in einem anderen Adpater erzeugen.Es gibt allerdings eine verkürzte Schreibweise für die ID in setState(id, val) und auch getState(id), bei der Datenpunkte innerhalb von javascript.N addressiert werden. Das ist der Fall, wenn die ID zwischen erstem und zweiten Punkt keine Zahl enthält.
-
Habe jetzt die Variablen auf Schreibbar geändert und Werte gesetzt … schade, dass es nicht anders geht und man überall manuell eingreifen muss.
-
@paul53: ich habe das gleiche Thema.
Ziel: wenn ein Sensor den Wert des illuminance-dp mit "null" übergibt, dann schau dir den wert des illuminance_raw-dp anstelle davon an.
(Vereinfachter) Vorschlag, der aber nicht funktioniert:
const id1 = "alias.0.KG.Hobbyraum.Bewegungssensor1.illuminance"; if(getState(id1).notExist) id1 = String(id1) + '_raw'; //danach schaue wieder auf den Wert von id1 ...
Habe ich hier nur einen Syntax-Fehler?
-
@ptr
Es gibt inzwischen die Funktion existsState(id). -
@paul53: Funktioniert. Hervorragend. Danke.
var id1 = "alias.0.KG.KG-Flur.Bewegungssensor1.illuminance"; if (existsState(id1)) { console.log('existiert'); } else { id1 = String(id1) + '_raw'; console.log(id1); }
-
@ptr sagte: Funktioniert.
Mit
.val
? -
@paul53 copy & paste Fehler. Habs im Code oben korrigiert.