[GELÖST]Prüfen ob ein von X Fenstern geöffnet

Begonnen von Tommi ratlos, 05 November 2017, 11:05:13

Vorheriges Thema - Nächstes Thema

Tommi ratlos

Hallo zusammen,

ich suche nach einer Möglichkeit bei 3x HM-SEC-SCO an einem Thermostat festzustellen, ob eines der Fenster offen ist.
Der Thermostat erkennt das, aber wie kann ich das in myutils99.pm verwenden?


Es Gibt:
HM_SEC_<NAME>_Fenster_1
HM_SEC_<NAME>_Fenster_2
HM_SEC_<NAME>_Tuer
Der Code ist natürlich nicht richtig

my $r_window = (ReadingsVal("HM_SEC_".$name."_".*, "state", ""));



Oder wie kann ich analog zu einem Notify "HM_RT_<NAME>_WindowRec:trigLast" verwenden.


Stehe gerade auf dem Schlauch

Gruß
Thomas
Pi 3 CUNX868 mit 433 Pigator.

marvin78

Einfach: structure mit allen 3 Fenstern und diese auswerten.


Etwas schwieriger: Perl, devspec2array, forach.

Thorsten Pferdekaemper

Hi,
wenn es immer nur genau die drei sind, dann kann man erst einmal die drei "fest verdrahtet" per ReadingsVal abfragen und die Ergebnisse mit "or" verknüpfen.
Wenn das ganze allgemein sein soll, dann wie schon gesagt erst einmal mit devspec2array die passenden Namen ermitteln und für jedes davon ReadingsVal aufrufen.
Gruß,
   Thorsten
FUIP

Tommi ratlos

Hallo,

es geht um mehrere Räume mit je ein bis vier Fensterkontakten.
Ich lese mich gerade in "devspec2array" ein, hört sich vielversprechend an.

Gruß
Thomas
Pi 3 CUNX868 mit 433 Pigator.

CoolTux


devspec2array("(FensterKontakt.*):FILTER=room=Wohnzimmer")


Findet alle Devices mit Anfangsnamen Fensterkontakt im Raum Wohnzimmer.
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

Tommi ratlos

Hallo,

habe es jetzt so Gelöst

my $name = "Bad";
my @winopen = devspec2array("TYPE=CUL_HM:FILTER=model=HM-SEC-SCo:FILTER=NAME=.*_".$name."_.*:FILTER=state!=closed");
if(@winopen > 0){
    Log3(undef, 1, "AUF");
}


Danke
Thomas
Pi 3 CUNX868 mit 433 Pigator.

Thorsten Pferdekaemper

Hi,
funktioniert das wirklich? Laut Doku zu devspec2array gibt es das Argument zurück, wenn nichts gefunden wird. D.h. es steht in @winopen immer was drin. Ich habe das allerdings nicht ausprobiert, es ist mir nur in der Doku aufgefallen.
Gruß,
   Thorsten
FUIP

Tommi ratlos

Hi,

ja geht  ;)
Was sollte denn dann Drinstehen?

Gruß
Thomas
Pi 3 CUNX868 mit 433 Pigator.

CoolTux

Eigentlich sollte dann gar nichts drin stehen.

Eine mögliche Anwendung wäre eine Funktion in einer 99_myUtils

sub statusFensterOffen($) {

    my $contactSensorDevice     = shift;
    $contactSensorDevice        = 'FensterKontakt.*' if( not defined($contactSensorDevice) );
   
    my @monitored=devspec2array("($contactSensorDevice):FILTER=STATE!=closed");
my $cnt_devs=@monitored;
my $i = 0;
my $msgtext = "";
foreach(@monitored) {
$msgtext .= AttrVal($_,"alias",$_);
if ($i < $cnt_devs - 2) {
  $msgtext .= ", ";
}
if ($i == $cnt_devs - 2) {
  $msgtext .= " und ";
}
$i++;
}

return $msgtext if ($cnt_devs > 0);
}


Kann man ja noch Anpassen/Erweitern
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

Thorsten Pferdekaemper

Hi,
siehe hier:
https://wiki.fhem.de/wiki/DevelopmentModuleAPI#devspec2array
Zitat
Sollte keine Definition auf die übergebene Spezifikation passen, so wird $devspec als einziges zurückgegeben. Dieser Mechanismus ist aus historischen Gründen so gewählt um die Funktion devspec2array() transparent in Module einzufügen ohne große Änderungen im Code durchführen zu müssen. Daher ist es notwendig im Falle der Rückgabe eines einzelnen Elements dies nochmals auf Existenz in %defs zu prüfen.
Gruß,
   Thorsten
FUIP

CoolTux

Kann ich aus der Praxis raus nicht bestätigen. Aber im Code habe ich nun nicht geschaut.
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

Tommi ratlos

Hallo nochmal,

Geht nicht:

unless (@winopen){
}


Geht:

if(@winopen > 0){
}

if(@winopen == 0){
}


Gruß
Thomas
Pi 3 CUNX868 mit 433 Pigator.

CoolTux


unless ( not defined(@winopen) ){
}

So sollte es eigentlich gehen.
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

Tommi ratlos

Hmm


Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at ./FHEM/99_myUtils.pm line 31.


Gruß
Thomas
Pi 3 CUNX868 mit 433 Pigator.

CoolTux

#14
Ich Dussel. Habe mich hinreißen lassen. Mom


Nachtrag. Bleib Mal beim if, kann gerade nicht denken  ;D
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