Neues Reading "THDA" durch 98_dewpoint

Begonnen von Gast45, 02 Juni 2018, 15:52:22

Vorheriges Thema - Nächstes Thema

Gast45

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.

Meist liegt der Fehler vor der Tastatur

hotbso

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

sash.sc

Aber das STATE wird ja nicht mehr geloggt mit der aktuellen Version.

Gruß Sascha

Gesendet von meinem E6653 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Gast45

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)
Meist liegt der Fehler vor der Tastatur

hotbso

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


Gast45

#5
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....
Meist liegt der Fehler vor der Tastatur

hotbso

Hoffentlich dahinter...

Gesendet von meinem Nexus 5X mit Tapatalk


Gast45

#7
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?
Meist liegt der Fehler vor der Tastatur

hotbso

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


Gast45

#9
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.....
Meist liegt der Fehler vor der Tastatur

hotbso

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


hotbso

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);
}

Gast45

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
Meist liegt der Fehler vor der Tastatur

Gast45

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
Meist liegt der Fehler vor der Tastatur

hotbso

Du kannst ja mit dem regexp steuern, wann das Userreading läuft.

Gesendet von meinem Nexus 5X mit Tapatalk


Gast45

#15
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?! :(
Meist liegt der Fehler vor der Tastatur

Gast45

#16
Aber trotzdem natürlich besten Dank für die Unterstützung. So macht es trotz der Probleme doch noch Spass ;)
Meist liegt der Fehler vor der Tastatur