FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Burny4600 am 10 Juli 2016, 10:39:09

Titel: [gelöst] Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Burny4600 am 10 Juli 2016, 10:39:09
Ich möchte den nummärischen Wert einer Windrichtung herausfiltern um diesen unter DOIF weiter verwenden zu können, ohne das Perl Warnungen ausgibt.
Der Readingwert lautet ZB: Readings - wind_dir - 112 ESE
([WGR800:wspeed] > 20 and [WGR800:wind_dir] > 0 and [WGR800:wind_dir] < 200)
(set ZWS on)
DOELSE
(set ZWS off)

Ohne Filter bekomme ich die Meldung im Log:
2016.07.08 17:50:43 1: PERL WARNING: Argument "204 W" isn't numeric in numeric gt (>) at (eval 956241) line 1.


Um den nummärischen Wert zu Filtern habe ich folgende Definition ausgeführt.
([WGR800:wspeed] > 20 and [WGR800:wind_dir:d] > 0 and [WGR800:wind_dir:d] < 200)
(set ZWS on)
DOELSE
(set ZWS off)

Nur so funktioniert es auch nicht.
Mit dem Filter bekomme ich nun die Meldung im Log:
2016.07.10 10:32:26 1: PERL WARNING: Argument "1353 W" isn't numeric in numeric gt (>) at (eval 535808) line 1.

Nur das Argument kann zudem nicht stimmen!"1353 W"
Habe ich da im falschem Bereich angesetzt?
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Ellert am 10 Juli 2016, 17:12:26
ZitatHabe ich da im falschem Bereich angesetzt?
Kann sein, wenn die Fehlermeldung aus einer anderen DOIF-Definition stammt.

ZitatNur das Argument kann zudem nicht stimmen!
Interessant wären die originalen Readings-Werte vom Fehlerfall und was im DOIF angekommen ist, also Listings von den Geräten.
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Burny4600 am 10 Juli 2016, 18:46:56
Also im DOIF Listing der Geräte erscheint der Wert in dieser Form:
e_WGR800_wind_dir 112 ESE
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Ellert am 10 Juli 2016, 19:24:46
Zitat"1353 W"
dieser Wert kommt dann nicht aus dem DOIF.

Wie schon gesagt, ein Listing der betroffenen Geräte im Fehlerzustand könnte weiter helfen.

Kennst Du den list-Befehl?
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Burny4600 am 10 Juli 2016, 19:31:36
Meinst du das List des Windsensors?
Internals:
   CFGFN      /media/hdd/fhem/mycfg/Wetter/Wetterstation.cfg
   CODE       WGR800
   DEF        WGR800
   IODev      RFXtrx433E
   LASTInputDev RFXtrx433E
   MSGCNT     367
   NAME       WGR800
   NR         996
   RFXtrx433E_MSGCNT 367
   RFXtrx433E_RAWMSG 105602ffb00000160018000e0000000069
   RFXtrx433E_TIME 2016-07-10 19:30:15
   STATE      Richtung: 22 NNE ° | Geschwindigkeit: 5 km/h | mittlere Geschwindigkeit: 9 km/h
   TYPE       TRX_WEATHER
   Readings:
     2016-07-10 19:30:15   battery         ok 100%
     2016-07-10 19:30:15   rssi            6
     2016-07-10 19:30:15   rssi_dB         -72
     2016-07-10 19:30:15   state           W: 1.4 WA: 2.4 WD: 22 WDN: NNE BAT: ok
     2016-07-10 19:30:15   wavspeed        8.64
     2016-07-10 19:30:15   wind_avspeed    2.4
     2016-07-10 19:30:15   wind_dir        22 NNE
     2016-07-10 19:30:15   wind_speed      1.4
     2016-07-10 19:30:15   wspeed          5.04
Attributes:
   IODev      RFXtrx433E
   alias      Windgeschwindigkeit & Richtung (Oregon)
   event-min-interval .*:15
   event-on-change-reading wspeed,wind_speed,wavspeed,wind_avspeed,wind_dir,rssi,rssi_dB,battery
   group      Sensoren
   icon       weather_wind_speed
   room       OG1-Balkon,Rolllaeden,Wetterstation
   stateFormat {sprintf(
"Richtung: %s ° | Geschwindigkeit: %1.f km/h | mittlere Geschwindigkeit: %1.f km/h",
ReadingsVal($name,"wind_dir",0),
ReadingsVal($name,"wspeed",0),
ReadingsVal($name,"wavspeed",0))}
   userReadings wspeed:wind_speed.* {ReadingsVal($name,"wind_speed",0)*3.6},
wavspeed:wind_avspeed.* {ReadingsVal($name,"wind_avspeed",0)*3.6},
rssi_dB:rssi.* {(ReadingsVal("$name","rssi",0)*8)-120}


Ich nahm an das es aus der DOIF Verarbeitung kommt da nirgendwo anders die Winrichtung mit > oder < verarbeitet wird und Argumente dieser Art (204 W) nur der Windsensor produziert.
2016.07.08 17:50:43 1: PERL WARNING: Argument "204 W" isn't numeric in numeric gt (>) at (eval 956241) line 1.

List eines der vier DOIF's
Internals:
   CFGFN      /media/hdd/fhem/myprogram/Markise.pm
   DEF        ([WGR800:wspeed] > 20 and [WGR800:wind_dir:d] > 0 and [WGR800:wind_dir:d] < 200)
(set ZOBWM100D on)
DOELSE
(set ZOBWM100D off)
   NAME       ZOBWM100
   NR         4036
   NTFY_ORDER 50-ZOBWM100
   STATE      AUS
   TYPE       DOIF
   Readings:
     2016-07-10 19:36:19   Device          WGR800
     2016-07-10 19:29:57   cmd             2
     2016-07-10 19:29:57   cmd_event       WGR800
     2016-07-10 19:29:57   cmd_nr          2
     2016-07-10 19:36:19   e_WGR800_wind_dir 135 SE
     2016-07-10 19:36:19   e_WGR800_wspeed 6.12
     2016-07-10 19:29:57   state           cmd_2
     2016-07-10 19:30:15   wait_timer      10.07.2016 19:50:15 cmd_2 WGR800
   Condition:
     0          ReadingValDoIf($hash,'WGR800','wspeed','','',AttrVal($hash->{NAME},'notexist',undef)) > 20 and ReadingValDoIf($hash,'WGR800','wind_dir','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) > 0 and ReadingValDoIf($hash,'WGR800','wind_dir','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) < 200
   Devices:
     0           WGR800
     all         WGR800
   Do:
     0:
       0          set ZOBWM100D on
     1:
       0          set ZOBWM100D off
   Helper:
     event      wind_speed: 1.7,wind_avspeed: 1,wind_dir: 135 SE,battery: ok 100%,wspeed: 6.12,wavspeed: 3.6
     globalinit 1
     last_timer 0
     sleepdevice WGR800
     sleepsubtimer 0
     sleeptimer 1
     timerdev   WGR800
     timerevent wind_speed: 1.7,wind_avspeed: 1,wind_dir: 135 SE,battery: ok 100%,wspeed: 6.12,wavspeed: 3.6
     triggerDev WGR800
     timerevents:
       wind_speed: 1.7
       wind_avspeed: 1
       wind_dir: 135 SE
       battery: ok 100%
       wspeed: 6.12
       wavspeed: 3.6
     timereventsState:
       wind_speed: 1.7
       wind_avspeed: 1
       wind_dir: 135 SE
       battery: ok 100%
       wspeed: 6.12
       wavspeed: 3.6
     triggerEvents:
       wind_speed: 1.7
       wind_avspeed: 1
       wind_dir: 135 SE
       battery: ok 100%
       wspeed: 6.12
       wavspeed: 3.6
     triggerEventsState:
       wind_speed: 1.7
       wind_avspeed: 1
       wind_dir: 135 SE
       battery: ok 100%
       wspeed: 6.12
       wavspeed: 3.6
   Internals:
   Itimer:
   Readings:
     0           WGR800:wspeed WGR800:wind_dir
     all         WGR800:wspeed WGR800:wind_dir
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   alias      OG1 Balkon - Markise 100% offen - Karenzzeit Windgeschwindigkeit Süd > 20 kph
   devStateIcon initialize.*:control_minus EIN:ios-set_off-green AUS:general_aus@red
   do         always
   eventMap   cmd_1:EIN cmd_2:AUS
   group      Zähler
   icon       time_timer
   room       OG1-Balkon,Rolllaeden,_Timer
   wait       0:1200
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Ellert am 10 Juli 2016, 19:49:53
Ja, um das genauer zu untersuchen, wäre es hilfreich, ein Listing des DOIF, den dazu gehörenden Logeintrag und das Geräte Reading zu vergleichen.

Wenn das DOIF spinnt, dann müsstest Du eine Fehlermeldung mit einer wind_dir im Log haben und zum gleichen Zeitpunkt ein Reading im DOIF und im Sensor. Und im DOIF ggf. auch eine Fehlermeldung, die wäre dann im Listing zu sehen.

Kannst Du den Fehler reproduzieren und die Listings erstellen?

Das passt auch irgendwie nicht zusammen:
Zitat
2016-07-10 19:30:15   wind_dir        22 NNE
2016-07-10 19:36:19   e_WGR800_wind_dir 135 SE
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Burny4600 am 10 Juli 2016, 20:26:58
Werde das Log noch einmal löschen, da ständig diese Perl Warning Einträge das Log schon ziemlich aufgefüllt haben.

Morgen werde ich dies nochmals genauer ausloten um den Fehler einzugrenzen.
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Ellert am 10 Juli 2016, 23:55:39
Vielleicht gibt es hilfreiche Informationen, wenn Du das globale Attribut stacktrace auf 1 setzt.
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Burny4600 am 11 Juli 2016, 09:20:06
stacktrace habe ich jetzt ergänzt und auf 1 gesetzt.

Habe den Fehler eingrenzen können.
Diese Warnung wird definitiv vom Signalduino hervor gerufen.
Ebenso das die Winrichtung mehr als 360° aufgelöst wird.

Danke jedenfalls für die Hilfe.
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Burny4600 am 12 Juli 2016, 16:24:51
Es muss doch irgendetwas an DOIF mit dem Windsensor faul sein.
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: automatisierer am 12 Juli 2016, 22:39:22
Zitat von: Ellert am 10 Juli 2016, 17:12:26
Kann sein, wenn die Fehlermeldung aus einer anderen DOIF-Definition stammt.
Interessant wären die originalen Readings-Werte vom Fehlerfall und was im DOIF angekommen ist, also Listings von den Geräten.

das list des DOIF ist ok, aber du schreibst: "eines von vier" also gibt es da wohl noch mehr. Dann mach doch mal von allen ein list.

Bei Versuch das ganze nachzustellen, ist mir aufgefallen, das DOIF zwar eine Warnung "... isn't numeric..." raushaut, aber dennoch der entspechende Befehl ausgeführt wird.
Also
"7W" < "8" ergibt die Fehlermeldung und der zur Bedingung gehörende Befehl wird ausgefürt
"10W" < "8" ergibt die Fehlermeldung und der zur Bedingung gehörende Befehl wird nicht ausgefürt

also "übersieht" DOIF das W einfach...

Also funktionieren müssten deine DOIF's trotz der Fehlermeldung. Und in einem deiner DOIF's wird wohl der Filter ':d' fehlen, was zu der Warnmeldung führt.


Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Burny4600 am 13 Juli 2016, 09:48:21
Alle vier Bedingungen sind ähnlich aufgebaut.
Das stimmt schon, das DOIF die Bedingungen richtig abarbeitet.
Mir wurde nur angeraten diese Perl Warnungen zu behandeln, da diese für andere sporadisch auftretend Fehler verantwortlich sein können.

([WGR800:wspeed] > 20 and [WGR800:wind_dir:d] > 200 and [WGR800:wind_dir:d] < 360)
(set ZWN on)
DOELSE
(set ZWN off)

([WGR800:wspeed] > 20 and [WGR800:wind_dir:d] > 0 and [WGR800:wind_dir:d] < 200)
(set ZWS on)
DOELSE
(set ZWS off)

([WGR800:wspeed] > 20 and [WGR800:wind_dir:d] > 100 and [WGR800:wind_dir:d] < 250)
(set ZOBWM100D on)
DOELSE
(set ZOBWM100D off)

([WGR800:wspeed] > 30 and [WGR800:wind_dir:d] > 0 and [WGR800:wind_dir:d] < 200)
(set ZOBWM50D on)
DOELSE
(set ZOBWM50D off)

Bei allen vier Bedingungen ist das Attribut wait mit 0:1200 definiert.

@automatisierer
Zitat"7W" < "8" ergibt die Fehlermeldung und der zur Bedingung gehörende Befehl wird ausgefürt
"10W" < "8" ergibt die Fehlermeldung und der zur Bedingung gehörende Befehl wird nicht ausgefürt
Da wird ja doch etwas von DIOF laut deinem Test nicht ausgeführt.
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Burny4600 am 15 Juli 2016, 08:47:48
Gibt es schon Erkenntnisse um diese Perl Fehlermeldungen zu beheben.

Diese müllen das LOG zu, und sind eine unnütze Belastung für das System.
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Damian am 15 Juli 2016, 09:01:26
Zitat von: Burny4600 am 15 Juli 2016, 08:47:48
Gibt es schon Erkenntnisse um diese Perl Fehlermeldungen zu beheben.

Diese müllen das LOG zu, und sind eine unnütze Belastung für das System.

Um die Quelle einzukreisen: Deaktiviere über das Attribut disable alle DOIF, die die Windrichtung auswerten. Wenn die Meldung immer noch kommt, dann hast du einen übersehen. Wenn die Meldung nicht mehr kommt, dann kannst ein DOIF zum testen definieren:

([WGR800:wind_dir:d] > 200) (set bla on)

und dann schaust du, ob die Meldung kommt. Wenn sie nicht kommt, dann kommt es nicht von dieser Abfrage.

Gruß

Damian
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Ellert am 15 Juli 2016, 15:46:38
Zitat von: Burny4600 am 15 Juli 2016, 08:47:48
Gibt es schon Erkenntnisse um diese Perl Fehlermeldungen zu beheben.

Diese müllen das LOG zu, und sind eine unnütze Belastung für das System.

Du könntest Dir auch ein Userreading im Sensor anlegen und das im DOIF nutzen:

wind_dir_num:wind_dir.* {ReadingsNum("WGR800","wind_dir", -999)}
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Burny4600 am 15 Juli 2016, 17:37:05
Danke für den Tipp.

Habe ich gleich ausprobiert und in allen vier Bedingungen geändert, gespeichert, FHEM gestoppt, LOG gelöscht und FHEM gestartet.
Trotz allem bekomme ich immer noch diese Perl Warnung.
2016.07.15 17:32:04 1: PERL WARNING: Argument "127 W" isn't numeric in numeric gt (>) at (eval 1066) line 1.
2016.07.15 17:32:04 3: stacktrace:
2016.07.15 17:32:04 3:     main::__ANON__                      called by (eval 1066) (1)
2016.07.15 17:32:04 3:     (eval)                              called by ./FHEM/98_DOIF.pm (928)
2016.07.15 17:32:04 3:     main::DOIF_CheckCond                called by ./FHEM/98_DOIF.pm (1176)
2016.07.15 17:32:04 3:     main::DOIF_Trigger                  called by ./FHEM/98_DOIF.pm (1284)
2016.07.15 17:32:04 3:     main::DOIF_Notify                   called by fhem.pl (3199)
2016.07.15 17:32:04 3:     main::CallFn                        called by fhem.pl (3121)
2016.07.15 17:32:04 3:     main::DoTrigger                     called by ./FHEM/33_readingsProxy.pm (127)
2016.07.15 17:32:04 3:     main::readingsProxy_update          called by ./FHEM/33_readingsProxy.pm (192)
2016.07.15 17:32:04 3:     main::readingsProxy_Notify          called by fhem.pl (3199)
2016.07.15 17:32:04 3:     main::CallFn                        called by fhem.pl (3121)
2016.07.15 17:32:04 3:     main::DoTrigger                     called by fhem.pl (4012)
2016.07.15 17:32:04 3:     main::readingsEndUpdate             called by ./FHEM/98_HTTPMOD.pm (2385)
2016.07.15 17:32:04 3:     main::HTTPMOD_Read                  called by FHEM/HttpUtils.pm (401)
2016.07.15 17:32:04 3:     main::__ANON__                      called by fhem.pl (664)
2016.07.15 17:32:04 1: PERL WARNING: Argument "127 W" isn't numeric in numeric gt (>) at (eval 1067) line 1.
2016.07.15 17:32:04 3: stacktrace:
2016.07.15 17:32:04 3:     main::__ANON__                      called by (eval 1067) (1)
2016.07.15 17:32:04 3:     (eval)                              called by ./FHEM/98_DOIF.pm (928)
2016.07.15 17:32:04 3:     main::DOIF_CheckCond                called by ./FHEM/98_DOIF.pm (1176)
2016.07.15 17:32:04 3:     main::DOIF_Trigger                  called by ./FHEM/98_DOIF.pm (1284)
2016.07.15 17:32:04 3:     main::DOIF_Notify                   called by fhem.pl (3199)
2016.07.15 17:32:04 3:     main::CallFn                        called by fhem.pl (3121)
2016.07.15 17:32:04 3:     main::DoTrigger                     called by ./FHEM/33_readingsProxy.pm (127)
2016.07.15 17:32:04 3:     main::readingsProxy_update          called by ./FHEM/33_readingsProxy.pm (192)
2016.07.15 17:32:04 3:     main::readingsProxy_Notify          called by fhem.pl (3199)
2016.07.15 17:32:04 3:     main::CallFn                        called by fhem.pl (3121)
2016.07.15 17:32:04 3:     main::DoTrigger                     called by fhem.pl (4012)
2016.07.15 17:32:04 3:     main::readingsEndUpdate             called by ./FHEM/98_HTTPMOD.pm (2385)
2016.07.15 17:32:04 3:     main::HTTPMOD_Read                  called by FHEM/HttpUtils.pm (401)
2016.07.15 17:32:04 3:     main::__ANON__                      called by fhem.pl (664)

Zwar nicht mehr so häufig aber trotzdem.

Es gibt aber nur diesen Windsensor und diese vier Bedingungen im DOIF.
Wo kann ich noch ansetzten?
Kann ich überhaupt selbst noch etwas ändern?
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Ellert am 15 Juli 2016, 19:01:26
Zitat von: Burny4600 am 15 Juli 2016, 17:37:05
Danke für den Tipp.

Habe ich gleich ausprobiert und in allen vier Bedingungen geändert, gespeichert, FHEM gestoppt, LOG gelöscht und FHEM gestartet.
Trotz allem bekomme ich immer noch diese Perl Warnung.
2016.07.15 17:32:04 1: PERL WARNING: Argument "127 W" isn't numeric in numeric gt (>) at (eval 1066) line 1.
2016.07.15 17:32:04 3: stacktrace:
2016.07.15 17:32:04 3:     main::__ANON__                      called by (eval 1066) (1)
2016.07.15 17:32:04 3:     (eval)                              called by ./FHEM/98_DOIF.pm (928)
2016.07.15 17:32:04 3:     main::DOIF_CheckCond                called by ./FHEM/98_DOIF.pm (1176)
2016.07.15 17:32:04 3:     main::DOIF_Trigger                  called by ./FHEM/98_DOIF.pm (1284)
2016.07.15 17:32:04 3:     main::DOIF_Notify                   called by fhem.pl (3199)
2016.07.15 17:32:04 3:     main::CallFn                        called by fhem.pl (3121)
2016.07.15 17:32:04 3:     main::DoTrigger                     called by ./FHEM/33_readingsProxy.pm (127)
2016.07.15 17:32:04 3:     main::readingsProxy_update          called by ./FHEM/33_readingsProxy.pm (192)
2016.07.15 17:32:04 3:     main::readingsProxy_Notify          called by fhem.pl (3199)
2016.07.15 17:32:04 3:     main::CallFn                        called by fhem.pl (3121)
2016.07.15 17:32:04 3:     main::DoTrigger                     called by fhem.pl (4012)
2016.07.15 17:32:04 3:     main::readingsEndUpdate             called by ./FHEM/98_HTTPMOD.pm (2385)
2016.07.15 17:32:04 3:     main::HTTPMOD_Read                  called by FHEM/HttpUtils.pm (401)
2016.07.15 17:32:04 3:     main::__ANON__                      called by fhem.pl (664)
2016.07.15 17:32:04 1: PERL WARNING: Argument "127 W" isn't numeric in numeric gt (>) at (eval 1067) line 1.
2016.07.15 17:32:04 3: stacktrace:
2016.07.15 17:32:04 3:     main::__ANON__                      called by (eval 1067) (1)
2016.07.15 17:32:04 3:     (eval)                              called by ./FHEM/98_DOIF.pm (928)
2016.07.15 17:32:04 3:     main::DOIF_CheckCond                called by ./FHEM/98_DOIF.pm (1176)
2016.07.15 17:32:04 3:     main::DOIF_Trigger                  called by ./FHEM/98_DOIF.pm (1284)
2016.07.15 17:32:04 3:     main::DOIF_Notify                   called by fhem.pl (3199)
2016.07.15 17:32:04 3:     main::CallFn                        called by fhem.pl (3121)
2016.07.15 17:32:04 3:     main::DoTrigger                     called by ./FHEM/33_readingsProxy.pm (127)
2016.07.15 17:32:04 3:     main::readingsProxy_update          called by ./FHEM/33_readingsProxy.pm (192)
2016.07.15 17:32:04 3:     main::readingsProxy_Notify          called by fhem.pl (3199)
2016.07.15 17:32:04 3:     main::CallFn                        called by fhem.pl (3121)
2016.07.15 17:32:04 3:     main::DoTrigger                     called by fhem.pl (4012)
2016.07.15 17:32:04 3:     main::readingsEndUpdate             called by ./FHEM/98_HTTPMOD.pm (2385)
2016.07.15 17:32:04 3:     main::HTTPMOD_Read                  called by FHEM/HttpUtils.pm (401)
2016.07.15 17:32:04 3:     main::__ANON__                      called by fhem.pl (664)

Zwar nicht mehr so häufig aber trotzdem.

Es gibt aber nur diesen Windsensor und diese vier Bedingungen im DOIF.
Wo kann ich noch ansetzten?
Kann ich überhaupt selbst noch etwas ändern?
Was hast Du genau ausprobiert?

127 W ist der Wert in der Fehlermeldung, im Gerät steht 292 WNW, das ist fast die entgegengesetzte Richtung.

Solange Du nicht alle, möglicher Weise beteiligten Komponenten im Fehlerzustand loggst und die Angaben schlüssig postest, werden wir die Ursache kaum finden.

Ich habe es bereits geschrieben und wiederhole es gern noch einmal: Poste ein Listing aller 4 DOIF im Fehlerfall und des Sensors mit dem Wert, der den Fehler verursacht hat.
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Burny4600 am 15 Juli 2016, 19:37:32
Habe das userReading beim Windsensor ergänzt
wdir:wind_dir.* {ReadingsNum("$name","wind_dir", -999)}
und entsprechend die DOIF Bedinungen abgeändert.
([WGR800:wspeed] > 20 and [WGR800:wdir] > 0 and [WGR800:wdir] < 200)
(set ZOBWM100D on)
DOELSE
(set ZOBWM100D off)


Das sind die vier Lists der DOIF Bedingungen.
Internals:
   CFGFN      /media/hdd/fhem/myprogram/Markise.pm
   DEF        ([WGR800:wspeed] > 20 and [WGR800:wdir] > 0 and [WGR800:wdir] < 200)
(set ZOBWM100D on)
DOELSE
(set ZOBWM100D off)
   NAME       ZOBWM100
   NR         4036
   NTFY_ORDER 50-ZOBWM100
   STATE      AUS
   TYPE       DOIF
   Readings:
     2016-07-15 19:33:31   Device          WGR800
     2016-07-15 19:31:49   cmd             2
     2016-07-15 19:31:49   cmd_event       WGR800
     2016-07-15 19:31:49   cmd_nr          2
     2016-07-15 19:33:31   e_WGR800_wdir   247
     2016-07-15 19:33:31   e_WGR800_wspeed 0
     2016-07-15 19:31:49   state           cmd_2
     2016-07-15 19:31:53   wait_timer      15.07.2016 19:51:53 cmd_2 WGR800
   Condition:
     0          ReadingValDoIf($hash,'WGR800','wspeed','','',AttrVal($hash->{NAME},'notexist',undef)) > 20 and ReadingValDoIf($hash,'WGR800','wdir','','',AttrVal($hash->{NAME},'notexist',undef)) > 0 and ReadingValDoIf($hash,'WGR800','wdir','','',AttrVal($hash->{NAME},'notexist',undef)) < 200
   Devices:
     0           WGR800
     all         WGR800
   Do:
     0:
       0          set ZOBWM100D on
     1:
       0          set ZOBWM100D off
   Helper:
     event      wind_speed: 0,wind_avspeed: 0,wind_dir: 247 WSW,battery: ok 100%,rssi: 5,wdir: 247,wspeed: 0,wavspeed: 0,rssi_dB: -80
     globalinit 1
     last_timer 0
     sleepdevice WGR800
     sleepsubtimer 0
     sleeptimer 1
     timerdev   WGR800
     timerevent wind_speed: 0,wind_avspeed: 0,wind_dir: 247 WSW,battery: ok 100%,rssi: 5,wdir: 247,wspeed: 0,wavspeed: 0,rssi_dB: -80
     triggerDev WGR800
     timerevents:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     timereventsState:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     triggerEvents:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     triggerEventsState:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
   Internals:
   Itimer:
   Readings:
     0           WGR800:wspeed WGR800:wdir
     all         WGR800:wspeed WGR800:wdir
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   alias      OG1 Balkon - Markise 100% offen - Karenzzeit Windgeschwindigkeit Süd > 20 kph
   devStateIcon initialize.*:control_minus EIN:ios-set_off-green AUS:general_aus@red
   do         always
   eventMap   cmd_1:EIN cmd_2:AUS
   group      Zähler
   icon       time_timer
   room       OG1-Balkon,Rolllaeden,_Timer
   wait       0:1200

Internals:
   CFGFN      /media/hdd/fhem/myprogram/Markise.pm
   DEF        ([WGR800:wspeed] > 30 and [WGR800:wdir] > 0 and [WGR800:wdir] < 200)
(set ZOBWM50D on)
DOELSE
(set ZOBWM50D off)
   NAME       ZOBWM50
   NR         4041
   NTFY_ORDER 50-ZOBWM50
   STATE      AUS
   TYPE       DOIF
   Readings:
     2016-07-15 19:35:23   Device          WGR800
     2016-07-15 19:31:49   cmd             2
     2016-07-15 19:31:49   cmd_event       WGR800
     2016-07-15 19:31:49   cmd_nr          2
     2016-07-15 19:35:23   e_WGR800_wdir   247
     2016-07-15 19:35:23   e_WGR800_wspeed 0
     2016-07-15 19:31:49   state           cmd_2
     2016-07-15 19:31:53   wait_timer      15.07.2016 19:51:53 cmd_2 WGR800
   Condition:
     0          ReadingValDoIf($hash,'WGR800','wspeed','','',AttrVal($hash->{NAME},'notexist',undef)) > 30 and ReadingValDoIf($hash,'WGR800','wdir','','',AttrVal($hash->{NAME},'notexist',undef)) > 0 and ReadingValDoIf($hash,'WGR800','wdir','','',AttrVal($hash->{NAME},'notexist',undef)) < 200
   Devices:
     0           WGR800
     all         WGR800
   Do:
     0:
       0          set ZOBWM50D on
     1:
       0          set ZOBWM50D off
   Helper:
     event      wind_speed: 0,wind_avspeed: 0,wind_dir: 247 WSW,battery: ok 100%,rssi: 5,wdir: 247,wspeed: 0,wavspeed: 0,rssi_dB: -80
     globalinit 1
     last_timer 0
     sleepdevice WGR800
     sleepsubtimer 0
     sleeptimer 1
     timerdev   WGR800
     timerevent wind_speed: 0,wind_avspeed: 0,wind_dir: 247 WSW,battery: ok 100%,rssi: 5,wdir: 247,wspeed: 0,wavspeed: 0,rssi_dB: -80
     triggerDev WGR800
     timerevents:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     timereventsState:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     triggerEvents:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     triggerEventsState:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
   Internals:
   Itimer:
   Readings:
     0           WGR800:wspeed WGR800:wdir
     all         WGR800:wspeed WGR800:wdir
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   alias      OG1 Balkon - Markise 50% offen - Karenzzeit Windgeschwindigkeit Süd > 30 kph
   devStateIcon initialize.*:control_minus EIN:ios-set_off-green AUS:general_aus@red
   do         always
   eventMap   cmd_1:EIN cmd_2:AUS
   group      Zähler
   icon       time_timer
   room       OG1-Balkon,Rolllaeden,_Timer
   wait       0:1200

Internals:
   CFGFN      /media/hdd/fhem/myprogram/Rolllaeden.pm
   DEF        ([WGR800:wspeed] > 20 and [WGR800:wdir] > 200 and [WGR800:wdir] < 360)
(set ZWN on)
DOELSE
(set ZWN off)
   NAME       ZWNT
   NR         4270
   NTFY_ORDER 50-ZWNT
   STATE      AUS
   TYPE       DOIF
   Readings:
     2016-07-15 19:35:51   Device          WGR800
     2016-07-15 19:31:49   cmd             2
     2016-07-15 19:31:49   cmd_event       WGR800
     2016-07-15 19:31:49   cmd_nr          2
     2016-07-15 19:35:51   e_WGR800_wdir   247
     2016-07-15 19:35:51   e_WGR800_wspeed 0
     2016-07-15 19:31:49   state           cmd_2
     2016-07-15 19:31:53   wait_timer      15.07.2016 19:51:53 cmd_2 WGR800
   Condition:
     0          ReadingValDoIf($hash,'WGR800','wspeed','','',AttrVal($hash->{NAME},'notexist',undef)) > 20 and ReadingValDoIf($hash,'WGR800','wdir','','',AttrVal($hash->{NAME},'notexist',undef)) > 200 and ReadingValDoIf($hash,'WGR800','wdir','','',AttrVal($hash->{NAME},'notexist',undef)) < 360
   Devices:
     0           WGR800
     all         WGR800
   Do:
     0:
       0          set ZWN on
     1:
       0          set ZWN off
   Helper:
     event      wind_speed: 0,wind_avspeed: 0,wind_dir: 247 WSW,battery: ok 100%,rssi: 5,wdir: 247,wspeed: 0,wavspeed: 0,rssi_dB: -80
     globalinit 1
     last_timer 0
     sleepdevice WGR800
     sleepsubtimer 0
     sleeptimer 1
     timerdev   WGR800
     timerevent wind_speed: 0,wind_avspeed: 0,wind_dir: 247 WSW,battery: ok 100%,rssi: 5,wdir: 247,wspeed: 0,wavspeed: 0,rssi_dB: -80
     triggerDev WGR800
     timerevents:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     timereventsState:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     triggerEvents:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     triggerEventsState:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
   Internals:
   Itimer:
   Readings:
     0           WGR800:wspeed WGR800:wdir
     all         WGR800:wspeed WGR800:wdir
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   alias      Karenzzeit Windschutz Fenster Nord
   devStateIcon initialize.*:control_minus EIN:ios-set_off-green AUS:general_aus@red
   do         always
   eventMap   cmd_1:EIN cmd_2:AUS
   group      Zähler
   icon       time_timer
   room       Rolllaeden,_Timer
   wait       0:1200

Internals:
   CFGFN      /media/hdd/fhem/myprogram/Rolllaeden.pm
   DEF        ([WGR800:wspeed] > 20 and [WGR800:wdir] > 0 and [WGR800:wdir] < 200)
(set ZWS on)
DOELSE
(set ZWS off)
   NAME       ZWST
   NR         4276
   NTFY_ORDER 50-ZWST
   STATE      AUS
   TYPE       DOIF
   Readings:
     2016-07-15 19:37:01   Device          WGR800
     2016-07-15 19:31:49   cmd             2
     2016-07-15 19:31:49   cmd_event       WGR800
     2016-07-15 19:31:49   cmd_nr          2
     2016-07-15 19:37:01   e_WGR800_wdir   247
     2016-07-15 19:37:01   e_WGR800_wspeed 0
     2016-07-15 19:31:49   state           cmd_2
     2016-07-15 19:31:53   wait_timer      15.07.2016 19:51:53 cmd_2 WGR800
   Condition:
     0          ReadingValDoIf($hash,'WGR800','wspeed','','',AttrVal($hash->{NAME},'notexist',undef)) > 20 and ReadingValDoIf($hash,'WGR800','wdir','','',AttrVal($hash->{NAME},'notexist',undef)) > 0 and ReadingValDoIf($hash,'WGR800','wdir','','',AttrVal($hash->{NAME},'notexist',undef)) < 200
   Devices:
     0           WGR800
     all         WGR800
   Do:
     0:
       0          set ZWS on
     1:
       0          set ZWS off
   Helper:
     event      wind_speed: 0,wind_avspeed: 0,wind_dir: 247 WSW,battery: ok 100%,rssi: 5,wdir: 247,wspeed: 0,wavspeed: 0,rssi_dB: -80
     globalinit 1
     last_timer 0
     sleepdevice WGR800
     sleepsubtimer 0
     sleeptimer 1
     timerdev   WGR800
     timerevent wind_speed: 0,wind_avspeed: 0,wind_dir: 247 WSW,battery: ok 100%,rssi: 5,wdir: 247,wspeed: 0,wavspeed: 0,rssi_dB: -80
     triggerDev WGR800
     timerevents:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     timereventsState:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     triggerEvents:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
     triggerEventsState:
       wind_speed: 0
       wind_avspeed: 0
       wind_dir: 247 WSW
       battery: ok 100%
       rssi: 5
       wdir: 247
       wspeed: 0
       wavspeed: 0
       rssi_dB: -80
   Internals:
   Itimer:
   Readings:
     0           WGR800:wspeed WGR800:wdir
     all         WGR800:wspeed WGR800:wdir
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   alias      Karenzzeit Windschutz Fenster Süd
   devStateIcon initialize.*:control_minus EIN:ios-set_off-green AUS:general_aus@red
   do         always
   eventMap   cmd_1:EIN cmd_2:AUS
   group      Zähler
   icon       time_timer
   room       Rolllaeden,_Timer
   wait       0:1200

Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Ellert am 15 Juli 2016, 20:56:50
O.k., jetzt wird in keiner Bedingung der 4 DOIF ein alphanumerischer Wert in einem numerischen Vergleich auftauchen können, das bereinigst Du im Sensor.

Wenn jetzt noch Warnungen auftauchen und stacktrace auf DOIF hindeutet, dann muss noch irgendwo in Deiner Konfiguration ein DOIF versteckt sein, das wind_dir in einem numerischen Vergleich verwendet.

Da Du eine verteilte Konfiguration verwendest wird die Suche etwas aufwändiger. Du müsstest jede Datei nach wind_dir durchsuchen und prüfen ob das Reading in einem vergessenen DOIF Vergleich erscheint und das bereinigen.

ZitatFHEM gestoppt, LOG gelöscht und FHEM gestartet.
Was meinst Du mit gestoppt?

Wenn Du FHEM nicht über shutdown beendest, dann wird das save-File nicht aktualisiert. Das kann dazu führen, dass Readings von in der Konfiguration gelöschten Geräten nach dem Start wieder existieren und zu unerwartetem Verhalten führen.
Titel: Antw:Filter in DOIF funktioniert nicht richtig bei Auswertung Windrichtung
Beitrag von: Burny4600 am 16 Juli 2016, 11:23:47
FHEM wird auf der Console mit sudo /etc/init.d/fhem stop angehalten und sudo /etc/init.d/fhem start wieder gestartet.

Habe den Fehler eingrenzen können.
Dieser wird nicht von win_dir in einer DOIF Bedingung verursacht sondern von einer Leistungsabfrage der PV-Anlage.

Sieht ähnlich aus und durch die Angabe von 112 W war ich so auf den Windsensor fixiert das ich leider nicht auf die Idee kam in den anderen Bereichen nach zu sehen.
Gut das ich diese include Struktur habe, sonst hätte ich noch lange gesucht.

Danke für die Unterstützung nochmals.