Hallo Forum
kann mir da wer helfen?
Ich will bei Stromüberschuss von meiner PV-Anlage Geräte ein bzw. ausschalten.
Mit einem externen Python Script lese ich die Daten von meinem Stromzähler aus uns schreibe die Messwerte in ein Logfile
folgendes Format: (Messwerte in kW)
2014-01-17_12:54:34 Bezug: 3.7
2014-01-17_12:57:19 Bezug: 2.2
2014-01-17_12:59:36 Lieferung: 0.1
2014-01-17_13:03:21 Bezug: 1.0
2014-01-17_13:17:11 Lieferung: 0.3
2014-01-17_13:20:24 Bezug: 0.4
2014-01-17_13:42:03 Bezug: 0.3
Dieses File lese ich mit FHEM aus und zeige die Werte an.
# Strom Bezug / Lieferung (lesen aus Logfile)
define FileLog_Strom FileLog /opt/fhem/log/Strom-%Y.log Strom
define weblink_Strom SVG FileLog_Strom:mystrom:CURRENT
attr weblink_Strom label "StromBezug $data{currval1} / Lieferung $data{currval2}"
attr weblink_Strom room Energie
es soll sich z.B.: meine Teichpumpe ab einem Wert von Lieferung: > 1 einschalten, und ab < 0,5 wieder ausschalten.
wie kann ich das realisieren.
Danke
Hallo
Kann mir wirklich niemand helfen, oder funktioniert so etwas generell nicht mit FHEM?
THX
Hallo,
wenn du die Werte schon in FHEM anzeigen kannst sollte notify
weiter helfen können.
Leider fehlt bei deinen Angaben aber das Device so wie es in FHEM definiert ist um dir helfen zu können.
Grüße
Hallo
Ich habe meine FS20 Schalter die folgt definiert:
(die ich manuell auch schalten kann)
define Teichpumpe FS20 111111111 1111
attr Teichpumpe room Funkschalter
define FileLog_Teichpumpe FileLog ./log/Teichpumpe-%Y.log Teichpumpe
attr FileLog_Teichpumpe logtype text
attr FileLog_Teichpumpe room FS20
Wie müsste der Syntax genau aussehen, damit notify auf den Wert einer Variable (aus dem logfile) reagiert?
( notify soll reagieren auf den Wert größer "1" für "Lieferung $data{currval2}" aus der Zeile
attr weblink_Strom label "StromBezug $data{currval1} / Lieferung $data{currval2}"
wie mach ich das genau?
define Teichpumpe_on notify ...???
Danke
Hallo,
genau das meinte ich ::)
Zitatdefine Teichpumpe_on notify <Device_das_dir_den_Strom_anzeigt:Wert_den_du_auswerten_willst>.* {
if(ReadingsVal("<Device_das_dir_den_Strom_anzeigt>","<Wert_den_du_auswerten_willst>",99) > 1) {
set Teichpumpe on;
} else {
set Teichpumpe off;
}
}
Grüße
Danke für die Info:
verstehe ich das so richtig?
<Device_das_dir_den_Strom_anzeigt:Wert_den_du_auswerten_willst>
entspricht dann:
weblink_Strom:$data{currval2}
das Device dass den wert vom Logfile liest:
# Strom Bezug / Lieferung (lesen aus Logfile)
define FileLog_Strom FileLog /opt/fhem/log/Strom-%Y.log Strom
define weblink_Strom SVG FileLog_Strom:mystrom:CURRENT
attr weblink_Strom label "StromBezug $data{currval1} / Lieferung $data{currval2}"
attr weblink_Strom room Energie
sollte das dann so aussehen:
define Teichpumpe_on notify weblink_Strom:$data{currval2}.* {
if(ReadingsVal("weblink_Strom","$data{currval2}",99) > 1) {
set Teichpumpe on;
} else {
set Teichpumpe off;
}
}
der Zustand vom "Teichpumpe" ändert sich aber nicht, wenn ich einen Wert >1 manuell ins Logfile schreibe???
THX
Weil das Logfile dafür gar nicht verwendet wird!
Du muß direkt das Gerät ändern, siehe:
ReadingsVal("<Device_das_dir_den_Strom_anzeigt>","<Wert_den_du_auswerten_willst>",99) > 1)
Hallo,
ein Logfile ist kein! Device.
ZitatDieses File lese ich mit FHEM aus und zeige die Werte an.
Aber nur grafisch als Plot (Graph) und nicht in einem Device (Dummy).
Grüße
Hmmm
Das ist ja genau meine Frage, wo ich nicht weiterkomme.
Da der Messwert von meinem Stromzähler nicht von einem FHEM Device kommt.
Ob ich mit den Daten vom einem Logfile, (welche von einem externen Programm in dieses Logfile geschieben werden) in FHEM arbeiten kann.
Oder kann man in FHEM ein externes Shelscript als "Device" definieren, dass den Wert der letzten Zeile vom Logfile liest und als Returnwert (mit dem ich dann arbeiten kann) liefert?
..das Schellscrip zu erstelle ist easy, aber mit FHEM kenn ich mich zu wenig aus :'(
THX
Du schreibst, das Du die Werte per Python ausliest un in Dein Logfile schreibst, Warum schreibst Du mit dem gleichen Programm nicht auch in FHEM direkt rein?
Hi
ja, wie funktioniert das?
meinst du ich soll die komplette Schaltlogik meiner Geräte (die bei Überschuss Stromproduktion schalten sollen ) in meinem Python Script abbilden, und nur die Geräte dann vom Python Script aus schalten mit:
/opt/fhem/fhem.pl 7072 "set Teichpumpe on"
oder kann ich auch den Wert aus einem Python Script an FHEM übergeben (wie funktioniert das, kannst du mir ein Beispiel geben) , und dann die Schaltlogik im FHEM bauen.
(diese Variante wäre mir lieber)
THX
Dummy device erstellen (Siehe Doku)
Mit "set <dummy-Device> <Wert>" Wert eintragen (siehe Doku)
Logig dann in FHEM
Ich stand auch vor so einem ähnlichen Problem, ich lese Daten von meiner Heizung über ein script aus.
und bei mir liegen die Daten noch auf einem anderen Rechner.
Man kann ja Fhem über Telnet bedienen und auch readings von Device darüber setzten.
ich habe als erstes in Fhem mehrere Dummy device erzeugt. z.B.
define WW_Speicher dummy
define Kessel dummy
usw.
mein script erzeugt jetzt eine datei namens telnet.txt
in der folgendes drinsteht
Zitatsetreading WW_Speicher state 55.6
setreading Kessel state 72.0
quit
wenn die Datei fertig erzeugt ist
rufe ich dann nur noch auf
Zitatnc 192.168.2.113 7072 < /etc/vcontrold/telnet.txt
und die Datei wird über telnet geschrieben, wie wenn ich es von Hand eingegeben hätte.
Das logging und notify funktioniert dann wie ein reelles Device
es würde auch wie folgt gehen:
echo -en "passwort\nsetreading WW_Speicher state 55.6;setreading Kessel state 72.0;quit\n" | nc localhost 7072
Wenn "passwort" existiert, sonst den Teil "passwort\n" weglassen.
Hinweis:
durch -en versteht echo Spezialzeichen wie "\n", was "hier verkürzt "Enter" bedeutet.
Kleine (Anfänger)Frage:
Warum verwendest Du "setreading" und nicht "set"?
Edit:
War eine blöde Frage .. siehe Doku *schähm*
Super
genau das hab ich gesucht
Besten Dank