Anzeige der offenen Fenster per Script

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
norfer
Beiträge: 37
Registriert: 21.03.2014, 19:20

Anzeige der offenen Fenster per Script

Beitrag von norfer » 16.09.2016, 18:53

Hallo Gemeinde,
ich möchte meine Fenster mit Fensterkontakten überwachen: sobald ein Fenster geöffnet wird, soll dies auf der Startseite der CCU2 angezeigt werden.
Ich habe mir aus einem "Rauchmelder"-Script eine Version zusammen gebastelt, die allerdings immer nur den erst-auslösenden Kontakt anzeigt. Wie kann ich das Script so verändern, dass auch alle nachfolgenden Kontakt-Meldungen (die ja in der Variablen "listoffen" schon vorhanden sind) auf der Startseite angezeigt werden? Das HM-Display steht mir nicht zur Verfügung, Anzeige evtl. auf dem Tablet mit Homedroid o.ä.?

Code: Alles auswählen

var sec=dom.GetObject("Fenster_Tueren");
string i;
string list;

var listoffen="";
var countoffen = 0;

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-SC-2")
    {
       var state=item.DPByHssDP("STATE");
          countgesamt=countgesamt+1;
       if(state.Value()==1)
       {
          WriteLine( dev.Name() + state.Value());
          listoffen=listoffen+dev.Name()+"\r\n";
          countoffen=countoffen+1;


       }

    }
  }
}


WriteLine("offen:" + listoffen);
WriteLine("offen anz:" + countoffen);

var text = "offen:" + listoffen;

text = text + "<br>Offen: " ;
text = text + countoffen;
text = text + "<br>Zu: " ;

var b1 = dom.GetObject("hs_display4:B1");
var string = "{text:" + text + "}";
b1.State(string);
Ich könnte natürlich für jedes Fenster eine Systemvariable anlegen und auf der Startseite anzeigen, aber bei 15 Fenstern wird das zu unübersichtlich. Das muss doch per Script eleganter gehen, indem nur die offenen Fenster angezeigt werden. Allerdings reichen da meine Kenntnisse der Scriptsprache nicht aus.

Danke für eure Hilfe!
norfer

Cash
Beiträge: 1143
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland

Re: Anzeige der offenen Fenster per Script

Beitrag von Cash » 17.09.2016, 11:52

Alchy hatte hier im Forum mal eine Lösung geschrieben.

Die habe ich für mich angepasst. Incl Temperaturen von ein paar Heizungen. Das ganze wird bei mir per Pushover verschickt. Also anpassen.

Interessant ist hier besonders die Variable tmpI.

Code: Alles auswählen

! +++++ Statusübersich bei Änderung der Variablen SV Anwesenheit // per zPNS verschicken +++++
! 27.07.16

! +++++++++++ Setup Script ++++++++++++++++
var tmpI= "yes"; ! if yes pushed only the opened sensors
var tmpH = "Verschluss"; ! which function / room / favorites

! +++ Definition von Variablen +++
string titel = "Statusübersicht";
string message;
string message_tmp;
string device;
integer prio;


string tmpA;
string list;
string tmpB = "unbekannt";
integer count = 0;
var sec=dom.GetObject(tmpH);
foreach(tmpA,sec.EnumUsedIDs()) {
var channel = dom.GetObject(tmpA.Channel());
var device = dom.GetObject(channel.Device());
var tmpC = channel.HssType();
var tmpD = device.HssType();
var tmpE = dom.GetObject(channel.ChnRoom());
var tmpF = channel.LastTimestamp().ToString("%d.%m.%y %H:%M:%S Uhr");
if (tmpF == "01.01.70 01:00:00 Uhr") {tmpF = " unbekannt ";}
if ( ( tmpC == "SHUTTER_CONTACT") || ( tmpC == "ROTARY_HANDLE_SENSOR") ) {
var tmpG = channel.DPByHssDP("STATE").Value();
if (tmpG) { count = count +1; }
if (tmpG == 0 ) { tmpB = "<font color = black >geschlossen</font>"; }
if (tmpG == 1 ) { tmpB = "<font color = yellow >gekippt</font>"; }
if (tmpG == 2 ) { tmpB = "<font color = red >offen</font>"; }

if (tmpI == "yes") {
if (tmpG) {
list=list # device.Name() #" ist " # tmpB #" - seit: " # tmpF #"\n"; }
} else {
list=list # device.Name() #" ist " # tmpB #" - seit: " # tmpF #"\n"; }
}
}

! Nachricht zusammenbauen

if(count == 0) {message_tmp = "<font color='orange'>Alle Fenster sind geschlossen.</font>";}
else {message_tmp = "<font color='red'>" #count #" Fenster sind derzeit geöffnet.</font>" #"\n" #list #"\n";}


message_tmp = message_tmp #"Wohnzimmer: " #dom.GetObject("BidCos-RF.MEQ02:1.TEMPERATURE").Value().ToString(1) #" °C"#"\n";
message_tmp = message_tmp #"Küche: " #dom.GetObject("BidCos-RF.MEQ008:1.TEMPERATURE").Value().ToString(1) #" °C"#"\n";
message_tmp = message_tmp #"Badezimmer: " #dom.GetObject("BidCos-RF.MEQ00:1.TEMPERATURE").Value().ToString(1) #" °C"#"\n";
message_tmp = message_tmp #"Schlafzimmer: " #dom.GetObject("BidCos-RF.MEQ00:1.TEMPERATURE").Value().ToString(1) #" °C"#"\n";
message_tmp = message_tmp #"Außentemperatur: " #dom.GetObject("BidCos-RF.MEQ02:1.TEMPERATURE").Value().ToString(1) #" °C";

message = message_tmp;
device = "All";
prio = 0;



! +++++ Alternativer Sound unabhängig von Prio setzen +++++
! Wenn leer wird der Sound in Abhängigkeit der Prio gewählt
string sound = "";

!Variablen füllen
dom.GetObject("CCU SV Push Titel").State(titel);
dom.GetObject("CCU SV Push Text").State(message);
dom.GetObject("CCU SV Push Prio").State(prio);
dom.GetObject("CCU SV Push Sound").State(sound);
dom.GetObject("CCU SV Push Device").State(device);

! Programm "PRG CCU Push-Nachrichten" ausführen
dom.GetObject("PRG CCU zPNS").ProgramExecute();

alchy
Beiträge: 7714
Registriert: 24.02.2011, 01:34

Re: Anzeige der offenen Fenster per Script

Beitrag von alchy » 17.09.2016, 18:36

Die letzte Version meines Scriptes befindet sich >> H I E R <<. :roll:
Darin ist, neben dem Speichern in einer Systemvariablen, wahlweise auch der direkte Versand der Scriptausgabe per Pushover oder Mail enthalten.
Bei Nichtbedarf der Funktionen einfach die jeweiligen use Variablen auf no lassen. Und nur USE_SYSVAR mit yes vorbesetzen.

Achtung:
Zum Anzeigen des Variableninhaltes auf der Startpage der Klickibunti aber bitte jegliche Steuerzeichen (z.B. Color Codes usw entfernen)
Wenn du damit nicht klar kommst, schreib ich dir auch eine Version um. Melde dich einfach.

Alchy

.................... 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.

norfer
Beiträge: 37
Registriert: 21.03.2014, 19:20

Re: Anzeige der offenen Fenster per Script

Beitrag von norfer » 18.09.2016, 14:36

Hallo alchy
vielen Dank für dein Super-Script :D :D :D - das ich leider vorher nicht gefunden hatte!
Damit hätte ich mir einige Stunden vergeblicher Versuche sparen können! :(
Nach den entsprechenden Anpassungen funktioniert es so wie gewünscht. Einziger Wermutstropfen:
Die offenen Fenster werden auf der Startseite fortlaufend aufgelistet, d.h. ohne Zeilenumbruch nach jedem Fenster. Auch <br/> hilft nicht weiter. lässt sich das noch verbessern?

norfer

alchy
Beiträge: 7714
Registriert: 24.02.2011, 01:34

Re: Anzeige der offenen Fenster per Script

Beitrag von alchy » 18.09.2016, 16:07

<br/> richtet aber im Gegensatz >> zu anderen Steuerzeichen keinen Schaden << an. :lol:
Und es funktioniert wenigstens unter Status & Bedienung / Systemvariable.

Schon lange bekannt, EQ-3 fühlt sich außer Stande da etwas dran zu ändern. :twisted:

Alchy

.................... 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.

norfer
Beiträge: 37
Registriert: 21.03.2014, 19:20

Re: Anzeige der offenen Fenster per Script

Beitrag von norfer » 20.09.2016, 09:18

Wieder was dazu gelernt mit den Steuerzeichen!
Ich habe das Problem mit der Auflistung auf der Startseite durch Hinzufügen von :::::: und ------Zeichen gelöst. Jetzt kommen die Meldungen alle fein säuberlich untereinander angeordnet.
Gruß
norfer

Antworten

Zurück zu „HomeMatic allgemein“