Hallo, schon mal Danke für die Hinweise mit den überflüssigen Klammern und Leerzeichen!
Okay, dann einmal mein kompletter Code, denn ich finde keinen Unterschied zu deinem Beispiel, aber es funktioniert nicht ...
Wird dann aber etwas länger
Code: Alles auswählen
import websocket
import requests
import json
import time
from matrix_lite import led
# Funktion "say"
def say(text): # Funktion "say" mit Option "text"
url = "http://localhost:12101/api/text-to-speech" # Variable url für Text to Speech
requests.post(url, text.encode("utf-8")) # Modul Request mit Methode post, übergibt Variable "url" + "text"
# Intents (Ereignisse aus Rasspy) werden abgearbeitet
def on_message(ws, message): # Funktion on_message
data = json.loads(message) # Variable data mit json.loads "message" füllen
print("**Neues Event ausgelöst**") # "Neues Event ausgelöst" ausgeben
print(data) # Die Daten aus der mit der Json Message gefüllten Variablen ausgeben
if "Led" == data["intent"]["name"]: # Wenn "LED" gleich ist mit Kategorie "intent" und Inhalt von "name" aus der Variablen "data"
led.set(data["slots"]["color"]) # Matrix Lite: Led setzen auf Kategorie "slots" und Inhalt von "color"
say("Setze Licht auf: " + data["slots"]["color"]) # Ruft die Funktion "say" auf und übergibt als Text "Setze Licht auf" + Kategorie "slots" und Inhalt von "color"
elif "Hallo" == data["intent"]["name"]:
say("Hallo")
elif "Datum" == data["intent"]["name"]:
date = (time.strftime("%d.%m.%Y"))
say(date)
elif "Uhr" == data["intent"]["name"]:
uhr = (time.strftime("%H:%M"))
say(uhr)
elif "Kodi" == data["intent"]["name"]:
url = 'http://192.168.xxx.xxx:8080/jsonrpc'
pas = ('xxx', 'xxx')
#if "Pause" == data["slots"]["pause"] or "Play" == data["slots"]["pause"]:
# befehl = {"jsonrpc":"2.0","method":"Player.PlayPause","params":{"playerid":1},"id":1}
# x = requests.post(url, auth=pas, data=json.dumps(befehl, indent=4))
# if x.text == '{"id":1,"jsonrpc":"2.0","result":{"speed":0}}':
# say ("pause")
# elif x.text == '{"id":1,"jsonrpc":"2.0","result":{"speed":1}}':
# say ("Wiedergabe")
# else:
# say ("Befehl nicht möglich")
if "stumm" == data["slots"]["mute"]:
print("if")
print(data["slots"]["mute"])
else:
print("else")
#befehl = {"jsonrpc":"2.0","permission":"ControlPower","method":"Application.SetMute","params":{"mute":"toggle"},"id":1}
#x = requests.post(url, auth=pas, data=json.dumps(befehl, indent=4))
#if x.text == '{"id":1,"jsonrpc":"2.0","result":true}':
# say ("stumm")
#elif x.text == '{"id":1,"jsonrpc":"2.0","result":false}':
# say ("Ton an")
#else:
# say ("error" + x.text)
def on_error(ws, error): # Funktion on_error
print(error) # "error" ausgeben
def on_close(ws): # Funktion on_close
print("\n**Verbindung beendet**\n") # "Verbindung beendet" ausgeben
def on_open(ws): # Funktion on_open
print("\n**Verbindung aufgebaut**\n") # "Verbindung aufgebaut" ausgeben
# Start web socket client
if __name__ == "__main__": # Wird nur ausgeführt, wenn diese Datein die Hauptdatei ist und nicht wenn sie als Modul geladen wird
ws = websocket.WebSocketApp("ws://localhost:12101/api/events/intent", # Websocket öffnen mit URL
on_message = on_message, # Bei Meldung Funktion on_massage
on_error = on_error, # Bei Fehler Funktion on_error
on_close = on_close) # Beim schließen Funktion on_close
ws.on_open = on_open # Beim Start Funktion on_open
ws.run_forever()
Ausgabe wenn die If Anweisung ausgeführt wird:
**Neues Event ausgelöst**
{'intent': {'name': 'Kodi', 'confidence': 1.0}, 'entities': [{'entity': 'mute', 'value': 'stumm', 'value_details': {'kind': 'Unknown', 'value': 'stumm'}, 'raw_value': 'stumm', 'start': 5, 'end': 10, 'raw_start': 5, 'raw_end': 10}], 'slots': {'mute': 'stumm'}, 'text': 'Kodi stumm', 'raw_text': 'kodi stumm', 'tokens': ['Kodi', 'stumm'], 'raw_tokens': ['kodi', 'stumm'], 'wakeword_id': 'bumblebee', 'siteId': 'default', 'sessionId': 'default-bumblebee-33f1072c-c617-437a-82bd-4779c4f57ad2', 'customData': None, 'wakewordId': 'bumblebee', 'lang': None}
if
stumm
Ausgabe, wenn die else Schleife ausgeführt werden sollte, sie es aber nicht wird:
**Neues Event ausgelöst**
{'intent': {'name': 'Kodi', 'confidence': 1.0}, 'entities': [{'entity': 'pause', 'value': 'Pause', 'value_details': {'kind': 'Unknown', 'value': 'Pause'}, 'raw_value': 'pause', 'start': 5, 'end': 10, 'raw_start': 5, 'raw_end': 10}], 'slots': {'pause': 'Pause'}, 'text': 'Kodi Pause', 'raw_text': 'kodi pause', 'tokens': ['Kodi', 'Pause'], 'raw_tokens': ['kodi', 'pause'], 'wakeword_id': 'bumblebee', 'siteId': 'default', 'sessionId': 'default-bumblebee-f44ff2c4-e1f3-483d-be00-85868f4cba2c', 'customData': None, 'wakewordId': 'bumblebee', 'lang': None}
Zusätzlich hätte ich noch eine Frage:
Warum kann ich den Part " entities': [{'entity': 'pause'" nicht für einen Vergleich nutzen? if "pause" == data["entities"]["entitiy"]: - funktioniert gar nicht.
Wäre für jeden Tipp dankbar, weil ich halt eben auch keinen Fehler bekomme, an den ich mich ab arbeiten könnte.
Mein nächster Schritt wäre sonst, das Ganze noch mal in klein nachzubauen, wäre aber halt viel Arbeit.
PS. Es liegt bestimmt daran, dass beim zweiten Event, slots mute nicht existiert, aber dann müsste die if Anweisung doch false sein und else müsste ausgeführt werden!?!? Oder läuft die if Anweisung auf Fehler und deshalb wird else gar nicht beachtet?
Ich bekomme Kopfweh!
