Einen Dummy über einen Grenzwert schalten

Begonnen von Stargazer, 08 August 2016, 15:33:13

Vorheriges Thema - Nächstes Thema

Stargazer

#90
OKAY...!

Da ist wohl jetzt nochmal ein DICKES SORRY von Nöten.... :-[  :'( .
Ich habe das FHEM2FHEM vorhin aufgelöst und das System neu gestartet.
Ich habe mal ein Bild angehangen, wie es jetzt aussieht.

Wenn ich oben dann bei dem Regex-Wizard "Wetterstation" und "Windgeschwindigkeit" eingebe, aus "Set" klicke, passiert natürlich nix. Da das im Regex schon eingetragen geht. Nehme ich aus Spaß mal etwas anderes in der Wizard-Auswahl, erscheint oben die Wetterstation:Windgeschwindigkeit und auch das zweite, was ausgewählt wurde. Wenn ich das Fake-Regex wieder lösche, steht oben auch die Wetterstation nicht mehr.

Wenn ich im DEF etwas ändere und dann übernehme, so löst der Dummy richtig aus. Stelle ich den Grenzwert um, auf z.B. >=1.0, so ändert er den Dummy nicht.
Auf Setreadings reagiert er aber wie gewohnt.

Ich werde wohl auf das Pferd der Mittleren_Leistung setzen. Das werde ich bei Sturm mal ermitteln und dann gucken wie das funktioniert.
Trotzdem nochmals VIELEN DANK für die Hilfe hier im Forum, Dan.

Viele Grüße

André

DeeSPe

Dass mit den Events bei Dir was nicht stimmt hatte ich ja relativ zeitig vermutet, an dieser Stelle wäre die Info mit FHEM2FHEM gut gewesen.

Zitat von: Stargazer am 11 August 2016, 20:23:49
Wenn ich im DEF etwas ändere und dann übernehme, so löst der Dummy richtig aus. Stelle ich den Grenzwert um, auf z.B. >=1.0, so ändert er den Dummy nicht.
Auf Setreadings reagiert er aber wie gewohnt.

Das verstehe ich wieder nicht. Wieso löst der Dummy aus wenn Du an der DEF des notify was ändern? Der kann doch erst auslösen wenn das entsprechende Event getriggert wird und das ist beim Speichern der DEF nicht der Fall.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Stargazer

#92
Grüß dich, Dan !

Ich habe nun das Notify und den Dummy komplett gelöscht und wieder neu eingerichtet.
So wie der letzte Stand war, mit folgendem Code:

Wetterstation:Windgeschwindigkeit.*|Wetterstation:Windgeschwindigkeit:.* {my $reading = $EVTPART1; $reading =~ s/,/./g; $reading = $reading*1; if($reading > 1.0){fhem("set Antaris_SturmStopp:FILTER=state=off on")} else {fhem("set Antaris_SturmStopp:FILTER=state=on off")}}

...dann habe ich ein setreading mit 6,0 gemacht und vom Event Monitor folgende Meldung erhalten:

2016-08-12 19:59:43 dummy Antaris_SturmStopp on
2016-08-12 19:59:43 readingsGroup TFA_Station Wetterstation.Windgeschwindigkeit: 6,0
2016-08-12 19:59:43 HTTPMOD Wetterstation Windgeschwindigkeit: 6,0
                                                .
                                                .
                                                .
2016.08.12 19:59:50 1 : PERL WARNING: Argument "<td" isn't numeric in multiplication (*) at (eval 103) line 2.
2016.08.12 19:59:50 3 : eval: my $NAME='Wetterstation';my $EVTPART1='<td';my $EVENT='Windgeschwindigkeit: <td class="stats_data">2,0 m/s from 248° (WSW)';my $SELF='Sturmwarnung_Test';my $EVTPART4='from';my $EVTPART5='248°';my $EVTPART6='(WSW)';my $EVTPART0='Windgeschwindigkeit:';my $TYPE='HTTPMOD';my $EVTPART3='m/s';my $EVTPART2='class="stats_data">2,0';{my $reading = $EVTPART1; $reading =~ s/,/./g; $reading = $reading*1; if($reading > 1.0){fhem("set Antaris_SturmStopp:FILTER=state=off on")} else {fhem("set Antaris_SturmStopp:FILTER=state=on off")}}
2016-08-12 19:59:50 dummy Antaris_SturmStopp off


Die drei Punkte ersetzen nur Events von anderen Devices. Sind von mir eingefügte Platzhalter.
Das "<td" unterdrücke ich bei den Regex von HTTPMOD, da es zum HTML-Format gehört. Nur so kommt der saubere readingswert der Wetterstation durch.
Darum frage ich mich, wie auf das <td überhaupt kommt. Das Ausleseformat im HTTPMOD sieht wie folgt aus:

<tr> <td class="stats_label">Wind</td> <td class="stats_data">1,5 m/s from 252° (WSW)</td> </tr>

Ausgelesen wird via:     (?s)>Wind</td>(.*?)<\/td>

Zudem habe ich jetzt im Regex-Wizard nochmals die Wetterstation und die Windgeschwindigkeit eingestellt. Er zeigt mir dann oben zwei mal RegexPart "Wetterstation:Windgeschwindigkeit.*" an.

Wie du siehst...komplett runderneuert, mit vll. Aussicht auf Heilung... ;)

Viele Grüße und Danke...

André

Stargazer

Hallo,

ich habe jetzt nochmal den Event-Monitor genauer beobachtet. Also...wir kommen Stück für Stück näher !
Das Event wird jetzt im Notify getriggert..und zwar alle 60 Sekunden. Das entspricht exakt dem Abfrageinterval vom HTTPMOD.
Ich habe kein setreading oder sonst etwas gemacht. Die Abrage scheint zu gehen...  :D
Da kommt jetzt folgende Meldung, wie gesagt..jede Minute:


2016.08.12 20:46:51 1 : PERL WARNING: Argument "<td" isn't numeric in multiplication (*) at (eval 216) line 2.
2016.08.12 20:46:51 3 : eval: my $TYPE='HTTPMOD';my $EVTPART0='Windgeschwindigkeit:';my $EVTPART3='m/s';my $EVTPART2='class="stats_data">1,0';my $EVTPART4='from';my $EVTPART6='(SW)';my $EVTPART5='220°';my $SELF='Sturmwarnung_Test';my $EVTPART1='<td';my $EVENT='Windgeschwindigkeit: <td class="stats_data">1,0 m/s from 220° (SW)';my $NAME='Wetterstation';{my $reading = $EVTPART1; $reading =~ s/,/./g; $reading = $reading*1; if($reading > 1.0){fhem("set Antaris_SturmStopp:FILTER=state=off on")} else {fhem("set Antaris_SturmStopp:FILTER=state=on off")}}


2016.08.12 20:47:51 1 : PERL WARNING: Argument "<td" isn't numeric in multiplication (*) at (eval 219) line 2.
2016.08.12 20:47:51 3 : eval: my $NAME='Wetterstation';my $EVTPART1='<td';my $SELF='Sturmwarnung_Test';my $EVENT='Windgeschwindigkeit: <td class="stats_data">1,0 m/s from 220° (SW)';my $EVTPART4='from';my $EVTPART5='220°';my $EVTPART6='(SW)';my $EVTPART0='Windgeschwindigkeit:';my $TYPE='HTTPMOD';my $EVTPART3='m/s';my $EVTPART2='class="stats_data">1,0';{my $reading = $EVTPART1; $reading =~ s/,/./g; $reading = $reading*1; if($reading > 1.0){fhem("set Antaris_SturmStopp:FILTER=state=off on")} else {fhem("set Antaris_SturmStopp:FILTER=state=on off")}}


2016.08.12 20:48:51 1 : PERL WARNING: Argument "<td" isn't numeric in multiplication (*) at (eval 221) line 2.
2016.08.12 20:48:51 3 : eval: my $NAME='Wetterstation';my $EVTPART1='<td';my $EVENT='Windgeschwindigkeit: <td class="stats_data">1,0 m/s from 220° (SW)';my $SELF='Sturmwarnung_Test';my $EVTPART5='220°';my $EVTPART6='(SW)';my $EVTPART4='from';my $EVTPART3='m/s';my $EVTPART2='class="stats_data">1,0';my $TYPE='HTTPMOD';my $EVTPART0='Windgeschwindigkeit:';{my $reading = $EVTPART1; $reading =~ s/,/./g; $reading = $reading*1; if($reading > 1.0){fhem("set Antaris_SturmStopp:FILTER=state=off on")} else {fhem("set Antaris_SturmStopp:FILTER=state=on off")}}


2016.08.12 20:49:51 1 : PERL WARNING: Argument "<td" isn't numeric in multiplication (*) at (eval 222) line 2.
2016.08.12 20:49:51 3 : eval: my $EVTPART0='Windgeschwindigkeit:';my $TYPE='HTTPMOD';my $EVTPART2='class="stats_data">1,0';my $EVTPART3='m/s';my $EVTPART4='from';my $EVTPART6='(SW)';my $EVTPART5='220°';my $EVTPART1='<td';my $EVENT='Windgeschwindigkeit: <td class="stats_data">1,0 m/s from 220° (SW)';my $SELF='Sturmwarnung_Test';my $NAME='Wetterstation';{my $reading = $EVTPART1; $reading =~ s/,/./g; $reading = $reading*1; if($reading > 1.0){fhem("set Antaris_SturmStopp:FILTER=state=off on")} else {fhem("set Antaris_SturmStopp:FILTER=state=on off")}}



Das "(eval2xx) line 2" ändert sich immer.

Viele Grüße

André

Stargazer

#94
Nochmal ich... ;)

Also...ich habe jetzt nochmal folgenden Code zum Ausprobieren:

define Sturmwarnung_Test notify Wetterstation:Windgeschwindigkeit.* {Log3 undef,3,"Wert von EVTPART1 in Wetterstation:Windgeschwindigkeit vor Subst: $EVTPART1";; my $reading = $EVTPART1;; $reading =~ s/,/./g;; $reading = $reading*1;; Log3 undef,3,"Wert von EVTPART1 in Wetterstation:Windgeschwindigkeit nach Subst: $reading";; if($reading > 4.0){fhem("set Antaris_SturmStopp on")} else {fhem("set Antaris_SturmStopp off")}}

Ich kann ja nun den Schaltwert verändern. Dass muss ich ja auch, will ich mit den Livedaten testen.

Folgendes Szenario:

Livewerte vom Windmesser: 0,9 m/s from 211° (SSW)
Der Dummy ist im Ist-Zustand "off".

Nun verändere ich den Schaltwert auf <1.0.

Der Dummy schaltet sofort auf "on".

Stelle ich den Wert, nachdem der dummy auf "off" geschaltet wurde, auf >=0,5, so schaltet der Dummy nicht. Der Unterschied liegt ja wirklich nur in "Größer" und "Kleiner". Oder halt >= .


Was ist da faul ?

VG

André


DeeSPe

Bitte poste mal Deine komplette Definition von der Wetterstation (HTTPMOD) so wie sie in der fhem.cfg steht inklusive aller attr.
Dann kann ich das mal in meiner Testumgebung genau so anlegen wie bei Dir und schauen wie es aussieht.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Stargazer

Grüß dich, Dan

hier mal der gesamte HTTPMOD - Auszug aus der fhem.cfg:

define Wetterstation HTTPMOD http://192.168.178.28/index.html 10
attr Wetterstation userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading05Name reading05Regex reading06Name reading06Regex reading07Name reading07Regex reading08Name reading08Regex reading09Name reading09Regex reading10Name reading10Regex valueFormat
attr Wetterstation reading01Name Barometer
attr Wetterstation reading01Regex (?s)>Barometer</td>(.*?)<\/td>
attr Wetterstation reading02Name Windgeschwindigkeit
attr Wetterstation reading02Regex (?s)>Wind</td>(.*?)<\/td>
attr Wetterstation reading03Name Luftfeuchte
attr Wetterstation reading03Regex (?s)>Humidity</td>(.*?)<\/td>
attr Wetterstation reading05Name Regenrate
attr Wetterstation reading05Regex (?s)>Rain Rate</td>(.*?)<\/td>
attr Wetterstation reading06Name Außentemperatur
attr Wetterstation reading06Regex (?s)>Outside Temperature</td>(.*?)<\/td>
attr Wetterstation reading07Name Heutige Regenmenge von 0 bis 0 Uhr
attr Wetterstation reading07Regex (?s)>Today's Rain</td>(.*?)<\/td>
attr Wetterstation reading08Name Innentemperatur
attr Wetterstation reading08Regex (?s)>Inside Temperature</td>(.*?)<\/td>
attr Wetterstation reading09Name Barometer Trend
attr Wetterstation reading09Regex (?s)>Barometer Trend (3 hours)</td>(.*?)<\/td>
attr Wetterstation room Wetter
attr Wetterstation stateFormat Windgeschwindigkeit


Viele Grüße

André

Stargazer

Hallo zusammen,

ich habe es anscheinend am laufen.
Ich lese an der Wetterstation, am HTTPMOD-Modul nur den reinen Wert für die Windgeschwindigkeit aus und formatiere diese dann vom Komma zum Punkt Wert. Fertig. So kann ich den Wind mit Loggen lassen und auch das Notify läuft und schaltet so wie es soll.

Viele Grüße und besten Dank nochmal

André

DeeSPe

Hatte am Wochenende keine Zeit zum Probieren.
Super wenn es jetzt läuft!

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe