Schalter nach Python

Begonnen von TobiasR, 02 Februar 2020, 17:17:47

Vorheriges Thema - Nächstes Thema

TobiasR

Hallo,

einseitig war es kein aus einem Pythonscript den Status eines GPIO zu verändern und dies im FHEM anzuzeigen.
Nun möchte ich in FHEM einen Schalter einbauen mit dem ich auf das Phytonscript zugreifen kann.

Mein Anwendungsfall:
Eine Solaranlage wird über Python und einen Raspberry geregelt.
Über einen Schalter möchte ich die Steuerung auf Manuell schalten um dann z.B. die Pumpe der Anlage unabhängig von der Regelung laufen zu lassen.

Gibt es dafür eine Möglichkeit in FHEM?

Tobias

amenomade

Deine Shell-Befehle einfach in einem beliebigen Device (dummy,  o.ä) packen
https://fhem.de/commandref_DE.html#command
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

TobiasR

Hi,
aus Python heraus war das ganz simpel:
send_cmd = "set GPIO17 on"
                telnet()

.. und Fhem zeigt mir den Status des GPIO an.

Aber wie komme ich in die Gegenrichtung in das Python Programm rein?


MadMax-FHEM

Läuft das Python programm ständig? -> genau wie jetzt nur halt "abfragen", also ein Reading oder den Zusatnd eines Dummy in fhem (State(Name), ReadingsVal(Name,Reading,Ersatzwert), ...)

Kannst/könntest du es per "Linux-Consolen-Befehl" beeinflussen? -> siehe Antwort von amenomade

Also ein wenig "Erleuchtung" wäre hilfreich...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TobiasR

Hallo,
ja, das Programm läuft ständig.
Zitat von: MadMax-FHEM am 02 Februar 2020, 17:42:46
.... genau wie jetzt nur halt "abfragen", also ein Reading oder den Zusatnd eines Dummy in fhem (State(Name), ReadingsVal(Name,Reading,Ersatzwert), ...)
...
An welcher stelle soll ich nun mit Python abfragen? Es wird doch keine eigene Datei aus FHEM erzeugt aus der ich dann abfragen kann

MadMax-FHEM

Wo hast du denn das set nach fhem eingebaut!?

An der Stelle oder eine andere passende Stelle halt dann die Abfrage einbauen...

Du kannst entweder (wie von amenomade verlinkt) irgendein "Linux-Kommando" (und letztendlich ist der Aufru eines Python-Irgendwas nichts anderes) ausführen VON fhem aus "gesteuert"...
..oder IN deinm Python-Script an entsprechender Stelle Daten VON fhem abfragen (meine Stichworte zur Suche)...

Das ist alles was mir zu der Frage und der doch sehr umfangreichen Information zum Vorhaben und den Randbedingungen einfällt...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TobiasR

Ich habe vermutlich immer noch einen Denkfehler :-[

Wenn ich in FHEM einen dummy als Schalter anlege, ändere ich dessen Status durch draufdrücken.
Aber das ist doch dann immer nur innerhalb von FHEM!? Eine Ausgabe gibt es doch noch nicht (Schnittstelle)
In Python müsste ich jetzt auf diese Schnittstelle zugreifen um die Statusänderung zu verarbeiten.

Als Beispiel nenne ich mal eine Textdatei in der ich aus FHEM den Inhalt von 1 nach 0 ändere. Diese Datei könnte ich aus Python abfragen bzw. hätte die Schnittstelle

Ich verstehe deinen Hilfeversuch einfach nicht

MadMax-FHEM

Du kannst doch bereits "Kommandos" in fhem ausführen!?

Zitat
send_cmd = "set GPIO17 on"
                telnet()

Also hast du doch eine "Schnittstelle" NACH fhem!?

In der Art (also per Telnet) kannst du doch auch Zustände von Devices (auch eines Dummy) "abfragen".

Wie das geht bzw. mögliche "Befehle" habe ich dir ja genannt...

amenomade hat dir verlinkt, wie du AUS fhem (also wenn du etwas IN fhem tust) ein "System-Kommando" ausführen (lassen) kannst: da geht auch Datei schreiben...

Aber WARUM den UMWEG über eine Datei.

Also WARUM: du drückst etwas in fhem und dann wird eine Datei geschrieben (Link von amenomade) und in deinem Python schaust du dann (immer zyklisch!?) in die Datei ob/was da drin steht...

Also warum nicht einfach: du drückst in der fhem-Oberfläche einen Knopf. Ein Dummy (o.ä.) ändert seinen Status und du schaust in deinem Python (zyklisch) nach dem Zustand des Dummy...


Einzig sinnvolle Alternative (ABER: dazu fehlen wichtige Infos!!!): es gibt eine Möglichkeit das Python durch "irgendwelche Aufrufe" DIREKT zu "steuern". Dann einfach als Reaktion auf das Drücken des Knopfes in fhem-Web DIREKT den Befehl ausführen (lassen) der eben dein Python "beeinflusst" (dann sind wir wieder bei dem Link von amenomade)...

Mehr kann ich nicht schreiben...
...außer: wie wäre es sich in fhem einzulesen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TobiasR

ZitatAlso warum nicht einfach: du drückst in der fhem-Oberfläche einen Knopf. Ein Dummy (o.ä.) ändert seinen Status und du schaust in deinem Python (zyklisch) nach dem Zustand des Dummy...
Aber genau das ist doch meine Frage! Wo muss ich hinschauen um die Statusänderung zu sehen?

MadMax-FHEM

#9
Dort WO du sie machst...

Wo/Wie/... willst du denn in fhem etwas tun!?

Gibt es denn "den Knopf" schon!?

EDIT: wenn du nicht genauer erklärst, inkl. was ist schon da und v.a. WIE funktioniert (HW, wie angesteuert, ...) das was bereits da ist und WIE soll das was du vor hast ablaufen kann ICH dir auf jeden Fall nicht weiter helfen als bislang...

EDIT2: übrigens dein Befehl zeigt in fhem NICHT den Status des GPIO an, sondern (wenn entsprechend eingerichtet) schaltet den GPIO EIN...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

#10
Damit geht das doch alles?
https://pypi.org/project/fhem/
Also an FHEM senden und FHEM abfragen.
Ich kenne das nur aus dem Script für die RingBell ...

Aber es gibt 1000 andere Möglichkeiten.
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

TobiasR

Hallo Otto,

super! Genau so etwas habe ich gesucht!

MadMax-FHEM

Ja, ganz nett (danke Otto! ) ;)

Aber trotzdem musst du für dich noch klären WIE du ein Schalten in fhem "erkennen" willst...

Weil das ja "nur" eine "nette Verpackung" von fhem Kommandos ist (von denen ja bereits einige [zur Abfrage] genannt wurden)...
...und es ja auch mit dem von dir bereits geposteten "Schnipsel" geht...

Nur der "Weg nach/aus fhem" ist dort halt nett(er) "verpackt"...

Dann mal viel Erfolg, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Forstling

#13
Ja wenn man auf den link klickt und etwas runter scrollt steht unter Usage
import logging
import fhem

logging.basicConfig(level=logging.DEBUG)

## Connect via HTTP, port 8083:
fh = fhem.Fhem("myserver.home.org", protocol="http", port=8083)
# Send a command to FHEM (this automatically connects() in case of telnet)
fh.send_cmd("set lamp on")
# Get temperatur of LivingThermometer
temp = fh.get_device_reading("LivingThermometer", "temperature")
# return a dictionary with reading-value and time of last change:
# {'Value': 25.6, 'Time': datetime.datetime(2019, 7, 27, 8, 19, 24)}
print("The living-room temperature is {}, measured at {}".format(temp["Value"], temp["Time"]))
# Output: The living-room temperature is 25.6, measured at 2019-07-27 08:19:24

# Get a dict of kitchen lights with light on:
lights = fh.get_states(group="Kitchen", state="on", device_type="light", value_only=True)
# Get all data of specific tvs
tvs = fh.get(device_type=["LGTV", "STV"])
# Get indoor thermometers with low battery
low = fh.get_readings(name=".*Thermometer", not_room="outdoor", filter={"battery!": "ok"})
# Get temperature readings from all devices that have a temperature reading:
all_temps = fh.get_readings('temperature')


damit sollte man klar kommen zumindest wenn man schon das Programm für die Solaranlage geschrieben hat.
Das sollte der Befehl sein:
fh.get_device_reading

gutes Tool nutze ich auch