FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: maci am 03 Oktober 2018, 20:52:34

Titel: [gelöst] Wert aus Python Script in FHEM übernehmen
Beitrag von: maci am 03 Oktober 2018, 20:52:34
Irgendwie komme ich nicht weiter.

Ich habe ein Python Script das auf die high Flanke eine GPIO Eingangs reagiert.
Gemessen wir auch die Dauer des high Signals.

Die Dauer ist einscheidend für eine weitere Verarbeitung in FHEM.

Ich finde einfach nichts, wie ich den Wert an einen dummy übergeben kann.
mit bash habe ich es geschafft, doch bei python stehe ich am schlauch.

Das übergeben mit bash habe ich so gelöst: /opt/fhem/fhem.pl 127.0.0.1:7072 "set Ausgabe $WERT"
Ausgabe ist ein Dummy

Muss sagen, dass ich weder in Python noch in bash gut bin, wobei bash besser geht.
Das Python script habe ich im Netz gefunden und es funktoniert auch.

Konkret geht es darum, dass ich je nach Dauer eines Signals den Raspberry neustarten oder ausschalten will.
Da ich aber zuvor auf meinem Monitor mit Floorplan eine Ausgabe haben will, will ich das ganze an FHEM übergeben.

Wer hat einen Tipp für mich?
Titel: Antw:Wert aus Python Script in FHEM übernehmen
Beitrag von: amenomade am 03 Oktober 2018, 21:01:44
Mit netcat oder os.system
Titel: Antw:Wert aus Python Script in FHEM übernehmen
Beitrag von: JoWiemann am 04 Oktober 2018, 07:00:33
Vielleicht hilft das Beispiel weiter:

#!/usr/bin/python
import sys
from SOAPpy import SOAPProxy
import subprocess

def fhem_set( var, value):
    #print "set " +  var + " " + value
    subprocess.call(['perl', '/opt/fhem/fhem.pl', '7072', 'set '+ var +' ' + value])

server = SOAPProxy(proxy='http://192.168.x.x:49000/igdupnp/control/WANCommonIFC1',
namespace ='urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1',
soapaction='urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetCommonLinkProperties',
noroot=True)
#server.config.dumpSOAPOut = 1
#server.config.dumpSOAPIn = 1
try:
    interface =  server.GetResponse()
except:
    print "Problem to get info from FritzBox via upnp."
    sys.exit(1)

if  interface['NewPhysicalLinkStatus'] != 'Up':
    fhem_set("FB_Link","Up: 0 Down: 0")
else:
    NewLayer1DownstreamMaxkBitRate = int(interface['NewLayer1DownstreamMaxBitRate'])/1000
    NewLayer1UpstreamMaxkBitRate = int(interface['NewLayer1UpstreamMaxBitRate'])/1000
    fhem_set("FB_Link", "Up: " + repr(NewLayer1UpstreamMaxkBitRate) + " Down: " + repr(NewLayer1DownstreamMaxkBitRate) )
    sys.exit(0)

/Code]

Grüße Jörg
Titel: Antw:Wert aus Python Script in FHEM übernehmen
Beitrag von: maci am 04 Oktober 2018, 12:57:30
Habe es mit os.system gelöst, das funktioniert
Danke!
Titel: Antw:[gelöst] Wert aus Python Script in FHEM übernehmen
Beitrag von: Wernieman am 04 Oktober 2018, 16:25:53
Wobei ich Dir empfehlen würde, anstatt mit /opt/fhem/fhem.pl mit nc zu arbeiten. Ist sehr viel ressourcensparender(und stabiler)
Titel: Antw:[gelöst] Wert aus Python Script in FHEM übernehmen
Beitrag von: JoWiemann am 04 Oktober 2018, 16:58:50
Zitat von: Wernieman am 04 Oktober 2018, 16:25:53
Wobei ich Dir empfehlen würde, anstatt mit /opt/fhem/fhem.pl mit nc zu arbeiten. Ist sehr viel ressourcensparender(und stabiler)

Wofür steht für Dich nc ?
Titel: Antw:[gelöst] Wert aus Python Script in FHEM übernehmen
Beitrag von: Wernieman am 05 Oktober 2018, 07:58:39
für den Befehl "nc", in der Langform netcat. In der Konsole ist beides verwendbar.

In der Bash:
echo -en "set ${1} ${2}\nquit\n" | nc -w 5 localhost 7072 >/dev/null

Kann sogar mit Passwort arbeiten, das muß nur als erster Parameter. Wenn DU telnet per SSL geschützt hast, siehe Command-Ref:
http://www.fhem.de/commandref.html#telnet (http://www.fhem.de/commandref.html#telnet)

So etwas muß übrigens auch mit Python direkt gehen. Ohne es Ausprobiert zu haben:
https://docs.python.org/2/library/telnetlib.html (https://docs.python.org/2/library/telnetlib.html)