Hallo Community
ich finde keine Idee, wie ich eine Konsolenausgabe, welche ja im FhemLog auftaucht weiter nutzen kann. Ich führe erfolgreich ein PHP Skript aus, welches mir einen Eintrag im FhemLog erzeugt. Aus diesem möchte ich gerne ein Reading erstellen, welches dem Dummy, der das Script angestoßen hat zugeführt wird.
Zur Verdeutlichung:
1) set test(dummy) 1 erzeugt ein Event
2) ein notify reagiert auf diesen wenn es eine 0 oder 1 ist
define nt_test test:[01] {system "php /pfad/script.php $EVENT &"}
3) das script erzeugt einen FhemLog
2016-03-09 21:06 Scriptausgabe mit Informationen
4) Diese Informationen möchte ich irgendwie weiter nutzen können. z.B. setreading test info "Scriptausgabe mit Informationen"
Ich wäre dankbar für jeden Denkanstoß
Hi Pit,
du kannst nicht auf die Logmeldung reagieren, sondern musst aus dem Script z.B. auf dein Dummy über Telnet zugreifen (https://forum.fhem.de/index.php/topic,46046.msg378276.html#msg378276) und den Status ändern. Das erzeugt dann auch ein Event, welches du weiter auswerten kannst (notify, DOIF usw.).
Gruß
Frank
Du könntest teoretisch die Logfiles mit einem Deamon überwachen, aber am einfachsten ist es wirklich, wenn Dein PHP-Script fhem per telnet informiert ....
Hui...
Das sind ja mal Antworten. Vielen Dank für die Vorschläge und Erläuterungen.
Da meine Programmierkenntnisse noch am Anfang der Karriere stehen, werde ich dieses Problem wohl jetzt nicht angehen.
Erläuterung:
Es handelt sich um ein PHP-Script, welches das WLan der FritzBox schaltet (hier im Forum gibt es Ausführungen dazu). Für mich habe ich es jetzt so gelößt, dass ich dem Script den aktuellen Wert(Schlüssel) einfach mit übergebe und somit jedesmal "neu" setze. Damit ist der Wert aus dem Dummy auch aktuell der in der FrizBox und immer lesbar.
Vielen Dank für die schnellen Antworten.
Ist doch relativ "einfach" .. mal so aus meinem "Bastelkeller", laaaange nicht mehr verwendet (und optimal, ist eine andere Frage)
function FHEMConneckt()
{
global $fhemsocket;
$service_port = "7072";
# Alterantiv IP
$address = gethostbyname('fehmserver');
$PW = "passwort\n";
$out = '';
$fhemsocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($fhemsocket === false) {
echo "socket_create() fehlgeschlagen: Grund: " . socket_strerror(socket_last_error()) . "\n";
exit;
}
#echo "Versuche, zu '$address' auf Port '$service_port' zu verbinden ...";
$result = socket_connect($fhemsocket, $address, $service_port);
if ($result === false) {
echo "socket_connect() fehlgeschlagen: Grund: " . socket_strerror(socket_last_error($fhemsocket)) . "\n";
exit;
}
# echo "Login Informationen senden ...";
# Wenn kein Passwort, bitte leerlassen
socket_write($fhemsocket, $PW, strlen($PW));
# echo "Serverantwort auf Start lesen um Puffer zu leeren:\n\n";
$out = socket_read($fhemsocket, 2048);
$out = socket_read($fhemsocket, 2048);
}
function FHEMclose()
{
global $fhemsocket;
#echo "Quit senden und Port schließen";
$in = "quit\n";
socket_write($fhemsocket, $in, strlen($in));
socket_close($fhemsocket);
}
function hole_FHEM_daten($device)
{
global $fhemsocket;
$in = "getstate $device\n";
$out = '';
#echo "Gewünschte Informationen anfragen ...";
$result = socket_write($fhemsocket, $in, strlen($in));
# echo "Serverantwort ...";
$out = socket_read($fhemsocket, 2048);
preg_match('/state:(?P<zahl>\d+)/', $out, $treffer);
return( $treffer[1] );
}
function hole_FHEM_status($device, $was)
{
global $fhemsocket;
$in = "get $device statusRequest\n";
$out = '';
#echo "Gewünschte Informationen anfragen ...";
$result = socket_write($fhemsocket, $in, strlen($in));
# echo "Serverantwort ...";
$out = socket_read($fhemsocket, 2048);
preg_match('/' . $was . ': (?P<status>\w+)/', $out, $treffer);
return( $treffer[1] );
}
function schalte_FHEM($device, $status)
{
global $fhemsocket;
$in = "set $device $status\n";
#echo "Gewünschte Informationen enden...";
socket_write($fhemsocket, $in, strlen($in));
}
Du bist ein Engel!
Damit kann ich schon einiges anfangen, auch mit meinen anfänglichen Java-Kentnissen - und wenn ich das ersteinmal hinbekommen habe, dann kommen mir erst recht so einige neue Ideen.
VielenVielenVielen Dank für diesen Code-Schnipsel
Wobei .. verständlich, was ich dabei mache?
Hatte ich mal vor längerer Zeit geschrieben ... für ein Projekt, welches mittlerweile eingestampf ist.