Daten von Python ISR an PERL FHEM

Begonnen von Klaus Heynen, 28 Juli 2021, 11:39:43

Vorheriges Thema - Nächstes Thema

Klaus Heynen

​Ich habe einen I2C-Encoder der über ein Python Script Encoder (https://github.com/Fattoresaimon/I2CEncoderV2.1)​ Werte ausliest (https://github.com/Fattoresaimon/I2CEncoderV2.1/blob/master/Python%20Raspberry%20Library/Examples/I2CEncoderV2_basic.py)​. Es wird beim Start von FHEM mit gestartet und läuft parallel zu FHEM.

Der Encoder erzeugt Interrupts auf einem GPIO, diese möchte möchte ich über FHEM auswerten und entsprechende Aktionen ausführen.

Die Hardware funktioniert einwandfrei aber ich bekomme den Ausgabewert nicht von der Python Ebene an FHEM (Perl) übergeben.
Wie könnte ich die Parameterübergabe machen?

Otto123

#1
Zu Deiner letzen Frage:
Du kannst von python (über gefühlt 20 Schnittstellen Module) - oder einfach so - per http - Befehle an FHEM senden.
https://wiki.fhem.de/wiki/CsrfToken-HowTo#Python

Ist der Satz mit der GPIO auch eine extra Frage? Wenn Du mal so suchst:
site:forum.fhem.de interrupt gpio

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

MadMax-FHEM

Eventuell ist ja auch das was: https://forum.fhem.de/index.php/topic,115230.msg1094931.html#msg1094931

Ansonsten kann ich Otto nur zustimmen, es gibt ettliche Möglichkeiten um Daten nach fhem (in einen dummy) zu bekommen...

Man kann auch bei anderen "Modulen" (nodejs etc.) abkucken...

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)

frober

Auf der selben Hardware, wäre telnet auch eine Lösung...
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

MadMax-FHEM

Zitat von: frober am 28 Juli 2021, 12:48:25
Auf der selben Hardware, wäre telnet auch eine Lösung...

Warum nur auf derselben HW?
Telnet geht auch über Netzwerk...
...soweit mir bekannt...

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)

frober

Zitat von: MadMax-FHEM am 28 Juli 2021, 13:01:16
Warum nur auf derselben HW?
Telnet geht auch über Netzwerk...
...soweit mir bekannt...

Gruß, Joachim

Ja, da hast du Recht.
Mein Gedanke war eher, dass ich z.B. über http nicht von "außen" die Daten pushe, wenn es direkt von "innen" geht...
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Klaus Heynen

@OTTO123
Nee, keine Frage nur info.
Im Detail:
Am Encoder wird gedreht.
Das Python Programm wertet das Event aus (Increment, Decrement, Push etc.)
und löst auf einem GPIO einen Interrupt aus.
FHEM erkennt den Interrupt
FHEM muss nun irgendwie erkennen was für ein Event in Python erkannt wurde, also wie bekomme ich die Verbindung so hin das es auch nicht zu laggy wird?

Vielen Dank für eure Hilfe schon mal!

MadMax-FHEM

#7
Zitat von: Klaus Heynen am 28 Juli 2021, 15:12:42
Im Detail:
Am Encoder wird gedreht.
Das Python Programm wertet das Event aus (Increment, Decrement, Push etc.)
und löst auf einem GPIO einen Interrupt aus.
FHEM erkennt den Interrupt
FHEM muss nun irgendwie erkennen was für ein Event in Python erkannt wurde, also wie bekomme ich die Verbindung so hin das es auch nicht zu laggy wird?

Vielen Dank für eure Hilfe schon mal!

Würde nicht auch folgendes gehen/reichen:

Am Encoder wird gedreht.
Das Python Programm wertet das Event aus (Increment, Decrement, Push etc.)
(und löst auf einem GPIO einen Interrupt aus.)
neu/anders: Python setzt z.B. in einem dummy-Device (oder einem bereits bestehenden Device) ein Reading mit dem entsprechenden Wert (erkannter Event)

EDIT: warum also der "Umweg" über den Interrupt? (wenn der GPIO gesetzt werden muss [oder was meinst du mit "Interrupt"?] um etwas [anderes] zu "erreichen", dann kann das ja weiterhin geschehen / und wenn ein "Zusammenhang" mit fhem sein "muss", dann kann ein notify auf eben das gesetzte Reading auch den GPIO schalten ;)  )

-> http(s), telnet, mqtt (um noch was ins Rennen zu werfen ;)  ), ...

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

Zitat von: frober am 28 Juli 2021, 14:34:20
Mein Gedanke war eher, dass ich z.B. über http nicht von "außen" die Daten pushe, wenn es direkt von "innen" geht...
http und telnet ist mMn beides drinnen wie draußen :) http ist per default da, telnet muss extra ...

@Klaus warum sollte das "laggy" werden?
Ich sehe die Notwendigkeit des Interrupts und dessen Erkennung gar nicht. Wenn das python Teil direkt nach FHEM schreibt ist es "drin" - in dem Moment. FHEM wirft einen Event, auf den kann man in gewohnter Weise reagieren.
Also aus dem Interrupt wird der Event ohne ihn gefragt zu haben :)
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

MadMax-FHEM

Zitat von: Otto123 am 28 Juli 2021, 15:29:13
@Klaus warum sollte das "laggy" werden?
Ich sehe die Notwendigkeit des Interrupts und dessen Erkennung gar nicht. Wenn das python Teil direkt nach FHEM schreibt ist es "drin" - in dem Moment. FHEM wirft einen Event, auf den kann man in gewohnter Weise reagieren.
Also aus dem Interrupt wird der Event ohne ihn gefragt zu haben :)

Genauso habe ich das gemeint ;)

Zitat von: MadMax-FHEM am 28 Juli 2021, 15:18:32
neu/anders: Python setzt z.B. in einem dummy-Device (oder einem bereits bestehenden Device) ein Reading mit dem entsprechenden Wert (erkannter Event)

2 "Fhemler" ein Gedanke  ::)

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)

frober

Zitat von: Otto123 am 28 Juli 2021, 15:29:13
http und telnet ist mMn beides drinnen wie draußen :) http ist per default da, telnet muss extra ...

localhost:Port/fhem funktioniert?
Das wusste ich nicht, bzw. damit habe ich mich noch nicht beschäftigt. ;)
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Steinardo

Zitat von: MadMax-FHEM am 28 Juli 2021, 15:18:32
neu/anders: Python setzt z.B. in einem dummy-Device (oder einem bereits bestehenden Device) ein Reading mit dem entsprechenden Wert (erkannter Event)
Dieser Ansatz hat mich neugierig gemacht da das Thema "Werte von python an FHEM senden" auf meiner ToDo liste war. Ich bin über https://pypi.org/project/fhem/ gestolpert. Die Library kann über pip installiert werden und mit nur 4 Zeilen Code kann man ganz einfach auf FHEM zugreifen.


Hier mal ein Beispiel das den Wert 44 in das dummy device "dummy_python" schreibt.

import fhem
import logging


fh = fhem.Fhem("server_address", protocol="http", port=8083)
fh.send_cmd("setreading dummy_python TestValue 44")



Klaus Heynen

Danke an euch, besonders für den Code-Schnipsel, ich bin Hardware-freak und kann mit ASM und Registern und so umgehen.
Aber heutige Hochsprachen sind oft zu hoch für mich!
Werde es heute Nacht mal testen.  :)

Klaus Heynen

 :) :) :)
Es funktioniert wie von Steinardo beschrieben - einwandfrei.
Man muss die Library mit "sudo pip install -U fhem" installieren
Vielen Dank!!!