Problem mit eventMap

Begonnen von dt2510, 25 Januar 2021, 09:47:17

Vorheriges Thema - Nächstes Thema

dt2510

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.

rudolfkoenig

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

dt2510

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 !!

dt2510

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).

rudolfkoenig

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.

dt2510

#5
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)

rudolfkoenig

Ich tippe auf
fhem> attr d eventMap { usr=>{"^pct 100\$" => "dim 99", "^pct (.{1,2})\$"=>'dim $1'},fw=>{"^pct(.*)"=>"pct"} }

(ungetestet)

dt2510

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 :)