Seite 1 von 40

Anzahl offene Fenster

Verfasst: 09.06.2015, 22:04
von mctom
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

Re: Anzahl offene Fenster

Verfasst: 09.06.2015, 22:12
von nicolas-eric
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);

Re: Anzahl offene Fenster

Verfasst: 10.06.2015, 01:31
von alchy
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

Re: Anzahl offene Fenster

Verfasst: 11.06.2015, 13:26
von mctom
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

Re: Anzahl offene Fenster

Verfasst: 07.08.2015, 14:27
von Ritschi
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

Re: Anzahl offene Fenster

Verfasst: 07.08.2015, 15:01
von alchy
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

Re: Anzahl offene Fenster

Verfasst: 07.08.2015, 20:03
von Ritschi
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

Re: Anzahl offene Fenster

Verfasst: 07.08.2015, 20:08
von Homoran
Hast du ein Gewerk "Verschluss", in dem alle deine Fenster sind?

Gruß
Rainer

Re: Anzahl offene Fenster

Verfasst: 07.08.2015, 20:16
von alchy
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

Re: Anzahl offene Fenster

Verfasst: 07.08.2015, 20:28
von Ritschi
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.