DHT22-Messwerte in fhem auslesen

Begonnen von zYloriC, 16 Juli 2014, 16:22:01

Vorheriges Thema - Nächstes Thema

LuckyDay

ZitatDanke, aber ich möchte gerne nur eine Zeile pro Log-Datei Eintrag haben.

da versperrst die Standard Attribute, wie du siehst auch das dewpoint modul, auch einfaches rechnen mit deiner Variante ist "unlustig"

zumal man mit attr userReadings sich auch diesen Logdatensatz wie du ihn haben willst , neu erzeugen kann
hast doch alle Möglichkeiten offen




Bracew

Ok, ausprobiert. Danke für die tolle Hilfe.

Wenn ich das Log-File auf Zweizeilig umstelle bekomme ich nun die Anzeige
ZitatSensorKellerBuero  T:17.0 H:65.0
also prima, alles OK,
aber den Plot musste ich wieder auf temp4hum4.gplot zurückstellen, damit er auch wieder funktioniert.

Ich muss nun erstmal mit meiner Frau einkaufen gehen.

Wäre es zuviel verlangt nachzufragen, wie ich das
a) in "SensorKellerBuero  Temperatur:17.0°C  Feuchtigkeit: 65.0 %" angezeigt bekommen?
b) und wie das mit dem Taupunkt (dewpoint modul) funktioniert?

Vielen Dank von Bracew
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

PeMue

Zitat von: Bracew am 08 Oktober 2016, 16:54:54
Wäre es zuviel verlangt nachzufragen, wie ich das
a) in "SensorKellerBuero  Temperatur:17.0°C  Feuchtigkeit: 65.0 %" angezeigt bekommen?
Nein, keineswegs. Aber mit ein bisschen Nachdenken, kämest Du auf mindestens auf die erste Lösung selbst  ;)
1. /opt/fhem/fhem.pl 7072 "setreading SensorKellerBuero Temperatur: $Temp Feuchtigkeit: $Hum" in Deinem Skript  und entsprechend Dein FileLog anpassen. Ich mag das nicht, da dadurch sinnlos das Log-File vergrößert wird.

2. mit userReadings oder mit stateFormat erzeugen.

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Bracew

Hallo PeMue,

zu 1.)
eben, ich mag das auch nicht, dass das Log-File sinnlos vergrößert wird, deswegen wollte ich ja ursprünglich alle Messwerte eines Zeitpunktes jeweils in eine Zeile packen. Aber Ihr habt mich ja schon auf zweizeilig überredet.

Nun packst Du aber wieder alles in eine Zeile! und im Log steht doch schon "temperature:" bzw. "humidity:" aber angezeigt wird "T:" und "H:"?

Ich dachte halt, man könnte zu den gelesenen Werten für Temperatur und Feuchtigkeit einen "beliebigen" Text hinzufügen ohne dies in die Logdatei zu schreiben. Also gut, dann bleibt es eben bei der Kurzform "SensorKellerBuero  T:17.0 H:65.0". Nicht schön, aber wenigstens korrekt.

zu 2.)
Wie schon mal erwähnt, stehe ich mit den neuen Begriffen auf Kriegsfuß. Ich habe halt damals zu meiner Zeit in Fortran77 noch mit Variablen, Konstanten, etc. mal gelernt und nicht userReadings oder stateFormat.
Ich möchte Deine Zeit nicht überbeanspruchen, aber kannst Du mir etwas mehr "Butter bei die Fische" geben?

Gruß Bracew

P.S. Im Moment, nachdem die Log-Datei neu erstellt wurde (nur wenig Messwerte), sieht die Ausgabe so aus:
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

PeMue

ok, ich probier's mal (aber vermutlich bin ich auch nicht der beste Experte):

Jedes fhem Modul hat standardmäßig einen state bzw. dann beliebige (je nach Notwendigkeit generierte) Readings. Übersetzt heißt das, das jedes Modul eine Variable Status hat (die immer da ist, aber durchaus unterschiedlichen Inhalt haben kann) und beliebige andere Variablen.

Mit dem Attribut stateFormat kann man das Aussehen der Variable state anpassen. D.h. man könnte beispielsweise an eine Temperatur ein ° C anhängen. So weit ich weiß (da fehlt aber mein Expertentum) kann man keine zusätzlichen Readings einfügen.

Aus den anderen Readings kann man sich mit userReadings eigene Readings generieren (so wie z.B. aus der relativen Feuchtigkeit und der Temperatur den Taupunkt errechnen und diesen als neues Reading einfügen).

Bei Dir ist die Sache etwas einfacher: Du hast in fhem einen Dummy, in dem Du im Prinzip machen kannst, was Du willst.
Sprich: Wie die Readings aussehen bzw. wie Dein state aussehen soll, kannst Du über dein Skript entscheiden. Und: auch wenn die Readings vorhanden sind, heißt das noch lange nicht, dass diese in Deinem FileLog gespeichert werden.
Aus diesem Grund war ja mein Vorschlag, folgende Readings zu generieren:
- temperature
- humiditiy und die Kombination für das FileLog
- T: xx H: yy
Dann bist Du völlig frei, wie Du dann state bzw. Dein FileLog generierst.

Und: ggf. in der commandref nachschauen (es gibt leider keinen Direktlink, aber nach stateFormat bzw. UserReadings suchen).

Ich hoffe, das macht die Sache etwas transparenter.

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Bracew

Ok, Danke.

Mit Hilfe von Google bin ich auf:
   https://forum.fhem.de/index.php/topic,24473.msg175912.html#msg175912
gestoßen.

Aufgrunddessen habe ich das stateFormat umgebaut zu:
attr   SensorKellerBuero stateFormat Temperatur: temperature °C <br> Feuchtigkeit: humidity %
und sogar eine zweizeilige, formatierte Ausgabe hinbekommen, siehe Bild nachfolgend.

Jetzt fehlt mir nur noch der Taupunkt. Nach http://www.fhemwiki.de/wiki/Dewpoint sollte man ja einfach:
define dew_state dewpoint dewpoint .* T H D einfügen. Aber in meinem FHEM tut sich nichts, wenn dies in fhem.cfg steht.

FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

PeMue

Bin etwas überrascht vom Wiki, ich hatte damals ein userReading gefunden und das bei mir eingebaut.
Hier habe ich mal eines meiner userReadings:
attr HM_Bad_WT_Weather userReadings dewpoint { my $dp;; my $temperature = ReadingsVal($name,"temperature",0);; my $humidity = ReadingsVal($name,"humidity",0);; my $A = 17.2694;; my $B = ($temperature > 0) ? 237.3 : 265.5;; my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );; my $e = $humidity/ 100 * $es;; if ($e == 0) { Log 1, "Error: dewpoint() e==0: temp=$temperature, hum=$humidity";; return 0;; } my $e1 = $e / 610.78;; my $f = log( $e1 ) / $A;; my $f1 = 1 - $f;; if ($f1 == 0) { Log 1, "Error: dewpoint() (1-f)==0: temp=$temperature, hum=$humidity";; return 0;; } $dp = $B * $f / $f1 ;;}
Ggf. musst Du das noch anpassen (temperature bzw. humidity).

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Dangermouse

Hallo zusammen,

Lese hier gerade etwas flüchtig mit, und hoffe ich kann mich etwas einbringen.
Ich habe mein attr stateFormat . mit folgenden Werten gefüllt: Temperatur: temperature °C Luftfeuchte: humidity %, wobei es bei dir meine ich Temperatur: T °C Luftfeuchte: H % sein müsste.
LG Thorsten
FHEM auf Synology-NAS via Docker
piVCCU
HM-LAN & SCC 868 (MAX!) als Funkschnittstelle

Bracew

Wow, danke PeMue,

etwas umgebaut zu:
define SensorKellerBuero dummy
attr   SensorKellerBuero room Kellerbuero
attr   SensorKellerBuero group Temperatur-Feuchtigkeit
attr   SensorKellerBuero userReadings dewpoint { my $dp;; my $temperature = ReadingsVal($name,"temperature",0);; my $humidity = ReadingsVal($name,"humidity",0);; my $A = 17.2694;; my $B = ($temperature > 0) ? 237.3 : 265.5;; my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );; my $e = $humidity/ 100 * $es;; if ($e == 0) { Log 1, "Error: dewpoint() e==0: temp=$temperature, hum=$humidity";; return 0;; } my $e1 = $e / 610.78;; my $f = log( $e1 ) / $A;; my $f1 = 1 - $f;; if ($f1 == 0) { Log 1, "Error: dewpoint() (1-f)==0: temp=$temperature, hum=$humidity";; return 0;; } $dp = $B * $f / $f1 ;;}
attr   SensorKellerBuero stateFormat Temperatur: temperature °C <br> Feuchtigkeit: humidity %<br> Taupunkt: dewpoint°C

wird jetzt auch der Taupunkt als 3. Zeile angezeigt, ich habe ihn mal Orange umrandet im nachfolgenden Bild.

Gibt es jetzt noch einen Trick die meisten Nachkommastellen abzuschneiden oder zu runden (eine Nachkommastelle würde mir reichen)?

FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

PeMue

Ja, in Dein stateFormat ein sprintf einbauen, das habe ich im Forum gefunden:
attr Counter stateFormat {sprintf("%.1f",ReadingsVal("Counter","consumption",0))." W"}
Dein letzter Term müsste dann in etwa so aussehen:
Taupunkt: {sprintf("%.1f",ReadingsVal("SenSorKellerBuero","dewpoint",0))."° C"}

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Bracew

Nein, hat nicht funktioniert.

Aber dieses hier:
attr   SensorKellerBuero userReadings dewpoint_gerundet { int ( 10 * ReadingsVal("SensorKellerBuero","dewpoint",0) + 0.5 ) / 10 } also, aus dem ungerundeten "dewpoint" ein gerundetes "dewpoint1" oder wie ich es getauft habe "dewpoint_gerundet" machen und dies weiterverwenden.

Also, hier nochmals als ganzes:
define SensorKellerBuero dummy
attr   SensorKellerBuero room Kellerbuero
attr   SensorKellerBuero group Temperatur-Feuchtigkeit
attr   SensorKellerBuero userReadings dewpoint { my $dp;; my $temperature = ReadingsVal($name,"temperature",0);; my $humidity = ReadingsVal($name,"humidity",0);; my $A = 17.2694;; my $B = ($temperature > 0) ? 237.3 : 265.5;; my $es = 610.78 * exp( $A * $temperature / ($temperature + $B) );; my $e = $humidity/ 100 * $es;; if ($e == 0) { Log 1, "Error: dewpoint() e==0: temp=$temperature, hum=$humidity";; return 0;; } my $e1 = $e / 610.78;; my $f = log( $e1 ) / $A;; my $f1 = 1 - $f;; if ($f1 == 0) { Log 1, "Error: dewpoint() (1-f)==0: temp=$temperature, hum=$humidity";; return 0;; } $dp = $B * $f / $f1 ;;}
attr   SensorKellerBuero userReadings dewpoint_gerundet { int ( 10 * ReadingsVal("SensorKellerBuero","dewpoint",0) + 0.5 ) / 10 }
attr   SensorKellerBuero stateFormat <span style="color:red">Temperatur: temperature °C </span><br><span style="color:green"> Feuchtigkeit: humidity %</span><br> Taupunkt: dewpoint_gerundet °C

und nun auch noch mit FARBiger Beschriftung (html-Code für rotes "Temperatur: 17.0 °C" bzw. grünes "Feuchtigkeit: 65.5 %"), siehe Bild.

Ich danke sehr herzlich für die Hilfe

Ein schönes Wochenende wünscht
Bracew
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Bracew

Hi nochmals,

leider habe ich nun im Logfile:
Zitat2016-10-08_20:57:04 SensorKellerBuero temperature: 17.0
2016-10-08_20:57:04 SensorKellerBuero dewpoint_gerundet: 10.5
2016-10-08_20:57:05 SensorKellerBuero humidity: 65.7
2016-10-08_20:57:05 SensorKellerBuero dewpoint_gerundet: 10.5
2016-10-08_21:01:00 SensorKellerBuero temperature: 16.9
2016-10-08_21:01:00 SensorKellerBuero dewpoint_gerundet: 10.5
2016-10-08_21:01:01 SensorKellerBuero humidity: 65.7
2016-10-08_21:01:01 SensorKellerBuero dewpoint_gerundet: 10.5

Zu jeder Messung werden nun 2 Zeilen für dewpoint_gerundet geschrieben.

Also, jetzt habe ich zwar eine "schöne" Anzeige, aber viele Bytes im Logfile.

Hmmm, mal überlegen was ich lieber will...
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

LuckyDay

define dew_all dewpoint dewpoint .* temperature humidity dewpoint
attr dew_all absFeuchte 1


Das ist das Modul dewpoint,
das wäre mein Vorschlag gewesen, :)
da bekommt man noch absolute Feuchte gratis zusätzlich zum Reading dewpoint

bist ja noch am probieren/testen

Bracew

#118
Hallo,

ja, ich bin ja noch am probieren/testen.

Habs nun nochmal geändert und hoffentlich verbessert, nicht verschlimmbessert.
Deshalb hier nochmals der komplette Werdegang für alle Mitleser.

Definition in fhem.cfg:
# #################################################################
# Temperaturmesung
# #################################################################
define telnetPort telnet 7072 global
attr   telnetPort room hidden
#
define dew_all dewpoint dewpoint .* temperature humidity dewpoint
attr   dew_all absFeuchte 1
attr   dew_all room hidden
#
define SensorKellerBuero dummy
attr   SensorKellerBuero room Kellerbuero
attr   SensorKellerBuero group Temperatur-Feuchtigkeit
attr   SensorKellerBuero stateFormat <span style="color:red">Temperatur: temperature °C </span><br><span style="color:green"> Feuchtigkeit: humidity %</span><br> Taupunkt: dewpoint °C<br><span style="color:blue">Abs. Feuchte: absFeuchte g/m3</span>
#
define TempLogfile FileLog ./log/PiSensorKellerBuero-%Y.log SensorKellerBuero
attr   TempLogfile logtype temp4:window,text
attr   TempLogfile room Kellerbuero
attr   TempLogfile group Temperatur-Feuchtigkeit
#
define SVG_SensorKellerBuero SVG TempLogfile:WeBetemp4hum4:CURRENT
attr   SVG_SensorKellerBuero label "Temp. Max.=$data{max1}°C, Min.=$data{min1}°C, Letzte=$data{currval1}°C | Feuchtigk. Max.=$data{max2}%, Min.=$data{min2}%, Letzte=$data{currval2}%"
attr   SVG_SensorKellerBuero room Kellerbuero
attr   SVG_SensorKellerBuero group Temperatur-Feuchtigkeit
#


Bash-Datei, welche die Messdaten vom DHT22/AM2302 Temperatur und Luftfeuchtigkeit Sensor nach FHEM gibt und vom Cron-Job (bei mir) alle 10-Minuten ausgeführt wird:
#!/bin/bash
sudo killall -q loldht > /dev/null 2>&1
cd /opt/lol_dht22
WERTE=$(sudo /opt/lol_dht22/loldht 7 | grep "Humidity")
Hum=$(echo $WERTE|cut -d " " -f3)
Temp=$(echo $WERTE|cut -d " " -f7)
echo $WERTE
echo $HUM
echo $Temp
/opt/fhem/fhem.pl 7072 "setreading SensorAussen temperature $Temp"
/opt/fhem/fhem.pl 7072 "setreading SensorAussen humidity $Hum"


Auszug aus der Log-Datei /opt/fhem/log/PiSensorKellerBuero-2016.log:
2016-10-09_00:57:03 SensorKellerBuero temperature: 17.0
2016-10-09_00:57:04 SensorKellerBuero humidity: 65.8
2016-10-09_00:57:04 SensorKellerBuero absFeuchte: 9.5
2016-10-09_00:57:04 SensorKellerBuero dewpoint: 10.6
2016-10-09_01:07:03 SensorKellerBuero temperature: 16.9
2016-10-09_01:07:04 SensorKellerBuero humidity: 65.8
2016-10-09_01:07:04 SensorKellerBuero absFeuchte: 9.5
2016-10-09_01:07:04 SensorKellerBuero dewpoint: 10.5

dort hinein wird auch der Taupunkt und die absolute Feuchte geschrieben.

Und zum Schluß unten im Anhang (ich habe keine Ahnung wie ich das Bild hier in den Text hineinbekomme) noch wie das ganze nun auf dem Bildschirm bei mir erscheint.

Ich danke allen ganz herzlich.

Gute Nacht wünscht
Bracew

P.S. Ach ja, falls noch jemand mir helfen kann, wie ich unter das erste Diagramm noch ein zweites mit Taupunkt und Abs.Feuchte bekomme, würde ich mich freuen.
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

PeMue

Einfach eine zweite SVG Definition mi einer angepassten gplot Datei.

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser