Skript zur Anzeige offener/geschlossener Fenster - Systemvariable ändert sich nicht bei mehreren Bedingungen
Moderator: Co-Administratoren
- Baxxy
- Beiträge: 10827
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 608 Mal
- Danksagung erhalten: 2225 Mal
Re: Skript zur Anzeige offener/geschlossener Fenster - Systemvariable ändert sich nicht bei mehreren Bedingungen
Nach kurzem drüberschauen sieht das für mich erstmal OK aus. Die SysVar "Fenster_Status" wird zwar bei jeder Fensterbewegung "aktualisiert", das sollte aber unkritisch sein weil das Push-Programm auf Änderung geht. Da es sich aber augenscheinlich wie "bei Aktualisierung" verhält würde ich das Push Prog mal löschen und neu anlegen.
Grüße
Baxxy
Grüße
Baxxy
-
- Beiträge: 9679
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Skript zur Anzeige offener/geschlossener Fenster - Systemvariable ändert sich nicht bei mehreren Bedingungen
Im Beitrag viewtopic.php?f=26&t=67681&start=10#p676862
hatte das Programm noch ein "Sonst, Wenn". Hast du das zwischenzeitlich gelöscht?
hatte das Programm noch ein "Sonst, Wenn". Hast du das zwischenzeitlich gelöscht?
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
-
- Beiträge: 48
- Registriert: 22.07.2020, 21:48
- System: CCU
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Skript zur Anzeige offener/geschlossener Fenster - Systemvariable ändert sich nicht bei mehreren Bedingungen
Guten Morgen, ich habe es jetzt hinbekommen, das eine Pushmeldung kommt und dass nur, wenn ein Fenster geöffnet wurde, nur leider ist es so, wenn ein Fenster offen steht und ich zusätzlich ein Fenster öffne, passiert nix.
Ich werde nachher, wenn ich Zeit habe, die Bilder reinstellen. Vielleicht habt ihr ja noch eine Idee, was man ändern sollte, damit jede Öffnung mitgeteilt wird.
Ich werde nachher, wenn ich Zeit habe, die Bilder reinstellen. Vielleicht habt ihr ja noch eine Idee, was man ändern sollte, damit jede Öffnung mitgeteilt wird.
-
- Beiträge: 9679
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Skript zur Anzeige offener/geschlossener Fenster - Systemvariable ändert sich nicht bei mehreren Bedingungen
Dann musst Du entweder für jedes Fenster ein eigenes Programm schreiben oder Du musst die Anzahl offener Fenster feststellen und wenn ungleich der vorherigen Anzahl, dann Meldung.
IMHO gibt es hier aber irgendwo schon fertige Skripte für sowas. Das Rad muss ja nicht jeder neu erfinden.
IMHO gibt es hier aber irgendwo schon fertige Skripte für sowas. Das Rad muss ja nicht jeder neu erfinden.
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
-
- Beiträge: 48
- Registriert: 22.07.2020, 21:48
- System: CCU
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Skript zur Anzeige offener/geschlossener Fenster - Systemvariable ändert sich nicht bei mehreren Bedingungen
Hi Michael, ja das wäre eine Idee. Du hast nicht zufällig einen Tipp wo man ein passendes Skript findet. Die typischen Internet Recherchen bzw. das Forum hat viele Einträge aber was passendes habe ich leider nicht gefunden.
Hier wie versprochen die Lösung zum vorherigen Problem.
Grüße
Robert
Hier wie versprochen die Lösung zum vorherigen Problem.
Grüße
Robert
- klana
- Beiträge: 1099
- Registriert: 08.02.2015, 08:37
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 27 Mal
Re: Skript zur Anzeige offener/geschlossener Fenster - Systemvariable ändert sich nicht bei mehreren Bedingungen
Hi,
ich habe das so gelöst:
Hiermit wird jedesmal eine Systemvariable mit dem letzten Fenster belegt (die kannst du dir dann per Message o.ä. schicken.
Ausserdem wir die Anzahl der offenen Fenster gezählt und gespeichert.
WebUI Programm
Hier das zugehörige Script:
SV_Last_Fenster (Systemvariable als Zeichenkette definiert)
SV_CountFensterAuf (Systemvariable als Zahl definiert)
Gruß
Klana
ich habe das so gelöst:
Hiermit wird jedesmal eine Systemvariable mit dem letzten Fenster belegt (die kannst du dir dann per Message o.ä. schicken.
Ausserdem wir die Anzahl der offenen Fenster gezählt und gespeichert.
WebUI Programm
Hier das zugehörige Script:
Code: Alles auswählen
! Fenster - Namen des Programmauslöser Gerät und Zeit in Systemvariable schreiben
string list = "";
string zeit = "";
string devName = "";
object dp;
boolean choice = false;
var ch;
var dev;
var chType;
var devType;
var status;
string status_new = "";
integer countOffen = dom.GetObject("SV_CountFensterAuf").Value().ToInteger();
dp = dom.GetObject("$src$");
if (dp)
{
ch = dom.GetObject(dp.Channel());
dev = dom.GetObject(ch.Device());
chType = ch.HssType();
devType = dev.HssType();
devName = dev.Name().Substr(7);
zeit = system.Date("%d.%m.%y - %H:%M:%S Uhr");
if ( ( chType == "SHUTTER_CONTACT") || (chType =="TILT_SENSOR") )
{
choice = true;
status = ch.DPByHssDP("STATE").Value();
if (!status) { status_new = " zu "; countOffen = countOffen - 1;} else { status_new = " offen ";countOffen = countOffen + 1; }
}
if(chType.StartsWith("ROTARY_HANDLE"))
{
choice = true;
status = ch.DPByHssDP("STATE").Value();
if (!status) { status_new = " zu "; countOffen = countOffen - 1;}
if (status == 1 ){ status_new = " gekippt "; countOffen = countOffen + 1;}
if (status == 2 ){ status_new = " offen "; countOffen = countOffen + 1;}
}
if (choice == true)
{
list = devName # " " # status_new # " " #zeit;
dom.GetObject("SV_Last_Fenster").State(list);
dom.GetObject("SV_CountFensterAuf").State(countOffen);
}
}
SV_CountFensterAuf (Systemvariable als Zahl definiert)
Gruß
Klana
Gruß Klana
Es ist nett, wichtig zu sein. Aber es ist wichtiger, nett zu sein.
Es ist nett, wichtig zu sein. Aber es ist wichtiger, nett zu sein.
- klana
- Beiträge: 1099
- Registriert: 08.02.2015, 08:37
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 27 Mal
Re: Skript zur Anzeige offener/geschlossener Fenster - Systemvariable ändert sich nicht bei mehreren Bedingungen
Hi,
ich schon wieder....
Wenn du per Script alle offenen Fenster ermitteln willst...hab ich mir auch zusammengeklau(b)t und angepasst...
Danke Alchy
SV_PushMessage ist bei mir die Systemvariable deren Inhalt verschickt wird.
WebUI:
Passendes Script
Ergebnis sieht dann so aus:
ich schon wieder....
Wenn du per Script alle offenen Fenster ermitteln willst...hab ich mir auch zusammengeklau(b)t und angepasst...
Danke Alchy
SV_PushMessage ist bei mir die Systemvariable deren Inhalt verschickt wird.
WebUI:
Passendes Script
Code: Alles auswählen
! alle Fenstersensoren / HMW-Sen-SC-12-DR / Winmatic / Keymatic / Funk-Neigungssensor in einem bestimmten Gewerk/ Favoriten u.a. durchsuchen
! und Ausgabe in Variable oder per pushover, telegram oder per Mail oder Ansage Home24 Mediaplayer
! v1.42 (c) by Alchy
! https://homematic-forum.de/forum/viewtopic.php?f=26&t=25517&p=301186#p301186
! +++++++++++ Setup Script ++++++++++++++++
string ONLYOPEN= "yes"; ! if yes pushed only the opened sensors
string FUNCTIONS = "Verschluss"; ! which function / room / favorites
boolean DEBUG = false; ! true/false zusaetzliche Ausgabe des Scriptes auf dem Monitor
!+++++++ SETUP SYSTEMVARIABLE ++++++
! 1. VOR Benutzung Systemvariable vom Typ Zeichenkette in CCU anlegen,
var USE_SYSVAR = "yes"; ! yes to save the output to a sysvar
var USE_SYSCOUNT = "yes"; ! yes to save the output to a sysvar
var SYSVAR_NAME = "SV_PushMessage"; ! name of the sysvar
var SYSVAR_COUNTER = "SV_CountFensterAuf"; ! name of the countvar
!++++++ DONT TOUCH BEHIND THIS LINE +++++++++
string i;
string slist;
integer count = 0;
var sec=dom.GetObject(FUNCTIONS);
if ( (DEBUG == true) && (!sec) ){ WriteLine(" Gewerk nicht vorhanden");quit;}
foreach(i,sec.EnumUsedIDs())
{
string status_new = "unbekannt";
boolean choice = false;
boolean status = false;
var since;
var ch = dom.GetObject(i);
if ( ch.IsTypeOf(OT_CHANNEL) )
{
var dev = dom.GetObject(ch.Device());
var chType = ch.HssType();
var devType = dev.HssType();
string room; string id;
foreach(id, ch.ChnRoom())
{
var roomi = dom.GetObject(id); room = room # " "# roomi.Name() ;
}
if ( ( chType == "SHUTTER_CONTACT") || (chType =="TILT_SENSOR") )
{
choice = true; var status = ch.DPByHssDP("STATE").Value();
if (!status) { status_new = " zu "; }else{ status_new = " offen "; }
}
if(chType.StartsWith("ROTARY_HANDLE"))
{
choice = true; var status = ch.DPByHssDP("STATE").Value();
if (!status) { status_new = " zu ";}
if (status == 1 ){ status_new = " gekippt "; }
if (status == 2 ){ status_new = " offen "; }
}
if ( ( devType == "HMW-Sen-SC-12-DR") && ( chType == "SENSOR") )
{
choice = true; var status = ch.DPByHssDP("SENSOR").Value();
if (status == 0 ) { status_new = " zu ";}
if (status == 1 ) { status_new = " offen "; }
}
if ( ( devType.StartsWith("HM-Sec-Win")) && ( chType == "WINMATIC") )
{
choice = true; var status = ch.DPByHssDP("LEVEL").Value();
if (ch.DPByHssDP("LEVEL").Value() == -0.005 ){status_new = " verriegelt ";}
if (ch.DPByHssDP("LEVEL").Value() == 0.0 ){status_new = " zu ";}
if (ch.DPByHssDP("LEVEL").Value() >= 0.1 ){status_new = " offen ";}
}
if ( ( devType.StartsWith("HM-Sec-Key")) && ( chType == "KEYMATIC") )
{
choice = true; var status = ch.DPByHssDP("STATE").Value();
if (!status) { status_new = " zu "; }else{ status_new = " offen "; }
}
if (choice)
{
var since = ch.LastDPActionTime().ToString("%d.%m.%y %H:%M:%S Uhr");
if (since == "01.01.70 01:00:00 Uhr") {since = " unbekannt ";}
if (status)
{
count = count +1;
}
! Hier wird kein Raum und keine Uhrzeit ausgegeben
! if (ONLYOPEN == "yes")
! {
! if (status) { slist=slist # dev.Name() #" - Status: " # status_new #"\n"; }
! }
! else
! {
! slist=slist # dev.Name() #" - Status: " # status_new #"\n";
! }
! Hier wird Raum und Uhrzeit ausgegeben
if (ONLYOPEN == "yes")
{
if (status)
{
! Ohne Raum nur mit Zeit
slist=slist # dev.Name() #" - Status: " # status_new #" seit: "# since #"\n";
! slist=slist # dev.Name() #" - Status: " # status_new #" - im Raum: "#room #" - seit: " # since #"\n";
}
}
else
{
! Ohne Raum nur mit Zeit
slist=slist # dev.Name() #" - Status: " # status_new #" seit: "# since #"\n";
! slist=slist # dev.Name() #" - Status: " # status_new #" - im Raum: "#room #" - seit: " # since #"\n";
}
}
}
}
slist = count #" Fenster geöffnet\n" #slist;
if ( DEBUG) { WriteLine ("slist\n"#slist);}
! if ( DEBUG) { WriteLine ("\nslist UTF8 \n"#slist.ToUTF8());}
if ( DEBUG) { WriteLine ("count\n"#count);}
if ( USE_SYSCOUNT == "yes") {dom.GetObject(SYSVAR_COUNTER).State(count); }
if ( USE_SYSVAR == "yes"){ dom.GetObject(SYSVAR_NAME).State(slist); }
Ergebnis sieht dann so aus:
Gruß Klana
Es ist nett, wichtig zu sein. Aber es ist wichtiger, nett zu sein.
Es ist nett, wichtig zu sein. Aber es ist wichtiger, nett zu sein.
-
- Beiträge: 48
- Registriert: 22.07.2020, 21:48
- System: CCU
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: Skript zur Anzeige offener/geschlossener Fenster - Systemvariable ändert sich nicht bei mehreren Bedingungen
Ihr seit super, vielen lieben Dank. Dann werde ich mal ran machen und mich ausprobieren
Re: Skript zur Anzeige offener/geschlossener Fenster - Systemvariable ändert sich nicht bei mehreren Bedingungen
Hallo leute,
ich habe euer Script im Einsatz. Ersteinmal vielen Dank an alle, die an diesem Script mitgewirkt haben. Ich habe leider ein kleines Problem: Es werden nicht alle offenen Fenster, die dem Gewerk "Verschluss" zugeordnet sind, angezeigt. Schaue ich im CCU3 Webgui die Gruppe Verschluss an, werden alle Fenster aufgeführt, die die offen sind werden auch als offen markiert. Ich nutze die HmIP-SWDO optischen Fensterkontakte. Hat vielleicht jemand eine Idee, an was das liegen kann?
ich habe euer Script im Einsatz. Ersteinmal vielen Dank an alle, die an diesem Script mitgewirkt haben. Ich habe leider ein kleines Problem: Es werden nicht alle offenen Fenster, die dem Gewerk "Verschluss" zugeordnet sind, angezeigt. Schaue ich im CCU3 Webgui die Gruppe Verschluss an, werden alle Fenster aufgeführt, die die offen sind werden auch als offen markiert. Ich nutze die HmIP-SWDO optischen Fensterkontakte. Hat vielleicht jemand eine Idee, an was das liegen kann?
klana hat geschrieben: ↑31.08.2021, 19:54
Passendes Script
Code: Alles auswählen
! alle Fenstersensoren / HMW-Sen-SC-12-DR / Winmatic / Keymatic / Funk-Neigungssensor in einem bestimmten Gewerk/ Favoriten u.a. durchsuchen ! und Ausgabe in Variable oder per pushover, telegram oder per Mail oder Ansage Home24 Mediaplayer ! v1.42 (c) by Alchy ! https://homematic-forum.de/forum/viewtopic.php?f=26&t=25517&p=301186#p301186 ! +++++++++++ Setup Script ++++++++++++++++ string ONLYOPEN= "yes"; ! if yes pushed only the opened sensors string FUNCTIONS = "Verschluss"; ! which function / room / favorites boolean DEBUG = false; ! true/false zusaetzliche Ausgabe des Scriptes auf dem Monitor !+++++++ SETUP SYSTEMVARIABLE ++++++ ! 1. VOR Benutzung Systemvariable vom Typ Zeichenkette in CCU anlegen, var USE_SYSVAR = "yes"; ! yes to save the output to a sysvar var USE_SYSCOUNT = "yes"; ! yes to save the output to a sysvar var SYSVAR_NAME = "SV_PushMessage"; ! name of the sysvar var SYSVAR_COUNTER = "SV_CountFensterAuf"; ! name of the countvar !++++++ DONT TOUCH BEHIND THIS LINE +++++++++ string i; string slist; integer count = 0; var sec=dom.GetObject(FUNCTIONS); if ( (DEBUG == true) && (!sec) ){ WriteLine(" Gewerk nicht vorhanden");quit;} foreach(i,sec.EnumUsedIDs()) { string status_new = "unbekannt"; boolean choice = false; boolean status = false; var since; var ch = dom.GetObject(i); if ( ch.IsTypeOf(OT_CHANNEL) ) { var dev = dom.GetObject(ch.Device()); var chType = ch.HssType(); var devType = dev.HssType(); string room; string id; foreach(id, ch.ChnRoom()) { var roomi = dom.GetObject(id); room = room # " "# roomi.Name() ; } if ( ( chType == "SHUTTER_CONTACT") || (chType =="TILT_SENSOR") ) { choice = true; var status = ch.DPByHssDP("STATE").Value(); if (!status) { status_new = " zu "; }else{ status_new = " offen "; } } if(chType.StartsWith("ROTARY_HANDLE")) { choice = true; var status = ch.DPByHssDP("STATE").Value(); if (!status) { status_new = " zu ";} if (status == 1 ){ status_new = " gekippt "; } if (status == 2 ){ status_new = " offen "; } } if ( ( devType == "HMW-Sen-SC-12-DR") && ( chType == "SENSOR") ) { choice = true; var status = ch.DPByHssDP("SENSOR").Value(); if (status == 0 ) { status_new = " zu ";} if (status == 1 ) { status_new = " offen "; } } if ( ( devType.StartsWith("HM-Sec-Win")) && ( chType == "WINMATIC") ) { choice = true; var status = ch.DPByHssDP("LEVEL").Value(); if (ch.DPByHssDP("LEVEL").Value() == -0.005 ){status_new = " verriegelt ";} if (ch.DPByHssDP("LEVEL").Value() == 0.0 ){status_new = " zu ";} if (ch.DPByHssDP("LEVEL").Value() >= 0.1 ){status_new = " offen ";} } if ( ( devType.StartsWith("HM-Sec-Key")) && ( chType == "KEYMATIC") ) { choice = true; var status = ch.DPByHssDP("STATE").Value(); if (!status) { status_new = " zu "; }else{ status_new = " offen "; } } if (choice) { var since = ch.LastDPActionTime().ToString("%d.%m.%y %H:%M:%S Uhr"); if (since == "01.01.70 01:00:00 Uhr") {since = " unbekannt ";} if (status) { count = count +1; } ! Hier wird kein Raum und keine Uhrzeit ausgegeben ! if (ONLYOPEN == "yes") ! { ! if (status) { slist=slist # dev.Name() #" - Status: " # status_new #"\n"; } ! } ! else ! { ! slist=slist # dev.Name() #" - Status: " # status_new #"\n"; ! } ! Hier wird Raum und Uhrzeit ausgegeben if (ONLYOPEN == "yes") { if (status) { ! Ohne Raum nur mit Zeit slist=slist # dev.Name() #" - Status: " # status_new #" seit: "# since #"\n"; ! slist=slist # dev.Name() #" - Status: " # status_new #" - im Raum: "#room #" - seit: " # since #"\n"; } } else { ! Ohne Raum nur mit Zeit slist=slist # dev.Name() #" - Status: " # status_new #" seit: "# since #"\n"; ! slist=slist # dev.Name() #" - Status: " # status_new #" - im Raum: "#room #" - seit: " # since #"\n"; } } } } slist = count #" Fenster geöffnet\n" #slist; if ( DEBUG) { WriteLine ("slist\n"#slist);} ! if ( DEBUG) { WriteLine ("\nslist UTF8 \n"#slist.ToUTF8());} if ( DEBUG) { WriteLine ("count\n"#count);} if ( USE_SYSCOUNT == "yes") {dom.GetObject(SYSVAR_COUNTER).State(count); } if ( USE_SYSVAR == "yes"){ dom.GetObject(SYSVAR_NAME).State(slist); }
Ergebnis sieht dann so aus:
Bildschirmfoto 2021-08-31 um 19.58.33.jpg
- Baxxy
- Beiträge: 10827
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 608 Mal
- Danksagung erhalten: 2225 Mal
Re: Skript zur Anzeige offener/geschlossener Fenster - Systemvariable ändert sich nicht bei mehreren Bedingungen
SWDO's sollten registriert werden.
Setze doch mal im Script Header:
Code: Alles auswählen
! +++++++++++ Setup Script ++++++++++++++++
string ONLYOPEN= "no"; ! if yes pushed only the opened sensors
string FUNCTIONS = "Verschluss"; ! which function / room / favorites
boolean DEBUG = true; ! true/false zusaetzliche Ausgabe des Scriptes auf dem Monitor
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen