Autor Thema: Neues Reading "THDA" durch 98_dewpoint  (Gelesen 740 mal)

Offline Gast45

  • Jr. Member
  • **
  • Beiträge: 68
Neues Reading "THDA" durch 98_dewpoint
« am: 02 Juni 2018, 15:52:22 »
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:
Zitat
Veraltet, 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.

 
« Letzte Änderung: 02 Juni 2018, 16:30:10 von Gast45 »
Meist liegt der Fehler vor der Tastatur
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline hotbso

  • Developer
  • Jr. Member
  • ****
  • Beiträge: 87
Antw:Neues Reading "THDA" durch 98_dewpoint
« Antwort #1 am: 03 Juni 2018, 17:07:22 »
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

Offline sash.sc

  • Hero Member
  • *****
  • Beiträge: 1277
Antw:Neues Reading &quot;THDA&quot; durch 98_dewpoint
« Antwort #2 am: 03 Juni 2018, 19:05:24 »
Aber das STATE wird ja nicht mehr geloggt mit der aktuellen Version.

Gruß Sascha

Gesendet von meinem E6653 mit Tapatalk

Raspi 2 ; LaCrosse; HomeMatic; 1x TX 29 als Lichtsensor umgebaut;
ESP8622 ;nanoCUL a-fw (433 & 868 MHz); miniCULwlan;
WLANduino 433&868 ; WlanCul

Offline Gast45

  • Jr. Member
  • **
  • Beiträge: 68
Antw:Neues Reading "THDA" durch 98_dewpoint
« Antwort #3 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)
Meist liegt der Fehler vor der Tastatur

Offline hotbso

  • Developer
  • Jr. Member
  • ****
  • Beiträge: 87
Antw:Neues Reading &quot;THDA&quot; durch 98_dewpoint
« Antwort #4 am: 03 Juni 2018, 19:30:15 »
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


Offline Gast45

  • Jr. Member
  • **
  • Beiträge: 68
Antw:Neues Reading "THDA" durch 98_dewpoint
« Antwort #5 am: 03 Juni 2018, 19:51:34 »
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....
« Letzte Änderung: 03 Juni 2018, 19:54:49 von Gast45 »
Meist liegt der Fehler vor der Tastatur

Offline hotbso

  • Developer
  • Jr. Member
  • ****
  • Beiträge: 87
Antw:Neues Reading &quot;THDA&quot; durch 98_dewpoint
« Antwort #6 am: 03 Juni 2018, 19:56:43 »
Hoffentlich dahinter...

Gesendet von meinem Nexus 5X mit Tapatalk


Offline Gast45

  • Jr. Member
  • **
  • Beiträge: 68
Antw:Neues Reading "THDA" durch 98_dewpoint
« Antwort #7 am: 03 Juni 2018, 20:14:52 »
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
Zitat
Hoffentlich 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?
« Letzte Änderung: 03 Juni 2018, 20:46:19 von Gast45 »
Meist liegt der Fehler vor der Tastatur

Offline hotbso

  • Developer
  • Jr. Member
  • ****
  • Beiträge: 87
Antw:Neues Reading &quot;THDA&quot; durch 98_dewpoint
« Antwort #8 am: 03 Juni 2018, 21:58:08 »
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


Offline Gast45

  • Jr. Member
  • **
  • Beiträge: 68
Antw:Neues Reading "THDA" durch 98_dewpoint
« Antwort #9 am: 03 Juni 2018, 22:40:31 »
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.....
« Letzte Änderung: 03 Juni 2018, 22:47:29 von Gast45 »
Meist liegt der Fehler vor der Tastatur

Offline hotbso

  • Developer
  • Jr. Member
  • ****
  • Beiträge: 87
Antw:Neues Reading &quot;THDA&quot; durch 98_dewpoint
« Antwort #10 am: 04 Juni 2018, 06:10:02 »
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


Offline hotbso

  • Developer
  • Jr. Member
  • ****
  • Beiträge: 87
Antw:Neues Reading "THDA" durch 98_dewpoint
« Antwort #11 am: 04 Juni 2018, 08:58:33 »
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);
}

Offline Gast45

  • Jr. Member
  • **
  • Beiträge: 68
Antw:Neues Reading "THDA" durch 98_dewpoint
« Antwort #12 am: 04 Juni 2018, 19:43:52 »
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

Offline Gast45

  • Jr. Member
  • **
  • Beiträge: 68
Antw:Neues Reading "THDA" durch 98_dewpoint
« Antwort #13 am: 04 Juni 2018, 19:56:20 »
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

Offline hotbso

  • Developer
  • Jr. Member
  • ****
  • Beiträge: 87
Antw:Neues Reading &quot;THDA&quot; durch 98_dewpoint
« Antwort #14 am: 04 Juni 2018, 19:57:08 »
Du kannst ja mit dem regexp steuern, wann das Userreading läuft.

Gesendet von meinem Nexus 5X mit Tapatalk