Auflisten der offenen Fenster über Script und "Verschluss"

Kabellose und kabelgebundene Sender und Empfänger der klassischen Homematic-Serie

Moderator: Co-Administratoren

C1500
Beiträge: 20
Registriert: 07.12.2016, 14:53
Danksagung erhalten: 1 Mal

Auflisten der offenen Fenster über Script und "Verschluss"

Beitrag von C1500 » 23.03.2018, 06:49

Servus zusammen,
ich wollte ähnlich wie bei den Rauchmeldern einen String erzeugen, der die offenen Fenster in eine Variabel schreibt.
Ausgelöst wird das gnaze dann bei der Veränderung irgend eines Wertes der Türkontakte.
Ich hab ausschließlich die optischen HM-Sec-SCo verbaut.

Dies ist das Script, das leider nicht funktioniert und ich einfach den Fehler nicht finde:

Code: Alles auswählen

var sec=dom.GetObject("Verschluss"); 
string i; 
string list; 
list=""; 
foreach(i,sec.EnumUsedIDs()) 
{ 
var item=dom.GetObject(i); 
if(item.IsTypeOf(OT_CHANNEL)) 
{ 
var dev=dom.GetObject(item.Device()); 
if( dev.HssType()=="HM-Sec-SCo" ) 
{ 
var state=item.DPByHssDP("STATE"); 
if(state.Value()) 
{ 
list=list+dev.Name(); 
} 
} 
} 
} 
dom.GetObject('Fenster offen').State(list); 
Die Variable "Fenster offen" bleibt einfach leer.

Es handelt sich um ein leicht angepasstes Brandmelder Script.
Fehlerprüfung findet leider auch nix, der Fehler sitzt somit vor der Tastatur. ;)

Help Please

Gruß Peer

NickHM
Beiträge: 3733
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 66 Mal
Danksagung erhalten: 120 Mal

Re: Auflisten der offenen Fenster über Script und "Verschlus

Beitrag von NickHM » 23.03.2018, 07:08

Guten Morgen

als Script Laie frage ich mich trotzdem wo herkommt? Das ist kein Datenpunkt und keine definierte Variable
Hast Du da aus der Vorlage etwas viel weggelöscht?

Ausserdem gibt es hier im Forum Vorlagen, um offene TFK oder angeschaltetes Licht per Script zu finden. Das musst Du nicht neu erfinden.

viewtopic.php?f=26&t=25517&start=60#p301186

C1500
Beiträge: 20
Registriert: 07.12.2016, 14:53
Danksagung erhalten: 1 Mal

Re: Auflisten der offenen Fenster über Script und "Verschlus

Beitrag von C1500 » 23.03.2018, 07:37

Hi,
ich wollte halt nicht noch ein Almighty Universal Super Script kopieren sondern auch mal was probieren.
Wenn was nicht deklariert wäre sollte doch die Fehlerprüfung was finden, oder?
Und Außerdem sind doch in den ersten 4 Zeilen die Variablen deklariert.
Daher die Frage um Lösungshilfe hier.
Gruß Peer

Benutzeravatar
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: Auflisten der offenen Fenster über Script und "Verschlus

Beitrag von klana » 23.03.2018, 07:53

C1500 hat geschrieben:Hi,
ich wollte halt nicht noch ein Almighty Universal Super Script kopieren sondern auch mal was probieren.
Wenn was nicht deklariert wäre sollte doch die Fehlerprüfung was finden, oder?
Und Außerdem sind doch in den ersten 4 Zeilen die Variablen deklariert.
Daher die Frage um Lösungshilfe hier.
Gruß Peer
Hallo Peer,

ich habe Dein Script gerade mal bei mir ausgeführt (mit einem anderen Systemvariablennamen in der Letzten Zeile)
Also bei mir funktioniert es und zeigt die offenen Fenster an.
Evtl. liegt es an dem Leerzeichen im Variablennamen.
Weiterhin habe ich noch die "+" gegen "#" ausgetauscht und ein Leerzeichen in die Ausgabe integriert, da sonst alles aneinandergeklatscht ist.

Code: Alles auswählen

...
...
if(state.Value()) 
{ 
list=list# " " #dev.Name(); 
} 
} 
} 
} 
WriteLine(list);

dom.GetObject('AAA-TestVar').State(list);

Ausgabe:

Code: Alles auswählen

 FKT_Buero FKT_WC
Gruß
klana
Gruß Klana
Es ist nett, wichtig zu sein. Aber es ist wichtiger, nett zu sein.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Auflisten der offenen Fenster über Script und "Verschlus

Beitrag von alchy » 23.03.2018, 13:36

C1500 hat geschrieben:ich wollte halt nicht noch ein Almighty Universal Super Script kopieren sondern auch mal was probieren.
Das kann ja NickHM und jeder andere hier nicht wissen, der hier drüber stolpert. :roll:
Meine erste Reaktion wäre genau so das Verlinken von bewährten Scripten.
Also, wieso schreibst du das also als Info in deiner Frage nicht dazu? :cry:
Denk mal drüber nach.

klana hat geschrieben: Evtl. liegt es an dem Leerzeichen im Variablennamen.
Leerzeichen waren noch nie ein Problem.
Natürlich gesetzt den Fall der Name enthält auch ein Leerzeichen. (s.u.)

Das Script ist als solches lauffähig. Warum auch nicht.

Fallstricke in umgekehrter Wahrscheinlichkeit lt. Glaskugel:
  • Es gibt die Variable "Fenster offen" nicht, weil falsch geschrieben o.ä.
  • Es gibt noch ein anderes Object mit Namen "Fenster offen"
  • Es gibt keine SCo im System, welche dem Object Verschluss zugeordnet sind
  • Es gibt noch ein anderes Object mit dem Namen "Verschluss"
  • Es gibt das Object "Verschluss" nicht, weil falsch geschrieben o.ä.
    Dazu gehört auch der Klarnamenbug
Also als erstes :

Code: Alles auswählen

WriteLine(dom.GetObject(ID_FUNCTIONS).EnumUsedNames());
ausführen und die Rückgabe posten.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

C1500
Beiträge: 20
Registriert: 07.12.2016, 14:53
Danksagung erhalten: 1 Mal

Re: Auflisten der offenen Fenster über Script und "Verschlus

Beitrag von C1500 » 05.04.2018, 08:40

Sorry Alchy für die späte Antwort.
War im Oster-Stress ;o)

Das meldet folgendes Script zurück:

Code: Alles auswählen

${funcButton}	${funcCentral}	${funcHeating}	${funcLight}	${funcLock}	${funcSecurity}	Energiemanagement	Klima
Also "${funcLock}" anstelle von Verschluss
Was kann man denn gegen die ${xxx} Namen tun bzw. muss man da was tun?

Gruß Peer

C1500
Beiträge: 20
Registriert: 07.12.2016, 14:53
Danksagung erhalten: 1 Mal

Re: Auflisten der offenen Fenster über Script und "Verschlus

Beitrag von C1500 » 11.04.2018, 09:53

So,
bin einen kleinen Schritt weiter, aber der Lösung noch genau so weit entfernt wie vorher.

Wenn ich aus "var sec=dom.GetObject("Verschluss"); " "var sec=dom.GetObject("${funcLock}"); " mache, funktioniert das Script bei mir unter "Script Testen"

Wenn ich das jetzt aber im Programm ändere und abspeichere, dann Funktioniert das Script nicht.
Öffne ich das Script nach dem Speichern wieder, steht da "Verschluss" und nicht mehr "${funcLock}"
Die CCU scheint das beim Speichern zu übersetzen.

Kann mir das vielleicht jemand erklären, warum ein von der CCU selbst umgeschriebener Variablenname nicht funktioniert?

Gruß Peer

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Auflisten der offenen Fenster über Script und "Verschlus

Beitrag von alchy » 11.04.2018, 11:05

Einstellungen Gewerke, Gewerke Liste bearbeiten. Die Namen der Gewerke in Verschluss1 und dann wieder zu Verschluss Umbenennen, jeweils speichern.

Hab ich ja geschrieben als wahrscheinlichste Ursache. KlarNamen Bug.
Wenn du nach Klarnamen suchst, wirst du reichlich Lesestoff finden.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

dtp
Beiträge: 10660
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Auflisten der offenen Fenster über Script und "Verschlus

Beitrag von dtp » 12.04.2018, 10:35

Ich mache das übrigens so: klick!
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Benutzeravatar
Clear
Beiträge: 112
Registriert: 14.01.2018, 18:16
Wohnort: Ebergassing
Hat sich bedankt: 6 Mal
Danksagung erhalten: 7 Mal

Re: Auflisten der offenen Fenster über Script und "Verschluss"

Beitrag von Clear » 09.01.2019, 11:32

Hi, ich habe diese Script für mich angepasst.
Es ist genau das was ich gesucht habe. Brauche vorerst keine push, Telegramm oder sonstige Nachrichten. Ich will bei Bedarf einfach sehen ob und welche Fenster/Türen offen sind.
Den Tipp von 'alchy' mit dem KlarnamenBug musste ich durchführen (finde ich zwar etwas Skurril aber es passt zu Homematic).

Das Script läuft, die Variable "SV_offene_Fenster" wird befüllt aber ... leider nur zum Teil!
Hier das Programm "offene Fenster"
fenster.PNG

Code: Alles auswählen

var sec=dom.GetObject("Verschluss");
integer c;
string i;
string list="Offene Fenster/Türen:\n";

foreach(i,sec.EnumUsedIDs())
{
  var item=dom.GetObject(i);
  if(item.IsTypeOf(OT_CHANNEL))
  {
    var dev=dom.GetObject(item.Device());
    if(dev.HssType()=="HM-Sec-SCo")
    {
      var state=item.DPByHssDP("STATE");
      if(state.Value())
      {
        c=c+1;
        list=list#dev.Name()# "\n ";
      }
    }
  }
}

if(c==0)
{
  list="Alle Fenster/Türen geschlossen!";
}
WriteLine(list);
dom.GetObject("SV_offene_Fenster").State(list);
Was passiert:
Ich habe vorerst 6 von 13 optischen Funk-Kontakten HM-Sec-SCo im Einsatz.
Bis zu 5 dieser Funk-Kontakte werden problemlos in die Systemvariable übernommen und angezeigt, wenn geöffnet.
Der 6te, wobei die Reihenfolge egal ist, wird - ich sag mal - verschluckt und nicht in die Systemvariable übenommen.
Status.PNG
Status.PNG (16.43 KiB) 5131 mal betrachtet
Erst wenn ich das Script manuell ausführe, wobei ich das Script im Scripteditor ausführen muss, das Ausführen des Programmes ändert nichts, befüllt die Systemvariable auch mit dem 6en offenen Fenster-Kontakt.
Fenster_scr_out.PNG
Fenster_scr_out.PNG (11.8 KiB) 5131 mal betrachtet
Manuelles Ausführen führt zum richtigen Ergebnis.
Status2.PNG
Status2.PNG (17.32 KiB) 5131 mal betrachtet
Ich habe schon alles erdenkliche ausprobiert, Zeilenumbruch "\n" entfernt, einen beliebigen Text am Ende angefügt, die erste Textzeile entfernt .... immer das Gleiche: Ab 5 geöffneten Fenster wird dann das 6te nicht mehr ausgegeben (ohne manuellem Zutun).

Ich hoffe jemand in der Community hat eine Idee

Vielen Dank
Gruß
clear

Antworten

Zurück zu „HomeMatic Aktoren und Sensoren (klassisch)“