FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Olaf A am 11 Mai 2013, 22:45:25

Titel: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: Olaf A am 11 Mai 2013, 22:45:25
Hallo Ihr,

ich glaube ich bin nicht der erste, der diese Frage stell aber nun komme ich nicht weiter.

Ich habe mir heute ein HM Außentemperatur und feuchte Messer gekauft und eingebunden. Nun wollte ich den Taupunkt und die absolute Feucht errechnen.
Im Forum habe ich diese Beschreibung gefunden: http://forum.fhem.de/index.php?t=msg&goto=19749&rid=110&srch=Absolute+Luftfeuchtigkeit#msg_19749 (//forum.fhem.de/index.php?t=msg&goto=19749&rid=110&srch=Absolute+Luftfeuchtigkeit#msg_19749)
mit dieser Formel habe ich nun folgende Ergebnisse bekommen:

99_Utils:
sub Entalpie($)
{
my $msg = shift;
#Log 1, "Meldung: $msg";
my @Werte = split(/ /,$msg);
#Log 1, "Entalpiewerte: Temp: $Werte[1] C/Feuchte: $Werte[3] rF";
#Berechnung der Entalpie Werte
my $AussenTaupunkt = Taupunkt ($Werte[1],$Werte[3]);
my $absfeuchte = &absoluteFeuchte ($Werte[1],$Werte[3]) ;
Log 1, "Entalpie: absolute Feuchte: $absfeuchte aF/ Taupunkt: $AussenTaupunkt C/ Außen Temp: $Werte[1] C/ relative Feuchte: $Werte[3] rF";

#dummy Variablen, die kannst Du dann in fhem anzeigen
fhz "set AussenTaupunkt $AussenTaupunkt.gm3";
fhz "set AussenAbsFeuchte $absfeuchte.gm3";
fhz "set AussenRelFeuchte $Werte[3].gm3";
fhz "set AussenTemperatur $Werte[1].gm3";
}

Logfile:
2013.05.11 22:37:38 1: Enthalpie: absolute Feuchte: 6.9 aF/ Taupunkt: 5.9 C/ Außen Temp: 12.8/ relative Feuchte: 63 rF
--------------
Und nun komme ich nicht weiter.

Wie bekomme ich diese dummy Variablen angezeigt bzw. in einem Logfile eingetragen?

MfG

Olaf
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: Ralph am 12 Mai 2013, 01:58:29
Gutenberge hier:
Link (http://forum.fhem.de/index.php?topic=12706.msg76947#msg76947)

Tipp: schaue auf die Variablen und deren Wiederkehr in den "Log 3, usw."


Edith: Sehe gerade, Du hast sie ja schon im Logfile, insofern verstehe ich wohl die Frage nicht *grübel*
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: Olaf A am 12 Mai 2013, 07:36:59
Hallo Ralph,


danke erst mal für die Antwort.
Ich stelle meine Frage einfach mal etwas anders.

Wie kann ich die so erzeugten Werte so verwenden wie ein physikalischen Fühler.
Sprich in einen Raum als aF Fühler anzeigen und in einem Plot als Grafki anzeigen?
Gruß Olaf
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: Olaf A am 13 Mai 2013, 20:09:54
Hallo Ihr,

ich habe nun nach einiger Zeit der Suche den Punkt 98_dewpoint.pm gefunden.
Dort wird der Taupunkt berechnet aber die absolute Feuchte fehlt leider.

Da meine Pel Künste noch nicht mal befriedigend sind habe ich einige Probleme dieses selber zu machen.
Ich werde mich zwar versuchen aber bis jetzt habe ich noch diverse Fehler in meiner Änderungsversuche
und natürlich noch keinen Erfolg.

Es währe schön, wenn sich der Verfasser diese Aufgabe stellen würde.
Aus dem Programm habe ich herausgefunden, das es Willi Herzig ist.

Weiß jemand, wie ich den Kontakt aufnehmen kann?

Gruß Olaf
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: UliM am 13 Mai 2013, 20:16:56
Hi Olaf,
Zitat von: Olaf Andresen schrieb am Sa, 11 Mai 2013 22:45Wie bekomme ich diese dummy Variablen angezeigt
zB über ein userReading. Oder setstate.  Das kommt v.a. darauf an, WO Du sie angezeigt haben möchtest.

Zitat von: Olaf Andresen schrieb am Sa, 11 Mai 2013 22:45bzw. in einem Logfile eingetragen?
{fhem("trigger <device> $wert")}

Hoffe das hilft.
Gruß, Uli
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: Olaf A am 13 Mai 2013, 20:57:41
Hallo UliM,

über den Punkt userReading bin ich auch schon gestolpert aber was kommt dann dort in das Feld?
Angezeigt werden soll ein Werte in einer Variable
my $val= "T: $Werte[1]  H: $Werte[3]  aH: $absfeuchte  Ta: $AussenTaupunkt";


Beim Loggen muss dann für <device> der Name der Logdatei eingetragen werden oder?
Und wenn ich alle vier Werte loggen will sollte es so aus sehen?
{fhem("trigger HM_Balkon_Enthlphie $Werte[1] | $Werte[3] | $absfeuchte | $AussenTaupunkt ")}

Oder?

Anbei ein Bild von dem Dummy in dem ich es anzeigen will.

Gruß Olaf
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: UliM am 13 Mai 2013, 21:10:20
Hi,
<device> steht für den Namen des Geräts. Auf Deinem screenshot sind mehrere, ich vermute Du möchtest die Werte auf dem dummy namens 'Enthalpie' anzeigen.

Statt
my $val= "T: $Werte[1] H: $Werte[3] aH: $absfeuchte Ta: $AussenTaupunkt";
einfach
fhem("set Enthalpie T: $Werte[1] H: $Werte[3] H: $absfeuchte Ta: $AussenTaupunkt");

Ich bin inicht 100% sicher, ob fhem bei dem set-Befehl mit Leerstellen klarkommt, probier's halt mal aus.

Wenn Du für den dummy Enthalpie ein FileLog definierst, werden die Werte durch das o.g. set auch dorthin geschrieben.

Gruß, Uli
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: Olaf A am 13 Mai 2013, 21:48:53
So jetzt hänge ich
also habe ich mir gedacht ich versuch mal zu beschreiben, was ich bis jetzt gemacht habe:

Ich habe eine  Date (99_Enthalpie_Utils.pm) in der die Werte wie folgt berechnet werden:

sub Entalpie($)
{
my $msg = shift;
#Log 1, "Meldung: $msg";
my @Werte = split(/ /,$msg);
#Log 1, "Entalpiewerte: Temp: $Werte[1] C/Feuchte: $Werte[3] rF";
#Berechnung der Entalpie Werte
my $AussenTaupunkt = Taupunkt ($Werte[1],$Werte[3]);
my $absfeuchte = &absoluteFeuchte ($Werte[1],$Werte[3]) ;
my $val= "T: $Werte[1]  H: $Werte[3]  aH: $absfeuchte  Ta: $AussenTaupunkt";
Log 0, "Entalpie: $val";

fhem "set Enthalpie $val";
}

Die fehlenden Subs habe ich mal wech gelassen.

Nun möchte ich in dem Dummy die Variable $val angezeigt bekommen.
Den Dummy habe ich wie folgt in fhem.cfg eingetragen:

define Enthalpie dummy
attr Enthalpie room Balkon
attr Enthalpie userReadings 1

Was gehört nun hinter userReadings? Oder muss da noch etwas anderes hin ein, damit ich diese Variable angezeigt bekomme?


Loggen würde ich gerne die Werte:
$AussenTaupunkt
$absfeuchte
$Werte[1] (Temperatur)
$Werte[3] (Feuchte)

Zur zeit Logge ich werte von HM wie Folgt:
define FileLog_Balkon FileLog ./log/Balkon-%Y-%m.log (HM_Balkon:.*(temperature|humidity))|(ActionDetector:.*):.*

Wenn ich die vier Variablen im Dummy als Redings gespeichert bekomme könnte kann ich einen ähnlichen Log schreiben Bzw. diesen ändern.

Aber wie bekommt man diese Werte dort rein?

Gruß Olaf
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: UliM am 13 Mai 2013, 22:12:58
das set tut nix?
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: Olaf A am 13 Mai 2013, 22:19:16
Ne nicht wirklich
Schau mal

So hat es auch nicht geklapt:
fhem ("set Enthalpie $val");
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: MisterEltako am 13 Mai 2013, 23:51:15
Um die 4 Werte in den Readings des dummys einzutragen, bitte nachfolgenden Code versuchen.
Auslesbar dann mit readingsVal(...).


define Anzeige dummy

define Speichern notify Anzeige:.* {\
 my $AussenTaupunkt=0;;\
 my $absfeuchte=2;;\
 my $Werte1=10;;\
 my $Werte3 =55;;\
 readingsBeginUpdate($main::defs{Anzeige});;\
 readingsBulkUpdate($main::defs{Anzeige}, '1_Taupunkt', $AussenTaupunkt);;\
 readingsBulkUpdate($main::defs{Anzeige}, '2_absoluteFeuchte', $absfeuchte);;\
 readingsBulkUpdate($main::defs{Anzeige}, '3_Temperatur', $Werte1);;\
 readingsBulkUpdate($main::defs{Anzeige}, '4_Feuchtigkeit', $Werte3);;\
readingsEndUpdate($main::defs{Anzeige}, 1);;\
}


MfG, MisterEltako
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: Olaf A am 14 Mai 2013, 22:24:57
Hallo MisterEltako,

danke für die Info, eimal muss ich es schon hin bekommen haben aber nun hackt es irgend wo und ich habe keine Ahnung wo.

Werde mich morgen noch mal dran setzen um es hin zu bekommen.

Danke erst mal und ich hoffe ich darf noch mal nachfragen.

Gruß Olaf
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: Olaf A am 15 Mai 2013, 23:07:34
Hallo Ihr,

geschafft!

Für alle, die sich dieselbe Frage stelle und es bis jetzt nicht hin bekommen haben hier nun eine mögliche Lösung, die bei mit klappt:

Als erste benötigt Ihr eine Möglichkeit eine lokale Variable zu bearbeiten bzw. zu erzeugen.
Ich habe diese durch einen notify in fhem.cfg eingerichtet.

 
(siehe Anhang / see attachement)


###############
define AussenHygro notify HM_Balkon.*T:.* {Entalpie("%")}
attr AussenHygro room Balkon
attr AussenHygro userReadings 1
###############

Dann habe ich eine eigene Utils Datei (99_Enthalpie_Utils.pm) erstellt (es geht aber auch 99_Utils.pm) mit folgender Sub-Routine:

###############
sub Entalpie($){

my $msg = shift;
my @Werte = split(/ /,$msg);
#Berechnung der Entalpie Werte
my $Taupunkt = Taupunkt ($Werte[1],$Werte[3]);
my $absfeuchte = &absoluteFeuchte ($Werte[1],$Werte[3]) ;
my $state= "T:$Werte[1] H:$Werte[3] D:$Taupunkt A:$absfeuchte";
Log 1, "Entalpie: $state" if ($dewpoint_debug == 1);

#dummy Variablen, die kannst Du dann in fhem anzeigen
readingsBeginUpdate($main::defs{Anzeige});;\
readingsBulkUpdate($main::defs{Anzeige}, 'Taupunkt', $Taupunkt);;\
readingsBulkUpdate($main::defs{Anzeige}, 'absoluteFeuchte', $absfeuchte);;\
readingsBulkUpdate($main::defs{Anzeige}, 'Temperatur', $Werte[1]);;\
readingsBulkUpdate($main::defs{Anzeige}, 'Feuchtigkeit', $Werte[3]);;\
readingsEndUpdate($main::defs{Anzeige}->{STATE} = $state , 1);;\
return $state
}
###############

Wie vorher schon beschrieben lasse ich die anderen Sub-Routinen wech.
Der wichtige Teil für die Übergabe ist der Punkt ab #dummy Variablen, bis zum ende der Klammer.

Nun habe ich in Fhem.cfg noch den Dummy eingerichtet:

###############
define Anzeige dummy
attr Anzeige icon icoTempWasser
attr Anzeige room Balkon
attr Anzeige userReadings 1
###############

Nach der ersten Berechnung habe ich folgende Anzeigen bekommen:

 
(siehe Anhang / see attachement)


Und der Inhalt im Dummy sieht so aus.

 
(siehe Anhang / see attachement)


Ich hoffe, dass es mir dieser Anleitung leichter wir und auch andere Anfänger er hin bekommen.
Danke allen Helfern.

-------------------------------------------------------------------------------

Mein eigentliches Problem war ja die Errechnung der absoluten Feuchte und des Taupunktes.

Bei dem Problem hat mir Joachim geholfen. Er hat mich auf die Routine 98_dewpoint.pm hingewiesen diese Routine errechnet den Taupunkt,
wenn der Fühler die folgender STATE Linie T: 10,2 H: 70 hat.

Diese Routine habe ich in fhem.cfg wie folgt eingerichtet:

###############
define dew_temp1 dewpoint dewpoint HM_Balkon temperature humidity dewpoint absFeuchte
define dew_state dewpoint dewpoint .* T H D A
###############

 
(siehe Anhang / see attachement)


Nun fehlte dort aber für mich noch die absolute feucht. Die hat Joachim mit ein wenig Hilfe von mir erweitert.
Dieses Änderung der Routine ist nicht mit dem Entwickler abgesprochen ich hoffe aber, dass er sie übernehmen kann. Es fehlen aber sämtliche Erklärungen der Erweiterung.

In der ursprünglichen Routine wurde der Aufruf ohne dem ,,A" aufgerufen (define dew_state dewpoint dewpoint .* T H D).

Im Anhang findet Ihr die geänderte Datei.
Und ein Dank an Joachim.

Gruß Olaf.
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: MisterEltako am 16 Mai 2013, 17:04:17
Gratulation!  Bitte ab ins Wiki damit!

MfG, MisterEltako
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: Willi am 12 Juni 2013, 21:39:09
Hallo Olaf,

sieht ja gut aus.

Ich habe 98_dewpoint.pm geschrieben und Deine Mail bzgl. des Wunsches dies ins SVN zu bringen gerade gelesen.

Ich habe gerade kurz verglichen, was sich geändert hat.

Was mir dabei aufgefallen ist:
- Es gibt einen zusätzlichen Parameter newname1, der aber wohl nicht optional, sondern zwingend ist. Wichtig wäre dies so zu programmieren, dass dieser optional ist. Ansonsten müssten alle bisherigen Anwender ihre FHEM-Konfiguration ändern. Ich würde Dich daher bitten dies optional zu realisieren und auch die Kommentare im Code anzupassen.
- Bei den neuen Routinen dewpoint_absFeuchte() sowie SaettigungsDampfDruck() bitte als Kommentar angeben, ob und dass es Deine Routinen sind. Ist das eine komplette Eigensleitung oder hast Du die Berechnungen irgenwoher? Es ist wichtig, dass sofern es hier ein Copyright eines anderen gibt dieses vermerkt wird. Und das muss natürlich zu GPLv2 passen. Bist Du bereit die Routinen anzupassen, wenn es hier Probleme gibt?
- Es fehlen noch die Änderungen/Dokumentationen für commandref, also ab die Anpassung der Zeilen 475ff.

Wenn das geändert ist, sollten wir das ausgiebig auf Kompatibilität bestehender Konfigurationen testen.
Wenn das dann alles klappt, würde ich es ins SVN einchecken.

Wichtig ist mir bei Änderungen an FHEM immer, dass bestehende User keine Probleme haben, also dass die Änderungen aufwärtskompatibel sind.

Grüße

Willi

Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: krimskrams am 05 September 2013, 10:24:22
Hallo zusammen,

ich krame diesen alten Thread nochmal hervor, da ich gerade meine ersten Schritte mit FHEM mache und eine Kellerlüftung implementieren. Dazu soll die absolute Feuchte der Aussenluft verglichen werden mit der der Luft im Keller und dann entsprechend Lüfter geschaltet werden.

Ich hab mir das im Thread angehängte 98_dewpoint.pm Modul heruntergeladen und für die beiden Homematic TH Sensoren die Readings dewpoint und absFeuchte hinzugefügt, einen gemeinsamen Plot definiert und kann auch die Lüfter passend schalten.

Nur gehen diese Änderungen des Modul natürlich jedes mal mit einem FHEM Update verloren und genauso gehen natürlich alle Neuerungen im Modul 98_dewpoint.pm an mir vorbei.

Gibt es Pläne, die Berechnung der absoluten Feuchte im dewpoint Modul zu integrieren? Bzw. eine Frage an die Physiker ... würde es auch reichen, den Taupunkt der beiden Sensoren zu vergleichen?

Danke, krimskrams
Titel: Aw: Wie bekomme ich eine lokale Variable in FHEM angezeigt?
Beitrag von: fiedel am 05 September 2013, 14:54:22
Hi krimskrams,

das Vergleichen des Taupunkt reicht aus. Liegt der TP. aussen tiefer als innen kannst du immer gefahrlos lüften und schaufelst Feuchte nach aussen. Liegen die Taupukte in etwa gleich, beendest du das Lüften. Liegt der TP aussen höher als innen, sollte nicht gelüftet werden, da dann Feuchte von außen nach innen befördert wird und die Luftfeuchtigkeit innen steigt. Ein niedrigerer Taupunkt innen ist tendenziell günstiger. Um so geringer wird die Schimmelgefahr.

Gruß

Frank