[gelöst] Bedingung mit HTTPMOD Reading funktioniert nicht

Begonnen von BennoB, 21 April 2019, 12:09:06

Vorheriges Thema - Nächstes Thema

BennoB

Hallo Boardies,

ich hoffe einer von euch kann mir helfen.
Ich habe in meiner FHEM Installation mittels HTTPMOD eine Wetterabfrage von Wunderground.com. Diese liefert auch eine Hand voll Readings welche aller 10 Minuten aktualisiert werden.

defmod wetter_xxx HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=XXXXXXXX 600
attr wetter_xxx userattr readingsName_cloudiness readingsName_date readingsName_dewpointTemperature readingsName_fog readingsName_heatindex readingsName_humidity readingsName_pressure readingsName_rain readingsName_solarRadiation readingsName_solarUV readingsName_temperature readingsName_time readingsName_windChill readingsName_windDegrees readingsName_windDirection readingsName_windGust readingsName_windSpeed readingsRegex_cloudiness readingsRegex_date readingsRegex_dewpointTemperature readingsRegex_fog readingsRegex_heatindex readingsRegex_humidity readingsRegex_pressure readingsRegex_rain readingsRegex_solarRadiation readingsRegex_solarUV readingsRegex_temperature readingsRegex_time readingsRegex_windChill readingsRegex_windDegrees readingsRegex_windDirection readingsRegex_windGust readingsRegex_windSpeed
attr wetter_xxx readingsName_cloudiness cloudiness
attr wetter_xxx readingsName_date date
attr wetter_xxx readingsName_dewpointTemperature dewpointTemperature
attr wetter_xxx readingsName_fog fog
attr wetter_xxx readingsName_heatindex heatindex
attr wetter_xxx readingsName_humidity humidity
attr wetter_xxx readingsName_pressure pressure
attr wetter_xxx readingsName_rain rain
attr wetter_xxx readingsName_solarRadiation solarRadiation
attr wetter_xxx readingsName_solarUV solarUV
attr wetter_xxx readingsName_temperature temperature
attr wetter_xxx readingsName_time time
attr wetter_xxx readingsName_windChill windChill
attr wetter_xxx readingsName_windDegrees windDegrees
attr wetter_xxx readingsName_windDirection windDirection
attr wetter_xxx readingsName_windGust windGust
attr wetter_xxx readingsName_windSpeed windSpeed
attr wetter_xxx readingsRegex_cloudiness cloudiness id="NN" percent="([\d\.]+)
attr wetter_xxx readingsRegex_date date date" content="([\d\.]+)
attr wetter_xxx readingsRegex_dewpointTemperature <dewpoint_c>(\+|-?[\d\.]+)
attr wetter_xxx readingsRegex_fog fog id="FOG" percent="([\d\.]+)
attr wetter_xxx readingsRegex_heatindex <heat_index_c>(\+|-?[\d\.]+)
attr wetter_xxx readingsRegex_humidity <relative_humidity>([\d\.]+)
attr wetter_xxx readingsRegex_pressure <pressure_mb>([\d\.]+)
attr wetter_xxx readingsRegex_rain <precip_today_metric>([\d\.]+)
attr wetter_xxx readingsRegex_solarRadiation <solar_radiation>([\d\.]+)
attr wetter_xxx readingsRegex_solarUV <UV>([\d\.]+)
attr wetter_xxx readingsRegex_temperature <temp_c>(\+|-?[\d\.]+)
attr wetter_xxx readingsRegex_time time Zeit([\d\:]+)
attr wetter_xxx readingsRegex_windChill <windchill_c>(\+|-?[\d\.]+)
attr wetter_xxx readingsRegex_windDegrees <wind_degrees>([\d\.]+)
attr wetter_xxx readingsRegex_windDirection <wind_dir>([\d\.]+)
attr wetter_xxx readingsRegex_windGust <wind_gust_mph>([\d\.]+)
attr wetter_xxx readingsRegex_windSpeed <wind_mph>([\d\.]+)
attr wetter_xxx room Wetter

setstate wetter_xxx 2019-04-21 11:51:08 dewpointTemperature 1.3
setstate wetter_xxx 2019-04-21 11:51:08 humidity 33
setstate wetter_xxx 2019-04-21 11:51:08 pressure 1024.9
setstate wetter_xxx 2019-04-21 11:51:08 rain 0.0
setstate wetter_xxx 2019-04-21 11:51:08 solarRadiation 763
setstate wetter_xxx 2019-04-21 11:51:08 solarUV 4.2
setstate wetter_xxx 2019-04-21 11:51:08 temperature 17.8
setstate wetter_xxx 2019-04-21 11:51:08 windDegrees 88
setstate wetter_xxx 2019-04-21 11:51:08 windGust 11.0
setstate wetter_xxx 2019-04-21 11:51:08 windSpeed 8.0


Mit dem Reading "rain" möchte ich meine Gartenbewässeung steuern.

Dafür habe ich folgenden check angelegt:
defmod check2 at +*00:00:15 DOIF ([wetter_xxx:rain] < 1.0) (set FBDECT_dect200_HTTP_11630_0003228 on-for-timer 10)

Dieser soll aller 15 Sekunden "wetter_xxx:rain" abfragen und wenn dieser unter 1 ist die AVM Steckdose für 10 Sekunden anschalten aber leider habe ich einen Fehler in der Readingabfrage.
Wenn ich in der Eingabe "get wetter_xxx" eingebe bekomme ich folgende ausgabe: "get HTTPMOD" needs at least an argument

FHEM läuft bei mir unter Freetz auf einer Fritzbox.

Einen fleißigen Osterhasen

BennoB




MadMax-FHEM

#1
Du mischst AT und DOIF...

Also entweder ein AT, also sowas in der Art:

defmod check2 at +*00:00:15 {if(ReadingsNum("wetter_xxx","rain",0) < 1.0) {fhem("set FBDECT_dect200_HTTP_11630_0003228 on-for-timer 10")}}

Oder eben DOIF, so in der Art:

defmod check2 DOIF ([wetter_xxx:rain] < 1.0) (set FBDECT_dect200_HTTP_11630_0003228 on-for-timer 10)

Das AT prüft alle 15min 15 Sekunden, das DOIF immer dann, wenn sich der "rain-Wert" des HTTPMOD ändert...


Anmerkung: nicht getestet, also KEIN reiner copy/paste Code...

EDIT: statt beim at nach Perl zu wechseln ( '{ }' siehe auch Klammern bei fhem) kannst du auch das fhem IF nehmen. Bitte bzgl. fhem IF nachlesen (nutze ich selbst nicht).

EDIT2: Anmerkung: at, DOIF und IF sind fhem-Module (also nicht einfach "nur" Befehle!). Das in geschweiften Klammern (hinter der at Definition) ist dann "ganz normale" Perl-Programmierung...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Byte09

#2
wieso möchtest du überhaupt ein reading alle 15 sekunden testen , welches sich per definition max. alle 10 minuten ändern kann ?

das ergiebt überhaupt keinen sinn und belastet das system nur unnötig ?!

und was ändert deine beregnung letztendlich an dem reading 'rain', womit ich sagen will das die steckdose ja bei der nächsten prüfung wieder anschalten wird ( oder du 'sperrst' das ganze dann für einen gewissen zeitraum )

gruss Byte09

MadMax-FHEM

Zitat von: Byte09 am 21 April 2019, 12:25:19
wieso möchtest du überhaupt ein reading alle 15 sekunden testen , welches sich per definition max. alle 10 minuten ändern kann ?

Ups stimmt sind ja Sekunden...
...dachte an Minuten, weil sich der Wert ja max. alle 10min ändern kann ;)

Da hab ich gar nicht so genau beim "at-Define" geschaut...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

BennoB

Danke für die Antworten.
Das mit DOIF und AT war mir  nicht bewusst, wenn du das so sagst ist das natürlich logisch das DOIF immer seine Bedingung prüft.
Ich hatte den Verdacht das etwas mit dem Reading lesen nicht funktioniert. Kann ich das Reading im Terminal testen?

Die 15 Sekunden habe ich derzeit nur zum testen drin. Im fertigen Code soll dann 18:00 geprüft werden ob gegossen werden muss. Sprich, wenn Reading rain unter 1L die letzten 24 Stunden, dann soll 10 Minuten gegossen werden.

Liebe Grüße

BennoB


BennoB

@MadMax-FHEM

Vielen Dank. Scheint zu funktionieren. Für alle die es auch Interessiert:

defmod check at *18:00 {if(ReadingsNum("wetter_xxx","rain",0) < 1.0) {fhem("set FBDECT_dect200_HTTP_08761_0267778 on-for-timer 15")}}

Der Code prüft täglich gegen 18:00 Uhr ob es in den letzten 24 Stunden min. 1 Liter geregnet hat, und wenn nicht, wird für 15 Minuten die Schaltsteckdose FBDECT_dect200_HTTP_08761_0267778 für 15 Minuten angeschaltet.

Liebe Grüße
BennoB

MadMax-FHEM

#6
Zitat von: BennoB am 22 April 2019, 09:10:37
Ich hatte den Verdacht das etwas mit dem Reading lesen nicht funktioniert. Kann ich das Reading im Terminal testen?

Hallo Benno,

du kannst Perl-Aufrufe einfach testen, indem du sie in geschweiften Klammern in das Fhem-WEB-Fenster eingibst, z.B.:

{ReadingsNum("wetter_xxx","rain",0)}

Trotz dem es funktioniert schadet es nicht bzgl. DOIF, at und notify nachzulesen.

Das sind mal die wichtigsten "Module", fhem ist eigentlich "Event-basiert".
Abfragen 1x täglich oder wenn kein eigentlicher Event vorhanden ist gehen nat. auch: at ;)

DOIF ist sehr mächtig, daher da erst mal echt einlesen und verstehen und "klein anfangen"...

notify ist einfacher (zu verstehen): es kommt von einem Gerät/Device (muss nicht physisch sein, kann auch "nur" ein fhem-Device sein) ein Event (Event-Monitor: https://wiki.fhem.de/wiki/Event_monitor öffnen, dann siehst du due Events die so im System "umgehen") und je nach "Einstellung" (RegEx: auch damit auseinander setzen!) reagiert dann das notify und führt eben aus was danach steht (wie bei dir nach dem 'at' / das würde so genauso in einem notify gehen. Wenn allerdings Bedingungen notwendig sind, dann evtl. mal DOIF anschauen ODER: Perl programmieren [ein wenig hast du es ja schon gemacht ;)  ] am besten in einer eigenen Funktion/Sub "ausgelagert" in myUtils: https://wiki.fhem.de/wiki/99_myUtils_anlegen)

Sorry, viele Schlagworte etc.
Aber ohne sich damit (und weiteren: https://wiki.fhem.de/wiki/First_steps_in_FHEM) auseinanderzusetzen wird es mit fhem nicht einfach ;)

Viel Spaß noch!

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

BennoB

Perfekt. Danke. Das hat mir gut geholfen.

Schönen Feiertag noch.

MadMax-FHEM

Zitat von: BennoB am 22 April 2019, 14:35:36
Perfekt. Danke. Das hat mir gut geholfen.

Schönen Feiertag noch.

Super.

Kennzeichnest du dann den Thread als gelöst: umbenennen des ersten Beitrags in beisp. "[gelöst] Bedingung mit HTTPMOD Reading funktioniert nicht"

Danke und ebenso schönen Feiertag, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Byte09

Zitat von: MadMax-FHEM am 22 April 2019, 14:41:09
........  Wenn allerdings Bedingungen notwendig sind, dann evtl. mal DOIF anschauen ODER: Perl programmieren [ein wenig hast du es ja schon gemacht ;)  ] am besten in einer eigenen.......

ich erlaube mir einfach mal das zu ergänzen .
hier würde auch MSwitch in betracht kommen :
https://wiki.fhem.de/wiki/MSwitch

gruss Byte09

MadMax-FHEM

Da hast du nat. recht...

Aber wenn ich anfange alle Module aufzuführen, die man zur (vernünftigen) Steuerung verwenden kann ;)

Und (leider) habe ich mich damit noch nicht beschäftigt...
...gut genausowenig wie mit DOIF ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)