Ein DOIF für alle Geräte mit Suffix übergabe

Begonnen von SeriousPat, 23 Juli 2019, 20:37:10

Vorheriges Thema - Nächstes Thema

SeriousPat

Hallo zusammen,
ich habe folgendes DOIF:
define DI_Fenter_Rollladen DOIF (([Sensor_Fenster_Gaeste_WC:state] eq "open") and ([Rollladen_Gaeste_WC:state] eq "off")) (set Rollladen_Gaeste_WC pct 50)

Welches meinen Rollladen im GasteWC auf 50% stellt wenn das Fenster geöffnet wird.
Da ich eine Feste Namenskonvention habe, möchte ich den DOIF so umbauen das er für alle Fenstersenoren/Rollläden gilt.
Leider finde ich nicht heraus wie ich den Suffix welche ich in der Bedingung mit * angebe in das SET bekomme.

define DI_Fenter_Rollladen DOIF (([Sensor_Fenster_*:state] eq "open") and ([Rollladen_{WERT AUS DEM *}:state] eq "off")) (set Rollladen_{WERT AUS DEM *} pct 50)

Kann mir da jemand weiterhelfen?

MadMax-FHEM

#1
Bei RegEx gibt es kein "Wildcard"...

...ein "egal was dann kommt" wird so gemacht: .*

Also "Punkt-Stern"...
...Punkt: "beliebiges Zeichen"
...Stern: "beliebig viele"

Nutze allerdings kein DOIF, von daher weiß ich nicht, ob das schon alles war...

EDIT: {WERT AUS DEM *} soll was sein? Wie "gebildet" werden?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

#2
Hi,

bei set kannst Du devspec verwenden. So z.B. wie bei list erstmal zum anzeigen
list Rollladen_.*:FILTER=state=off
set Rollladen_.*:FILTER=state=off pct 50

Das spart schon mal die zweite Abfrage.
Idee: Man könnte auf den Sensor_Fenster_.* triggern und in Perl Im Namen des Gerätes Sensor_Fenster_ durch Rollladen_ tauschen.
Ein Versuch - Noch nicht komplett getestet:
Ich befürchte der trigger "open" stimmt nicht, müsstest Du mal im Eventmonitor als Beispiel erzeugen.
https://wiki.fhem.de/wiki/Event_monitor
Kann sein der muss so ähnlich aussehen "Sensor_Fenster_.*:.open.*"
Der trigger sollte klappen :) mit einem HM Sensor getestet
define n_SensorFenster Sensor_Fenster_.*:open {$NAME =~ s/Sensor_Fenster_/Rollladen_/;; fhem("set $NAME:FILTER=state=off pct 50")}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Zitat von: Otto123 am 23 Juli 2019, 22:13:07Das spart schon mal die zweite Abfrage.
Vorsicht, hier wird jedes Rollo, welches "off" ist, angesprochen, sobald ein Fenster geöffnet wird.

Die zweite Abfrage passt aber. Und, im GGsatz zur Ausgangsformel, wird auch nix gemacht, wenn ein Rollo auf "off" geht (dem man dort aber mit einem ? abhelfen könnte).

Otto123

Zitat von: Per am 30 Juli 2019, 09:55:45
Vorsicht, hier wird jedes Rollo, welches "off" ist, angesprochen, sobald ein Fenster geöffnet wird.
Da stand aber drüber Beispiel!
ZitatSo z.B. ....
;D
Das notify von mir behandelt explizit die zugehörigen Fenster, wenn die Namen konsequent stimmen.

Man muss solche Filter immer explizit, am Einfachsten mit list testen!
Und vielleicht noch um ein weiteres Kriterium (z.B. TYPE=) "schärfen".

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz