FHEM Forum

FHEM => Sonstiges => Thema gestartet von: dt2510 am 25 Januar 2021, 09:47:17

Titel: Problem mit eventMap
Beitrag von: dt2510 am 25 Januar 2021, 09:47:17
Meine Regex Kenntnisse sind leider sehr dürftig und ich bräuchte daher Hilfe bei einer eventMap Definition. Aktuell sieht sie so aus

{
  usr=>{"^pct(.*)"=>'dim$1'},
  fw=>{"^pct(.*)"=>"pct"}
}


Hintergrund: Mein Rolladenaktor (Fibaro ZWave) kennt das Reading pct nicht, muss aber auf ein "set <device> pct xxx" reagieren. Mit eventMap funktioniert alles im Bereich 0-99%. Der Aktor macht bei 100% (> "dim 100") leider gar nichts, weshalb ich 100 durch 99 ersetzen müsste.
Titel: Antw:Problem mit eventMap
Beitrag von: rudolfkoenig am 25 Januar 2021, 18:05:41
Bin nicht sicher, ob es reicht, aber bei mir schaut Folgendes passend aus:

fhem> attr d eventMap { usr=>{"^pct100\$" => "dim99", "^pct(.{1,2})\$"=>'dim$1'},fw=>{"^pct(.*)"=>"pct"} }
fhem> info timer
fhem> set d pct100
2021-01-25 18:03:07.812 dummy d dim99
fhem> set d pct99
2021-01-25 18:03:12.562 dummy d dim99
fhem> set d pct98
2021-01-25 18:03:20.701 dummy d dim98
fhem> set d pct01
2021-01-25 18:03:23.716 dummy d dim01
fhem> set d pct1
2021-01-25 18:03:25.797 dummy d dim1
Titel: Antw:Problem mit eventMap
Beitrag von: dt2510 am 26 Januar 2021, 08:05:45
Hat fast funktioniert ;)

Ich musste es folgendermaßen anpassen:

{
  usr=>{"^pct 100\$" => "dim 99", "^pct(.*)"=>'dim$1'},
  fw=>{"^pct(.*)"=>"pct"}
}


Aber jetzt funktioniert es ... danke für den Schubs in die richtige Richtung !!
Titel: Antw:Problem mit eventMap
Beitrag von: dt2510 am 26 Januar 2021, 08:27:09
Ein seltsames Phänomen hab' ich allerdings noch ... ein Rolladen reagiert anders. Hier mal der Auszug aus dem Alexa log:

[26.1.2021, 08:17:18] [FHEM]   executing: http://127.0.0.1:8084/fhem?cmd=set%20FGR222_ID17%20pct%20100&XHR=1
[26.1.2021, 08:17:59] [FHEM]   executing: http://127.0.0.1:8084/fhem?cmd=set%20FGR222_ID18%20pct%20100&XHR=1


Und der Auszug aus dem Logfile:

2021.01.26 08:17:18 3: ZWave set FGR222_ID17 dim 100
2021.01.26 08:18:00 3: ZWave set FGR222_ID18 dim 99


Beide Aktoren wurden mit "set xxx pct 100" angesprochen, aber bei einem wurde die 100 nicht in 99 geändert.

Hier noch ein List der Devices (nur der eventMap Teil)

ID17 (falsche Übersetzung)
Internals:
   NAME       FGR222_ID17
Attributes:
   eventMap   {
  usr=>{"^pct 100\$"=>"dim 99", "^pct(.*)"=>'dim$1'},
  fw=>{"^pct(.*)"=>"pct"}
}


ID18 (korrekte Übersetzung)
Internals:
   NAME       FGR222_ID18
Attributes:
   eventMap   {
  usr=>{"^pct 100\$"=>"dim 99", "^pct(.*)"=>'dim$1'},
  fw=>{"^pct(.*)"=>"pct"}
}


Wie kann sowas passieren ? Bei 4 Aktoren funktioniert es und bei einem nicht ? eventMap wurde übrigens per copy/paste eingesetzt (Tippfehler daher eigentlich ausgeschlossen).
Titel: Antw:Problem mit eventMap
Beitrag von: rudolfkoenig am 26 Januar 2021, 09:22:59
Womoeglich liegt das Problem in deiner "Optimierung".
usr ist ein Hash, die Auswertungsreihenfolge ist unbestimmt, und in deiner Variante passen beide Ausdruecke auf pct 100.
Titel: Antw:Problem mit eventMap
Beitrag von: dt2510 am 26 Januar 2021, 10:04:05
Wie müsste es denn korrekt aussehen ? Ich bin wie gesagt nicht sehr vertraut mit regex...

Das Problem in der Originalversion war das fehlende Leerzeichen zwischen dim und der Zahl ("dim99" statt "dim 99") - beim zweiten Ausdruck war ich mir nicht sicher, wie ich das Leerzeichen reinbekomme ...

Mit dem original eventMap kommt im Logfile bei 0-99% auch kein Befehl an - nur bei 100% (und auch nur mit meiner Modifikation "pct 100" mit Leerzeichen)
Titel: Antw:Problem mit eventMap
Beitrag von: rudolfkoenig am 26 Januar 2021, 10:19:15
Ich tippe auf
fhem> attr d eventMap { usr=>{"^pct 100\$" => "dim 99", "^pct (.{1,2})\$"=>'dim $1'},fw=>{"^pct(.*)"=>"pct"} }

(ungetestet)
Titel: Antw:Problem mit eventMap
Beitrag von: dt2510 am 26 Januar 2021, 10:22:54
Zitat von: rudolfkoenig am 26 Januar 2021, 10:19:15
Ich tippe auf
fhem> attr d eventMap { usr=>{"^pct 100\$" => "dim 99", "^pct (.{1,2})\$"=>'dim $1'},fw=>{"^pct(.*)"=>"pct"} }

(ungetestet)

getestet ... funktioniert ! Danke :)