Hallo zusammen,
ich bräuchte mal zu folgender "Aufgabenstellung" Hilfe:
Mit meiner Selbstbaulösung einer Ladestation (Wallbox) für mein Elektroauto bestünde die Möglichkeit, den Ladevorgang über die am Netzeinspeisepunkt anliegende Überschussleistung aus einer Photovoltaik-Anlage so zu steuern, dass dabei kein (unnötiger) Netzbezug entsteht.
Dazu müsste die Ladestation natürlich den Wert des Überschusses kennen. Dies wäre möglich, indem die Ladestation eine Datei ausliest, in der der aktuelle Wert steht.
Den gewünschten Wert habe ich zur Zeit nur als ein Reading in einem Device vorliegen. Dieses wird alle fünf Minuten aktualisiert.
Ist es möglich, mittels FHEM eine Datei zu erzeugen, in der nur dieser eine Wert aus dem Reading steht? Diese Datei müsste dann auch alle fünf Minuten aktualisiert werden, d.h. der darin befindliche Wert müsste überschrieben werden.
Wenn ja, wie könnte sowas funktionieren?
Ich glaube, die Option über eine Log-Datei führt hier nicht zum gewünschten Ergebnis, da in dieser ja immer wieder ein Wert beigefügt und nichts überschrieben wird.
Laut Software der Ladestation muss eine Datei mit genau einem Wert vorliegen, der dann ausgelesen und genutzt werden kann.
Ich würde mich über jegliche Hilfe und Tipps freuen.
Vielen Dank schonmal!
Andreas
Hallo Andreas,
mit Perl geht alles :)
Es gibt in FHEM extra eine Funktion, suche mal nach FileWrite -> https://wiki.fhem.de/wiki/DevelopmentModuleAPI#FileWrite
Gruß Otto
Hallo Otto,
danke für die schnelle Rückmeldung...jetzt muss ich die von dir verlinkten Sachen nur noch verstehen... :-[
Wird denn bei Nutzung dieser Funktion der Wert in der Datei immer wieder überschrieben, oder wird immer ein neuer Wert hinzugefügt?
Oder wird die Datei bei jedem Aufruf der Funktion neu erstellt bzw. überschrieben?
VG
Andreas
Probier es doch einfach aus?
Ansonsten im Link einfach etwas nach oben scrollen - FileDelete.
Wenn Du das so willst, also erst löschen dann neu schreiben.
Aber Du kannst Dein Problem auch in jeder anderen Sprache lösen, nur Perl wäre sozusagen schon drin.
Gruß Otto
Hallo Otto,
diese beiden threads wären doch auch Lösungsansätze, oder?
https://forum.fhem.de/index.php?topic=40946.0
https://forum.fhem.de/index.php/topic,39156.msg312963.html#msg312963
VG
Andreas
Ja :D
Hallo,
so, ich habe mal noch ein bischen in den Weiten des Netzes geforscht...
Ausgangslage:
Device "httpmod_senec_lan" mit dem Reading "Netzbezug" vorhanden.
Darauf würde ich dann dieses notify loslassen
define Einspeisung notify httpmod_senec_lan:Netzbezug:.* { openWB() }
und das in der 99_myUtils ergänzen
sub
openWB ()
{
my $E = ReadingsVal("httpmod_senec_lan","Netzbezug",0");
open(DATEI, ">/opt/fhem/Einspeisung.txt") or die $!;
print DATEI $E;
close (DATEI);
}
Dann müsste doch die Datei Einspeisung.txt bei jeder Änderung des Readings mit dem aktuellen Wert überschrieben werden, oder?
Vielleicht könnte jemand auch nochmal über den code schauen, da ich in perl nicht wirklich sattelfest bin... :-[
Dankeschöööön!
VG
Andreas
Also
Zitator die $!
ist keine gute Idee, es sei denn du willst dein Fhem gleich mit ausschalten. ;)
Grüße
Heiko
Hallo Heiko,
also weglassen?
Stand aber in so ziemlich allen Beispielen, die ich dazu gefunden habe...
Wo ich weiterhin noch Schwierigkeiten habe, ob alle "Gänsefüßchen" im code korrekt sind. Manchmal sieht man ' und manchmal "...
VG
Andreas
Eine Logausgabe oder sowas statt dessen damit man sieht dass ein Felercpassiert ist. Ja die wird häufig verwendet aber innerhalb von fhem nicht gut. Aber du kannst es ja gerne probieren ;)
Wenn ich daran denke schreibe ich dir einen Auszug aus meinem DbRep Modul. Dort verwende ich auch eine Schreibroutine für Datenexport.
Alles klar, danke dir!
Ja, wäre nett, wenn du mir den Auszug mal senden könntest.
Ist denn wohl der restliche code in Ornung so?
VG
Andreas
Versuchs doch mal wie Otto schon erwähnt hat mit Filewrite.
Sollte so klappen, der vorhandene Wert im Textfile wird immer überschrieben :
defmod Einspeisung notify httpmod_senec_lan:Netzbezug:.* {FileWrite({ FileName=>"/opt/fhem/Einspeisung.txt", ForceType=>"file", NoNL => 0},split(/\,/,$EVTPART1))}
Gruß
Thomas
Hi Thomas,
erstmal danke für deinen Tipp!
Aber ist dein code allgemein gültig? Ich finde die von dir aufgeführten Parameter im Wiki zu FileWrite unter dem Punkt "Nutzung von configDB".
Ich nutze aber configDB nicht, sondern "nur" die fhem.cfg...
VG
Andreas
FileWrite ist eine Funktion von FHEM, nicht explizit von configDB.
Glaub doch einfach mal, was Dir die Leute hier schreiben. Und wenn Du es nicht glaubst, probier es einfach aus, bevor Du alles in Deinem Unwissen in Frage stellst.
Ich hasse das Wiki.
Liebes betateilchen, halt dich doch bitte einfach raus, wenn es dir nicht passt, dass es Anfänger gibt, die nicht sofort gottgleich alles wissen können.
Allen anderen danke ich nochmals für die Anregungen und Tipps!
VG
Andreas
So,
hier dann noch meine funktionierende Lösung.
In die 99_myUtils kommt
sub
openWB ()
{
my $E = ReadingsVal("httpmod_senec_lan","Netzbezug",0);
open (DATEI, '>', '/opt/fhem/www/Einspeisung.txt');
print DATEI $E;
close (DATEI);
}
Dazu das notify von weiter oben.
Läuft.
VG
Andreas