Script starten und Wert erhalten

Begonnen von andy75, 27 Dezember 2018, 08:05:16

Vorheriges Thema - Nächstes Thema

andy75

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?
RPi3b+, SugnalDurino, AutomatisationHat, Somfy, Fritzbox, Dect, Temperatur

KernSani

Aktuell weißt du der Variable einen string zu. Probier's mal mit backricks


Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

andy75

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?
RPi3b+, SugnalDurino, AutomatisationHat, Somfy, Fritzbox, Dect, Temperatur

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Cooltux war kurz und knapp  :D, etwas im Detail: Meine Notiz dazu.

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

andy75

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.
RPi3b+, SugnalDurino, AutomatisationHat, Somfy, Fritzbox, Dect, Temperatur

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

andy75

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 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.
RPi3b+, SugnalDurino, AutomatisationHat, Somfy, Fritzbox, Dect, Temperatur

CoolTux

Ich denke mal wenn hier größerer Bedarf besteht sollte man da eher ein vollumfängliches Modul bauen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

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 :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wernieman

#13
Was aber auch nicht unbedingt "fehlerfreier" ist. Ich persönlich mag immer noch die telnet-Schnitstelle .... gibt übrigens für php ein telnet-Modul ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Otto123

#14
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz