FHEM Forum

FHEM - Hardware => Einplatinencomputer => Thema gestartet von: Klaus Heynen am 28 Juli 2021, 11:39:43

Titel: Daten von Python ISR an PERL FHEM
Beitrag von: Klaus Heynen am 28 Juli 2021, 11:39:43
​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?
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: Otto123 am 28 Juli 2021, 12:27:10
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
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: MadMax-FHEM am 28 Juli 2021, 12:33:05
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
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: frober am 28 Juli 2021, 12:48:25
Auf der selben Hardware, wäre telnet auch eine Lösung...
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: MadMax-FHEM am 28 Juli 2021, 13:01:16
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
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: frober am 28 Juli 2021, 14:34:20
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...
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: Klaus Heynen am 28 Juli 2021, 15:12:42
@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!
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: MadMax-FHEM am 28 Juli 2021, 15:18:32
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
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: Otto123 am 28 Juli 2021, 15:29:13
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 :)
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: MadMax-FHEM am 28 Juli 2021, 15:39:54
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
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: frober am 28 Juli 2021, 16:25:51
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. ;)
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: Steinardo am 28 Juli 2021, 17:23:38
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/ (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")


Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: Klaus Heynen am 28 Juli 2021, 20:02:35
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.  :)
Titel: Antw:Daten von Python ISR an PERL FHEM
Beitrag von: Klaus Heynen am 28 Juli 2021, 21:04:46
 :) :) :)
Es funktioniert wie von Steinardo beschrieben - einwandfrei.
Man muss die Library mit "sudo pip install -U fhem" installieren
Vielen Dank!!!