Guten Tag. Ich poste das erste mal hier.
Zuerst einmal danke das es dieses Forum gibt. Super!
Ich habe FHEM auf einem Cubibord laufen.... Termostate etc.
alles prima.
Dazu eine SPS 315... prima Modul in Fhem.
und ein Panel PM377... auch prima
nun zu meiner Frage......
Ich möchte eine Logdatei anlegen die nur die letzten aktuellen Daten enthält.
Nicht die neuen Daten anhängen sondern nur die Daten die als letztes ankommen.
Realiesieren möchte ich damit das diese Daten im Hmi Panel weiterverarbeitet werden...
nur bekomme ich es nicht hin das im Log nur aktuelle Daten stehen.
das filtern im nachhinein wäre sehr aufwändig deshalb die Frage wie muss ich es anstellen das
die log immer zum Beispiel neu angelegt wird wenn ein neuer wert hineingeschrieben wird.
vielen dank für eure hilfe im voraus.
Helmut
warum dann überhaupt Logs, warum nimmst Du nicht einfach die zugehörigen Readings, das sind doch die letzten Daten?
Ich wollte das Modul weahter in dem Panel abbilden.
das sind einige readings. kenne mich damit nicht sehr gut aus.
hast du ein Beispiel wie ich das dann in eine Datei bekomme?
dazu müsstest Du mal etwas genauer erklären, was Du tun willst. Auf welcher Basis ist denn Dein HMI Panel aufgebaut (sprich welches Frontend nutzt Du)?
im HMI läuft wincc als Betriebssystem.
dort läuft kein Frontend.
die HMI hängt an der Sps und ich steuere die Heizung damit.
Nu hatte ich die Idee noch Wetter Daten abzubilden.
bits über die SPS ist sehr aufwendig.
da kam mir die Idee das über eine Textdatei zu realisieren die das Panel aus dem cubie holt.
im Moment sieht das so aus
Somit realisiere ich ein eigenes Frontend auf dem HMI.
Im Moment werden Daten der Heizung in ein DB auf der SPS abgelegt und dann
im HMI ausgewertet.
wie gesagt das klappt prima in beide Richtungen.
vielleicht hat jemand eine Idee?
Soweit ich Dich verstehe, brauchst Du eine Text Datei auf dem FHEM Server (also z.B. da wo auch die Logfiles liegen), die die aktuellen Wetterdaten enthält.
Das könntest Du mit notify machen.
Befehl:
define test notify WeatherDev:.* {\
open(MyLogfile, ">log\\MyWeather.log");;\
print MyLogfile $year."-".$month."-".$mday."_".$hms." ".$NAME." ".$EVENT;;\
close(MyLogfile);;\
}
Das Notify reagiert auf events des "WeatherDev" (da musst Du natürlich den Namen Deines Wetter Devices eintragen) und zwar ohne irgendetwas zu filtern (daher .*). Wenn solch ein Event auftritt, wird der Perl Code in den {} ausgeführt. In diesem Fall wird einfach ein File geöffnet (wegen dem ">" wird es, wenn vorhanden überschrieben). Dann wird der Inhalt des Events in das File geschrieben und das File wieder geschlossen. Das File würde in dem Fall im "log" im fhem Directory stehen aber da kannst natürlich auch was anderes setzen. Für Details einfach mal beim notify Wiki oder in der Commandref nachschauen.
super... danke für den Ansatz..
nu noch den Fehler finden....
2016.11.17 19:50:48 3: wetterfile return value: syntax error at (eval 24094) line 1, at EOF
ich suche mal.......
Genial....
Ich habe es als versuch einmal in der DEF so geändert
Weather:.* {open(MyLogfile, ">\MyWeather.log");
my $CONDITION = ReadingsVal("Weather","condition",0);
my $ICON = ReadingsVal("Weather","icon",0);
print MyLogfile $year."-".$month."-".$mday."_".$hms." ".$ICON." ".$CONDITION;close(MyLogfile);}
das klappt hervorragend....
da ich mich mit Perl nicht auskenne hätte ich die Frage wie ich es jetzt noch untereinander bekomme.
im Moment ist das Ergebnis:
2016-11-18_12:03:49 chance_of_rain Schauer
Ziel wäre so:
2016-11-18_12:03:49
chance_of_rain
Schauer
Ich bedanke mich für deine Mühe im voraus und bin begeistert hier Hilfe zu finden....
Ich habe einen Handwerklichen Beruf und bin dort aber in der Lage kleinere Aufgaben in VBA umzusetzen.
Das Ich die Steuerung der Heizung über eine SPS mache ist übertrieben... aber es macht einen heiden spass.
Danke nochmal für deine Mühe
Hab es hinbekommen......
Danke
das Funktioniert
Weather:.* {open(MyLogfile, ">\MyWeather.log");
my $CONDITION = ReadingsVal("Weather","condition",0);
my $ICON = ReadingsVal("Weather","icon",0);
print MyLogfile $year."-".$month."-".$mday."_".$hms."\n".$ICON."\n".$CONDITION;close(MyLogfile);}
Dann bin ich wohl zu spät, schön, dass Du es selbst geschafft hast.