Fensterkontakt Status "offen" per prowl schicken

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Qualle
Beiträge: 77
Registriert: 16.08.2013, 21:22

Re: Fensterkontakt Status "offen" per prowl schicken

Beitrag von Qualle » 28.02.2014, 11:47

Was ist denn StatusGarage für ein Gerät? Das Script berücksichtigt derzeit nur den Tür/Fensterkontakt "HM-Sec-SC" und den Drehgriffsensor "HM-Sec-RHS". Sollten andere Geräte berücksichtigt werden, kann das Script natürlich in diese Richtung erweitert werden.

Ansonsten sieht das Script eigentlich richtig aus und wenn ich das nehme, die Variablen wieder auf meine Bezeichnungen abändere und bei mir laufen lasse funktioniert es auch. Prüfe doch bitte noch mal die richtige Schreibweise sowie die Einmaligkeit der Variablen und Objektbezeichnungen.

juergen2908
Beiträge: 74
Registriert: 10.12.2013, 16:51

Re: Fensterkontakt Status "offen" per prowl schicken

Beitrag von juergen2908 » 28.02.2014, 13:23

Hallo,

das ist auch ein Fensterkontakt HM-Sec-SC, damit ich weiss ob mein Gargentor geschlossen ist oder nicht.

lg
1x HM-WDS10-TH-O, 3x HM-Sec-RHS, 7x HM-Sec-SC-2, 4x HM-LC-Sw4-WM, 2x HM-Sen-MDIR-O-2, 10x HM-LC-Sw1-FM, 1x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-RC-12, 1x HM-RC-P1, 1x HM-TC-IT-WM-W-EU, 1x HM-RC-Key3-B, 1x HM-RC-Key4-2, 1x HM-OU-CFM-Pl, 1x HM-LC-Dim1L-CV, 1x HM-LC-Dim1T-FM, 1x HM-SCI-3-FM, 1x HM-PB-6-WM55, 1x HM-PBI-4-FM, 1x HM-Sec-Key-S, 1x HM-ES-PMSw1-Pl

juergen2908
Beiträge: 74
Registriert: 10.12.2013, 16:51

Re: Fensterkontakt Status "offen" per prowl schicken

Beitrag von juergen2908 » 01.03.2014, 17:29

Hallo Qualle,

leider funktioniert das skript bei mir noch immer nicht :cry:

Bei offenen Fenster zb. Speis, bekomme ich die Medlung vom Skript im Test :Hello
Geraete abfragen im Favoritenliste
Keine offenen Fenster vorhanden!

hilft ein update von der ccu2?

stimmt bei der Objektbezeichnung irgendetwas nicht?

Bitte um Hilfe.....

LG

Jürgen
Dateianhänge
status_speis.png
1x HM-WDS10-TH-O, 3x HM-Sec-RHS, 7x HM-Sec-SC-2, 4x HM-LC-Sw4-WM, 2x HM-Sen-MDIR-O-2, 10x HM-LC-Sw1-FM, 1x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-RC-12, 1x HM-RC-P1, 1x HM-TC-IT-WM-W-EU, 1x HM-RC-Key3-B, 1x HM-RC-Key4-2, 1x HM-OU-CFM-Pl, 1x HM-LC-Dim1L-CV, 1x HM-LC-Dim1T-FM, 1x HM-SCI-3-FM, 1x HM-PB-6-WM55, 1x HM-PBI-4-FM, 1x HM-Sec-Key-S, 1x HM-ES-PMSw1-Pl

Qualle
Beiträge: 77
Registriert: 16.08.2013, 21:22

Re: Fensterkontakt Status "offen" per prowl schicken

Beitrag von Qualle » 01.03.2014, 17:55

Hallo Jürgen,

ich habe dir deinen Code jetzt mal um zusätzliche Test-Texte angereichert. Mal schauen, was wir dabei raus bekommen - dadurch sollten wir dem Fehler eigentlich näher kommen.

Code: Alles auswählen

integer test = 0;

!******************************************************
! Ab hier Script CODE - Do not change behind this line
!******************************************************
if (test == 1) {
  WriteLine("Hello");
}; 

!---- Nachricht ueber Prowl senden ----
string stdout;
string stderr;
string apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
string application = "HomeMatic";
string message;
!---- Nachricht ueber Prowl senden ---- Ende

if (dom.GetObject('VADA').State() == false) {
  if (test == 1) {
    WriteLine("Geraete abfragen im Favoritenliste");
  }; 

  ! Alle Geraete in Favoritenliste "HAUS" abfragen und auswerten.
  var myAssembly = dom.GetObject('HAUS');
  string itemID;
  integer offen = 0;

  foreach(itemID, myAssembly.EnumUsedIDs()) {
    var item = dom.GetObject(itemID);
    if (test == 1) {
      WriteLine("Geraet gefunden: " # item.Name());
    }; 
    if (item.IsTypeOf(OT_CHANNEL)) {
      var device = dom.GetObject(item.Device());

      ! Pruefen, ob Fenster offen
      ! Tuerfensterkontakte Fenster-Drehgriffsensoren 
      if ((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-Sec-RHS")) {
        if (test == 1) {
          WriteLine("Geraetetyp passt " # device.HssType());
        }; 
        var myChannel = dom.GetObject(item);
        string id;
        foreach(id, myChannel.ChnFunction()) {
          var func = dom.GetObject(id);
          if (func.Name() == "Fenster") {
            if (item.State() > 0) { 
              if (test == 1) {
                WriteLine("Status offen " # device.Name());
              }; 
              offen = offen + 1.00; 
              if (offen > 1) {message = message # "%20-%20";}
              message = message # device.Name();
            } else {
              if (test == 1) {
                WriteLine("Status geschlossen " # device.Name());
              }; 
            }
          }
        }
      } else {
        if (test == 1) {
          WriteLine("Geraetetyp unpassend " # device.HssType());
        }; 
      }
    } else {
      if (test == 1) {
        WriteLine("item ist kein Channel " # item.Name());
      }; 
    }
  } 

  ! Wenn ein Fenster offen ist, dann Meldung senden 
  if (offen > 0) { ! Fenster offen, Meldung senden
    if (test == 1) {
      WriteLine("Anzahl offene Fenster " # offen.ToString() # " - " # message);
    } else {
      !---- Nachricht ueber Prowl senden ----
      message = offen.ToString() # "%20Fenster%20geoeffnet%20-%20" # message;
      system.Exec("wget -q -O /dev/null 'http://prowl.weks.net/publicapi/add?apikey=" # apikey # "&application="# application #"&priority=0\&description="# message #"'", &stdout, &stderr);
      !---- Nachricht ueber Prowl senden ---- Ende
    }
  } else {
    if (test == 1) {
      WriteLine("Keine offenen Fenster vorhanden!");
    }
  }
} else {
  if (test == 1) {
    WriteLine("Anwesend - keine Prüfung");
  }; 
}

juergen2908
Beiträge: 74
Registriert: 10.12.2013, 16:51

Re: Fensterkontakt Status "offen" per prowl schicken

Beitrag von juergen2908 » 01.03.2014, 19:08

Hallo Qualle,
danke für die schnelle Antwort:

anbei das Ergebnis:

Hello
Geraete abfragen im Favoritenliste
Geraet gefunden: Türschloss
Geraetetyp unpassend HM-Sec-Key-S
Geraet gefunden: Licht Bad
Geraetetyp unpassend HM-LC-Sw1-FM
Geraet gefunden: Licht Küche
Geraetetyp unpassend HM-LC-Sw1-FM
Geraet gefunden: Licht Spots Aussen
Geraetetyp unpassend HM-LC-Sw1-FM
Geraet gefunden: Licht Essen
Geraetetyp unpassend HM-LC-Sw1-FM
Geraet gefunden: Licht Wohnzimmer
Geraetetyp unpassend HM-LC-Dim1T-FM
Geraet gefunden: VSchalter-Küche
Geraetetyp unpassend HM-RCV-50
Geraet gefunden: BalkontuerSchlafen
Geraetetyp passt HM-Sec-RHS
Geraet gefunden: BalkontuerKind
Geraetetyp passt HM-Sec-RHS
Geraet gefunden: FensterBad
Geraetetyp unpassend HM-Sec-SC-2
Geraet gefunden: BalkontuerWHZ
Geraetetyp unpassend HM-Sec-SC-2
Geraet gefunden: FensterHWR
Geraetetyp unpassend HM-Sec-SC-2
Geraet gefunden: Fenster-WC
Geraetetyp unpassend HM-Sec-SC-2
Keine offenen Fenster vorhanden!

Die Gerät unpassend sind die neuen Fensgterkontakte, diese werden noch nicht richtig erkannt.(Kann man aber sicher einbinden)

Mir ist hier aufgefallen im Fav_Haus ist kein Fenster Speis drinnen?


Geraet gefunden: BalkontuerKind
Geraetetyp passt HM-Sec-RHS
hab ich aufemacht und das Skript laufen lassen und auch nichtS.

HAb vorher scho eine Favoritenliste "Fav_Fenster" angelegt,wo nur die alten kontakte und rhs drinnen sind, da bekomme ich dieses ergebnis:

Hello
Geraete abfragen im Favoritenliste
Geraet gefunden: BalkontuerKind
Geraetetyp passt HM-Sec-RHS
Geraet gefunden: FesnterSpeis
Geraetetyp passt HM-Sec-RHS
Geraet gefunden: StatusGargentorS
Geraetetyp passt HM-Sec-SC
Keine offenen Fenster vorhanden!

(FensterSPeis war offen)


LG
1x HM-WDS10-TH-O, 3x HM-Sec-RHS, 7x HM-Sec-SC-2, 4x HM-LC-Sw4-WM, 2x HM-Sen-MDIR-O-2, 10x HM-LC-Sw1-FM, 1x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-RC-12, 1x HM-RC-P1, 1x HM-TC-IT-WM-W-EU, 1x HM-RC-Key3-B, 1x HM-RC-Key4-2, 1x HM-OU-CFM-Pl, 1x HM-LC-Dim1L-CV, 1x HM-LC-Dim1T-FM, 1x HM-SCI-3-FM, 1x HM-PB-6-WM55, 1x HM-PBI-4-FM, 1x HM-Sec-Key-S, 1x HM-ES-PMSw1-Pl

Qualle
Beiträge: 77
Registriert: 16.08.2013, 21:22

Re: Fensterkontakt Status "offen" per prowl schicken

Beitrag von Qualle » 01.03.2014, 19:28

Hallo,

das Skript hat grundsätzlich ein Problem den Status abzufragen, ansonsten würden noch mehr Zeilen ausgegeben. Ich schaue mir das nachher noch mal an, jetzt muss ich erst mal weg. :)

Qualle
Beiträge: 77
Registriert: 16.08.2013, 21:22

Re: Fensterkontakt Status "offen" per prowl schicken

Beitrag von Qualle » 01.03.2014, 21:08

Hallo Jürgen,

hier eine neue Version mit der Version 2 des Tür-/Fensterkontakts. Ich habe leider kein Gerät dieser Version, deshalb kann ich es nicht selbst testen. Aber die Datenpunkte sind gleich der alten Version, also sollte es eigentlich keine Probleme geben.

Das eigentliche Problem, dass deine Kontakte nicht abgefragt werden, müsste eine unterschiedliche Benennung der Gewerke sein. Das Script geht davon aus, dass die Kontakte im Gewerk "Fenster" sind und das ist bei dir wohl anders. Hierbei müsstest Du in der Codezeile

Code: Alles auswählen

if (func.Name() == "Fenster") {
das "Fenster" gegen deine Gewerksbezeichnung tauschen. Dann sollte es eigentlich funktionieren. :)

Code: Alles auswählen

integer test = 0;

!******************************************************
! Ab hier Script CODE - Do not change behind this line
!******************************************************
if (test == 1) {
  WriteLine("Hello");
}; 

!---- Nachricht ueber Prowl senden ----
string stdout;
string stderr;
string apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
string application = "HomeMatic";
string message;
!---- Nachricht ueber Prowl senden ---- Ende

if (dom.GetObject('VADA').State() == false) {
  if (test == 1) {
    WriteLine("Geraete abfragen im Favoritenliste");
  }; 

  ! Alle Geraete in Favoritenliste "HAUS" abfragen und auswerten.
  var myAssembly = dom.GetObject('HAUS');
  string itemID;
  integer offen = 0;

  foreach(itemID, myAssembly.EnumUsedIDs()) {
    var item = dom.GetObject(itemID);
    if (test == 1) {
      WriteLine("Geraet gefunden: " # item.Name());
    }; 
    if (item.IsTypeOf(OT_CHANNEL)) {
      var device = dom.GetObject(item.Device());

      ! Pruefen, ob Fenster offen
      ! Tuerfensterkontakte Fenster-Drehgriffsensoren 
      if ((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-Sec-SC-2") || (device.HssType() == "HM-Sec-RHS")) {
        if (test == 1) {
          WriteLine("Geraetetyp passt " # device.HssType());
        }; 
        var myChannel = dom.GetObject(item);
        string id;
        foreach(id, myChannel.ChnFunction()) {
          var func = dom.GetObject(id);
          if (func.Name() == "Fenster") {
            if (item.State() > 0) { 
              if (test == 1) {
                WriteLine("Status offen " # device.Name());
              }; 
              offen = offen + 1.00; 
              if (offen > 1) {message = message # "%20-%20";}
              message = message # device.Name();
            } else {
              if (test == 1) {
                WriteLine("Status geschlossen " # device.Name());
              }; 
            }
          }
        }
      } else {
        if (test == 1) {
          WriteLine("Geraetetyp unpassend " # device.HssType());
        }; 
      }
    } else {
      if (test == 1) {
        WriteLine("item ist kein Channel " # item.Name());
      }; 
    }
  } 

  ! Wenn ein Fenster offen ist, dann Meldung senden 
  if (offen > 0) { ! Fenster offen, Meldung senden
    if (test == 1) {
      WriteLine("Anzahl offene Fenster " # offen.ToString() # " - " # message);
    } else {
      !---- Nachricht ueber Prowl senden ----
      message = offen.ToString() # "%20Fenster%20geoeffnet%20-%20" # message;
      system.Exec("wget -q -O /dev/null 'http://prowl.weks.net/publicapi/add?apikey=" # apikey # "&application="# application #"&priority=0\&description="# message #"'", &stdout, &stderr);
      !---- Nachricht ueber Prowl senden ---- Ende
    }
  } else {
    if (test == 1) {
      WriteLine("Keine offenen Fenster vorhanden!");
    }
  }
} else {
  if (test == 1) {
    WriteLine("Anwesend - keine Prüfung");
  }; 
}
Und denke dran für den Prowl-Versand noch deinen API-Key einzutragen. :D

juergen2908
Beiträge: 74
Registriert: 10.12.2013, 16:51

Re: Fensterkontakt Status "offen" per prowl schicken

Beitrag von juergen2908 » 01.03.2014, 23:01

Hallo Qualle,

danke für die Anpassung.

Bei mir waren die Kontake Standard mäißig in Verschluss.
Hab natürlich proibert statt Fenster Verschluss reinzuschreiben, hat aber auch nicht funktioniert.

Schlussednlich habe ichein neues Gewerk mit dem Namen Fenster angelegt und auf einmal geht es !!! :lol: :wink:


Ich versteh nur nicht, warum es nicht mit Verschluss geht? Normal reicht es ja wenn man im (func.Name() == "Fenster") statt Fenster Verschluss einsetzt?

HHm

Danke vielmals für deine Hilfe.

LG

Jürgen
Dateianhänge
status_geht.png
1x HM-WDS10-TH-O, 3x HM-Sec-RHS, 7x HM-Sec-SC-2, 4x HM-LC-Sw4-WM, 2x HM-Sen-MDIR-O-2, 10x HM-LC-Sw1-FM, 1x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-RC-12, 1x HM-RC-P1, 1x HM-TC-IT-WM-W-EU, 1x HM-RC-Key3-B, 1x HM-RC-Key4-2, 1x HM-OU-CFM-Pl, 1x HM-LC-Dim1L-CV, 1x HM-LC-Dim1T-FM, 1x HM-SCI-3-FM, 1x HM-PB-6-WM55, 1x HM-PBI-4-FM, 1x HM-Sec-Key-S, 1x HM-ES-PMSw1-Pl

juergen2908
Beiträge: 74
Registriert: 10.12.2013, 16:51

Re: Fensterkontakt Status "offen" per prowl schicken

Beitrag von juergen2908 » 02.03.2014, 09:49

Hallo Qualle,

danke nochmals für deine Hilfe.

Jetzt hab ich noch das Problem, dass mir die RHS Kontakte bei Kippstellung 1 und bei offen 2 zurückgibt.Sprich, wenn Fenster gekippt ist bekomme ich auch eine Meldung, weil das skript > 0 ja glaub es ist offen.
Ich kann ja natürlich die rhs jetzt sagen bei kippstellung als zu anzeigen, aber das will ich nicht.

vlt, kann man da code technisch auch was machen?

LG

Jürgen
1x HM-WDS10-TH-O, 3x HM-Sec-RHS, 7x HM-Sec-SC-2, 4x HM-LC-Sw4-WM, 2x HM-Sen-MDIR-O-2, 10x HM-LC-Sw1-FM, 1x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-RC-12, 1x HM-RC-P1, 1x HM-TC-IT-WM-W-EU, 1x HM-RC-Key3-B, 1x HM-RC-Key4-2, 1x HM-OU-CFM-Pl, 1x HM-LC-Dim1L-CV, 1x HM-LC-Dim1T-FM, 1x HM-SCI-3-FM, 1x HM-PB-6-WM55, 1x HM-PBI-4-FM, 1x HM-Sec-Key-S, 1x HM-ES-PMSw1-Pl

Qualle
Beiträge: 77
Registriert: 16.08.2013, 21:22

Re: Fensterkontakt Status "offen" per prowl schicken

Beitrag von Qualle » 02.03.2014, 11:38

Hallo Jürgen,

natürlich ist das auch möglich, bei den Drehgriffen nur den offenen Zustand zu melden. Hierzu muss nur dieser Gerätetyp gesondert abgefragt werden. Bei den Tür-/Fensterkontakten gibt es nur den Zustand geschlossen=0 und offen=1, bei den Drehgriffsensoren gibt es geschlossen=0, gekippt=1 und offen=2. Ich habe das Script mal dahingehend abgeändert. Weiterhin habe ich in diesem Script mal die Prüfung des Gewerks "Fenster" rausgeschmissen, weil die Prüfung über die Favoritenliste und das Gewerk eigentlich doppelt ist und es dadurch ja nur umständlicher macht. Da sich die Favoritenliste in meinen Augen besser pflegen lässt bevorzuge ich diese. (Du kannst das Gewerk damit wieder löschen - wenn du es bestehen lässt ist das für das Script aber auch kein Unterschied.)

Code: Alles auswählen

integer test = 0;

!******************************************************
! Ab hier Script CODE - Do not change behind this line
!******************************************************
if (test == 1) {
  WriteLine("Hello");
}; 

!---- Nachricht ueber Prowl senden ----
string stdout;
string stderr;
string apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
string application = "HomeMatic";
string message;
!---- Nachricht ueber Prowl senden ---- Ende

if (dom.GetObject('VADA').State() == false) {
  if (test == 1) {
    WriteLine("Geraete abfragen im Favoritenliste");
  }; 

  ! Alle Geraete in Favoritenliste "HAUS" abfragen und auswerten.
  var myAssembly = dom.GetObject('HAUS');
  string itemID;
  integer offen = 0;

  foreach(itemID, myAssembly.EnumUsedIDs()) {
    var item = dom.GetObject(itemID);
    if (test == 1) {
      WriteLine("Geraet gefunden: " # item.Name());
    }; 
    if (item.IsTypeOf(OT_CHANNEL)) {
      var device = dom.GetObject(item.Device());

      ! Pruefen, ob Fenster offen
      ! Tuerfensterkontakte 
      if ((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-Sec-SC-2")) {
        if (test == 1) {
          WriteLine("Geraetetyp passt " # device.HssType());
        }; 
        if (item.State() > 0) { 
          if (test == 1) {
            WriteLine("Status offen " # device.Name());
          }; 
          offen = offen + 1.00; 
          if (offen > 1) {message = message # "%20-%20";}
          message = message # device.Name();
        } else {
          if (test == 1) {
            WriteLine("Status geschlossen " # device.Name());
          }; 
        }
      } else {
        !Fenster-Drehgriffsensoren 
        if (device.HssType() == "HM-Sec-RHS") {
          if (test == 1) {
            WriteLine("Geraetetyp passt " # device.HssType());
          }; 
          if (item.State() > 1) { 
            if (test == 1) {
              WriteLine("Status offen " # device.Name());
            }; 
            offen = offen + 1.00; 
            if (offen > 1) {message = message # "%20-%20";}
            message = message # device.Name();
          } else {
            if (test == 1) {
              WriteLine("Status geschlossen " # device.Name());
            }; 
          }
        } else {
          if (test == 1) {
            WriteLine("Geraetetyp unpassend " # device.HssType());
          };
      	} 
      }
    } else {
      if (test == 1) {
        WriteLine("item ist kein Channel " # item.Name());
      }; 
    }
  } 

  ! Wenn ein Fenster offen ist, dann Meldung senden 
  if (offen > 0) { ! Fenster offen, Meldung senden
    if (test == 1) {
      WriteLine("Anzahl offene Fenster " # offen.ToString() # " - " # message);
    } else {
      !---- Nachricht ueber Prowl senden ----
      message = offen.ToString() # "%20Fenster%20geoeffnet%20-%20" # message;
      system.Exec("wget -q -O /dev/null 'http://prowl.weks.net/publicapi/add?apikey=" # apikey # "&application="# application #"&priority=0\&description="# message #"'", &stdout, &stderr);
      !---- Nachricht ueber Prowl senden ---- Ende
    }
  } else {
    if (test == 1) {
      WriteLine("Keine offenen Fenster vorhanden!");
    }
  }
} else {
  if (test == 1) {
    WriteLine("Anwesend - keine Prüfung");
  }; 
}

Antworten

Zurück zu „HomeMatic allgemein“