GDS fehlende Reading-Werte c_rain1h

Begonnen von Gisbert, 17 Dezember 2015, 19:39:20

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo,

ich nutze Wetterdaten von GDS-Modul, um damit eine Verschattung zu steuern.
Unter anderem nutze ich die Regenmenge über eine Stunde, um zu entscheiden, ob die Markise unten bleiben kann oder doch reingefahren werden soll.

Ich bekomme jetzt immer wieder folgende Einträge im Logfile, und das alle paar Minuten:
2015.12.17 19:13:31 2: Treppenhaus.Markisensteuerung: reading does not exist: [GDS.Wetter.Leverkusen:c_rain1h]

D.h. der Eintrag c_rain1h, der die Menge Regen in der letzten Stunde anzeigt, fehlt beim Reading.
Im log file, welches zum GDS-Modul gehört, stehen die Werte so wie such gehört.

Hier noch ganze Wettermodul:
define GDS.Wetter.Leverkusen GDS gds12345 uvwxyz
attr GDS.Wetter.Leverkusen gdsSetCond Köln/Bonn-Flh.
attr GDS.Wetter.Leverkusen group Wetter
attr GDS.Wetter.Leverkusen icon temperature_humidity
attr GDS.Wetter.Leverkusen room CUL_HM
define FileLog_GDS.Wetter.Leverkusen FileLog ./log/GDS.Wetter.Leverkusen-%Y-%m.log GDS.Wetter.Leverkusen.(c_temperature|c_weather|c_rain1h|c_windSpeed).*
attr FileLog_GDS.Wetter.Leverkusen logtype text
attr FileLog_GDS.Wetter.Leverkusen room CUL_HM
define SVG_FileLog_GDS.Wetter.Leverkusen_1 SVG FileLog_GDS.Wetter.Leverkusen:SVG_FileLog_GDS.Wetter.Leverkusen_1:CURRENT
attr SVG_FileLog_GDS.Wetter.Leverkusen_1 alias GDS Wetter Leverkusen
attr SVG_FileLog_GDS.Wetter.Leverkusen_1 captionLeft 1
attr SVG_FileLog_GDS.Wetter.Leverkusen_1 sortby 3

Was kann die Ursache für den Fehler sein, der im Sommer noch nicht vorhanden war.

LG
Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

betateilchen

Zuerst solltest Du mal in Deinem Posting den Usernamen und das Passwort entfernen...

Zum Problem selbst:

Das Reading c_rain1h ist nicht immer in jedem Datensatz vorhanden, der von DWD geliefert wird. Manche Werte sind im conditions-file nur stündliche, manche sogar nur einmal pro Tag enthalten. Das heißt, die conditions-Daten zu einer Wetterstation sind kumulativ, die Anzahl der vorhandenen readings verändert sich also innerhalb von 24 Stunden. Ein reading ist nur dann vorhanden, wenn es auch schon einmal einen Wert für die Darstellung gab.

Die Funktion ReadingsVal() die man normalerweise als Anwender zum Lesen von readings benutzt, besitzt als dritten Parameter einen default-Wert, der zurückgeliefert wird, wenn ein Reading nicht vorhanden ist. Dieser Default-Wert ist genau dafür vorgesehen, das von Dir beschriebene Problem zu vermeiden.

Wenn Du in Deinem Szenario andere Wege gehst, um Werte Deiner readings abzufragen, liegt das nicht im Verantwortungsbereich des GDS Moduls oder eines damit definierten devices.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Gisbert

Hallo betateilchen,

vielen Dank für die sehr hilfreichen Erklärungen.

Ich benötige aber noch Unterstützung bei der Funktion ReadingsVal().
Ich nutze dies Format:  [GDS.Wetter.Leverkusen:c_rain1h]
Wie würde denn der 3. Parameter aussehen?
Wenn es mit dem Format mit eckigen Klammern nicht geht, wie sieht dann die Funktion ReadingsVal() aus?

Vielen Dank für die Unterstützung eines interessierten Fhem-Nutzers, aber Software-Laien.

LG
Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

betateilchen

Steht eigentlich alles in der Doku und in ca. 2 Mio Codebeispielen hier im Forum.


ReadingsVal('GDS.Wetter.Leverkusen','c_rain1h',-1)


Liefert entweder den Wert des Readings oder den Wert -1 wenn nicht vorhanden.

Mit dem "eckige-Klammern-Gedöns" kenne ich mich übrigens nicht aus, für mich haben eckige Klammern nur einen Sinn bei der Verwendung von arrays.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Gisbert

Ich hab schon sowas geahnt, und ich hab in weiteren Codeschnipseln ReadingsVal() benutzt, allerdings immer ohne 3. Parametern.
Noch eine Frage zum Ersatzwert: muss der immer -1 sein oder könnte dort auch bspw. auch 0 stehen?

Vielen Dank
LG
Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

betateilchen

Als Ersatzwert kannst Du auch "Günter" oder "Donnerstag" schreiben oder was auch immer Du willst. Natürlich geht auch 0, aber:

Ich verwende meistens einen Wert, der bei vorhandenem Reading nicht vorkommen kann, um bei der weiteren Auswertung unterscheiden zu können, ob e es ein "gültiger" Wert ist.

Einen Wert 0 kann es ja bei c_rain1h durchaus auch geben - wenn es eben nicht geregnet hat.
Aber eine Regenmenge -1 wird es in Realität schwerlich geben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!