Anzahl offene Fenster

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

mctom
Beiträge: 144
Registriert: 03.10.2010, 12:59

Anzahl offene Fenster

Beitrag von mctom » 09.06.2015, 22:04

Hallo zusammen,

ich würde gerne mit einem Script die Anzahl der offenen Fenster ermitteln.

Ein ersten Teil des Script habe ich mir zusammengesucht:

Code: Alles auswählen

var myAssembly = dom.GetObject("Verschluss");
string itemID;
integer zaehler;
zaehler = 0;
foreach(itemID, myAssembly.EnumUsedIDs())
{
  var item = dom.GetObject(itemID);
  if 
(item.IsTypeOf(OT_CHANNEL))
  {
    var device = dom.GetObject(item.Device());
    if (device.HssType() == "HM-Sec-SC")
    {
      if (item.State() == 1)
      {
        zaehler = zaehler + 1.00;
      }
    }
  }
}
WriteLine(zaehler);
Dies funktioniert auch ganz gut.
Allerdings würde ich nun auch gerne den Drehgriffkontakt HM-Sec-RHS mit aufnehmen.
Allerdings bekomme ich das nicht hin.
Ich habe die Schleife:

Code: Alles auswählen

if (device.HssType() == "HM-Sec-RHS")
    {
      if (item.State() == 1)
      {
        zaehler = zaehler + 1.00;
      }
    }
mit eingebaut. Dies funktioniert allerdings nicht.
Hat jemand einen Tip für mich ?

Gruß

MIchael

nicolas-eric
Beiträge: 3302
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

Re: Anzahl offene Fenster

Beitrag von nicolas-eric » 09.06.2015, 22:12

Einem Kumpel hab ich das Script hier aus dem Forum in seiner CCU eingefügt, funktioniert super.

Code: Alles auswählen

object sec = dom.GetObject("Verschluss");
string itemId;
integer offen =0;
foreach(itemId, sec.EnumUsedIDs()) {
var item = dom.GetObject(itemId);
if (item.IsTypeOf(OT_CHANNEL)) {
var dev = dom.GetObject(item.Device());
var hssType = item.HssType();
if((dev.HssType()=="HM-Sec-RHS") || (dev.HssType()=="HM-Sec-SC") || (dev.HssType()=="HM-Sec-SC-2")|| (dev.HssType()=="HM-Sec-Sco")) {
var status = item.DPByHssDP("STATE").Value();
if(status.Value()) {
if (status > 0 ) { offen = offen + 1; }
}
}
}
}
WriteLine("Offen: " # offen);

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

Re: Anzahl offene Fenster

Beitrag von alchy » 10.06.2015, 01:31

Dein gepostetes Script kann man um einen HSS Typ erweitern, das sieht dann ungefähr so aus:

Code: Alles auswählen

var myAssembly = dom.GetObject("Verschluss");
string itemID;
integer zaehler;
zaehler = 0;
foreach(itemID, myAssembly.EnumUsedIDs())
{
  var item = dom.GetObject(itemID);
  if
(item.IsTypeOf(OT_CHANNEL))
  {
    var device = dom.GetObject(item.Device());
    if ( (device.HssType() == "HM-Sec-SC" ) || (device.HssType() == "HM-Sec-RHS" ) )
    {
      if (item.State() == 1)
      {
        zaehler = zaehler + 1.00;
      }
    }
  }
}
WriteLine(zaehler);
die Variante:

Code: Alles auswählen

if (item.State() == 1)
birgt aber so seine Fallstricke. :shock:

Die RHS haben 0 oder 1 oder 2 als Status.
womit ==1 funktioniert, solange die RHS nur gekippt sind. Alles klar?

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.

mctom
Beiträge: 144
Registriert: 03.10.2010, 12:59

Re: Anzahl offene Fenster

Beitrag von mctom » 11.06.2015, 13:26

Hallo zusammen,

vielen Dank für die Hilfe.
Funktioniert soweit alles.

Ich habe jetzt !=0 genutzt. So bekomm ich sowohl gekippte als auch offene Fenster.

Gruß

MT

Ritschi
Beiträge: 587
Registriert: 07.11.2012, 08:02
Wohnort: Schweiz, Graubünden
Hat sich bedankt: 25 Mal
Danksagung erhalten: 9 Mal

Re: Anzahl offene Fenster

Beitrag von Ritschi » 07.08.2015, 14:27

Hallo

Ich möchte dieses Script auch gerne einsetzen.
Nun meine Frage:
Wo, oder wie findet denn die Ausgabe der Anzahl offenen Fenster statt?
Muss ich da eine Variable mit einem gewissen Namen anlegen?

Gruss
Ritschi
Raspberry-Matic auf Tinkerboard, Mediola Gateway V3, Mediola Gateway V2, iobroker, Homebridge-homematic auf Mac, Homeassistant

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

Re: Anzahl offene Fenster

Beitrag von alchy » 07.08.2015, 15:01

Die ^^ Scripte schreiben nur die Anzahl der geöffneten Fenster auf den Bildschirm, wenn du das Script im Script Executer oder unter Script testen ausführst.

Wenn Du diese Anzahl in eine Systemvariable speichern willst, dann musst du eine Systemvariable Zahl oder Zeichenkette anlegen und die WriteLine Zeile durch die Folgende ersetzen.

Code: Alles auswählen

dom.GetObject("NAME DEINER SYSvar").State(zaehler);
bzw. bei dem von nicolas-eric geposteten Script zwingend Zeichenkette

Code: Alles auswählen

dom.GetObject("NAME DEINER SYSvar").State(offen);
Natürlich im Script "NAME DEINER SYSvar" durch den Namen deiner Systemvariable.
Beides machbar, es gibt aber massig andere Scripte.

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.

Ritschi
Beiträge: 587
Registriert: 07.11.2012, 08:02
Wohnort: Schweiz, Graubünden
Hat sich bedankt: 25 Mal
Danksagung erhalten: 9 Mal

Re: Anzahl offene Fenster

Beitrag von Ritschi » 07.08.2015, 20:03

Hi Alchy

Danke für die Hilfe.

Habe es so versucht:

Code: Alles auswählen

var myAssembly = dom.GetObject("Verschluss");
string itemID;
integer zaehler;
zaehler = 0;
foreach(itemID, myAssembly.EnumUsedIDs())
{
  var item = dom.GetObject(itemID);
  if
(item.IsTypeOf(OT_CHANNEL))
  {
    var device = dom.GetObject(item.Device());
    if ( (device.HssType() == "HM-Sec-SC" ) || (device.HssType() == "HM-Sec-RHS" ) )
    {
      if (item.State() == 0)
      {
        zaehler = zaehler + 1.00;
      }
    }
  }
}

dom.GetObject("Anzahl-Fenster-offen").State(zaehler);
Klappt aber leider nicht, die Variable "Anzahl-Fenster-offen" bleibt immer bei 0.
Ist es möglich dass da noch ein Fehler drin ist?

Gruss
Ritschi
Raspberry-Matic auf Tinkerboard, Mediola Gateway V3, Mediola Gateway V2, iobroker, Homebridge-homematic auf Mac, Homeassistant

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Anzahl offene Fenster

Beitrag von Homoran » 07.08.2015, 20:08

Hast du ein Gewerk "Verschluss", in dem alle deine Fenster sind?

Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

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

Re: Anzahl offene Fenster

Beitrag von alchy » 07.08.2015, 20:16

Abgesehen von dem durchaus berechtigen Frage nach dem Gewerk von Homoran.

1. Das Script gibt dir die Anzahl der geschlossenen Fenster aus, wenn meine müden Augen das richtig deuten.
2. es schaut nur nach HM-Sec-SC und HM-Sec-RHS


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.

Ritschi
Beiträge: 587
Registriert: 07.11.2012, 08:02
Wohnort: Schweiz, Graubünden
Hat sich bedankt: 25 Mal
Danksagung erhalten: 9 Mal

Re: Anzahl offene Fenster

Beitrag von Ritschi » 07.08.2015, 20:28

Ja, im Gewerk Verschluss habe ich alle HM-Sec-SC und HM-Sec-RHS.

Habe das Skript falsch gepostet.

Code: Alles auswählen

if (item.State() != 0)
Ich denke so wäre es richtig.

Allerdings müsse mir das Skript das ich zuvor gepostet habe ja noch eine Höhere Zahl geben, da ich nur ein Fenster im Moment offen habe.

Funktioniert allerdings immer noch nicht.
Raspberry-Matic auf Tinkerboard, Mediola Gateway V3, Mediola Gateway V2, iobroker, Homebridge-homematic auf Mac, Homeassistant

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“