NEWS
[gelöst]Pushover Nachricht offene FensterAlarm
-
Hallo, ich nutze ein älteres Alarmanlagenscript von @tempestas. U. a. überwacht das Script auch die offenen Fenster beim Scharfstellen der Alarmanlage und meldet diese per Pushover. Mein Problem: es kommt zwar eine Nachricht aber es stehen dort keine offenen Fenster drinnen, lediglich ein paar Kommas. Die Fenster sind alle in hm rpc1 gelistet. Hat jemand eine Idee was im Script geändert werden muss.
Script:// ######################################################################## // ####### Fensterstatus beim einschalten der Alarmanlage überwachen ##### var fensterOffen =[]; var info; function fensterPruef() { var cacheSelectorState = $('channel[state.id=*.STATE](functions="Verschluss")'); cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Alarmanlage_Huelle var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) // alt: getState(id).val; var obj = getObject(id); var name = getObject(id).common.name; var devicename = name.substring(0, name.indexOf(":1.STATE")); //:1.state aus Text entfernen if(status ||status === 1){ fensterOffen.push(devicename); // offene Fenster zum Array hinzufügen fensterOffen.sort; // Array sortieren if(debug2) log(fensterOffen); } }); if(fensterOffen.length > 0) info = "Folgende Fenster noch offen: "+fensterOffen; else info = "Alle Fenster geschlossen."; if(debug2) log("Info ist "+info); } // #########################################################
hier noch ein Bild vom State
so sieht es auf dem Handy aus
Ich hoffe ihr könnt mir helfen
-
@Baerny sagte in Pushover Nachricht offene Fenster bei Alarm:
getObject(id).common.name
Ist bei dir "Fensterkontakt_Büro.State".
name.indexOf(":1.STATE")
Du suchst aber nach ":1.STATE"
Im Namen ist aber kein Doopelpunkt und keine eins. Somit gibt dein name.substring einen leeren String zurück.var devicename = name.substring(0, name.indexOf(".STATE"));
So sollte es gehen.
Edit:
Noch eine anmerkung. Du fragst das Object zwei mal ab und verwendest dann die Variable aber nicht?var obj = getObject(id); var name = getObject(id).common.name;
-
@thewhobox vielen Dank, jetzt sind die Namen in der Nachricht enthalten, allerdings leert sich die die Log Datei nicht. Aber das ist wohl eine andere Baustelle.
zu den beiden Abfragen - ich hab keine Ahnung von Javascript. Wie erwähnt habe ich das Script aus einem Tread übernommen.
-
@Baerny sagte:
allerdings leert sich die die Log Datei nicht.
var fensterOffen =[];
muss in die Funktion fensterPruef() (an den Anfang).
-
@paul53 versteh ich nicht wirklich, "var fensterOffen =[];" steht doch ganz am Anfang.
-
@Baerny sagte:
"var fensterOffen =[];" steht doch ganz am Anfang.
Eben, außerhalb der Funktion und wird so nur einmal bei Skriptstart ausgeführt. Richtig:
const cacheSelectorState = $('channel[state.id=*.STATE](functions="Verschluss")'); var info; function fensterPruef() { var fensterOffen = []; cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Alarmanlage_Huelle
-
@paul53 Funktioniert!!!!, super