NEWS
Ansage bei Tür offen länger als 2 Minuten
-
Hallo Leute,
ich habe keine Ahnung wie ich das angehen soll.
Es gelingt mit bereits beim öffnen der Tür eine Ansage zu machen. Nur wie baue ich die zusätzliche Bedingung "länger als 2 Minuten offen" ein?
var idSayIt = "sayit.0.tts.text"; // Hier die entsprechende SayIt Text ID var idButton = "hm-rpc.0.MEQ0175436.1.STATE"; // Test ID var lastSay = null; // Bei Tastendruck wird folgender Text gesprochen subscribe({id: idButton, val: true}, function (obj) { if (!lastSay || ((new Date()).getTime() - lastSay) > 3000) { lastSay = (new Date()).getTime(); setState (idSayIt, "de;40;Wohnungstür geöffnet"); } });
-
Hallo tesso,
ich nutze dafür den CUxD und ioBroker. Das CUxD Wrapper State Device kann für jedes Homematic Gerät mit STATE Datenpunkt angelegt werden. Es misst die Zeit jedes Zustandes (false/true) und speichert sie in verschiedenen Datenpunkten. Ebenso ist die Nutzung eines Timers mit Eventauslösung am Ende möglich. Das wird dann bei der Konfiguration des CUxD Gerätes in der WebUI festgelegt. http://homematic-forum.de/forum/viewtopic.php?f=31&t=12669&p=101103 ist die Konfiguration erklärt, habe das schon früher genutzt.
Dann musst du nur die CCU-Daten in ioBroker neu einlesen und hast die Datenpunkte zur Verfügung. Ein Datenpunkt wie hm-rpc.1.CUX9001002.1.TIME_ON_EVENT kann abgefragt werden. Er zeigt als Status an, ob der Timer läuft oder nicht, also ob Tür zu oder auf. Wenn false, dann Zeit abgelaufen. Alternativ kann auch der Wert von hm-rpc.1.CUX9001002.1.TIME_ON abgefragt werden. Der gibt die Dauer/Zeit in des Zustands in Minuten an.
! So überwache ich das WC-Fenster:
idWCFensterTimeOn = "hm-rpc.1.CUX9001009.1.TIME_ON"/*Fenster WC Statistik 1h.TIME_ON*/; >! on( { id: idWCFensterTimeOn, change: 'ne' }, function(data) { var anwesenheit = getState(idAnwesenheit), nachtruhe = getState(idNachtruhe), status, betreff = "ioBroker Meldung"; zeit = parseInt(data.newState.val,10); if (data.newState.val > 30 && anwesenheit.val === 1) { // wenn 30min und anwesend if (nachtruhe.val !== 1) { // wenn nicht Nachtruhe status = 'Das WC-Fenster ist seit ' + zeit + ' Minuten geöffnet. Bitte das Fenster schließen!' ; meldung_sayit(status); meldung_push(status, betreff, 1); } else { // bei Nachtruhe status = 'Das WC-Fenster ist bei Nachtruhe seit ' + zeit + ' Minuten geöffnet. Bitte schließen!' ; // meldung_sayit(status); meldung_push(status, betreff, 0); // bei Nachtruhe leiser } // Ende Nachtruhe } // Ende Anwesenheit log(status, "info"); });
Gruß
Pix
-
Das klingt gut. Die Wrapper Devices habe ich bisher nie genutzt. Schaue ich mir auf alle Fälle an.
Danke
-
Das Gerät habe ich angelegt. Mit Test geht es erst Morgen weiter.
Kannst du mir evtl. noch die Funktionen meldung_sayit und meldung_push zur Verfügung stellen? Ich bin bei Javascript leider blutiger Anfänger. Bisher dachte ich, das brauch ich nicht lernen. Nun kommt iobroker und ich brauche es doch.
-
Hallo Leute,
ich habe keine Ahnung wie ich das angehen soll.
Es gelingt mit bereits beim öffnen der Tür eine Ansage zu machen. Nur wie baue ich die zusätzliche Bedingung "länger als 2 Minuten offen" ein?
var idSayIt = "sayit.0.tts.text"; // Hier die entsprechende SayIt Text ID var idButton = "hm-rpc.0.MEQ0175436.1.STATE"; // Test ID var lastSay = null; // Bei Tastendruck wird folgender Text gesprochen subscribe({id: idButton, val: true}, function (obj) { if (!lastSay || ((new Date()).getTime() - lastSay) > 3000) { lastSay = (new Date()).getTime(); setState (idSayIt, "de;40;Wohnungstür geöffnet"); } }); ```` `
Wie währe es damit:
var idSayIt = "sayit.0.tts.text"; // Hier die entsprechende SayIt Text ID var idButton = "hm-rpc.0.MEQ0175436.1.STATE"; // Test ID var lastSay = null; vra timer = null; // Bei Tastendruck wird folgender Text gesprochen subscribe(idButton, function (obj) { if (obj.newState.val) { if (!lastSay || ((new Date()).getTime() - lastSay) > 3000) { lastSay = (new Date()).getTime(); setState (idSayIt, "de;40;Wohnungstür geöffnet"); } // Starte timer für 2 Minuten if (!timer) { timer = setTimeout(function () { timer = null; setState (idSayIt, "de;40;Wohnungstür ist zu lang geöffnet"); }, 120000); } } else { // Tür zugemacht. Falls timer läuft = stopp if (timer) { clearTimeout(timer); timer = null; } } });
-
Das Gerät habe ich angelegt. Mit Test geht es erst Morgen weiter.
Kannst du mir evtl. noch die Funktionen meldung_sayit und meldung_push zur Verfügung stellen? Ich bin bei Javascript leider blutiger Anfänger. Bisher dachte ich, das brauch ich nicht lernen. Nun kommt iobroker und ich brauche es doch. `
Das ist eigentlich nur:
setState(idSayitHome24MP, ansage); ````und```` sendTo("pushover", { message: text, title: titel, priority: prio });
Das ist in eine Funktion gepackt, weil ich zusätzlich noch Variablen abfrage, ob das ganze angesagt/gepusht werden soll oder nicht (daher Optin).
Bluefox' Lösung ist natürlich auch fein. Ich mag CUxD als Lösung für CCU-geräte, weil es so zuverlässig arbeit. Der Wrapper läuft auch über einen CCU-Neustart hinaus. Die Daten über die offenstehende Tür kommen von der CCU, warum also nicht noch die angereicherten Daten des CUxD mitnehmen. Wenn du allerdings mal andere Systeme anbindest (KNX, Homepilot, etc..), dann wirst du wieder die reine JavaScript Variante brauchen.
Gruß
Pix