Hallo zusammen,
ich weiß nicht wie ihr das seht, aber bisher hat es mir gut gefallen, dass man den STATE durch die Taupunktberechnung erweitern konnte. Das ist so jetzt ja nicht mehr gewünscht.
CommandRef:
ZitatVeraltet, für neue Definitionen nicht mehr benutzen
Wenn <temp_name> T lautet, wird die Temperatur aus state T: H: benutzt und <new_name> zu STATE hinzugefügt. Das hinzufügen zu STATE erfolgt nur, falls im Zielgerät das Attribut "stateFormat" nicht definiert ist.
Wie wäre es, vielleicht auch nur auf Wunsch, ein zusätzliches Reading zu erzeugen, in dem alle drei bzw. vier Werte geschrieben werden. Ich denke das sollte mit einer Zeile Code realisierbar sein?
Readingname eventuell: THD bzw. THDA
Aufbau: die genutzten bzw. berechneten Werte (eventuell mit Kürzel)
Beispiel: T: 7.4 H: 87.0 D: 5.4 A: 6.9
Dadurch hann man dieses Reading in ein FileLog schreiben und hat alle Werte in einer Zeile vorliegen. Das hält das Log knapp und ist auch deutlich leichter zu lesen.
Ungern, da dir Grundphilosophie von FHEM ist Reading = 1 Wert ohne Einheit. Man kann das allerding auch ganz leicht mit einem Userreading lösen:
THDA:(humidity|temperature).* {sprintf("%.1f H: %.1f D: %.1f A: %.1f", ReadingsVal("Thermo_In","temperature",0),ReadingsVal("Thermo_In", "humidity",0),ReadingsVal("Thermo_In","dewpoint",0),ReadingsVal("Thermo_In","absFeuchte",0))}
Durch den Regexp (humidity|temperature).* wird das übrigens nur einmal evaluiert und du hast auch keine doppelten Zeilen im log. Nach dem RegExp THDA im FileLog sieht das ganze so aus:
2018-06-03_17:02:15 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.8 A: 13.0
2018-06-03_17:02:24 Thermo_In THDA: T: 24.8 H: 57.0 D: 15.8 A: 13.0
2018-06-03_17:02:29 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.7 A: 12.9
2018-06-03_17:02:33 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.8 A: 13.0
2018-06-03_17:02:38 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.8 A: 13.0
2018-06-03_17:02:42 Thermo_In THDA: T: 24.8 H: 57.0 D: 15.8 A: 13.0
2018-06-03_17:02:46 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.7 A: 12.9
2018-06-03_17:02:51 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.8 A: 13.0
2018-06-03_17:02:55 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.8 A: 13.0
2018-06-03_17:03:04 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.8 A: 13.0
2018-06-03_17:03:13 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.8 A: 13.0
2018-06-03_17:03:22 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.8 A: 13.0
2018-06-03_17:03:31 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.8 A: 13.0
2018-06-03_17:03:40 Thermo_In THDA: T: 24.9 H: 57.0 D: 15.8 A: 13.0
Wenn du stateFormat auf THDA setzt, hast du das ganze auch im STATE
Aber das STATE wird ja nicht mehr geloggt mit der aktuellen Version.
Gruß Sascha
Gesendet von meinem E6653 mit Tapatalk
Das mit dem userReading habe ich mir schon gebastelt. Aber dann habe ich das Problem mit zwei Einträgen im FileLog von denen einer quasi falsch ist.
https://forum.fhem.de/index.php?topic=88098.new;topicseen#lastPost
(Antwort #23)
Zitat von: Gast45 am 03 Juni 2018, 19:22:30
Das mit dem userReading habe ich mir schon gebastelt. Aber dann habe ich das Problem mit zwei Einträgen im FileLog von denen einer quasi falsch ist.
https://forum.fhem.de/index.php?topic=88098.new;topicseen#lastPost
(Antwort #23)
Wie ich oben geschrieben habe, muss dein Userreading einen regexp haben!!!!!!!!
Sonst wird er evaluiert wenn temperature und humidity ein Event generieren, und dann noch mal (!), wenn der dewpoint erzeugt wird. Dann bekommst du natürlich zwei Einträge.
Gesendet von meinem Nexus 5X mit Tapatalk
Sorry, aber so richtig kann ich dir nicht folgen. Meineserachtens habe ich das doch so gemacht? Ich nutze zwar als userReading zur Zeit "state", aber ich habe es auch THDA versucht und dann auch auf THDA gefiltert. Das Ergebnis war aber das gleiche. Oder fehlt mir etwas was ich nicht verstehe?
Hier nochmal die beiden Konfigurationen:
Internals:
CHANGED
NAME SensorAussen
NR 41
STATE T: 20.0 H: 74.0 D: 15.2 A: 12.8
TYPE dummy
OLDREADINGS:
READINGS:
2018-02-04 12:12:25 Batteriewechsel 0
2018-06-03 19:50:12 absFeuchte 12.8
2018-06-03 19:50:12 dewpoint 15.2
2018-06-03 19:51:12 humidity 74.0
2018-06-03 19:51:12 state T: 20.0 H: 74.0 D: 15.2 A: 12.8
2018-06-03 19:51:12 temperature 20.0
Attributes:
event-min-interval .*:175
event-on-change-reading humidity,temperature,state
group Sensordaten clonen – verarbeiten – loggen
icon temperature_humidity
room Sensoren
stateFormat {sprintf("T: %.1f H: %.1f D: %.1f A: %.1f", ReadingsVal("SensorAussen","temperature",0),
ReadingsVal("SensorAussen","humidity",0),
ReadingsVal("SensorAussen","dewpoint",0),
ReadingsVal("SensorAussen","absFeuchte",0))}
userReadings state {sprintf("T: %.1f H: %.1f D: %.1f A: %.1f", ReadingsVal("SensorAussen","temperature",0),
ReadingsVal("SensorAussen","humidity",0),
ReadingsVal("SensorAussen","dewpoint",0),
ReadingsVal("SensorAussen","absFeuchte",0))}
Internals:
DEF ./log/SensorAussen-%Y.log SensorAussen:T:.*
NAME FileLog_SensorAussen
NOTIFYDEV SensorAussen
NR 30
NTFY_ORDER 50-FileLog_SensorAussen
REGEXP SensorAussen:T:.*
STATE active
TYPE FileLog
currentlogfile ./log/SensorAussen-2018.log
logfile ./log/SensorAussen-%Y.log
READINGS:
2018-06-03 19:41:52 linesInTheFile 57021
pos:
Attributes:
archiveCompress 1
archivedir ./log/archiv
group Sensordaten clonen – verarbeiten – loggen
logtype temp4hum4:Temp/Hum,text
nrarchive 1
room CUL_TX
verbose 5
Zumindest hatte ich vorhin mal zum Test vor das userReading
(humidity|temperature).*
gesetzt.
Dann wurde das userReading zumindest bei mir nicht mehr aktualisiert. Mh....
Hoffentlich dahinter...
Gesendet von meinem Nexus 5X mit Tapatalk
Wärest du bitte so nett und schreibst mal genau was ich machen muss :)
Ich habe folgendes probiert:
1.
attr SensorAussen userReadings state:(humidity|temperature).* {sprintf("T: %.1f H: %.1f D: %.1f A: %.1f", ReadingsVal("SensorAussen","temperature",0),ReadingsVal("SensorAussen", "humidity",0),ReadingsVal("SensorAussen","dewpoint",0),ReadingsVal("SensorAussen","absFeuchte",0))}
Ergebins genauso wie vorher doppelte Einträge im FileLog
2. Aufgrund deines Hinweises
ZitatHoffentlich dahinter...
attr SensorAussen userReadings state {sprintf("T: %.1f H: %.1f D: %.1f A: %.1f", ReadingsVal("SensorAussen","temperature",0),ReadingsVal("SensorAussen", "humidity",0),ReadingsVal("SensorAussen","dewpoint",0),ReadingsVal("SensorAussen","absFeuchte",0))} (humidity|temperature).*
Ergebnis gar keine Einträge im FileLog
edit:Gemäß CommandRef
Zitat<reading>[:<trigger>] [<modifier>] { <perl code> }
lag ich mit Variante 1 richtig. Ich experimentiere morgen nochmal. Vielleicht muss ich temperature und humidity genauer bezüglich SensorAussen spezifizieren?
Der Code aus Posting 2 ist aus meiner Live Installation. Gib den doch einfach mal ein, natürlich Thermo_In ersetzen. Wenn dann immer noch Einträge doppelt kommen, dann ersetze den regexp durch dewpoint.*.
Gesendet von meinem Nexus 5X mit Tapatalk
Ich verstehe es nicht :(
Also jetzt ist mir folgendes aufgefallen:
1. Da ich event-on-change nutze, muss das userReading in der Liste stehen, damit überhaupt was im FileLog steht
2. Ich nutze bisher als userReading "state". Da passiert es wie erwähnt, dass ich zwei Einträge im FileLog habe. Könnte vielleicht an der Sonderrolle des Readings "state" liegen?
3. ich habe deshalb mal auf ein userReading "T" umgestellt. Dabei werden bei mir zwar die Einträge für Temperatur und Humidity neu reingeschrieben, aber die Werte für dewpoint und absFeuchte bleiben von vorher erhalten. Das userReading "T" landet zwar nur mit einer Zeile im FileLog, aber eben mit nicht konsistenten Daten :(
Definition des userReadings:
T:(humidity|temperatur).*
{sprintf("%.1f H: %.1f D: %.1f A: %.1f",
ReadingsVal("SensorAussen","temperature",0),
ReadingsVal("SensorAussen","humidity",0),
ReadingsVal("SensorAussen","dewpoint",0),
ReadingsVal("SensorAussen","absFeuchte",0))}
Ergebnis im FileLog:
1. 2018-06-03_22:35:52 SensorAussen T: 20.0 H: 74.0 D: 15.2 A: 12.8
2. 2018-06-03_22:38:52 SensorAussen T: 20.0 H: 74.0 D: 15.2 A: 12.8
3. 2018-06-03_22:41:52 SensorAussen T: 20.0 H: 74.0 D: 15.2 A: 12.8
4. 2018-06-03_22:42:32 SensorAussen T: 17.0 H: 74.0 D: 15.2 A: 12.8
5. 2018-06-03_22:44:52 SensorAussen T: 17.0 H: 74.0 D: 12.3 A: 10.7
2. Zeile: neuer Eintrag nach 3 Minuten
3. Zeile: neuer Eintrag nach 3 Minuten
4. Zeile: Temperatur geändert, aber D und A sind alt!
5. Zeile: erst nach Zeitablauf werden auch D und A nachgezogen
Jetzt wird es mir aber definitiv zu spät für heute ;)
Danke bis hierher.....
Wenn du nach wie vor in deinem at Befehl mit separaten (!) setreading für temperature und humidity arbeitest, werden natürlich zwei separate Event streams ausgelöst und der dewpoint zweimal berechnet. Daher bekommst du mit dieser Logik immer zwei Einträge im Log.
Gesendet von meinem Nexus 5X mit Tapatalk
Bau das mal in dein at ein
+*00:00:20 { my $temp= ReadingsVal("SensorAussenQuelle","temperature",0);
my $hum= ReadingsVal("SensorAussenQuelle","humidity",0);
my $hash=$defs{"SensorAussen"};
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, "temperature",$temp);
readingsBulkUpdate($hash, "humidity", $hum);
readingsEndUpdate($hash, 1);
}
Hi,
ich hatte zuerst den at wie folgt definiert:
+*00:00:20 {
my $temp= ReadingsVal("SensorAussenQuelle","temperature",0) ;
my $hum= ReadingsVal("SensorAussenQuelle","humidity",0) ;
fhem("setreading SensorAussen temperature $temp");
fhem("setreading SensorAussen humidity $hum");}
Dabei stellte sich heraus, dass ich ein max-timediff-Problem habe, weil bei geänderter Temperatur noch ein 20 Sekunden alter Luftfeuchtewert vorlag, und somit keine Berechnung des Taupunktes erfolgte. Seit dem nutze ich folgende Konfiguration:
+*00:00:20 {
my $temp= ReadingsVal("SensorAussenQuelle","temperature",0) ;
my $hum= ReadingsVal("SensorAussenQuelle","humidity",0) ;
fhem("setreading SensorAussen temperature $temp;setreading SensorAussen humidity $hum");}
Da hier beide Werte in einem Rutsch kopiert werden ist das max-timediff-Problem weg. Ich hatte hier jetzt kein Problem mehr erwartet.
Allerdings hat dein Vorschlag auch nicht geholfen. Das Ergebnis ist immernoch das gleiche:
2018-06-04_19:32:56 SensorAussen T: 19.0 H: 74.0 D: 14.3 A: 12.0
2018-06-04_19:35:56 SensorAussen T: 19.0 H: 74.0 D: 14.3 A: 12.0
2018-06-04_19:37:16 SensorAussen T: 21.0 H: 74.0 D: 14.3 A: 12.0
2018-06-04_19:37:16 SensorAussen T: 21.0 H: 74.0 D: 16.2 A: 13.5
Offensichtlich wird ein Event erzeugt, sobald das userReading geändert wird, aber noch keine Berechnung erfolgte. Und ein weiteres Event, wenn durch die Berechnung das UserReading erneut geändert wird. Ich weiß nur noch nicht genau, was ich mit dieser Information anfangen soll ;D
Aus Verzweiflung habe ich jetzt mal die Event-on-change-Definition gelöscht:
attr SensorAussen event-on-change-reading humidity,temperature,state
Jetzt häufen sich die Events im Eventlog:
2018-06-04 19:50:36 dummy SensorAussen temperature: 21.0
2018-06-04 19:50:36 dummy SensorAussen humidity: 74.0
2018-06-04 19:50:36 dummy SensorAussen absFeuchte: 13.5
2018-06-04 19:50:36 dummy SensorAussen dewpoint: 16.2
2018-06-04 19:50:36 at cp_SensorAussenQuelle_to_SensorAussen Next: 19:50:56
2018-06-04 19:50:56 dummy SensorAussen temperature: 21.0
2018-06-04 19:50:56 dummy SensorAussen humidity: 74.0
2018-06-04 19:50:56 dummy SensorAussen absFeuchte: 13.5
2018-06-04 19:50:56 dummy SensorAussen dewpoint: 16.2
2018-06-04 19:50:56 at cp_SensorAussenQuelle_to_SensorAussen Next: 19:51:16
2018-06-04 19:51:08 CUL_TX SensorAussenQuelle temperature: 18.0
2018-06-04 19:51:16 dummy SensorAussen temperature: 18.0
2018-06-04 19:51:16 dummy SensorAussen humidity: 74.0
2018-06-04 19:51:16 dummy SensorAussen absFeuchte: 11.3
2018-06-04 19:51:16 dummy SensorAussen dewpoint: 13.3
2018-06-04 19:51:16 at cp_SensorAussenQuelle_to_SensorAussen Next: 19:51:36
2018-06-04 19:51:36 dummy SensorAussen temperature: 18.0
2018-06-04 19:51:36 dummy SensorAussen humidity: 74.0
2018-06-04 19:51:36 dummy SensorAussen absFeuchte: 11.3
2018-06-04 19:51:36 dummy SensorAussen dewpoint: 13.3
2018-06-04 19:51:36 at cp_SensorAussenQuelle_to_SensorAussen Next: 19:51:56
2018-06-04 19:51:56 dummy SensorAussen temperature: 18.0
2018-06-04 19:51:56 dummy SensorAussen humidity: 74.0
2018-06-04 19:51:56 dummy SensorAussen absFeuchte: 11.3
2018-06-04 19:51:56 dummy SensorAussen dewpoint: 13.3
2018-06-04 19:51:56 at cp_SensorAussenQuelle_to_SensorAussen Next: 19:52:16
Und im FileLog erscheinen jetzt natürlich nur noch alle 3 Minuten Einträge. Diese aber dann wenigstens nicht mehr doppelt und konsistent:
2018-06-04_19:43:16 SensorAussen T: 21.0 H: 74.0 D: 16.2 A: 13.5
2018-06-04_19:46:16 SensorAussen T: 21.0 H: 74.0 D: 16.2 A: 13.5
2018-06-04_19:49:16 SensorAussen T: 21.0 H: 74.0 D: 16.2 A: 13.5
2018-06-04_19:52:16 SensorAussen T: 18.0 H: 74.0 D: 13.3 A: 11.3
2018-06-04_19:55:16 SensorAussen T: 18.0 H: 74.0 D: 13.3 A: 11.3
Du kannst ja mit dem regexp steuern, wann das Userreading läuft.
Gesendet von meinem Nexus 5X mit Tapatalk
ZitatDu kannst ja mit dem regexp steuern, wann das Userreading läuft.
Das hattest du ja gesagt, und ich hatte und habe es noch so definiert:
state:(humidity|temperature).*
{sprintf("T: %.1f H: %.1f D: %.1f A: %.1f",
ReadingsVal("SensorAussen","temperature",0),
ReadingsVal("SensorAussen","humidity",0),
ReadingsVal("SensorAussen","dewpoint",0),
ReadingsVal("SensorAussen","absFeuchte",0))}
Aber es wollte ja nicht so richtig wirken?! :(
Aber trotzdem natürlich besten Dank für die Unterstützung. So macht es trotz der Probleme doch noch Spass ;)
https://forum.fhem.de/index.php/topic,88452.0.html