Autor Thema: altes bash Script durch Python Script/Befehle ersetzen  (Gelesen 584 mal)

Offline Steffen@Home

  • Full Member
  • ***
  • Beiträge: 306
altes bash Script durch Python Script/Befehle ersetzen
« 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
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT, Relais Platine für Ansteuerung Hörmann Garagentore
Pi 3 - FHEM2, Grafana, DHT

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 21756
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #1 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
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Offline Ralf W.

  • Full Member
  • ***
  • Beiträge: 459
  • FHEM - Möge die Macht mit dir sein!
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #2 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
http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 20.04.5 LTS, HMCCU - RaspberryMatic, LaCrosse GW 868 mit CUL 868, DE ConBee II, diverse Sensoren und Aktoren.

Offline Steffen@Home

  • Full Member
  • ***
  • Beiträge: 306
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #3 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])
« Letzte Änderung: 10 November 2022, 08:27:10 von Steffen@Home »
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT, Relais Platine für Ansteuerung Hörmann Garagentore
Pi 3 - FHEM2, Grafana, DHT

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8686
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #4 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.
« Letzte Änderung: 10 November 2022, 10:35:04 von Wernieman »
- 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

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18858
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #5 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*
-----------------------
Mach es möglichst simpel und mach es richtig,
dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8686
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #6 am: 10 November 2022, 16:19:15 »
Popcorn?
(Aber nicht wenn Du wegläufst)
- 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

Offline Steffen@Home

  • Full Member
  • ***
  • Beiträge: 306
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #7 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"

Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT, Relais Platine für Ansteuerung Hörmann Garagentore
Pi 3 - FHEM2, Grafana, DHT

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8686
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #8 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,
- 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

Offline Steffen@Home

  • Full Member
  • ***
  • Beiträge: 306
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #9 am: 14 November 2022, 06:49:28 »
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?
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT, Relais Platine für Ansteuerung Hörmann Garagentore
Pi 3 - FHEM2, Grafana, DHT

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8686
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #10 am: 14 November 2022, 09:23:40 »
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
- 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

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 21756
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #11 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)
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8686
Antw:altes bash Script durch Python Script/Befehle ersetzen
« Antwort #12 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  ;)
- 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