Hallo Miteinander,
ich bin FHEM-Neuling und möchte einen Ausgang schalten und habe dazu definiert in der fhem.cfg:
define LICHT dummy
attr LICHT room Ra-Pi
attr LICHT setList on off
attr LICHT webCmd on:off
#"echo 1 >/tmp/licht.txt"
Funktioniert prima mit dem Browser.
Jetzt hätte ich gerne beim Schalten den Zustand in die Datei /tmp/licht.txt geschrieben als 0 oder 1 und habe auch im Forum gefunden, dass man eine Datei mit dem shell-Befehl schreiben kann. Nur wo trage ich diesen ein?
Bin für jeden Tipp dankbar,
Gruß
Hallo,
welchen Zweck verfolgst Du mit der Datei und warum reicht nicht ein FileLog http://fhem.de/commandref_DE.html#FileLog
Grüße Jörg
Hallo Jörg,
die Datei wird von einem anderen System gelesen, welches das Licht physikalisch schaltet.
Die Datei ist logisch damit das schaltende Device.
Danke + Gruß
Das ändert aber doch nichts daran, dass ein passend konfiguriertes FileLog Deine Anforderungen erfüllen würde.
vielleicht verstehe ich das ja falsch, aber in der FHEM reference steht zu filelog:
define <name> FileLog <filename> <regexp>
Log events to <filename>. The log format is
YYYY-MM-DD_HH:MM:SS <device> <event>
das deute ich so, dass Filelog einen Zeitstempel erwartet und ein Logfile liest.
Ich möchte aber nur den Schaltwert (0/1) von Licht in eine Datei schreiben.
Hättest Du bitte ein Beispiel für mich?
Danke + Gruß
Ich glaube, ich habe es jetzt verstanden... der gesamte Dateiinhalt soll nur entweder 0 oder 1 sein!?
Wie greift denn Dein "Schalt-Device" auf die Daten zu (zyklisch, Anfrage, Dateihandling)?
Entweder könnte man dann vielleicht die "Abfrage" auf den aktuellen Status Deines Dummy umbiegen,
oder Du müsstest wirklich per kleinem Script bei Änderung des Dummy den passenden Eintrag generieren.
Hallo,
anbei eine minimal Lösung:
define FileLicht notify LICHT {}
Im DEF des neuen Device dann folgendes einfügen:
LICHT {
open (DATEI, ">>/opt/fhem/LICHT_on_off.txt") or die $!;
print DATEI $EVENT eq "on"?"1\n":"0\n";
close (DATEI);
}
Bitte den Pfad und den Dateinamen noch anpassen.
Grüße Jörg
Hallo Hollo,
danke für Deine Antwort.
Die Datei /tmp/licht.txt wird alle paar Sekunden von dem anderen System eingelesen.
Wenn ich genauer drüber nachdenke wäre es natürlich wünschenswert, wenn ich über FHEM die Datei auch einlesen könnte, um den Zustand des Schalters immer korrekt zu sehen, falls da jemand anderes mal was reinschreibt. Logisch wäre für mich (trotz fehlender FHEM-Kenntnisse), wenn das device kein dummy sondern die Datei wäre, letztlich verhält sich ja die Datei wie ein Sensor/Stellglied.
Wo finde ich denn Infos wie ein eigenes Device geschrieben wird, oder gibt es einfachere Wege?
Danke und Gruß
Hallo Jörg,
das hört sich sehr gut an - Danke.
Ich nehme mal an, das define... schreibe ich in die fhem.cfg und die funktion licht am besten wohin?
Danke + Gruß
Zitat von: aficianado am 15 Juli 2015, 13:19:53
Ich nehme mal an, das define... schreibe ich in die fhem.cfg und die funktion licht am besten wohin?
Zum Thema "define" und "fhem.cfg" bitte mal hier nachlesen: Konfiguration (http://www.fhemwiki.de/wiki/Konfiguration).
Peter
Hallo,
das define ... bitte in die Fhem Kommandozeile schreiben. Mit Enter wird ein Device generiert. Auf das Def klicken, dann geht ein Eingabebereich auf. Dort den Code rein kopieren.
Grüße Jörg
PS: Bitte lies Dir doch einmal die Basics für Fhem im Wiki durch. Danke.
wow, es funktioniert - Danke Jörg !!!!
Gruß
Noch einen Hinweis.
Im Moment wird jeder Schaltvorgang in eine neue Zeile in die Datei geschrieben. Soll immer nur der aktuelle Schaltvorgang geschrieben werden, dann bitte den Code wie folgt anpassen:
LICHT {
open (DATEI, ">/opt/fhem/LICHT_on_off.txt") or die $!;
print DATEI $EVENT eq "on"?"1":"0";
close (DATEI);
}
Hallo Jörg,
vielen Dank, das hatte ich bei meinem tail -f ... noch gar nicht gemerkt. Jetzt geht es aber einwandfrei.
Zwei Kleinigkeiten sind mir noch aufgefallen:
a) nach einem Reboot des Linux-Systems war das FileLicht-script weg, wie bekomme ich das dauerhaft hin?
b) besteht eine Möglichkeit die Datei wiederum zyklisch rückzulesen, damit bei einer Zustandsänderung außerhalb von FHEM auch der Zustand des Lichtes auch in FHEM richtig angezeigt wird, bzw. wo kann ich dazu Infos finden? Oder wird das zu kompliziert?
Danke + Gruß
Hast Du nach dem Anlegen des Devices oben Links auf Save geklickt? Ich lege Dir noch einmal eindringlich ans Herz die Grundlagen von Fhem im Wiki durch zu arbeiten.
Nun zu Deiner zweiten Frage. Wie wird denn der Status zurück geschrieben? Selbe Datei, andere Datei ?
Grüße Jörg
Gesendet von iPhone mit Tapatalk
Hallo Jörg,
erst mal Danke für Deine Geduld.
Also auf der Seite "Licht details" und "FileLicht details" sehe ich keinen save-Button. Ich sehe links unter dem FHEM-Logo "Save config", der meldet aber "wrote configuration to fhem.cfg", bezieht sich also offensichtlich nicht auf dem Rest - oder?
Im FHEM-Wiki habe ich schon mehrmals gestöbert und habe mir die Seiten angesehen unter "wie fange ich an?", habe aber trotzdem noch nicht so den richtigen Überblick gefunden. Gerade sehe ich, dass da ja auch ein Einsteiger.pdf existiert, das werde ich mir mal durchlesen, wird mit 100+ Seiten natürlich etwas dauern. Mir fehlt noch so ein bischen der Zusammenhang, was wo wie angelegt wird und warum, wo ein notify eingebaut wird oder wo man wie Werte umrechnet, usw., aber das gibt sich bestimmt mit der Zeit.
Nun zu Deiner zweiten Frage: ja, die Datei /tmp/licht.txt könnte auch von einem anderen Prozess beschrieben werden mit 0 oder 1. Das Relais schaltet dann nach typ. 2 Sekunden, kann aber auch mal 10s dauern.
Danke + Gruß
Zitat von: aficianado am 15 Juli 2015, 19:37:33
FHEM-Logo "Save config", der meldet aber "wrote configuration to fhem.cfg", bezieht sich also offensichtlich nicht auf dem Rest - oder?
Genau den meinte ich. Und hierdurch werden ALLE Änderungen und/oder Neuanlagen an und von Devices gespeichert. Dafür wird nach einer Änderung auch das ? neben "Save config" rot, als Hinweis darauf, dass Änderungen noch nicht gespeichert wurden und somit nach einem Neustart verloren gehen.
Grüße Jörg
ok, habe ich jetzt verstanden - Danke!
Hallo,
wie sieht es mit der Rückmeldung aus. Brauchst Du noch eine Idee, bzw. wie wird die Rückmeldung erstellt?
Grüße Jörg
Ja klar. Hättest Du bitte einen Tipp dazu wie man das am besten umsetzt?
FileLog erscheint mir zu umständlich, wegen des Zeitstempels und weil das Logfile ja erst erstellt werden müsste.
Am besten würde mir gefallen ein Device als Datei zu bauen, aber das sind für mich noch Sterne im Himmel :-))
Danke + Gruß
Sorry,
jetzt stehe ich auf dem Schlauch?!
1. Status 0 oder 1 wird in Datei geschrieben
2. Irgendein Prozess liest Datei und tut irgendetwas
3. Prozess mach nach erfolgreichem tun was?
4....
Kannst Du mal in etwa so beschreiben was Du machst, machen willst.
Grüße Jörg
der Fremd-Prozess liest den Wert aus der Datei /tmp/licht.txt und schiebt diesen über ein anderes verzweigtes Netzwerk zu einem Knoten und dieser schaltet mit dem Wert sein lokales Relais. Außerdem könnte ein andere Prozess das Relais setzen wollen und der schreibt einen neuen Wert in die Datei. Und an dieser Stelle wäre es schick, wenn das FHEM den Zustand vom Licht immer korrekt anzeigt. Natürlich könnte ich auf dem Linux-System eine bash schreiben, welche die /tmp/licht.txt ausliest und den Inhalt in eine andere Datei zum Rücklesen ins FHEM schreibt, aber ich würde lieber gleich die /tmp/licht.txt nehmen. Wenn es zu kompliziert ist die Datei im FHEM zyklisch einzulesen, dann ist das eben so. Aber sollte es eine simple Lösung geben, würde ich diese gerne umsetzen.
Wenn es fürs FHEM einfacher ist, könnte ich auch den Inhalt der Datei per html zur Verfügung stellen und diese Seite in FHEM per html einlesen und der Variablen Licht zuordnen - oder?
Danke + Gruß
Zitat von: aficianado am 15 Juli 2015, 21:30:46
...Wenn es fürs FHEM einfacher ist, könnte ich auch den Inhalt der Datei per html zur Verfügung stellen und diese Seite in FHEM per html einlesen und der Variablen Licht zuordnen - oder?
Wenn Du da was per bash etc. machen kannst, dann kontrollier doch zyklisch, ob sich die Datei geändert hat, und wenn ja machst Du ein wget und setzt Deinen FHEM-Dummy auf den Inhalt.
Das ist mir noch immer zuviel Geheimnis, um es wirklich so verstehen zu können, dass da passende Ideen bei rum kommen.
Hier ein Lösungsbeispiel:
Zunächst ein dummy anlegen:
define DummyOnOff dummy
Dann ein at anlegen:
define OnOffAktion at +*00:00:30 {}
+* sagt: immer wieder tun und zwar nach 00 Stunden : 00 Minuten : 30 Sekunden. Also alle 30 Sekunden
Jetzt auf Def klicken und folgenden Code einfügen:
+*00:00:30 {
my $daten;
open (DATEI, "/opt/fhem/onoff.txt") or die $!;
while(<DATEI>){
$daten = $daten.$_;
}
close (DATEI);
fhem("set DummyOnOff ". ($daten eq "1"?"on":"off"));
}
Bitte den Pfad und Namen der Datei wieder anpassen.
Die Datei wird gelesen und wenn 1 dann wird der dummy auf on gesetzt ansonsten auf off. Das passiert alle 30 Sekunden.
Prüfen kannst Du das wenn Du LICHT schaltest. Dann geht DummyOnOff nach spätesten 30 Sekunden auf den selben Status.
Grüße Jörg
Danke Jörg,
super, genau was ich gesucht habe, funktioniert prima!
Danke + Gruß