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.
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
Danke, werde ich mal testen. Gute Idee
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 ?
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
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","")}
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"... ;)
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.
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
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.
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