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?
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.
Also im DOIF Listing der Geräte erscheint der Wert in dieser Form:
e_WGR800_wind_dir 112 ESE
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?
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
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
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.
Vielleicht gibt es hilfreiche Informationen, wenn Du das globale Attribut stacktrace auf 1 setzt.
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.
Es muss doch irgendetwas an DOIF mit dem Windsensor faul sein.
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.
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.
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.
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
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)}
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?
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.
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
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.
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.