FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: kafi am 20 Dezember 2015, 18:05:11

Titel: Hilfe: Notify vereinfachen
Beitrag von: kafi am 20 Dezember 2015, 18:05:11
Hallo,

ich habe mich seit Stunden duch Forum und Internet gearbeitet aber ohne eine Konversation mit Experten scheint bei mit der Groschen nicht zu fallen :( ...

Problem Level 1:
Ich habe Aktoren ("WZ01", "WZ02","WZxy") und jeweils einen Dummy ("WZ01_Status", "WZ02_Status,"WZxy_Status") zum Schalten auf einem Floorplan ("Beleuchtungssteuerung")

Bisher schaut mein Notify folgendermaßen aus:

define n_WZxy_an_aus notify .* { if ($NAME eq "WZ01_Status") {fhem("set WZ01 $EVENT")};; if ($NAME eq "WZ02_Status") {fhem("set WZ02 $EVENT")};; if ($NAME eq "WZ03_Status") {fhem("set WZ03 $EVENT")};; if ($NAME eq "WZ04_Status") {fhem("set WZ04 $EVENT")} }

Ich vermute ich müsste in Perl abtauchen, die Variable $Name nach den Ziffern "xy" scannen oder zerlegen, dieses Ergebnis einer Variable "$MeineVariable" zuweisen und im set-Befehl irgendwie mit "set WZ+$Meine Variable $EVENT" wieder zusammenbauen.
Mein Problem (da Anfanger): mir ist bisher nicht nicht klar geworden, wie ich mit welchem Perlausdruck aus der $NAME-Variable des Dummys die zwei Ziffern "WZxy_Status" der das Event "on" generiert, extrahiere und an den "set"-Befehl in der Form "set WZxy on" weitergebe.

Problem Level 2:
Mein Vorhaben zur Beleuchtungssteuerung ist noch etwas komplexer als das was ich bisher hinbekommen habe: Für meine 6 Aktoren (bisher nur 4 aktiv, sind Osram Lightify GU10) möchte ich neben der bisher (wohl eher umständlich realisierten) einfachen an/aus-Steuerung auch noch jeweils 4 Presets als weitere Dummys auf dem Floorplan realisieren (Lichtstäre 50% weiß, Lichtstärke 100% weiß, Lichtstärke 50%gelb, Lichtstärke 100% gelb). Einen groben Entwurf des Floorplans hätte ich schon mal (wenigtens das habe ich schon begriffen  :P)
Mein Lösungsansatz wäre bisher wie folgt:
- Dummy "WZ01_Q1" (Dummy 1.Quadrant) setzt wenn "on" den State von WZ01_Status (Zentrum) auf "weiß50%". Wenn Dummy "WZ01_Status" diesen Status erhält muss dieser den Aktor WZ01 mit zwei set Befehlen (Helligkeit und Farbe) beschicken
analog:
- Dummy "WZ01_Q2" setzt Dummy "WZ01_Status" auf "gelb50" ...
analog:
- Dummy "WZ02_Q2 setzt Dummy "WZ02-Status" auf "gelb50" ...

Ich hoffe ich habe mit meiner Beschreibung alle Klarheiten beseitigt.
Wie bereits beschrieben, mein Kernproblem was ich bisher für mich nicht lösen konnte ist das auslesen des - ich nenns mal - Identifier xy aus den Dummy-Namen und das darauf aufbauenende Befehls-Setting für die Aktorenansteuerung.
Wer hat Ideen, Vorschläge, Hinweise...?

Titel: Antw:Hilfe: Notify vereinfachen
Beitrag von: viegener am 20 Dezember 2015, 21:21:06
Zitat von: kafi am 20 Dezember 2015, 18:05:11
Hallo,

ich habe mich seit Stunden duch Forum und Internet gearbeitet aber ohne eine Konversation mit Experten scheint bei mit der Groschen nicht zu fallen :( ...

Problem Level 1:
Ich habe Aktoren ("WZ01", "WZ02","WZxy") und jeweils einen Dummy ("WZ01_Status", "WZ02_Status,"WZxy_Status") zum Schalten auf einem Floorplan ("Beleuchtungssteuerung")

Bisher schaut mein Notify folgendermaßen aus:

define n_WZxy_an_aus notify .* { if ($NAME eq "WZ01_Status") {fhem("set WZ01 $EVENT")};; if ($NAME eq "WZ02_Status") {fhem("set WZ02 $EVENT")};; if ($NAME eq "WZ03_Status") {fhem("set WZ03 $EVENT")};; if ($NAME eq "WZ04_Status") {fhem("set WZ04 $EVENT")} }

Ich vermute ich müsste in Perl abtauchen, die Variable $Name nach den Ziffern "xy" scannen oder zerlegen, dieses Ergebnis einer Variable "$MeineVariable" zuweisen und im set-Befehl irgendwie mit "set WZ+$Meine Variable $EVENT" wieder zusammenbauen.
Mein Problem (da Anfanger): mir ist bisher nicht nicht klar geworden, wie ich mit welchem Perlausdruck aus der $NAME-Variable des Dummys die zwei Ziffern "WZxy_Status" der das Event "on" generiert, extrahiere und an den "set"-Befehl in der Form "set WZxy on" weitergebe.


Bevor ich länger versuche Level 2 zu verstehen versuche ich mal bei Level 1 zu helfen:

Also Du hast in $NAME so etwas wie "WZxy_Status" und möchtest daraus WZxy machen:


my $wztmp = $NAME;
$wztmp =~ /^(WZ..)_.*$/;
my $wzname = $1;


Danach befindet sich in $wzname der gewünchste Teil. Es gibt natürlich hundert Möglichkeiten das kürzer oder anders zu machen, je nach Geschmack...

Johannes
Titel: Antw:Hilfe: Notify vereinfachen
Beitrag von: stromer-12 am 20 Dezember 2015, 21:39:06
Etwas kürzer wäre:

my ($wzname,undef) = split("_",$NAME);