Prüfen der Türen und Fenster

Begonnen von Eddy, 08 November 2017, 09:09:49

Vorheriges Thema - Nächstes Thema

Eddy

Hallo Leute,

ich bin seit einigen Wochen dabei mein SmartHome weiter auszubauen und habe mittlerweile eine eigene kleine Alarmanlage am laufen. Jetzt im täglichen Betrieb fallen natürlich viele Verbesserungsmöglichkeiten auf. Aktuell möchte ich beim aktivieren alle Türen und Fenster auf deren Status abfragen und dies per Pushover an mein Smartphone schicken. Aktuell geht es hier ledeglich um die Routine zur Ermittlung der Türen und Fenster. Den Rest bekomme ich hin.

Alle states die nicht "closed" entsprechen sollen per Pushover gesendet werden.
Mein Beispiel schreibt erstmal nur in die Log Datei damit ich sehe, dass das ganze Konstrukt funktioniert.

sub validateDoorAndWindow(){
#my @devices = devspec2array("TYPE=CUL_HM");
my @devices = devspec2array("TYPE=CUL_HM");
#my $msgText = "";
#my $numberOfDevices = 0;

foreach(@devices)
{
my $name .= AttrVal($_,"NAME",$_)." ";
my $state .= ReadingsVal($_,"state",$_)." ";
if ($name =~ /^Fenster/ or $name =~/^Tuer/){
if ($state =~ /open/){
Log 1, ("Name: ($name), Value: ($state)");
}
}
}


Folgende Fragen:
1. kann ich hier weitere Bedingungen mitgeben?
my @devices = devspec2array("TYPE=CUL_HM");

2. Ich finde leider keine Beschreibung der Funktionen. Kann mir jemand im Detail die einzelnen Parameter erklären?
my $name .= AttrVal($_,"NAME",$_)." ";

In meiner Logdatei sind aktuell von jeder Tür und von jedem Fenster 3 Einträge. Das kann ich mir nicht erklären. Weiß jemand warum?

CoolTux

Du kannst das ganze in der Commandline von FHEMWEB testen. Eine Funktionsbeschreibung brauch es, die Funktion beschreibt sich selbst anhand des Codes.


{ devspec2array("TYPE=CUL_HM") }

Gibt die Anzahl der Arrayeinträge an und somit die Anzahl gefundener Geräte vom TYPE CUL_HM
Das sind aber eine Menge.
Versuche mal nach model zu suchen

{ devspec2array("model=HM-SEC-SC:FILTER=STATE!=closed") }

Gibt eine Anzahl aller Fensterkontakte mit dem Status ungleich closed
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DeeSPe

Du könntest Dir auch mal das Modul HOMEMODE ansehen, dort ist auch eine solche Funktion bereits integriert.

Ansonsten, wie schon gesagt, kann man über die Angabe der richtigen devspec alles vorfiltern.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Eddy

Ok, funktioniert super. Vielen Dank erstmal!

HomeMode werde ich mir bei Gelegenheit mal genauer ansehen. Scheint recht mächtig zu sein.

skydns

#4
Bei mir sieht das ganze so aus:

sub FHTTK_status {
my @fhttks = devspec2array("TYPE=CUL_HM");
my @wopen = ();
foreach(@fhttks) {
  my $fhttk_window = ReadingsVal($_, "state", "nA");
  push (@wopen,$_) if ($fhttk_window eq "open" );
}
my $num_wopen = @wopen;
my $resultstring='';
if ( $num_wopen gt 0 ) {
  $resultstring="Folgende Türen sind noch offen:\n\n";
  foreach(@wopen) {
  my $ALIASNAMEPUSH = AttrVal($_ ,'alias',$_ );
   $resultstring.="- ".$ALIASNAMEPUSH."\n";
   Log 3, "TÜRKONTAKTSTATUS: ". $ALIASNAMEPUSH ." ist noch offen";
  }
} else {
  $resultstring="Alle Türen sind derzeit geschlossen.";
}
return $resultstring;
}



Du kannst mal nach FHTTK im FHEM-Wiki suchen, das Skript habe ich dann an meine Bedürfnisse angepasst.
Funktioniert einwandfrei.

In Verbindung mit Anwesenheitserkennung und dem Modul Roommates kannst du dann den Status auch noch mal prüfen lassen, wenn alle das Haus verlassen haben.

Gruß Marco
NUC - CUL868Mhz V3 culfwV1.67 - Zigbee2MQTT Sonoff 2.0 - Ubuntu 22.04 - FHEM 6.1 zum Schalten von Licht+Steckdosen (Sonoff,Shelly,MQTT,Tasmota,Zigbee) und Überwachung von diversen Homematic/Homematic IP Kontakten/Sensoren mit Anwesenheitserkennung