[gelöst] DOIF mit Regex für WLan

Begonnen von ch.eick, 26 Juni 2020, 15:38:07

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo zusammen,
ich habe da mal wieder etwas spezielles und haetter gerne eine Rueckmeldung, wenn das einfacher geht...
In diesem reading steht folgendes

[ZentrumRepeater02:mac_24_62_AB_00_5C_D5]           PC-24-62-AB-00-5C-D5 (WLAN, 72 / 50 Mbit/s, -40)

mit folgender Regex und einem Test als FHEM command bekomme ich den Wert -40 in der Variablen $1 zurueck

{ my $x=ReadingsVal("ZentrumRepeater02","mac_24_62_AB_00_5C_D5","inactive") ;; $x =~ /, (-?\d+)\)/i;; $1 }
==> -40


Und nun zum DOIF, bei dem ich auf den Pegel im WLan reagieren moechte und diesen deshalb mit der Regex zuerst extrahiere.

defmod App_WLan DOIF
################################################################################################################\
## 1 Ist der Empfang des guestWlan schlechter als -70 db, aktiviere den Repeater\
##  \
( [10:00-23:00] and\
   [rg_App_Annika] eq "zuhause" and\
   [ZentrumRepeater01:box_guestWlan] eq "off"\
)\
(\
   {my $x = ReadingsVal("ZentrumRepeater02","mac_24_62_AB_00_5C_D5","inactive");;\
       $x =~ /s, (-?\d+)/i ;;\
     \
    if ( $x ne "inactive" and $1 gt -70 ) { fhem("set ZentrumRepeater01 guestWlan on") } }\
)\
################################################################################################################\
## 2 In der Nacht oder bei Abwesenheit das guestWlan am Repeater wieder abschalten\
##\
DOELSEIF\
(([23:00-10:00] or [rg_App_Annika] ne "zuhause") and\
   [ZentrumRepeater01:box_guestWlan] eq "on"\
)\
(set ZentrumRepeater01 guestWlan off)\

attr App_WLan DbLogExclude .*
attr App_WLan alias App_WLan
attr App_WLan cmdState guestWlan für Terrasse ON|guestWLan für Terrasse OFF
attr App_WLan do always
attr App_WLan event-on-change-reading .*


Es geht nun um cmd_1, in dem ich den WLan Pegel extrahiere oder auch ein inactive erhalte.
Kann ich das auch etwas einfacher direkt in der DOIF Bedingung hinbekommen? Denke ich wieder zu kompliziert?

Der Hintergrund ist, dass anhand des Pegels der Handyverbindung erkannt werden kann, ob sich das Handy auf der Terrasse befindet. In diesem Fall wird nun an einem zweiten Repeater das Appartment WLan zusaetzlich aktiviert. Ab 23:00 Uhr oder bei Abwesenheit schaltet sich das zusaetzliche WLan dann wieder ab.

Viele Gruesse
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Damian

Das sollte mit dem Filter funktionieren: https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen

hier:

([ZentrumRepeater02:mac_24_62_AB_00_5C_D5:", (-?\d+)\)"] > -70)...

evtl. reicht schon Filtern nach Zahlen:

([ZentrumRepeater02:mac_24_62_AB_00_5C_D5:d] > -70)...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ch.eick

#2
Hallo Damian,
vielen Dank für den Tip in die richtige Richtung. FHEM und auch DOIF ist echt super mächtig und auch wenn man schon viel liest, findet man nicht alle Möglichkeiten.

Hier nun die Loesung mit DOIF_Filtern_nach_Zahlen


defmod App_WLan DOIF ################################################################################################################\
## 1 Ist der Empfang des guestWlan schlechter als -70 db, aktiviere den Repeater\
##  \
( [10:00-23:00] and\
   [rg_App_Annika] eq "zuhause" and\
   [ZentrumRepeater01:box_guestWlan] eq "off" and\
   [ZentrumRepeater02:mac_34_2D_0D_4A_EB_61:"s, -?(\d+)"] > 71\
)\
(set ZentrumRepeater01 guestWlan on)\
\
################################################################################################################\
## 2 Bei Abwesenheit oder bei Aufenthalt im Haus, das guestWlan am Repeater wieder abschalten\
##\
DOELSEIF\
( [10:00-23:00] and\
   [ZentrumRepeater01:box_guestWlan] eq "on" and\
  ([ZentrumRepeater01:mac_34_2D_0D_4A_EB_61:"s, -?(\d+)"] > 70 or\
   [rg_App_Annika] ne "zuhause" )\
)\
(set ZentrumRepeater01 guestWlan off)\
\
################################################################################################################\
## 3 In der Nacht das guestWlan am Repeater wieder abschalten\
##\
DOELSEIF\
( [23:00-10:00] and\
   [ZentrumRepeater01:box_guestWlan] eq "on"\
)\
(set ZentrumRepeater01 guestWlan off)
attr App_WLan DbLogExclude .*
attr App_WLan alias App_WLan
attr App_WLan cmdState guestWlan für Terrasse ON|guestWLan für Terrasse OFF
attr App_WLan do always
attr App_WLan event-on-change-reading .*


Gruss
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick