FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Bartimaus am 07 Juni 2019, 10:13:02

Titel: [gelöst] FileLog nur mit geänderten Daten befüllen
Beitrag von: Bartimaus am 07 Juni 2019, 10:13:02
Moin,

ich suche eine Möglichkeit, ein FileLog eines Temperatursensors nur mit "geänderten" Daten zu befüllen. Der Sensor liefert periodisch (5min) seine Daten.
Damit möchte ich aber nicht das Log mit gleichen Werten zumüllen.

Das Attribut "Event-on-Change-Reading" im Device hilft mir hier nicht weiter, da ich die Events nicht unterdrücken möchte, weil diverse DOIFs bei mir darauf angewiesen sind.

Mir schwebt, sofern möglich, ein Regex in der Definition des FileLog vor, bin mir da aber nicht sicher, bzw. stehe mit Regex auf Kriegsfuss.

Hat jemand eine Idee und könnte mir einen Schubs geben ? In der Suche habe ich keine Lösung gefunden.
Titel: Antw:FileLog nur mit geänderten Daten befüllen
Beitrag von: MadMax-FHEM am 07 Juni 2019, 10:16:09
Alternative: userreadings welches quasi eine Kopie des Original-Readings ist, darauf dann event-on-change-reading und das dann loggen statt des Original-Events...

(oder das userreadings für DOIF/notify etc. und weiterhin das Original-Reading mit event-on-change-reading loggen)

Gruß, Joachim
Titel: Antw:FileLog nur mit geänderten Daten befüllen
Beitrag von: Bartimaus am 07 Juni 2019, 11:53:03
Danke, werde ich mal testen. Gute Idee
Titel: Antw:FileLog nur mit geänderten Daten befüllen
Beitrag von: Bartimaus am 07 Juni 2019, 12:53:22
Hm, damit mein FileLog weiterhin mit dem gleichen Reading befüllt wird, habe ich mich für Variante2 mit dem Extra-Userreading  für DOIF und Co entschieden.
Aber: Im Eventlog sehe ich das Userreading nicht, auch im DOIF taucht es nicht unter den verknüpften Devices unter "Readings" auf.

Mach ich hier was falsch ?
Titel: Antw:FileLog nur mit geänderten Daten befüllen
Beitrag von: MadMax-FHEM am 07 Juni 2019, 13:50:23
Zitat von: Bartimaus am 07 Juni 2019, 12:53:22
Mach ich hier was falsch ?

Bestimmt ;)

Poste doch mal ein list des Devices...

Gruß, Joachim
Titel: Antw:FileLog nur mit geänderten Daten befüllen
Beitrag von: Bartimaus am 07 Juni 2019, 14:36:00


Bitte...

ZitatInternals:
   ALARM      0
   ASYNC      1
   CHANGED   
   DEF        DS18B20 FF5184B41603
   ERRCOUNT   0
   FUUID      5c7244b6-f33f-dcb4-8417-530b5692b813f275
   INTERVAL   300
   IODev      1wire
   NAME       Temp_Wohnzimmer
   NOTIFYDEV  global
   NR         1159
   NTFY_ORDER 50-Temp_Wohnzimmer
   NUMTASKS   0
   OW_FAMILY  28
   OW_ID      FF5184B41603
   PRESENT    1
   ROM_ID     28.FF5184B41603.41
   STATE      23.5°C
   TYPE       OWTHERM
   owg_cf     9
   owg_temp   23.5
   owg_th     75
   owg_tl     0
   OLDREADINGS:
   READINGS:
     2019-06-07 14:33:45   Temperatur      23.50
     2019-05-25 01:54:59   alarm           1
     2019-05-25 01:59:49   present         1
     2019-06-07 13:59:55   statTemperatureDay Min: 0.0000 Avg: 22.9084 Max: 23.5000
     2019-06-07 13:59:55   statTemperatureMonth Min: 0.0000 Avg: 24.2763 Max: 23.5000
     2019-06-07 13:59:55   statTemperatureYear Min: 0.0000 Avg: 21.8740 Max: 23.5000 (since:  )
     2019-06-07 14:33:45   state           T: 23.50 °C
     2019-06-07 14:33:45   temperature     23.5
   helper:
     _98_statistics TempStatistik
   owg_val:
     0
     0
     0
     1
     1
     1
     1
     0
   owg_vax:
     1
     0
     0
     0
     0
     0
     0
     0
   tempf:
     factor     1
     offset     0
Attributes:
   IODev      1wire
   event-on-change-reading temperature:1
   group      Temperaturen
   model      DS18B20
   resolution 9
   room       1wire,Favourites
   stateFormat {sprintf("%.1f°",ReadingsVal("$name","temperature",0))."C"}
   tempHigh   75
   tempLow    0
   tempUnit   Celsius
   userReadings Temperatur {ReadingsNum("Temp_Wohnzimmer","state","")}
Titel: Antw:FileLog nur mit geänderten Daten befüllen
Beitrag von: MadMax-FHEM am 07 Juni 2019, 14:57:25
Also das userReadings funktioniert schon mal...

Zwei Anmerkungen (haben aber nichts mit dem Problem zu tun [denke ich]):


stateFormat {sprintf("%.1f°",ReadingsVal("$name","temperature",0))."C"}


Hier arbeitest du mit Strings (und ReadingsVal gibt auch [meist] Strings zurück), gibst aber als "Ersatzwert" eine Zahl an...
(macht nichts Perl ist hier [wohl] sehr geduldig ;)  )


Im Gegensatz zu hier:

userReadings Temperatur {ReadingsNum("Temp_Wohnzimmer","state","")}


Wo du mit ReadingsNum "bewusst" nach einer Zahl "frägst", als "Ersatzwert" aber einen String angibst ;)


Ich kann grad nicht testen aber dass kein Event kommt wundert mich (bzw. konnte ich auf die schnelle nichts finden dass/warum KEIN Event erzeugt werden sollte)...

Das mit DOIF verstehe ich nicht, also verstehe nicht was du meinst!?

Evtl. brauchst du noch das Attribut readingList (für das DOIF-Zeugs / es steht zwar in der commandref nur bzgl. Dummy aber man weiß ja nie)...

Zitat von: commandref
Die unter Dummy beschriebenen Attribute readingList und setList stehen auch im DOIF zur Verfügung. Damit wird erreicht, dass DOIF im WEB-Frontend als Eingabeelement mit Schaltfunktion dienen kann. Zusätzliche Dummys sind nicht mehr erforderlich. Es können im Attribut setList, die in FHEMWEB angegebenen Modifier des Attributs widgetOverride verwendet werden.

Wenn ich nachher zuhause bin teste ich das mal...
...allerdings kann ich das nur bzgl. Event testen.

Bei DOIF kenne ich mich nicht aus...
...und wie geschrieben verstehe ich nicht (genau) was du meinst...

Gruß, Joachim

P.S.: nächstes Mal besser in "code-Tags" ('#' im Menü) posten, statt als "Zitat"... ;)
Titel: Antw:FileLog nur mit geänderten Daten befüllen
Beitrag von: Bartimaus am 07 Juni 2019, 15:44:21
Hallo Joachim,

danke für Deine Analyse. Zum Glück ist Perl wirklich sehr geduldig. Denn ich habe stateFormat/userReadings mir aus Wiki, Forenbeiträge etc. zusammengesucht, und es funktioniert ja auch.

Was mir jetzt beim genauen lesen aber auffällt, durch das Attribut "Event-on...:temperature:1" schränke ich die Events doch genau auf das Reading "temperature" ein. Und zwar mit Schwellenwert "1".

Ohne dieses Attribut wird gefeuert, und ich sehe das im Eventlog, als auch in der Readingsektion des DOIF.

Ich hab das jetzt mal ergänzt um das Reading "Temperatur" ohne Schwellenwert.
Titel: Antw:FileLog nur mit geänderten Daten befüllen
Beitrag von: MadMax-FHEM am 07 Juni 2019, 16:44:34
Wenn du es zu event-on-change-reading hinzugefügt hast, dann bekommst du für Temperatur aber nur Events, wenn sich der Wert ändert...
Besser vielleicht das bei event-on-update-reading.
Dann bekommst du Events auch wenn/obwohl der Wert gleich geblieben ist...
Das willst du doch wegen deiner Logiken!?

Ich probiere das später mal aus...

EDIT: also ich habe (leider nur mit Dummy) ein wenig "rumgespielt" und mit event-on-update-reading bekomme ich einen Event bzgl. Temperatur EGAL welches Reading beim Dummy getriggert wird (wenn du dann zu viele Events bekommst, dann das userReadings weiter einschränken). Alles andere (readingList, event-on-change-reading auch für Temperatur) hat bei mir nichts bewirkt... Aber wie geschrieben: kein OW...

Habe allerdings kein OW im Einsatz...

Gruß, Joachim
Titel: Antw:FileLog nur mit geänderten Daten befüllen
Beitrag von: Bartimaus am 07 Juni 2019, 17:40:19
So, jetzt mal mit "event-update" statt "event-change" eingestellt, incl. Schwellenwert bei "temperature" (<- fürs FileLog) und alles funktioniert wie gewünscht. Merci vielmals.
Titel: Antw:FileLog nur mit geänderten Daten befüllen
Beitrag von: MadMax-FHEM am 07 Juni 2019, 19:05:17
Na dann wunderbar! :)

Bitte den Thread dann als gelöst markieren, umbenennen des 1 Posts in beispielsweise [gelöst] FileLog nur mit geänderten Daten befüllen

Gruß, Joachim