Seite 2 von 2
Re: SnipsAi unter MQTT2.4 einbinden
Verfasst: 3. Dez 2019 14:24
von tomy7om
hatte ich auch schon probiert; und eben vorsichtshalber nochmal

leider nix
Denke aber wie geschrieben, dass es am Zerlegen des Intents liegt - meine rule erwartet ja unter "pureIntent" ein/aus bzw. einschalten/ausschalten - im Log steht da ja aber "Wohnzimmer".
Ich muss wohl den Intent "anders" zerlegen - da bin ich gerade bei der Recherche, WIE...
Re: SnipsAi unter MQTT2.4 einbinden
Verfasst: 3. Dez 2019 14:27
von tomy7om
...wenn ich nämlich fest was reinschreibe, funzt das ganze - sowohl mit "ON" als auch mit "OFF"
if (device_val == 'Stehlampe') {
sendCommand(switch1,"ON")
Re: SnipsAi unter MQTT2.4 einbinden
Verfasst: 3. Dez 2019 14:32
von peter-pan
Kommt dann die Warnmeldung noch ? Wenn ja, probiere es mit 0, evtl. auch sendCommand(xxx,0) oder sendCommand(xxx,OFF)
Edit: Hab gerade gesehen, dass du das mit dem sendCommand-Befehl schon probiert hast.
Re: SnipsAi unter MQTT2.4 einbinden
Verfasst: 3. Dez 2019 15:29
von peter-pan
Ich hatte schon die Vermutung, dass das mit der Variablen und dem sendCommand-Befehl ein Problem ist, deshalb habe ich nochmal in der
Doku (Rules) von OH2 nachgeschaut. Da findest du unter dem Punkt "Manipulating Item States" den Grund für die Log-Meldung und den Unterschied zwischen
MyItem.sendCommand(<new_state>) und
sendCommand(MyItem, "<new_state>")
Re: SnipsAi unter MQTT2.4 einbinden
Verfasst: 3. Dez 2019 16:44
von tomy7om
sorry, da hatte ich auch schon geschaut, und beide Varianten probiert... mit der gleichen Fehlermeldung.
Diese besagt ja, dass das Ergebnis meiner Rule, bezogen auf :
if (pureIntent == 'ein') {
oh2ONOFF = ON
} else if (pureIntent == 'aus') {
oh2ONOFF = OFF
"NULL" ergibt -> weil mein extrahiertes "pureIntent" ja schon nicht stimmt; wie oben geschrieben, denke ich, habe ich da einen Fehler beim Zerlegen des Intents, komme aber noch nicht drauf wie ich es machen muss...

Re: SnipsAi unter MQTT2.4 einbinden
Verfasst: 3. Dez 2019 17:17
von udo1toni
Also wenn ich Deinen Code richtig verstanden habe, landet in pureIntent das Wort Wohnzimmer (2. Teil von intentName)
Im slot 0 befindet sich das Wort Stehlampe, während slot 1 (value.value) den Wert 1 enthält, da die Befehl in "ein" und "schalten" zerlegt wurde. Beim Ausschalten wäre der Wert dann 0 für "aus". Entsprechend nehme ich an, sollte die Rule eher so aussehen:
Code: Alles auswählen
rule "on_off"
when
Item Snips_Intent received update
then
logInfo("Snips Intent: ", Snips_Intent.state.toString)
val String intentName = transform("JSONPATH", "$.intent.intentName", Snips_Intent.state.toString)
val String pureIntent = intentName.split(":").get(1)
val String device = transform("JSONPATH", "$.slots[0].value.value", Snips_Intent.state.toString)
val String device_val = transform("JSONPATH", "$.slots[1].value.value", Snips_Intent.state.toString)
logInfo("snips", "Snips Raum: {} Gerät: {} Befehl: {}", pureIntent, device, device_val)
// pureIntent = pureIntent.toLowerCase
val oh2ONOFF = if(device_val == "1") ON else OFF
if (device == "Stehlampe")
switch1.sendCommand(oh2ONOFF)
end
Da kein Wert zur Laufzeit der Rule geändert wird, reichen Konstanten zum Speichern. oh2ONOFF ist besser unbestimmt, denn dann kann man direkt OnOffType als Wert verwenden. Die Zuweisung über den ternären Operator spart dabei Platz und ist besser lesbar
