FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Steffen@Home am 09 November 2022, 18:34:10

Titel: altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Steffen@Home am 09 November 2022, 18:34:10
Hallo Zusammen,

ich habe für das Auslesen meiner DHT Sensoren damals ein bash Script (mit Adafruit_Python_DHT) geschrieben das mir die Werte an FHEM sendet.

Nun habe ich auf CircuitPython-DHT Library umgestellt und weiß nun nicht wie man den Befehl:
/opt/fhem/fhem.pl 7072 meinpasswort "setreading WZTemp temperature $Temp"


mit Python abbildet. Kann mir jemand helfen?
Danke und Gruß Steffen
Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Otto123 am 09 November 2022, 18:52:06
Hallo Steffen,

zumindest habe ich da mal was im Wiki verankert - Allerdings über HTTP und nicht über Telnet:
https://wiki.fhem.de/wiki/CsrfToken-HowTo#Python

Ist allerdings ne Weile her und ich kann quasi kein python
Und ich meine es gibt mehr als eine Anbindung an FHEM mit irgendwelchen Bibliotheken.

Gruß Otto
Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Ralf W. am 09 November 2022, 19:01:17
Hi,

vielleicht hilft es: https://forum.fhem.de/index.php/topic,33979.msg263214.html#msg263214

Habe es damals mit Python/Telnet gemacht. Mittlerweile Tasmota ...

MfG
Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Steffen@Home am 10 November 2022, 08:09:35
Moin,

theoretisch könnte ich doch bash script(leicht abgeändert) so lassen und dieses jetzt nur mit einem cmd-line Argument aufrufen oder?
Kann man ein bash script aus python aufrufen und ein Argument mitgeben das ich dann im bash verarbeite und dort per telnet sende?
Danke.

Folgendes habe ich gefunden und muss ich mal testen:

import subprocess
subprocess.check_call(["./script.sh", arg1, arg2])
Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Wernieman am 10 November 2022, 10:21:49
Anstatt fhem.pl aufzurufen, kannst Du doch per telnet (auf Konsole ncat) Kontakt aufnehmen? Wie das mit Phyton geht, muß ich aber passen, hatte es bisher mit bash und php umgesetzt ... nach Google suche müsste es aber auch mit Phyton gehen.
Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: betateilchen am 10 November 2022, 16:03:32
Man könnte auch über python einen simplen webserver bereitstellen, der den Messwert liefert und diesen dann aus FHEM per HTTPMOD abfragen. (HTTPMOD wird ja inzwischen für jeden Sche... verwendet)

*duck-und-weg*
Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Wernieman am 10 November 2022, 16:19:15
Popcorn?
(Aber nicht wenn Du wegläufst)
Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Steffen@Home am 12 November 2022, 11:46:16
Habe es jetzt quick and dirty gelöst:

Das Python Script: (könnte man noch optimieren   ;)) Anregungen gerne Willkommen

#!/usr/bin/env python
import time
import board
import adafruit_dht
import subprocess

# Initial the dht11 device, with data pin connected to GPIO10:
#dhtDevice = adafruit_dht.DHT22(board.D18)
dhtDevice = adafruit_dht.DHT11(board.D10)

# you can pass DHT22 use_pulseio=False if you wouldn't like to use pulseio.
# This may be necessary on a Linux single board computer like the Raspberry Pi,
# but it will not work in CircuitPython.
# dhtDevice = adafruit_dht.DHT22(board.D18, use_pulseio=False)

#try:
# Print the values to the serial port
temperature_c =("%.1f"%dhtDevice.temperature)
#        temperature_f = temperature_c * (9 / 5) + 32
humidity =("%.1f"%dhtDevice.humidity)
#        print(
#            "Temp: {:.1f} F / {:.1f} C    Humidity: {}% ".format(
#               temperature_f, temperature_c, humidity
#          )
#     )
print(temperature_c)
print(humidity)
subprocess.check_call(["/home/pi/sendToFHEM.sh", temperature_c, humidity])
dhtDevice.exit()

#except RuntimeError as error:
        # Errors happen fairly often, DHT's are hard to read, just keep going
#        print(error.args[0])
#    time.sleep(2.0)
#    continue
#except Exception as error:
#    dhtDevice.exit()
#    raise error

#    time.sleep(2.0)



das aufgerufene Bash-Script:


#!/bin/bash
#echo $1
#echo $2
/opt/fhem/fhem.pl 7072 password "setreading WZTemp temperature $1"
/opt/fhem/fhem.pl 7072 password "setreading WZTemp humidity $2"

Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Wernieman am 12 November 2022, 16:31:18
1. Warum machst Du es nicht in Phyton
2. Warum machst Du 2 Aufrufe, wenn es auch in einem geht? (ist bei mir nur SSL-Geschützt, deshalb etwas "aufwendiger)
echo -en "passwort\nFHEM-Befehl1\nFhem-Befehl-2\n ......analoge Befehle.....\nquit\n" | /usr/bin/ncat -w5 -4 --ssl fhem-Server 7073 >/dev/null

Beispiel ohne ssl gibt es in der Doku und wenn kein Passwort vergeben wird, dann einfach obiges passwort incl. folgenden \n weglassen,
Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Steffen@Home am 14 November 2022, 06:49:28
Zitat von: Wernieman am 12 November 2022, 16:31:18
1. Warum machst Du es nicht in Phyton
2. Warum machst Du 2 Aufrufe, wenn es auch in einem geht? (ist bei mir nur SSL-Geschützt, deshalb etwas "aufwendiger)
echo -en "passwort\nFHEM-Befehl1\nFhem-Befehl-2\n ......analoge Befehle.....\nquit\n" | /usr/bin/ncat -w5 -4 --ssl fhem-Server 7073 >/dev/null

Beispiel ohne ssl gibt es in der Doku und wenn kein Passwort vergeben wird, dann einfach obiges passwort incl. folgenden \n weglassen,
In Python bin ich mit dem Telnet nicht klar gekommen, die alte Bibliothek ist obsolet. Da war es einfacher für mich das bash-Script aufzurufen das ich eh schon hatte.
Nach welcher Stelle muss ich suchen in der Doku?
Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Wernieman am 14 November 2022, 09:23:40
https://fhem.de/commandref_DE.html#telnet (https://fhem.de/commandref_DE.html#telnet)
Oder im Forum, ich glaube auch im FHEM-Wiki, bin mir nicht sicher.
Gibt hier im Forum auch Scripte, um über z.B. Web zuzugreifen
Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Otto123 am 14 November 2022, 10:46:25
Das ist ja der FHEM Client Modus ;) geht auch in einer Zeile
#!/bin/bash
#echo $1
#echo $2
/opt/fhem/fhem.pl 7072 password "setreading WZTemp temperature $1 ; setreading WZTemp humidity $2"
ansonsten nochmal nach #1 fliegen (python und Web)
Titel: Antw:altes bash Script durch Python Script/Befehle ersetzen
Beitrag von: Wernieman am 14 November 2022, 11:27:14
Ja aber anstelle fhem-Client Modus ist es besser, per nc/telnet/ncat o.Ä. es durchzuführen. ist auch aus Sicht der Resourcenverbrauches besser.

Und .. man kann das sogar Anwenden, wenn auf irgendeiner Maschine gar kein FHEM installiert ist, man aber Daten zu fhem pushen (oder pollen *) ) möchte ....

*) Zu pollen gibt es aber bessere Möglichkeiten  ;)