Noch jemand aus Deutschland?


#41

Hi @zerosquared,

Mein Intent sieht so aus:

{  
   "sessionId":"f30033c8-cfe8-4ba0-876c-da750770b641",
   "customData":null,
   "siteId":"server",
   "input":"schalte das licht im wohnzimmer aus",
   "asrTokens":[  
      [  
         {  
            "value":"schalte",
            "confidence":1.0,
            "range_start":0,
            "range_end":7,
            "time":{  
               "start":0.0,
               "end":0.42
            }
         },
         {  
            "value":"das",
            "confidence":1.0,
            "range_start":8,
            "range_end":11,
            "time":{  
               "start":0.42,
               "end":0.59999996
            }
         },
         {  
            "value":"licht",
            "confidence":1.0,
            "range_start":12,
            "range_end":17,
            "time":{  
               "start":0.59999996,
               "end":0.81
            }
         },
         {  
            "value":"im",
            "confidence":1.0,
            "range_start":18,
            "range_end":20,
            "time":{  
               "start":0.81,
               "end":0.9
            }
         },
         {  
            "value":"wohnzimmer",
            "confidence":1.0,
            "range_start":21,
            "range_end":31,
            "time":{  
               "start":0.9,
               "end":1.35
            }
         },
         {  
            "value":"aus",
            "confidence":1.0,
            "range_start":32,
            "range_end":35,
            "time":{  
               "start":1.35,
               "end":2.31
            }
         }
      ]
   ],
   "intent":{  
      "intentName":"wanmet:openhabCommands",
      "probability":1.0
   },
   "slots":[  
      {  
         "confidence":1.0,
         "rawValue":"licht",
         "value":{  
            "kind":"Custom",
            "value":"Licht"
         },
         "range":{  
            "start":12,
            "end":17
         },
         "entity":"device",
         "slotName":"openhabDevice"
      },
      {  
         "confidence":1.0,
         "rawValue":"wohnzimmer",
         "value":{  
            "kind":"Custom",
            "value":"Wohnzimmer"
         },
         "range":{  
            "start":21,
            "end":31
         },
         "entity":"rooms",
         "slotName":"openhabLocation"
      },
      {  
         "confidence":1.0,
         "rawValue":"aus",
         "value":{  
            "kind":"Custom",
            "value":"aus"
         },
         "range":{  
            "start":32,
            "end":35
         },
         "entity":"command",
         "slotName":"openhabCommand"
      }
   ]
}

Das parse ich als JSON und kann so dann auf alles zugreifen. So habe ich neben SessionId und SiteId (z.B. der Raum, wo der jeweilige Snips steht) Zugriff auf den Intentnamen (hier: “wanmet:openhabCommands”) und auf die “slots”. D.h., ich weiß über openhabCommands, dass etwas geschaltet oder abgefragt werden soll. Ist es ein anderer Intentname kann ich über openHAB andere Sachen machen. Zum Beispiel über eine API Trello als Einkaufsliste benutzen.

Die Slots (hier: openhabCommand, openhabDevice, openhabLocation, openhabColor, openhabPercentage) werte ich dann aus (und zwar den value -> value). Da steht dann der Wert drin, den du in den Items in der SNIPS Console definiert hast. Bei den Items kannst du Synonyme definieren; zum Beispiel gibst du bei Elternzimmer “Schlafzimmer” als eins der Synonyme ein. Sagst du dann “Schalte das Licht im Schlafzimmer an”, übergibt SNIPS “Elternzimmer” als Wert und “schlafzimmer” als rawValue. So kannst du wirklich variieren, gibt keine Begrenzung. Du kannst ja auch ständig den Assistenten erweitern.

Zum Thema Doku: Ja, das ist ganz schön dünn. Ich habe mir andere Apps runtergeladen, die geforkt und reingeschaut, wie andere das gemacht haben. Die Hausautomatisierungsapp (HASSIO) ist ein guter Anfang oder auch die Apps von Domi (?). Das ist echt kein Hexenwerk.

Wichtig ist nur, dass du eine Action definierst (habe die von der Hausautomatisierungsapp genommen), damit via MQTT etwas übergeben wird.

Hoffe, das hilft schon weiter. Wie gut sind denn deine JavaScript-Skills?

Grüße
freddy


#42

Hey!

Wow, das hilft mir tatsächlich schonmal weiter, ich danke Dir! Da werde ich am Wochenende ja erstmal was zum probieren haben, schauen wir mal, was ich alles so hinbekomme.

Mit Javascript habe ich ein wenig Erfahrung, hauptsächlich von der Uni mit Scripten für Websites; im Prinzip weiß ich also wie man damit umgeht - lesen geht auf jeden Fall klar und daraus kann man sich dann ja sowieso immer was basteln.

Nochmal danke, mit so einer ausführlichen, hilfreichen Antwort habe ich gar nicht gerechnet.

Grüße,
Lars

Edit: Achso, was mir noch einfällt: Wie ist deine mqtt-Broker Situation? Ich habe auf dem OpenHab-Server Mosquito laufen und momentan zu Testzwecken auf dem Snips noch den eigenen mqtt-Broker und in OpenHab dann zwei Bridges konfiguriert.
Ich hätte eigentlich gern den Snips so konfiguriert, dass er den OpenHab-Mosquitto verwendet, jedes mal wenn ich ihn so konfiguriere reagiert er aber nicht mehr auf Befehle, irgendwas timed out, ich weiß gerade nicht mehr genau, was es war.
Entweder hab ich es jedes Mal falsch gemacht oder es gibt einen Trick? Gerade diese Seiten sind in der Dokumentation aber leider nicht mehr sonderlich hilfreich, hast Du da eventuell einen heißen Tipp für mich?


#43

Hi @zerosquared,

dann gibt es noch ein bisschen JavaScript zum Nachtisch (Vorsicht, einfach rauskopiert, können Klammern etc. fehlen).

    Snips_Intent = getItem("Snips_Intent");
    var intent = JSON.parse(Snips_Intent.state);

    logInfo('SNIPS','Snips intent name: ' + intent.intent.intentName);

    if (!intent.intent) {
        logInfo('SNIPS','Snips_Intent is not in the expected format!');
    } else {
        logInfo('SNIPS','Snips intent name: ' + intent.intent.intentName);
    }

    // meta data
    var siteId  = intent.siteId;
    var sessionId  = intent.sessionId;

    sessions[siteId] = sessionId;

    logInfo('SNIPS','Snips Session: ' + sessionId);
    logInfo('SNIPS','Snips SiteId: ' + siteId);

    /******************** openhabCommands START ***/
    if (intent.intent.intentName == "wanmet:openhabCommands") {

        // find slots of certain types for later reference
        var commandSlot = intent.slots.filter(function (slot) {
            return (slot.slotName === 'openhabCommand');
        });
        var deviceSlot  = intent.slots.filter(function (slot) {
            return (slot.slotName === 'openhabDevice');
        });
        var locationSlot = intent.slots.filter(function (slot) {
            return (slot.slotName === 'openhabLocation');
        });
        var colorSlot = intent.slots.filter(function (slot) {
            return (slot.slotName === 'openhabColor');
        });
        var percentageSlot = intent.slots.filter(function (slot) {
            return (slot.slotName === 'openhabPercentage');
        });
        
        var command = (commandSlot.length) ? commandSlot[0].value.value.toLowerCase() : null;
        var device = (deviceSlot.length) ? deviceSlot[0].value.value.toLowerCase() : null;
        var location = (locationSlot.length) ? locationSlot[0].value.value.toLowerCase() : null;
        var color = (colorSlot.length) ? colorSlot[0].value.value.toLowerCase() : null;
        var percentage = (percentageSlot.length) ? percentageSlot[0].value.value.toLowerCase() : null; 

Anschließend kannst du schalten und walten, reagieren usw.

Gruß
freddy


#44

Vielen, vielen Dank!
Extrem hilfreich, da werde ich am Wochenende gut zu tun haben.
Wenn Du jetzt noch einen Tipp auf meinen Edit eben mit der mqtt-Broker-Sache hast bist Du mein persönlicher Held. :grin:

Grüße,
Lars


#45

Hi @zerosquared,

oh Mann, da bin ich aber wirklich an einem coolen Titel vorbeigeschlittert… Denn ich nutze tatsächlich den Snips-eigenen Broker und mehr nicht. :slight_smile:

Tendenziell würde ich mit dem Snips-eigenen Broker arbeiten, den haben die gut auf ihre Bedürfnisse abgestimmt. Was spricht denn dagegen?

Gruß
freddy


#46

Verdammt. :sweat_smile:

Dagegen spricht so gesehen nicht viel; allerdings möchte ich meinen Snips nicht immer anhaben, sondern nur immer mal wieder - OpenHab läuft aber dauerhaft, daher braucht der auch einen durchgehend laufenden Broker für meinen ganzen Sensoren etc.

Aber gut, das finde ich auch noch raus. Und wenn es am Ende die unsaubere Lösung ist, einfach mit einem binding alles, was vom snips broker kommt auf den OH-Broker kommt und umgekehrt soll es mir auch recht sein.
Schöner wäre allerdings das Umkonfigurieren von Snips; es scheint ja möglich zu sein, er verbindet sich ja auch, nur diese mysteriösen timeouts bin ich damit noch nicht losgeworden. Aber gut, schauen wir mal…


#47

Hallo zusammen,

bin seit gestern auch dabei Snips mit Fhem zu verbinden und alles darüber steuern.
Habe Pi 3 b+ zuerst ohne Docker eingerichtet.
Grüße
Rover


#48

Ich habe das Problem, dass snips immer den falschen intent auswählt obwohl jeder einzelne slot richtig erkannt wird. Durch den falschen intent macht home assistant auch falsche Sachen. Ich habe über 50 traingexamples erstellt. Aber snips scheitert bei mir schon an Licht an und aus. Der Satz wird richtig erkannt jeder aber anstatt an wird der intent für aus ausgewählt oder anders rum…

Vielleicht kennt ja jemand das Problem.


#49

Hey nxd4n,

was genau meinst du mit den Slots ?


#50

In der snipsconsole kannst du sowas wie Variabeln definieren: - “hey snips, mache das _Küchen_licht an”
“mache das Licht in der Küche an.” (oder Bad, Stube,…) Das geht über Slots um mit dem selben Intent verschiedene Lichter bedienen zu können. I


#51

Das heißt, ich kann alle meine Lampen in der Wohnung steuern( Ein, Aus, Farbton , Helligkeit) ?

Was genau tragen ich dann in der configuration.yaml ?


#52

Ich oute mich auch mal als Deutscher :de: Hab gerade erst angefangen mit Snips. Zum experimentieren (!) hab ich hier mal einen Dockercontainer mit PulseAudio-Unterstützung hochgeladen: https://github.com/stiller-leser/snips-docker-pulseaudio (sollte allerdings nicht produktiv genutzt werden). Bin mal gespannt was sich mit Snips so alles anstellen lässt. Hab schon einige Erfahrung mit der Entwicklung für den Google Assistant. Mal schauen, was sich ergibt.


#53

Ich fühle mich hier ein bisschen unwohl bei so vielen Neulingen, welche doch mit Fachbegriffen um sich werfen, welche ich nicht mal kenne. :0 Verzichte schon lange auf Alexa und wollte nun eine Offline Sprachsteuerung. Jetzt bin ich endlich fündig geworden… bin aber nen Beginner in dem Thema…
Habe jetzt alles soweit installiert und Snips reagiert auch. Sprachausgabe geht über HDMI beim Pi3B+, leider kommt der Ton jedoch sehr verzögert raus.

Bisher habe ich mir folgende Hardware besorgt, um diesen Lautsprecher zu bauen: https://medium.com/@zibra_/how-to-build-a-voice-controlled-speaker-that-protects-your-privacy-ec6429a2c673
(Nun habe ich aber was von Matrix Voice gelesen, was das wohl alles zusammenfasst? Kann mir aber nicht vorstellen, dass die Mikrofone besser sind, als das aus dem Tutorial…)

Jedoch hat Snips wohl nen riesen Update bekommen, weshalb das komplett outdated ist. Versuche nun auf eigene Faut iwie mit der neuen Snips Version dem Tutorial zu folgen. Mal schauen ob ich es schaffe. :slight_smile: