Ich weiß nicht ob das hier das richtige Unterforum ist aber ich versuche es mal...
Zur Sprachsteuerung nutze ich Rhasspy über MQTT. Das läuft gut und so habe ich meinem Respeaker-Hat einen Python-Dienst geschrieben, welcher eine LED durch Topics steuert.#!/usr/bin/env python
from apa102_pi.driver import apa102
import paho.mqtt.client as mqtt
strip = apa102.APA102(num_led=4)
strip.clear_strip()
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
client.subscribe("hermes/dialogueManager/sessionEnded/#")
client.subscribe("hermes/hotword/toggleOff/#")
def on_message(client, userdata, msg):
if msg.topic == "hermes/hotword/toggleOff" and "dialogueSession" in str(msg.payload) and '"siteId": "Schlafzimmer"' in str(msg.payload):
strip.set_pixel(1,0,255,0,7)
strip.show()
elif msg.topic == "hermes/dialogueManager/sessionEnded" and '"siteId": "Schlafzimmer"' in str(msg.payload):
strip.set_pixel(1,0,255,0,0)
strip.show()
else:
strip.set_pixel(1,0,0,255,7)
strip.show()
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("192.168.100.1", 1883, 60)
client.loop_forever()
Das funktioniert.
Nun möchte ich den vorhandenen Button nutzen, um diese Funktion aus- bzw. anzuschalten. Aber was ich auch mache, ich bekomme die Auswertung des Tasters in keine Schleife. Das Beispielscript von Seeedstudio läuft.import RPi.GPIO as GPIO
import time
BUTTON = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON, GPIO.IN)
while True:
state = GPIO.input(BUTTON)
if state:
print("off")
else:
print("on")
time.sleep(1)
Ich denke, client.loop_forever() scheint in sich zu laufen und in meinem Sript ist gar keine Schleife möglich - oder doch?
Gruß Jens
Nur damit ich es richtig einsortieren kann: hat das Problem _irgendetwas_ mit FHEM zu tun?
Ja, im weitesten Sinn mit 10_RHASSPY.pm, welches FHEM per Spracheingabe steuert. Die optische Bestätigung am Satelliten erhöht den WAF, ist aber (gerade im Schlafzimmer) nicht immer gewünscht.
p.s. client.loop_start() war die Lösung.