Rasp3 GPIO Probleme NodeRED/Python EIN- und AUSGÄNGE

Hallo zusammen,

ich steuere mit dem Raspberry über Relais einen Teil meiner Heizung. Dafür habe ich ein kleines Programm mit Python geschrieben. Das funktioniert auch alles.
Jetzt wollte ich mit NodeRED die Schaltzustände visualisieren. In einer Testumgebung klappt das auch alles wunderbar. Hierzu lese ich den Zustand vom Pin aus ändere dann die Farbe eines Buttons.
grafik
Wenn jetzt beides, also PythonProg und Visualisierung zusammen laufen, übernimmt Node RED die Oberhand. Das Pyhton Programm kann keine Relais mehr schalten. Bei einem Deploy werden die Pins wieder initialisiert und das PythonProg kann nichts mehr schalten

Mir ist das beim booten aufgefallen. Das Python Prog wird in der rc.local gestartet, ruft Temperaturen ab und schaltet dann dementsprechend. Wenn dann der Node Red Dienst startet werden die GPIOs initialisiert und alles Relais gehen wieder aus.

Ebenso funktioniert das bei den Eingängen. In einer Testumgebung habe ich ein PythonProg das auf die GPIOs lauscht und dann was tun soll. Funktioniert auch. Wenn ich über Node RED den Pin überwache und ebenfalls den Zustand visualisieren will, bleibt das PythonProg hängen.

Hat hier jemand einen Tipp für mich?

Danke schon mal
Gruß
Roland

Hmm,

ich würde das Python Script deine Kommunikation in MQTT droppen lassen und das dann per node-red visualisieren. Stichwort: Eventbasierter Nachrichtenbus.

Da ich mit Pi GPIO noch nichts gemacht habe, kann ich dir bei deiner “race condition” leider wenig helfen.

Gruß,
Patrik

Hallo Patrik,
Danke für Deine Rückmeldung!
mit dem MQTT muss ich mich erst einlesen, was das genau ist …
kurze Gegenfrage
gibt es die Möglichkeit eine Datei per nodeRED zu überwachen, wenn sie sich ändert?
Meine Überlegung wäre, die Status in eine Datei zu schreiben und dann auszulesen. Ich wollte aber nicht unnötig Prozessorlast generieren, wenn ich alle x Sec/Min die Dateien abfrage.

Gruß
Roland

MQTT :wink:

Du willst ja genaugenommen ein “Event” auslesen… genau dafür ist mqtt gemacht. Und vor allem, es ist leicht/frei zugänglich und nimmt dir die ganze extra Arbeit die du machen musst, um das gleiche Verhalten zu erreichen, ab.
Es gibt für jede Programmiersprachen Bibliotheken, die du einsetzen kannst. Und deinen Python-Code kannst du dann einfach Bidirektional mit mqtt kommunizieren lassen und es alleine den GPIO verwalten lassen.

https://www.hivemq.com/blog/mqtt-essentials-part-1-introducing-mqtt/

Hallo @Wurschtbrot,

alternativ gibt es ein Homegear-Pythonmodul (https://pypi.org/project/homegear/). Damit kannst du die Zustandsänderung zum Beispiel in eine Systemvariable oder einer globalen Node-BLUE-Variable speichern. Homegear gibt die Änderung dann direkt über sein Nachrichtenkanäle weiter (bei der Systemvariablen direkt MQTT, bei der Node-BLUE-Variablen an Node-BLUE, wo du sie dann weiter verarbeiten kannst). Außerdem lassen sich GPIOs auch mit Node-BLUE direkt auswerten (GPIO-Node). Damit kannst du den Wert über MQTT and Node-RED weiterreichen.

Viele Grüße

Sathya

1 Like

Ok, das wusste ich nicht :wink:

Hallo Leute!

Das Thema ist ein wenig älter, aber manche Probleme wiederholen sich einfach. Hoffe Ihr könnt mir eine Lösung zeigen.

Homegear läuft im Moment auf einem Pi 4, Software von Pi drauf gezogen und dann Homegear installiert.
Im Moment habe ich die Version 0.7.51-3497 und UI-Version 0.2.0-1321-dev.

In Nodeblue habe ich über den Reiter “IO”, den GPIO -OUT ausgewählt, den GPIO 21 genommen und erstmal true und false auf den Ausgang gelegt. Leider schaltet das Relais nicht und ich weiß nicht warum. Habe auch schon ein anderen Port versucht, gleiches Ergebniss.

Von Sathya mit dem Modul, sagt mein Pi alles gut! Kann ja nicht sein.

Frage, oder muss ich in der raspi-config was einschalten!

Danke
Piwko