Werte aus log-Datei schaltet Heizung?

1,730 views
Skip to first unread message

ToKa5

unread,
Sep 19, 2011, 10:14:34 AM9/19/11
to FHEM users
Hallo,

ich nutze Fhem seit einigen Monaten auf einem Alix-Board zur
Heizungssteuerung und Gas Verbrauchsmessung.
Das System funktioniert sehr stabil.

Nebenbei schreibe ich die Vorlauf- u. Rücklauftemperatur meines
Kaminofens mit Wassertasche mittels DS1820 und Digitemp in eine log-
Datei. Die Anzeige (Plot) der Temperatur und die Berechnung der
augenblicklichen Leistung des Kamins in Fhem, funktioniert auch sehr
gut.

Nun möchte ich in Abhängigkeit der Vorlauftemperatur des Kamins meinen
Heizkörper (im Aufstellraum des Kamins, FHT/CUL) Ausschalten. D.h.
ich möchte den aktuellen Wert aus der log-Datei (TXT) auslesen und
wenn der z.B. > 30C ist, den FHT auf z.B. 5.5C (OFF) einstellen.

Hat das schon mal jemand gemacht oder kann mir jemand einen Tip geben,
wie ich vorgehen soll?

Vielen Dank.

Toralf

Rudolf Koenig

unread,
Sep 19, 2011, 10:30:57 AM9/19/11
to fhem-...@googlegroups.com
> ich m�chte den aktuellen Wert aus der log-Datei (TXT) auslesen und

> wenn der z.B. > 30C ist, den FHT auf z.B. 5.5C (OFF) einstellen.

Logdatei ist falsch :)

Entweder notify oder at mit ReadingsVal().

Siehe auch http://fhem.de/commandref.html#perl

ToKa5

unread,
Sep 19, 2011, 10:39:36 AM9/19/11
to FHEM users

Danke für den Tip. Ich werd's mal versuchen.

> Logdatei ist falsch :)

Ja, also die Datei mit den Temp-Werten ;-)

Toralf

Rudolf Koenig

unread,
Sep 19, 2011, 10:50:54 AM9/19/11
to fhem-...@googlegroups.com
> > Logdatei ist falsch :)
>
> Ja, also die Datei mit den Temp-Werten ;-)

Das meine ich ja. Nicht regelmaessig die Datei einlesen, und bestimmte Werte
suchen, sondern mit einem notify direkt auf die Nachricht reagieren.

ToKa5

unread,
Sep 19, 2011, 1:38:45 PM9/19/11
to FHEM users



> Das meine ich ja. Nicht regelmaessig die Datei einlesen, und bestimmte Werte
> suchen, sondern mit einem notify direkt auf die Nachricht reagieren.

Naja, ich Digitemp schreibet die aktuellen Temperaturen (Vorlauf/
Ruecklauf) in eine Textdatei. Fhem holt die Daten ab und erstellt dann
ein Diagramm.
Wie kann ich denn direkt auf die Nachricht reagieren? Ich wollte den
letzten Wert der Datei auslesen.

Das steht in meiner config:

define K_log FileLog /mnt/nas/log/K_temp.log Kamin

define w1_10 weblink fileplot K_log:oregon_wind:CURRENT
attr w1_10 label sprintf("Power %.2f KW",\
($data{currval2}-$data{currval1})*0.74)
attr w1_10 room Kamin VL/RL

"oregon_wind" habe ich modifiziert. Die Berechnung am Schluss
berechnet die aktuelle Waermeleistung des Kamins anhand der
Pumpenfoerdermenge und dem dT zwischen Vorlauf und Ruecklauf.

Toralf

Rudolf Koenig

unread,
Sep 20, 2011, 12:09:32 AM9/20/11
to fhem-...@googlegroups.com
> define K_log FileLog /mnt/nas/log/K_temp.log Kamin

So aehnlich:

define temp_ntfy notfy Kamin:T:.* {\
if(%EVTPART1 > 30 &&\
ReadingsVal("FHT", "desired-temp", 5.5) ne 5.5) {\
fhem("set FHT desired-temp 5.5");;\
}
}

Bitte wirklich die Doku lesen, versuchen zu verstehen, das alles steht zwar
nicht direkt so, aber drin. Und wenn man unsicher ist, auf der Telnet Zeile mit
irgendwelchen Ausdrucken direkt experimentieren, z.Bsp.:

fhem> { ReadingsVal("FHT", "desired-temp", 5.5) ne 5.5) }

bzw. in das notify Log Meldungen einbauen, und via trigger testen:

define temp_ntfy notfy Kamin:T:.* {\
Log 1, "EVTPART1: %EVTPART1";
Log 1, ReadingsVal("FHT", "desired-temp", 5.5);
if(%EVTPART1 > 30 &&\
ReadingsVal("FHT", "desired-temp", 5.5) ne 5.5) {\
fhem("set FHT desired-temp 5.5");;\
}
}

fhem> trigger Kamin T: 35

ToKa5

unread,
Sep 20, 2011, 3:47:18 AM9/20/11
to FHEM users
Vielen Dank! Das hilft wir weiter. Mir fehlte der Ansatz in der ersten
Zeile.

Toralf

ToKa5

unread,
Sep 24, 2011, 4:46:22 AM9/24/11
to FHEM users
Bin leider doch noch nicht weiter gekommen.
Wie kann ich auf den letzten Eintrag einer log Datei (Format:
2011-09-24_03:58:06 Sensor1: 19.44) zugreifen. Die "19.44" möchte ich
auslesen und im Notify verwenden, um ein FHT auf 5.5C zu setzen.

Vielen Dank!
Toralf

ToKa5

unread,
Sep 25, 2011, 1:12:10 PM9/25/11
to FHEM users
Weiss niemand wie das geht? Oder kann ich direkt auf die Werte eines
one wire Temperatursensor reagieren ohne den OWFS Server zu verwenden?

Danke,
Toralf

Reinhard Ahrens

unread,
Sep 25, 2011, 1:56:18 PM9/25/11
to fhem-...@googlegroups.com
Moin Toralf

Ich schalte zwar keine Heizung mit Digitemp, aber ich verwende Digitemp
direkt mit einer selbgebastelten Schnittstelle (OWFS zu installieren war
mir zu kompliziert und mit perl den aktuellen Wert auslesen ist nicht
mein Ding).

Die Logdaten verwende ich um damit einen Graphen in/mit zu erstellen.
Den letzen Datensatz mit der aktuellen Temperatur hole ich mir mit
"php". Aus diesem Temperaturwert und anderen Digitemp.- bzw.
FHT80b-werten erstelle ich wieder mit "php" ein Bild welches ich auf
meine Fritzbox �bertrage und im Fritz!Fon als Hintergrundbild anzeigen
lasse.

Alles l�uft auf einem Dockstar und wird mittels cronjob ausgef�hrt.
Wenn Du den Wert hast

Vielleicht ein Tip, denn viele Umwege fuehren nach ...

Reinhard

Rudolf Koenig

unread,
Sep 26, 2011, 2:59:39 AM9/26/11
to fhem-...@googlegroups.com
On Sun, Sep 25, 2011 at 10:12:10AM -0700, ToKa5 wrote:
> Weiss niemand wie das geht? Oder kann ich direkt auf die Werte eines
> one wire Temperatursensor reagieren ohne den OWFS Server zu verwenden?

Ich habe gehofft, dass jemand anderes das schon beantwortet, da es "standard
fhem knowhow" ist, es traut sich aber keiner. Da ich auf lange Sicht nicht
alles selber beantworten will, muss ich mir irgendeine Strategie ueberlegen,
wie ich das hinkriege. Vorschlaege?

Wenn ich es richtig verstehe, Du moechtest die Logs parsen, die mit einem
FileLog geschrieben wurden, das ist aber unnoetig und man sollte es nicht so
machen.

FileLog kriegt seine Information auch nur ueber die gleichen Events, die man
per notify anzapfen kann. Man schaut also eine weile lang im telnet mit
aktivierten "inform timer" zu, welche Events vorbeikommen, und man baut dazu
ein notify, der das Schalten uebernimt. Vorteil: sofortige Reaktion und weniger
Systemlast.

Eine kleine Einfuehrung dazu ist auch in http://fhem.de/commandref.html#perl,
weitere CodeSchnipsel sind in der fhemwiki.

ToKa5

unread,
Sep 26, 2011, 3:47:08 AM9/26/11
to FHEM users

> Wenn ich es richtig verstehe, Du moechtest die Logs parsen, die mit einem
> FileLog geschrieben wurden, ...

Nicht ganz. Die log-datei wird durch digitemp erzeugt und nicht durch
FileLog, in Fhem dann über weblink dargestellt.
Konfig:

define K_log FileLog /mnt/nas/log/K_temp.log fakelog
(Ich habe "Kamin" ,siehe oben, durch fakelog ersetzt, da die Datei ja
nicht durch ein Device erzeugt wird.)

> FileLog kriegt seine Information auch nur ueber die gleichen Events, die man
> per notify anzapfen kann.

Das wäre natürlich der beste weg. Ich kann aber keine Events
anzapfen?! Soweit ich verstanden habe, kann man den OWFS Server
verwenden, um die one-wire detektoren in Fhem auszulesen. Allerdings
möchte ich den OWFS nicht installieren nur um zwei Temperaturen zu
messen. Das geht mit digitemp und einem cronjob ja ganz gut.

> Man schaut also eine weile lang im telnet mit
> aktivierten "inform timer" zu, welche Events vorbeikommen, und man baut dazu
> ein notify, der das Schalten uebernimt. Vorteil: sofortige Reaktion und weniger
> Systemlast.

Das habe ich versucht. Allerdings kommen keine entsprechenden Events
an. Ist ja auch klar, oder?

Ich freue mich über weitere Tips.
Vielen Dank.

Toralf

Rudolf Koenig

unread,
Sep 26, 2011, 5:44:22 AM9/26/11
to fhem-...@googlegroups.com
> Nicht ganz. Die log-datei wird durch digitemp erzeugt und nicht durch
> FileLog, in Fhem dann �ber weblink dargestellt.

Aah. Dann hilft nix, man muss pollen:

define checkKamin at +*00:01 { \
my @a = split(" ", `tail -1 /mnt/nas/log/K_temp.log`);;
if($a[2] > 30 &&\

}\
}

ToKa5

unread,
Sep 26, 2011, 6:55:02 AM9/26/11
to FHEM users
Ok. Vielen Dank. Ich werde mal sehen, ob es klappt und beriechten.
Sorry, für die etwas unklare Beschreibung am Anfang.

Toralf

ToKa5

unread,
Oct 2, 2011, 4:52:04 AM10/2/11
to FHEM users
Super, es funktioniert! --->

define checkKamin at +*00:01 { \
my @a = split(" ", `tail -1 /mnt/nas/log/K_temp.log`);; \
if (($a[2]) > 30.00 && ($a[2]) != 85.00 && \
(ReadingsVal("WohnZ", "desired-temp", 5.5)) ne 5.5) {\
fhem("set WohnZ desired-temp 5.5") ;; \
} \
}

Die 85 Grad habe ich noch eingefügt, um Fehlermeldungen der Sensoren
zu filtern. Manchmal kommt es zu 85Grad Meldungen und ich will nicht,
dass dann meine Heizung ausgestellt wird.

Vielen Dank!

Toralf
Reply all
Reply to author
Forward
0 new messages