Seite 1 von 1

MQTT mit python am Raspberry

Verfasst: Sonntag 27. Dezember 2020, 18:07
von frasche06347
Hallo,
ich möchte an einem Raspberry Zero mehrere Bewegungsmelder anschließen und eine Bewegung per MQTT an einen Broker weiterleiten.
Dazu habe ich ein Beispiel-Script umgebaut, mit einem Bewegungsmelder klappt es:

************************************************************************************
import RPi.GPIO as GPIO
import time
import datetime
import os

#Board Mode: Angabe der GPIO-Nummer
GPIO.setmode(GPIO.BCM)

#GPIO Pin definieren fuer den Dateneingang vom Sensor
PIR_GPIO = 14
GPIO.setup(PIR_GPIO, GPIO.IN)

def MOTION(PIR_GPIO):
# Bewegung erkannt
os.system('mosquitto_pub -h 192.168.0.100 -m true -t /smarthome/Bewegungsmelder1 -u admin -P kennwort')
time.sleep(1)
os.system('mosquitto_pub -h 192.168.0.100 -m false -t /smarthome/Bewegungsmelder1 -u admin -P kennwort')

try:
GPIO.add_event_detect(PIR_GPIO, GPIO.RISING, callback=MOTION)
while 1:
time.sleep(60)
except KeyboardInterrupt:
GPIO.cleanup()
************************************************************************************

Wie muss ich das Scipt jetzt umbauen, um mehrere Bewegungsmelder zu überwachen und jeweils eine andere MQTT-Nachricht zusenden?
Bewegungsmelder1 an GPIO14 ... Nachricht: /smarthome/Bewegungsmelder1 auf "true" ... nach einer Sekunde auf "false"
Bewegungsmelder2 an GPIO15 ... Nachricht: /smarthome/Bewegungsmelder2 auf "true" ... nach einer Sekunde auf "false"
Bewegungsmelder3 an GPIO16 ... Nachricht: /smarthome/Bewegungsmelder3 auf "true" ... nach einer Sekunde auf "false"

Ich bin blutiger python-Newbie ;-(( .... ich weis leider nicht, wie ich das umsetzen muss.
Gibt es jemand der mir helfen kann?

Vielen Dank.

Viele Grüße
Frank

Re: MQTT mit python am Raspberry

Verfasst: Sonntag 27. Dezember 2020, 20:10
von __blackjack__
@frasche06347: Das würde ich gar nicht umbauen, das müsste man eh von Grund auf neu schreiben. Mit `gpiozero` statt `RPi.GPIO` und beispielsweise `paho-mqtt` statt irgendwelche externen Programme, dann auch noch mit `os.system()` zu starten.