Wie kann ich mit Messwerten aus einem Logfile Geräte ein/aus schalten?

Begonnen von gfix, 17 Januar 2014, 15:10:29

Vorheriges Thema - Nächstes Thema

gfix

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

gfix

Hallo

Kann mir wirklich niemand helfen, oder funktioniert so etwas generell nicht mit FHEM?

THX

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

gfix

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

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

gfix

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

Wernieman

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)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

gfix

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

Wernieman

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?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

gfix

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

Wernieman

Dummy device erstellen (Siehe Doku)
Mit "set <dummy-Device> <Wert>" Wert eintragen (siehe Doku)

Logig dann in FHEM
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

LuckyDay

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

Wernieman

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*
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

gfix