NEWS
Hausstatus Script
-
Ich habe ein Script laufen welches alle Tür-/Fensterkontakte überwacht. Sobald ein Kontakt anschlägt, wird dieser in ein Datenpunkt geschrieben und zusätzlich die Anzahl der offenen Kontakte.
Also wenn ich die Haustür öffne
Welche: Haustür
Anzahl: 1
Oder wenn ich Schlafzimmerfenster öffne
Welche: Schlafzimmer L, Schlafzimmer R
Anzahl: 2
Diese gebe ich dann einfach über Telegram wieder wenn ich schreibe "Sind fenster offen?" Dann kommt:
Es sind alle Fenster schlossen..
ODER
Es sind 3 Fenster/Türen geöffnet: Schlafzimmer L, Schlafzimmer R, Haustür…....
Such mal nach dem Lowbat Script hier im Forum, das kannst du entsprechend ganz einfach ändern auf Türkontakte.
So sieht mein Script aus um alle Fensterkontakte zu überwachen (ohne Telegram Meldung) (Fensterkontakte sind im Gewerk "Fensterkontakte")
createState('Watchdogs.Fenster.WieVieleSindOffen', 0); createState('Watchdogs.Fenster.WelcheSindOffen', " "); var cacheSelectorFENSTER = $('channel(functions=Fensterkontakte)[state.id=*.STATE]'); function countFenster(obj) { var textFENSTER = []; cacheSelectorFENSTER.each(function (id, i) { var status = getState(id).val; var obj = getObject(id); if (status === true) { textFENSTER.push(obj.common.name.substr(0, obj.common.name.indexOf(':'))); } }); setState("Watchdogs.Fenster.WelcheSindOffen", textFENSTER.join(', ')); setState("Watchdogs.Fenster.WieVieleSindOffen", textFENSTER.length); } cacheSelectorFENSTER.on(function(obj) { countFenster(obj); }); schedule("0 */1 * * *", function () { countFenster(); });
Wenn man 25 Fensterkontakte hat wird das Script welches du verwendest ganz schön "aufgeblasen"..
Gruß
-
Hi danke für das Script und den denkanstoß es über Gewerke zu machen.
Nun habe ich nur noch das Problem das ich den Namen als HM-Sec-SCo …... angezeigt bekomme und nicht als z.B Küche.
In der Homamatic habe ich schon Namen vergeben aber irgendwie nimmt der immer die Bezeichnung.
Kann man das ändern?
-
Hier mal wie es bei mir in der CCU2 aussieht und die Namen in ioBroker (die automatisch übernommen werden). Wenn die Namen nicht automatisch in ioBroker aktualisiert werden mal den Homematic REGA Adapter in ioBroker neu starten und prüfen ob die Übernahme der Namen aus der CCU aktiviert ist:
-
Ich habe ein Script laufen welches alle Tür-/Fensterkontakte überwacht. Sobald ein Kontakt anschlägt, wird dieser in ein Datenpunkt geschrieben und zusätzlich die Anzahl der offenen Kontakte.
Also wenn ich die Haustür öffne
Welche: Haustür
Anzahl: 1
Oder wenn ich Schlafzimmerfenster öffne
Welche: Schlafzimmer L, Schlafzimmer R
Anzahl: 2
Diese gebe ich dann einfach über Telegram wieder wenn ich schreibe "Sind fenster offen?" Dann kommt:
Es sind alle Fenster schlossen..
ODER
Es sind 3 Fenster/Türen geöffnet: Schlafzimmer L, Schlafzimmer R, Haustür…....
Such mal nach dem Lowbat Script hier im Forum, das kannst du entsprechend ganz einfach ändern auf Türkontakte.
So sieht mein Script aus um alle Fensterkontakte zu überwachen (ohne Telegram Meldung) (Fensterkontakte sind im Gewerk "Fensterkontakte")
createState('Watchdogs.Fenster.WieVieleSindOffen', 0); createState('Watchdogs.Fenster.WelcheSindOffen', " "); var cacheSelectorFENSTER = $('channel(functions=Fensterkontakte)[state.id=*.STATE]'); function countFenster(obj) { var textFENSTER = []; cacheSelectorFENSTER.each(function (id, i) { var status = getState(id).val; var obj = getObject(id); if (status === true) { textFENSTER.push(obj.common.name.substr(0, obj.common.name.indexOf(':'))); } }); setState("Watchdogs.Fenster.WelcheSindOffen", textFENSTER.join(', ')); setState("Watchdogs.Fenster.WieVieleSindOffen", textFENSTER.length); } cacheSelectorFENSTER.on(function(obj) { countFenster(obj); }); schedule("0 */1 * * *", function () { countFenster(); });
Wenn man 25 Fensterkontakte hat wird das Script welches du verwendest ganz schön "aufgeblasen"..
Gruß `
Einfach und funktioniert super! Danke dafür!Bisher wurden nur die auf/zu-Kontakte betätigt. Bin mal gespannt ob es bei Fenster auf/zu/auf kipp auch so funktioniert.
Bei mir läuft alles wie Fenter und Türen unter der Funktion "Verschluss". Das war die einzige Änderung, die ich am Script vornehmen musste.
1146_unbenannt.jpg -
Bei Drehgriffsensoren wird es wohl nicht klappen, da das Script nur Objekte zählt wo der Wert "true" ist. Man müsste es also so anpassen, dass die Werte offen und gekippt gezählt werden, da ich aber keine Griffsensoren einsetze weiß ich nicht welche Werte für gekippt oder offen stehen. Aber die Anpassung ist easy.. Man muss halt nur wissen welcher Wert für gekippt und welcher Wert für weit offen steht und die if Abfrage entsprechend anpassen.
Gruß
Von unterwegs gesendet
-
Bei Drehgriffsensoren wird es wohl nicht klappen, da das Script nur Objekte zählt wo der Wert "true" ist. Man müsste es also so anpassen, dass die Werte offen und gekippt gezählt werden, da ich aber keine Griffsensoren einsetze weiß ich nicht welche Werte für gekippt oder offen stehen. Aber die Anpassung ist easy.. Man muss halt nur wissen welcher Wert für gekippt und welcher Wert für weit offen steht und die if Abfrage entsprechend anpassen.
Gruß
Von unterwegs gesendet `
Mal schauen ob ich es angepasst bekomme. States lauten da:"0": "CLOSED",
"1": "TILTED",
"2": "OPEN"
Edit: ich nehme an ich muss hier anpassen:
if (status === true)
sowas wie "status ungleich 0" wäre dann wohl ok.
-
Ich würd da dann neue Datenpunkte anlegen für gekippt und weit offen. So dass man eine Übersicht hat wie viele insgesamt geöffnet sind (egal ob gekippt oder weit), wie viele gekippt und wie viele weit offen sind. So hat man eine Übersicht über alles.. Wenn du nicht weiter kommst kannst du dich gerne melden.
Gruß
Von unterwegs gesendet
-
Edit: ich nehme an ich muss hier anpassen:
if (status === true)
sowas wie "status ungleich 0" wäre dann wohl ok. `
Korrekt!
Gruß
Von unterwegs gesendet
-
@Buzzy: ich habe dein oberes Script angepasst für meine Lichter. Es ist quasi 100% gleich. Es wird auch angezeigt welches Licht an, aber es wird nicht gezählt, ist immer 0. Kann ich es nicht einfach so übernehmen? So sieht es bei mir aus:
EDIT: paar Stunden später ist der Zähler am Funktionieren…. mal weiter beobachten.
createState('Watchdogs.Lichter.WieVieleSindOffen', 0); createState('Watchdogs.Lichter.WelcheSindOffen', " "); var cacheSelectorLICHTER = $('channel(functions=Licht)[state.id=*.STATE]'); function countLichter(obj) { var textLICHTER = []; cacheSelectorLICHTER.each(function (id, i) { var status = getState(id).val; var obj = getObject(id); if (status === true) { textLICHTER.push(obj.common.name.substr(0, obj.common.name.indexOf(':'))); } }); setState("Watchdogs.Lichter.WelcheSindOffen", textLICHTER.join(', ')); setState("Watchdogs.Lichter.WieVieleSindOffen", textLICHTER.length); } cacheSelectorLICHTER.on(function(obj) { countLichter(obj); }); schedule("0 */1 * * *", function () { countLichter(); });
-
Inzwischen zählt er doch. Habe nichts geändert (außer js-controller update und damit auch iobroker neugestartet).
Mein Problem sind jetzt aber die Geräte von homematic IP, die haben zwei Kanäle mit STATE, die auch beide reagieren wenn Licht angehen.
Eine Möglichkeit wäre vielleicht wenn ich dem einen nicht mehr zuordne der Function Licht. Aber man es sicherlich auch so programmieren dass doppelte Namen nicht doppelt gezählt werden sollen.
-
Inzwischen zählt er doch. Habe nichts geändert (außer js-controller update und damit auch iobroker neugestartet).
Mein Problem sind jetzt aber die Geräte von homematic IP, die haben zwei Kanäle mit STATE, die auch beide reagieren wenn Licht angehen.
Eine Möglichkeit wäre vielleicht wenn ich dem einen nicht mehr zuordne der Function Licht. Aber man es sicherlich auch so programmieren dass doppelte Namen nicht doppelt gezählt werden sollen. `
createState('Watchdogs.Lichter.WieVieleSindOffen', 0); createState('Watchdogs.Lichter.WelcheSindOffen', " "); var cacheSelectorLICHTER = $('channel(functions=Licht)[state.id=*.STATE]'); function countLichter(obj) { var textLICHTER = []; cacheSelectorLICHTER.each(function (id, i) { var status = getState(id).val; var obj = getObject(id); if (status === true && textLICHTER.indexOf(obj.common.name.substr(0, obj.common.name.indexOf(':'))) === -1) { textLICHTER.push(obj.common.name.substr(0, obj.common.name.indexOf(':'))); } }); setState("Watchdogs.Lichter.WelcheSindOffen", textLICHTER.join(', ')); setState("Watchdogs.Lichter.WieVieleSindOffen", textLICHTER.length); } cacheSelectorLICHTER.on(function(obj) { countLichter(obj); }); schedule("0 */1 * * *", function () { countLichter(); });
Probier es mal da mit..
Gruß
-
Inzwischen zählt er doch. Habe nichts geändert (außer js-controller update und damit auch iobroker neugestartet).
Mein Problem sind jetzt aber die Geräte von homematic IP, die haben zwei Kanäle mit STATE, die auch beide reagieren wenn Licht angehen.
Eine Möglichkeit wäre vielleicht wenn ich dem einen nicht mehr zuordne der Function Licht. Aber man es sicherlich auch so programmieren dass doppelte Namen nicht doppelt gezählt werden sollen. `
createState('Watchdogs.Lichter.WieVieleSindOffen', 0); createState('Watchdogs.Lichter.WelcheSindOffen', " "); var cacheSelectorLICHTER = $('channel(functions=Licht)[state.id=*.STATE]'); function countLichter(obj) { var textLICHTER = []; cacheSelectorLICHTER.each(function (id, i) { var status = getState(id).val; var obj = getObject(id); if (status === true && textLICHTER.indexOf(obj.common.name.substr(0, obj.common.name.indexOf(':'))) === -1) { textLICHTER.push(obj.common.name.substr(0, obj.common.name.indexOf(':'))); } }); setState("Watchdogs.Lichter.WelcheSindOffen", textLICHTER.join(', ')); setState("Watchdogs.Lichter.WieVieleSindOffen", textLICHTER.length); } cacheSelectorLICHTER.on(function(obj) { countLichter(obj); }); schedule("0 */1 * * *", function () { countLichter(); });
Probier es mal da mit..
Gruß `
Cool. Läuft!