FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: andy75 am 27 Dezember 2018, 08:05:16

Titel: Script starten und Wert erhalten
Beitrag von: andy75 am 27 Dezember 2018, 08:05:16
Hallo @All,

bin ziemlich neu hier und stehe momentan absolut auf dem Schlauch.
Ich möchte mit einem kleinen Script einen Analogeingang von meinem "Automatisation Hat" abfragen.
In Python geht das supt einfach mit:
python
import automationhat
value = automationhat.analog.one.read()
print(value)


Nun war der Gedanke das in FHEM einzulesen. Das bekomme ich aber nicht hin.
Die PHP Datei im Script ist nur zum Testen da und sollte die Zeit zurück geben.

Internals:
   CFGFN     
   DEF        (Analog1:on) {fhem("set Analog1 off");;(my $rueckgabe = "php /home/pi/Analog1.php &");; fhem("set Analog1Wert $rueckgabe;;");;}
   NAME       Analog1_notify
   NOTIFYDEV  Analog1
   NR         1987
   NTFY_ORDER 50-Analog1_notify
   REGEXP     (Analog1:on)
   STATE      2018-12-27 07:44:55
   TRIGGERTIME 1545893095.44252
   TYPE       notify
   READINGS:
     2018-12-26 23:03:52   state           active
Attributes:


Mein "dummy" wird aber nur mit "php /home/pi/Analog1.php &" gefüllt. Was habe ich falsch geschrieben?
Das auzurufende Datei liegt am angegebenen Ort. Kann ich diese Datei auch direkt i Browser aufrufen?
Titel: Antw:Script starten und Wert erhalten
Beitrag von: KernSani am 27 Dezember 2018, 09:46:04
Aktuell weißt du der Variable einen string zu. Probier's mal mit backricks


Kurz, weil mobil
Titel: Antw:Script starten und Wert erhalten
Beitrag von: CoolTux am 27 Dezember 2018, 10:23:19
Meine erste Empfehlung wäre das Du Dir das Einsteiger PDF durch liest. Dann schaust Du Dir an wie Perl funktioniert.


Analog1.on {  fhem('set Analog1 off');
            my $rueckgabe = qx (php /home/pi/Analog1.php/);
            fhem('set Analog1Wert ' . $rueckgabe);
}



Grüße
Titel: Antw:Script starten und Wert erhalten
Beitrag von: Otto123 am 27 Dezember 2018, 20:08:39
Hi,

ich gebe zu bedenken: Wenn das PHP Script länger braucht, wird FHEM für diese Zeit stehen bleiben!
Lösung: Wenn es nur mit Extern PHP geht - im PHP Script das Reading in FHEM setzen (über HTTP) und das Script nicht blockierend starten.

Gruß Otto
Titel: Antw:Script starten und Wert erhalten
Beitrag von: andy75 am 28 Dezember 2018, 10:30:17
Hallo,

ich habe mich mal ein bisschen in das Thema eingelesen.
Das Script wird nun gestartet, aber die Datei nicht mit Werten gefüllt obwohl im Log alles richtig drinne steht.

{my $rueckgabe = system ("/opt/fhem/Analog.py&");
fhem('set Analog1Wert ' . $rueckgabe);
}

Die Benutzerrechte habe ich auf "fhem" gesetzt und auch Schreib-/Ausführungsrechte gesetzt.
Im Log steht bei Ausführung vom Script:
|    315 |      2 |      2 |    281 |
Das ist der formatierte String vom Script. Der muss in den Dummy "Analog1Wert" rein.
Leider steht dort nur:
STATE -1

Wo ist da der Schreibfehler?
Titel: Antw:Script starten und Wert erhalten
Beitrag von: CoolTux am 28 Dezember 2018, 10:49:44
Zitat von: andy75 am 28 Dezember 2018, 10:30:17
Hallo,

ich habe mich mal ein bisschen in das Thema eingelesen.
Das Script wird nun gestartet, aber die Datei nicht mit Werten gefüllt obwohl im Log alles richtig drinne steht.

{my $rueckgabe = system ("/opt/fhem/Analog.py&");
fhem('set Analog1Wert ' . $rueckgabe);
}

Die Benutzerrechte habe ich auf "fhem" gesetzt und auch Schreib-/Ausführungsrechte gesetzt.
Im Log steht bei Ausführung vom Script:
|    315 |      2 |      2 |    281 |
Das ist der formatierte String vom Script. Der muss in den Dummy "Analog1Wert" rein.
Leider steht dort nur:
STATE -1

Wo ist da der Schreibfehler?

Ich habe Dir gezeigt wie es gehen kann. Da Du es anscheinend besser weißt ist es für mich schwer. Ich kann zu Deiner Version nur sagen das sie 2 Fehler hat.
1. Du schickst den gesamten Prozess in den Hintergrund, damit bekommt man keine Ausgabe. Egal wo hin.
2. Mit system() liest man keine Ausgaben in eine Variable.
Titel: Antw:Script starten und Wert erhalten
Beitrag von: Otto123 am 28 Dezember 2018, 10:56:43
Cooltux war kurz und knapp  :D, etwas im Detail: Meine Notiz dazu (https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html).

Da fehlt aber als Lösungsansatz noch genau der Part den Du jetzt brauchst. Eine Idee wie das über HTTP gehen kann steht im Wiki, allerdings nicht für PHP.
https://wiki.fhem.de/wiki/CsrfToken-HowTo


Gruß Otto
Titel: Antw:Script starten und Wert erhalten
Beitrag von: andy75 am 28 Dezember 2018, 13:40:58
Juchu es geht!

Danke für eure Hilfe.

(Analog.on) {my $rueckgabe = qx "/opt/fhem/Analog.py&";
fhem ("set Analog off");
fhem('set AnalogWert ' . $rueckgabe);
}


Das Script (Python) braucht nur den bruchteil einer sekunde um die Analogeingäne von meinem AutomatisationHat einzulesen. Es blockiert also nicht den Server.
Das ich in dem Script keine "waits" einbauen kann war schon klar.
Die Analogwerte werden sauber in die Variable "AnalogWert" geschrieben.
Titel: Antw:Script starten und Wert erhalten
Beitrag von: Otto123 am 28 Dezember 2018, 13:44:36
Ich glaube das & am Ende des Scripts ist sinnfrei. -> Weil qx macht keinen extra Prozess, sonst käme ja nichts zurück.
Wird vielleicht einfach nicht beachtet, aber ich würde es rausnehmen. Verwirrt nur.  ::)

Der Punkt des Blockierens ist meist nicht der normale Betrieb. Du solltest testen was passiert wenn das analoge Device mal nicht da ist.

Gruß Otto
Titel: Antw:Script starten und Wert erhalten
Beitrag von: Beta-User am 28 Dezember 2018, 13:50:21
Nur für den Fall, dass es mal scripts sind, die länger dauern:

http://forum.fhem.de/index.php/topic,88398.msg808685.html#msg808685

Dazu muß man neuerdings aber auch ein telnet-Device definieren (und absichern!). Dafür funktioniert das in abgewandelter Form dann auch von entfernten Rechnern.

Gruß, Beta-User
Titel: Antw:Script starten und Wert erhalten
Beitrag von: andy75 am 28 Dezember 2018, 13:54:14
Ok ich habe das"&" rausgenommen und es geht noch.

Jetzt wo alles läuft, besteht denn hier im Forum bedarf?

Was mache ich mit dem Script?

Ich habe mir einen Shield von "Pimoroni" Pi-Automation-Hat https://www.pollin.de/p/raspberry-pi-automation-hat-810606 (https://www.pollin.de/p/raspberry-pi-automation-hat-810606) gekauft um damit meine Heizung zu steuern.
Die Eingänge und die Ausgänge werden direkt auf die GPIO´s gelegt.
Nur die Analogeingänge werden über I2C abgefragt.
Ein direktes Modul für Fhem gibt es nicht (oder ich habe es nicht gefunden).
Mit dem Script lese ich die Analogeingänge und übergebe diese zur weiteren Verwendung an Fhem.
Titel: Antw:Script starten und Wert erhalten
Beitrag von: CoolTux am 28 Dezember 2018, 14:14:01
Ich denke mal wenn hier größerer Bedarf besteht sollte man da eher ein vollumfängliches Modul bauen.
Titel: Antw:Script starten und Wert erhalten
Beitrag von: Otto123 am 28 Dezember 2018, 17:14:36
Zitat von: Beta-User am 28 Dezember 2018, 13:50:21
Dazu muß man neuerdings aber auch ein telnet-Device definieren (und absichern!). Dafür funktioniert das in abgewandelter Form dann auch von entfernten Rechnern.
Genau deswegen empfehle ich nur noch HTTP :)
Titel: Antw:Script starten und Wert erhalten
Beitrag von: Wernieman am 28 Dezember 2018, 17:47:22
Was aber auch nicht unbedingt "fehlerfreier" ist. Ich persönlich mag immer noch die telnet-Schnitstelle .... gibt übrigens für php ein telnet-Modul ....
Titel: Antw:Script starten und Wert erhalten
Beitrag von: Otto123 am 28 Dezember 2018, 17:56:29
Zitat von: Wernieman am 28 Dezember 2018, 17:47:22
Was aber auch nicht unbedingt "fehlerfreier" ist.
Sag ich ja nicht  :D aber Telnet ist quasi per default weg - in Zukunft wird es eine Generation FHEM Jünger geben die fragen: Hä? Wasndas? Ich will denen nicht erklären, dass sie erstmal "Telnet installieren" (aktivieren!) müssen.

HTTP bleibt hoffentlich noch ne Weile :)

Gruß Otto
Titel: Antw:Script starten und Wert erhalten
Beitrag von: Beta-User am 28 Dezember 2018, 18:08:31
So wie ich das verstanden hatte, muß man telnet nicht installieren, sondern nur aktivieren (FHEM-seitig). Das ist schön beschrieben, wie andere komplizierte Dinge auch, von denen Neulinge denken "wat'n'dat?!?!?".

Und wer unbedingt Pi-GPIO's nutzen will, läßt sich erfahrungsgemäß von nichts abschrecken :P .

(@TE: für den Fall, dass du nicht so genau weißt, was du tust: Nimm lieber eine andere Lösung, die  nicht nur mit einem Pi funktioniert; gibt genug Leute, die froh sind, die Server-Hardware auch wechseln zu können...)
Titel: Antw:Script starten und Wert erhalten
Beitrag von: Otto123 am 28 Dezember 2018, 18:15:12
Ja klar sorry nicht installieren ... ;)

Aber warum eine zweite potentiell unsichere Schnittstelle aktivieren und umfangreich absichern? Es gab doch einen Grund das Rudi die Definition rausgeschmissen hat!  :-X

Aber das ist jetzt alles OT - dem TE hilft es nicht  ;D
Titel: Antw:Script starten und Wert erhalten
Beitrag von: Wernieman am 28 Dezember 2018, 19:19:13
Naja .. für "non-blocking-Module" wird sowieso eine Telnet-Instanz hochgefahren .... ;o)

Ansonsten hast Du Recht :o)
Titel: Antw:Script starten und Wert erhalten
Beitrag von: Otto123 am 28 Dezember 2018, 20:51:22
Zitat von: Wernieman am 28 Dezember 2018, 19:19:13
Naja .. für "non-blocking-Module" wird sowieso eine Telnet-Instanz hochgefahren .... ;o)
Achso?! ::)