NEWS
Lampencheck bei verlassen des WLANs
-
Moin Leute,
bin noch relativ frisch in dem Thema iobroker, und JavaScript jedoch wollte ich gerne ein Script haben, welches beim Verlassen des Hauses, sprich wenn die WLAN Verbindung meines iPhones abbricht einen Powercheck macht und mir dann über Telegram eine Nachricht zukommen lässt, ob noch Lampen eingeschaltet sind.
Soweit so gut…
Jetzt habe ich jedoch arge Probleme mit dem Script für das auslesen der Werte und die Rückgabe derer.
Im Log finde ich folgende Fehlermeldungen:
javascript.0 2018-12-19 20:30:43.288 warn at script.js.common.Abwesenheitskontrolle:11:9
javascript.0 2018-12-19 20:30:43.277 warn getState "javascript.0.Datenpunkte.StatusLightOnText" not found (3)
Der Code sieht momentan wie folgt aus:
` > function countLights()
{
var lichtAn = 0;
var lights = getObject("enum.functions.lightstatus").common.members;
var name = getObject(rm__).common.name;
for(let i = 0; i < lights.length; i++) {
var Status = getState(lights__).val;
if ( Status ) { lichtAn = lichtAn + 1; }
}
if ( lichtAn > 0 ) {
lichtAnText = lichtAn + " Lampe(n) eingeschaltet. Es handelt sich dabei um folgende: " +name;
}
setState('javascript.0.Datenpunkte.StatusLichtAnText', lichtAnText );
setState('javascript.0.Datenpunkte.StatusLichtAn', lichtAn );
}____ `
-
Ich sehe da einmal
setState('javascript.0.Datenpunkte.StatusLichtAnText', lichtAnText ); setState('javascript.0.Datenpunkte.StatusLichtAn', lichtAn );
und einmal
javascript.0 2018-12-19 20:30:43.288 warn at script.js.common.Abwesenheitskontrolle:11:9 javascript.0 2018-12-19 20:30:43.277 warn getState "javascript.0.Datenpunkte.StatusLightOnText" not found (3)
Das passt nicht ganz zusammen. Eine einheitliche Notation (entweder deutsch StatusLichtAnText oder englisch StatusLightOnText) könnte Abhilfe bringen
-
Grüß dich.
Ich habe jetzt alles einheitlich gemacht und immerhin sind die Fehlermeldungen alle weg.
Jedoch schreibt er nicht die Werte in den Datenpunkt. Der Wert bleibt bei null, auch wenn ich eine Lampe angeschaltet lasse. Bekomme dann zwar eine Telegram Nachricht, jedoch keinen Text. Nur eine '0' wird gesendet.
Berechtigung zum lesen und schreiben sind gegeben. Habe unten unter setState auch mal das javascript.0 entfernt und nur den Unterordner eingetragen. Dies brachte jedoch keine Änderung hervor, aber auch keinen Fehler, dass der Datenpunkt nicht gefunden werden konnte.
![](</s><URL url=)https://img.picload.org/image/dccdiaal/datenpunkt.png" /> -
Das angehängte Bild scheint es nicht mehr zu geben. Bitte direkt hier im Forum hochladen, dann gibt's solche Probleme nicht.
Leider kommen deine Infos sehr bruchstückhaft.
Im ersten Teil ging's nur um die Fehlermeldung. Die scheinen wir jetzt fertig zu haben.
Jetzt wird auf einmal ein weiteres Stück Code erwähnt, dass nicht funktioniert. Dieses hast du uns bislang noch nicht präsentiert. Das macht eine gezielte Unterstützung relativ schwierig.
Wie sieht das zweite Programm aus? Wie ist es mit dem ersten verknüpft?
BTW: Ich empfehle in den Programmen immer zusätzliche Debugausgaben einzubauen, mit denen sich die einzelnen Fragen leichter lösen lassen.
-
Ok, ich versuche es nochmal gänzlich zu erklären, damit ein umfassendes Bild möglich ist.
Mein Code ist
`function zaehleLampen() { var lichtAn = 0; var lampen = getObject("enum.functions.lampen").common.members; var name = getObject(rm[i]).common.name; for(let i = 0; i < lampen.length; i++) { var Status = getState(lampen[i]).val; if ( Status ) { lichtAn = lichtAn + 1; } } var lichtAnText = "Keine Lampe an"; if ( lichtAn > 0 ) { lichtAnText = lichtAn + " Lampe(n) eingeschaltet"; } setState('javascript.0.Datenpunkte.StatusLichtAnText', lichtAnText ); setState('javascript.0.Datenpunkte.StatusLichtAn', lichtAn ); }` Die letzten beiden Zeilen sollten eigentlich die beiden Datenpunkte mit den ausgelesenen Werten des Scriptes füllen. Also einmal der Text, ob eine Lampe noch an ist oder nicht und in dem zweiten Datenpunkt ein Wert von 0-x. Diese werden nur leider nicht beschrieben. Sprich der Wert ist konstant 0. Mein eigentlicher Gedanke war über ein Blockly Script die beiden Datenpunkte einzulesen und mir über Telegram beim Verlassen des Hauses einen Status zukommen zu lassen, falls ich ein Licht angelassen haben sollte. Mein Blockly-Script hierfür, sowie meine Aufzählung als auch meine Datenpunkte sehen wie folgt aus: ![15614_blockly.png](/assets/uploads/files/15614_blockly.png) ![15614_datenpunkte.png](/assets/uploads/files/15614_datenpunkte.png) [/i][/i]
-
Der Code sieht momentan wie folgt aus: `
Der Code funktioniert so nicht. Vorschlag:
const idAnwesend = 'javascript.0.Datenpunkte.Anwesenheit'; const lights = getObject("enum.functions.lightstatus").common.members; function countLights() { var lichtAn = 0; var name = ''; for(let i = 0; i < lights.length; i++) { if (getState(lights[i]).val) { lichtAn++; name = name + getObject(lights[i]).common.name + ', '; } } var lichtAnText = 'Alle Lampen aus'; if(lichtAn > 0) lichtAnText = 'Lampe(n) ein: ' + name; setState('javascript.0.Datenpunkte.StatusLichtAnText', lichtAnText ); setState('javascript.0.Datenpunkte.StatusLichtAn', lichtAn ); } on({id: idAnwesend, change: 'ne', val: false}, countLights);
lightstatus muss den betreffenden Datenpunkten zugeordnet sein