SnipsAi unter MQTT2.4 einbinden

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

tomy7om
Beiträge: 19
Registriert: 21. Nov 2019 09:05
Answers: 0

SnipsAi unter MQTT2.4 einbinden

Beitrag von tomy7om »

Hallo zusammen,

...nachdem ich, mit Hilfe von euch aus dem Forum, meine Steckdosen nun endlich per OH2 schalzten kann, muss ich ja "nur noch" meinen Snips-Raspi anbinden, dass ich mit den Rules arbeiten kann - und da waren sie wieder, meine Probleme...

Egal ob ich per PaperUI oder per VisualStudioCode, sprich per "snips.things"-Datei, arbeite - ich bekomme keine Kommunikation hin :?:

Per PaperUI komme ich ich bis zum Thing, welches dann auch "online" ist:
snips_thing.JPG
Wenn ich dann aber einen Channel anlegen möchte, um diesen mit meinem Item, welches vom Typ String ist, zu verbinden - bekomme ich nur den Typ "Publish trigger" angeboten?!?

Versuche ich das ganze mit "snips.things", das Beispiel habe ich aus dem englischen Forum, https://community.openhab.org/t/voice-c ... -2-4/73947
legt sich zwar der Channel an; geht aber nicht online, weil ihn irgendwas daran stört:

Channels:
Type string : Snips_Intent "Snips Intent" [
stateTopic="hermes/intent/#:state:default",
commandTopic="hermes/intent/#:state:default"
]

...mache ich das nämlich weg, geht das Thing wieder online - ich bin aber beim selben Problem wie wenn ich es per PUI anlege...?!?

Lausche ich per MQTTfx auf den Snips-Raspi, bekomme ich die Kommunikation mit...

Vielleicht hat ja jemand von euch ne Idee :?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: SnipsAi unter MQTT2.4 einbinden

Beitrag von udo1toni »

Was Du da angelegt hast, ist eine Bridge. Die Bridge ist die verbindende Brücke (sic!) zwischen Broker und Thing(s). Du musst nu als ein Generic MQTT Thing anlegen, welches mit der Bridge verbunden ist. Im Thing kannst Du dann normale Channel anlegen. Der Code im Link ist zumindest nicht ganz korrekt:

Code: Alles auswählen

Bridge mqtt:broker:SnipsAI "MQTT - SnipsAI Broker" @ "MQTT" [ 
  host="<IP of your Snips service>",
  secure=false,
  port=1883,
  qos=0,
  retainMessages=false,
  clientID="Openhab2",
  keep_alive_time=30000,
  reconnect_time=60000,
  username="<username if you added one in Snips config>",
  password="<password if you added one in Snips config>"
]
{
    Thing topic SnipsAI "MQTT - SnipsAI Thing" @ "MQTT"  {      // diese Zeile ist angepasst!!!
        Channels:
            Type string : Snips_Intent "Snips Intent" [ 
                stateTopic="hermes/intent/#:state:default",
                commandTopic="hermes/intent/#:state:default"      
            ]
    }
}
Der (leider unsichtbare) xtend-example Teil der offiziellen Doku erläutert das Format: https://github.com/openhab/openhab2-add ... xamples.md
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

tomy7om
Beiträge: 19
Registriert: 21. Nov 2019 09:05
Answers: 0

Re: SnipsAi unter MQTT2.4 einbinden

Beitrag von tomy7om »

Hallo nochmal,

...ich hab jetzt mal meine PUI-Things rausgeworfen - und im VSC "deinen" Code eingefügt...
Und bekomme nun diese Meldung:
snips_thing_01.JPG
Was mache ich denn nun schon wieder falsch?!?

Der Snips-Raspi ist online und erreichbar...

LG Tom
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: SnipsAi unter MQTT2.4 einbinden

Beitrag von udo1toni »

Die Settings hast Du aber schon passend gesetzt? IP des Brokers, username und passwort?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

tomy7om
Beiträge: 19
Registriert: 21. Nov 2019 09:05
Answers: 0

Re: SnipsAi unter MQTT2.4 einbinden

Beitrag von tomy7om »

Hallo nochmal,
...jep, den host hatte ich eingetragen; und den user (sollte ja der Standard-User "pi" sein?!) + mein geändertes PW auch.
Aber - nix

Bin dann hingegangen und habe den Code im VSC wieder "ausgeblendet", dass die Things wieder verschwinden.
Habe die dann wieder Schritt für Schritt per PUI angelegt:
  • zuerst den "MQTT Broker Snips" mitsamt Hostadresse, Port, User und PW
    - online
  • dann das "Generic MQTT Thing Snips", mit Verweis auf den Broker
    - online
  • dann den Channel "Snips_Intent" als Text value angelegt; noch ohne "state-" und "command-topic"
    - online
  • sobald ich aber im Channel auch nur ein topic beschreibe; z.B. das state-topic mit "hermes/intent/#:state:default"
    - geht das "Generic MQTT Thing Snips" offline - mit der Fehlermeldung die im letzten Bild ja zu sehen ist
?!?

Jetzt meine Frage; passt dieser EIntrag denn zu dem, was ich per MQTTfx mitlesen kann, wenn ich dort etwas spreche?:
MQTTfx.JPG
bzw. passt das zu dem Item, welches ich angelegt habe (aus einem Forum übernommen)?:

String Snips_Intent "Snips Intent" { mqtt="<[snips:hermes/intent/#:state:default]" }
...oder muss anstelle von "snips" in der Klammer die IP vom Snips-Raspi rein?!?

Fragen über Fragen - aber vielleicht habt ihr ja wieder Ideen :idea: für mich :?:

LG Tom
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: SnipsAi unter MQTT2.4 einbinden

Beitrag von udo1toni »

Das Item passt schon mal nicht, denn das Item hat einen Link zum mqtt1 Binding, Du arbeitest aber hoffentlich mit dem mqtt2 Binding.

Weder das stateTopic noch das commandTopic darf das # enthalten, es handelt sich um nackte topics.

Die Verknüpfung im Item verweist auf den Channel. (in Paper UI kannst Du den korrekten Link anzeigen und sogar in die Zwischenablage kopieren lassen)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

tomy7om
Beiträge: 19
Registriert: 21. Nov 2019 09:05
Answers: 0

Re: SnipsAi unter MQTT2.4 einbinden

Beitrag von tomy7om »

...ja, ich versuche mit dem 2.4er Binding zu arbeiten - das klappt ja soweit auch ganz gut, inzwischen.

Nur hab ich leider keinen Plan, was bei den topics stehen muss... auch die OH-Doku bringt mich persönlich nicht wirklich weiter :-(
Das Item habe ich inzwischen auch per PUI angelegt, ist soweit auch alles gut - bis auf eben diese topics.

Die habe ich jetzt aber auch mal parallel im Snips-Forum erfragt.

LG Tom

tomy7om
Beiträge: 19
Registriert: 21. Nov 2019 09:05
Answers: 0

Re: SnipsAi unter MQTT2.4 einbinden

Beitrag von tomy7om »

Hallo schon wieder,

...das Problem mit den "intents" ist inzwischen gelöst ;-)

Jetzt habe ich noch ein Problem mit den "rules"...

Ich habe jetzt diese "rule":
var String oh2ONOFF

rule "on_off"
when
Item Snips_Intent received update
then

logInfo("Snips Intent: ", Snips_Intent.state.toString)

var String intentName = transform("JSONPATH", "$.intent.intentName", Snips_Intent.state.toString)
var String pureIntent = intentName.split(":").get(1);
var String device_val = transform("JSONPATH", "$.slots[0].value.value", Snips_Intent.state.toString)

logInfo("Snips Gerät: ", device_val)

pureIntent = pureIntent.toLowerCase

logInfo("Snips device value: ", pureIntent)

if (pureIntent == 'einschalten') {
oh2ONOFF = "ON"
} else if (pureIntent == 'ausschalten') {
oh2ONOFF = "OFF"
}

if (device_val == 'Stehlampe') {
sendCommand(switch1,oh2ONOFF)
}
logInfo("Snips device value: ", device_val)
end
und diese "items":
Switch switch1 "SofaLicht" {mqtt=">[localhost:cmnd/tasmota-1/POWER:command:ON:1],>[localhost:cmnd/tasmota-1/POWER:command:OFF:0]"}
Switch switch2 "Licht_2" {mqtt=">[localhost:cmnd/tasmota-2/POWER:command:ON:1],>[localhost:cmnd/tasmota-2/POWER:command:OFF:0]"}
Switch switch3 "Licht_3" {mqtt=">[localhost:cmnd/tasmota-3/POWER:command:ON:1],>[localhost:cmnd/tasmota-3/POWER:command:OFF:0]"}
Switch switch4 "Licht_4" {mqtt=">[localhost:cmnd/tasmota-4/POWER:command:ON:1],>[localhost:cmnd/tasmota-4/POWER:command:OFF:0]"}
Switch switch5 "Licht_5" {mqtt=">[localhost:cmnd/tasmota-5/POWER:command:ON:1],>[localhost:cmnd/tasmota-5/POWER:command:OFF:0]"}
und das Problem, dass im LogViewer von OH2 dieser Fehler erscheint:
2019-12-03 11:54:36.696 [INFO ] [smarthome.model.script.Snips Gerät: ] - Stehlampe

2019-12-03 11:54:36.700 [INFO ] [me.model.script.Snips device value: ] - wohnzimmer

2019-12-03 11:54:36.713 [WARN ] [rthome.model.script.actions.BusEvent] - Cannot convert 'null' to a command type which item 'switch1' accepts: [OnOffType, RefreshType].

2019-12-03 11:54:36.716 [INFO ] [me.model.script.Snips device value: ] - Stehlampe
...WAS muss ich denn nun WO anpassen, dass das funzt?! - stehe mal wieder auf dem Schlauch - sorry

LG Tom
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

tomy7om
Beiträge: 19
Registriert: 21. Nov 2019 09:05
Answers: 0

Re: SnipsAi unter MQTT2.4 einbinden

Beitrag von tomy7om »

...ok, bin inzwischen so weit, dass ich glaube zu verstehen, dass das "Zerlegen" des Intent nicht stimmt; hab mal noch ein paar Log-Zeilen eingefügt, und sehe dass der "pureIntent" falsch referenziert...

Hier mal der komplette Log für den EIN-Befehl
2019-12-03 13:59:30.398 [INFO ] [marthome.model.script.Snips Intent: ] - {"sessionId":"c0987ead-6b9d-401b-8c44-7f32b5654f84","customData":null,"siteId":"default","input":"stehlampe ein","asrTokens":[[{"value":"stehlampe","confidence":1.0,"rangeStart":0,"rangeEnd":9,"time":{"start":0.0,"end":1.3199999}},{"value":"ein","confidence":0.4939228,"rangeStart":10,"rangeEnd":13,"time":{"start":1.3199999,"end":1.9698691}}]],"asrConfidence":0.7027964,"intent":{"intentName":"tomy7om:Wohnzimmer","confidenceScore":1.0},"slots":[{"rawValue":"stehlampe","value":{"kind":"Custom","value":"Stehlampe"},"alternatives":[],"range":{"start":0,"end":9},"entity":"Untitled","slotName":"Geraete","confidenceScore":1.0},{"rawValue":"ein","value":{"kind":"Custom","value":"1"},"alternatives":[],"range":{"start":10,"end":13},"entity":"an_aus","slotName":"schalten","confidenceScore":0.4939228}],"alternatives":[{"intentName":null,"confidenceScore":0.07469625,"slots":[]}]}

2019-12-03 13:59:30.424 [INFO ] [smarthome.model.script.Snips Gerät: ] - Stehlampe

2019-12-03 13:59:30.429 [INFO ] [.smarthome.model.script.IntentName: ] - tomy7om:Wohnzimmer

2019-12-03 13:59:30.434 [INFO ] [.smarthome.model.script.pureIntent: ] - Wohnzimmer

2019-12-03 13:59:30.440 [INFO ] [me.model.script.Snips device value: ] - wohnzimmer

2019-12-03 13:59:30.447 [INFO ] [se.smarthome.model.script.oh2ONOFF: ] - null

2019-12-03 13:59:30.452 [WARN ] [rthome.model.script.actions.BusEvent] - Cannot convert 'null' to a command type which item 'switch1' accepts: [OnOffType, RefreshType].

2019-12-03 13:59:30.455 [INFO ] [me.model.script.Snips device value: ] - Stehlampe
Dabei ist tomy7om mein Benutzername und Wohnzimmer der Intentname; siehe Bild:
snips.JPG
Vielleicht kann mir jemand helfen das in der "rule" richtig aufzulösen?!?

LG Tom
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
peter-pan
Beiträge: 2758
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: SnipsAi unter MQTT2.4 einbinden

Beitrag von peter-pan »

Also, wie Udo schon weiter oben geschrieben hast, benutzt du in deiner .items-Datei die Channel-Verlinkung so wie sie unter MQTT1 üblich ist, das klappt aber nicht.

Die Warnung resultiert wahrscheinlich von diesem Befehl:

Code: Alles auswählen

sendCommand(switch1,oh2ONOFF)

bzw. von der vorhergehenden Zuordnung:

Code: Alles auswählen

oh2ONOFF = "OFF"
Probiere hier mal

Code: Alles auswählen

oh2ONOFF = OFF
ohne Anführungszeichen
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Antworten