Loxone Sprachsteuerung - Mitstreiter gesucht!

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Gast

    Loxone Sprachsteuerung - Mitstreiter gesucht!

    Hallo zusammen,

    ich suche einen oder mehrere Interessierte um eine (eigentlich unkomplizierte) Windows basierte Sprachsteuerung zu realisieren.
    Konkret möchte ich mehrere USB Mikrofone mit einem PC im Keller verbinden auf dem Windows 10 mit Cortana installiert ist.

    Warum Cortana?
    Windows ist weit verbreitet und die Hardware ist günstig zu bekommen (viele haben wahrscheinlich sowieso schon einen PC oder Server im Keller), außerdem funktioniert die Spracherkennung von Cortana m.E. sehr gut und ist dazu noch kostenlos mit integriert.
    Die meisten Infos dazu habe ich bereits rausgesucht und hätte es auch fast selbst hinbekommen aber leider fehlen mir die Programmierkenntnisse was einige wenige Details angeht.
    Ich schätze, dass jemand der sich ein wenig mit Visual Studio, Windows SDK und C# auskennt, innerhalb von 1-2 Stunden den Rest erledigt hat (für ein Template mit Basisfunktionen, das sich dann individuell erweitern lässt).

    Noch ein paar Details: Cortana Sprachbefehle lassen sich unbegrenzt erweitern. Diese müssen dann nur noch einen http post über ...dev/sps/io... auslösen und schon lässt sich alles per Spracheingabe von der Badewanne oder dem Esstisch aus steuern. Die erforderliche Software ist ebenfalls kostenlos.

    Ich würde mich daher freuen, wenn jemand Lust und Zeit hätte einige wenige Stunden zu investieren um dies umzusetzen.
    Das Ergebnis würde dann natürlich hier der Loxone Community zur Verfügung gestellt werden.

    Viele Grüße
    Nemo
  • kerrick
    Smart Home'r
    • 03.09.2015
    • 91

    #2
    Als jemand der seine Brötchen mit sowas verdient, kann ich anhand deiner sehr vagen Beschreibung nahezu ausschließen, dass 1-2 Stunden Programmieraufwand ausreichen :-)
    Falls ich mich irren sollte, schreib doch mal, an welchen Details es hakt; vielleicht kann dir ja auch schnell so geholfen werden.

    Kommentar


    • hismastersvoice
      hismastersvoice kommentierte
      Kommentar bearbeiten
      Stimmt... Für jemanden der nicht selber programmiert eine Zeiteinschätzung zu geben wie lange das dauert halte ich auch für gewagt
      Mal ganz davon abgesehen das ich Windows für so ein System für absolut ungeeignet halte
  • Gast

    #3
    Erst mal vielen Dank für die Antwort. Als (auf diesem Gebiet möglicherweise etwas naiver) Anfänger dachte ich, dass das für einen Profi oder leidenschaftlichen Amateur ein Klacks ist aber es ist natürlich durchaus möglich oder auch wahrscheinlich, dass ich das falsch einschätze... ;-)
    Wir sanieren gerade und nachdem ich mit Loxone als System jetzt nach einigen Wochen so halbwegs klar komme, wollte ich das eben gerne mal probieren.
    Es geht mir zu diesem Zeitpunkt nicht um ein komplett fertiges Tool mit allem Schnickschnack sondern um einen Ausgangspunkt mit Grundfunktionen von dem aus wir beide (ich und das Tool) uns im Laufe der Zeit weiterentwickeln können. Und halt auch andere, die ggf. interessiert sind.

    Folgendes habe ich bisher gefunden und probiert, alles über online suche und im Web verfügbare Anleitungen, Tutorials etc. (die ich hier auch noch verlinken werde, falls gewünscht).
    Wie schon gesagt, ich habe mir das zwar zusammengesucht, bin aber totaler Laie also bitte entschuldigt, wenn Begriffe/Ausdrücke nicht so ganz stimmen:
    - Visual Studio, Windows SDK usw. installiert
    - Github repository mit benutzerdefinierten Cortana Befehlen (XML file mit VoiceCommandDefinitions) gecloned und die vorhandenen Befehle zum Testen um 2 Befehle ergänzt

    Was funktioniert:
    Wenn ich die App über Visual Studio starte, erkennt Windows "Hey Cortana, please open garage door". Cortana antwortet "Opening your garage door" (s. auch Anhang) und die Website "www.garage.com" wird geöffnet (dies jetzt nur um zu bestätigen, dass der Befehl erkannt wird).
    "Hey Cortana, please turn on the light" resultiert in "Turning on the light" und die Website "www.light.com" wird geöffnet.
    Bekannterweise aktiviert "Hey Cortana" die Spracherkennung, "please" habe ich vorläufig als Auslöser für die benutzerdefinierten Sprachbefehle definiert.

    Was ich auch nach Tagen nicht hinbekomme, ist der http post zum Miniserver. Das wäre der erste Schritt, einfach einen konkreten Befehl los schicken ohne Bestätigung und ohne Variable.
    Posts zu posttestserver.com habe ich zwar schon irgendwie so halbschlau hinbekommen, bin aber jedesmal wieder hängen geblieben.
    Als zweiten Schritt könnte dann die http Antwort des MS durch Cortana als Sprachausgabe erfolgen.
    Der dritte und für mich persönlich letzte Schritt wären Variable, z.B. 20% dimmen, Heizung auf 23 Grad, Lautstärke level 15...

    Mit 1-2 Stunden meinte ich nur den ersten Schritt, sprich einen einfachen http post zum Miniserver schicken. Damit könnte man ja Grundfunktionen durchaus schon umsetzen, auch wenn für eine Komfortbedienung dann natürlich noch einiges fehlt.
    Der 2. sollte eigentlich auch nicht allzu zeitaufwändig sein aber Zeiteinschätzungen lasse ich jetzt lieber mal bleiben... :-)
    Und die Komfortbedienung mit Variablen würde ich dann erst längerfristig angehen. Oder eben, wenn jemand interessiert wäre mit zu machen, auch mittelfristig.

    Falls jemand nach diesem Roman also noch Lust hat, mir zu erklären, wie ich einen http post in C# programmiere, würde ich mich riesig freuen. Selbstverständlich habe ich diesbezüglich wie auch für den Rest bereits tagelang erfolglos online recherchiert.
    Und sehr gerne auch (wenn's dafür noch reicht), wie die http Antwort vom MS eingefangen und in eine Variable zur Sprachausgabe umgesetzt werden kann.

    Danke und viele Grüße
    Nemo

    P.S.: Ich habe alle 3 hier erwähnten Methoden ausprobiert und hatte jedesmal das Gefühl, dass nur eine Kleinigkeit irgendwo nicht stimmt aber Laie bleibt eben Laie: http://stackoverflow.com/questions/4...uest-with-post
    Angehängte Dateien
    Zuletzt geändert von Gast; 10.06.2016, 13:20.

    Kommentar

    • MarcusS
      LoxBus Spammer
      • 25.08.2015
      • 389

      #4
      Als Windows Phone und Surface Book User begrüße ich die Idee :-)
      Cortana funktioniert hervorragend und hat eine mächtige API sagen mir die Kollegen aus der Technik. Von daher verstehe ich deinen Ansatz durchaus und finde ihn gut

      Aus der Programmierung bin ich aber leider schon viel zu lange raus. Aber ein Post ist doch nach meiner Erinnerung nicht so kompliziert

      https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx
      DoorPi DIY Türsprechstelle how to

      Kommentar

      • hismastersvoice
        Supermoderator
        • 25.08.2015
        • 7189

        #5
        Also wenn du eine Internetseite z.B. www.garage.com aufrufen kannst, dann kannst du auch einen VI per hhtp schalten... z.B. http://userass@miniserverip/​dev/sps/​io/VI1/Impuls (oder Ein/Aus)
        Wenn du das in den Browser eingibst wird der Eingang VI1 geschaltet.
        So könntest du jetzt anstatt der www.garage.com einen VI schalten.

        Die Frage ist noch wie gut Cortana deutsch versteht??

        Kein Support per PN!

        Kommentar

        • Gast

          #6
          Leider nicht: "http://...../dev/sps/io/blinds/down is not a valid absolute URI."
          Direkteingabe im browser funktioniert tatsächlich aber falls ich es nicht völlig falsch verstanden habe, ist ein http post nochmal etwas anderes...

          Kommentar

          • Gast

            #7
            Zitat von MarcusS
            Cortana funktioniert hervorragend
            Das finde ich auch, m.E. wesentlich besser als Google. Ich hab' über Tasker die Spracherkennung für mein Android Handy umgesetzt, da muss ich deutlicher sprechen.

            Zitat von MarcusS
            Aber ein Post ist doch nach meiner Erinnerung nicht so kompliziert
            https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx
            Nicht für jemanden, der weiß, was er tut, das meinte ich ja gerade.
            Für mich ist es leider zu undurchsichtig. Wenn ich z.B. Deinem Link folge und dies verwende:

            {"BlindsDown", (Action)( () => {
            WebRequest request = WebRequest.Create("http://posttestserver.com/post.php");
            })},
            ...passiert gar nichts. Wenn ich folgendes verwende:

            {"BlindsDown", (Action)( () => {
            WebRequest request = WebRequest.Create("http://posttestserver.com/post.php");
            WebResponse response = request.GetResponse ();
            response.Close(); (mit und ohne diese letzte Zeile)
            })},
            ...bekomme ich:
            Error CS1061 'WebRequest' does not contain a definition for 'GetResponse' and no extension method 'GetResponse' accepting a first argument of type 'WebRequest' could be found (are you missing a using directive or an assembly reference?)
            ... und mit response.Close() auch noch:
            Error CS106 'WebResponse' does not contain a definition for 'Close' and no extension method 'Close' accepting a first argument of type 'WebResponse' could be found (are you missing a using directive or an assembly reference?)

            Und da komme ich dann eben einfach nicht weiter...
            Zuletzt geändert von Gast; 10.06.2016, 15:16.

            Kommentar

            • MarcusS
              LoxBus Spammer
              • 25.08.2015
              • 389

              #8
              Ich müsste mir erst mal wieder VS installieren um das nachzuvollziehen :-)

              hast du deinen Code denn irgendwo zugänglich? Auf Git oder VS Online (heißt ja jetzt Team Services)?
              DoorPi DIY Türsprechstelle how to

              Kommentar

              • Gast

                #9
                Noch nicht, ich kenne VS überhaupt erst seit 2 Wochen weil ich irgendwo gelesen habe, dass man Cortana anpassen kann und mich in meinem Größenwahn erst seitdem überhaupt mit dieser Materie beschäftige.
                Aber ich werde mir Team Services gleich mal ansehen und hier rückmelden...

                Kommentar


                • MarcusS
                  MarcusS kommentierte
                  Kommentar bearbeiten
                  Team Services oder Git sind halt gängige Code Repositories. Git ist im Bereich Open source und bei Community-Projekten aber wesentlich (!) weiter verbreitet. Team Services ist eher im Unternehmensbereich eine feste Größe, da Codeverwaltung nur einen Bruchteil des Leistungsumfangs ausmacht. TS ist für das gesamte Lifecycle Management gedacht.
                  Schau dir also vor allem mal primär Git an. Geht ja nur ums Code Sharing im Moment

                • MarcusS
                  MarcusS kommentierte
                  Kommentar bearbeiten
                  Ach so... und VS unterstützt Git auch schon länger. Also kein Problem bez. der Integration
              • Gast

                #10
                MarcusS
                Sorry, mit Git komme ich überhaupt nicht klar.
                Ist aber nicht schlimm, weil ich den Code des eigentlichen Verfassers noch kaum geändert habe. Ich habe lediglich die vorhandenen Befehle um ein paar sinnvolle Loxone Befehle ergänzt, das dauert nicht lange.

                Hier das originale repository:


                Die App kann gestartet werden und funktioniert gut, enthält aber leider keinen http post.
                Die Befehle stehen in der CustomVoiceCommandDefinitions.xml in diesem Format:

                <Command Name="BlindsDown">
                <Example> Blinds down </Example>
                <ListenFor> Close [the] blinds </ListenFor>
                <Feedback> Closing your blinds </Feedback>
                <Navigate/>
                </Command>

                [] sind optionale Wörter
                CommandPrefix ganz am Anfang der .xml triggert die Custom Commands, das ist bei ihm glaube ich "Listen up"

                Unter CortanaFunctions.cs stehen entsprechend die auszuführenden Aktionen, z.B. (in meiner Version):

                {"BlindsDown", (Action)( async() => {
                Uri website = new Uri(@"http://usernameassword@MSip/dev/sps/io/blinds/down");
                await Launcher.LaunchUriAsync(website);
                })},

                Eine Website öffnen geht damit, Loxone bedienen natürlich nicht und wäre auch wenig sinnvoll, es sollten m.E. schon http post und get verwendet werden damit man (irgendwann mal) auch Temperaturen etc. auslesen kann.
                Und da muss eben "einfach nur" ein http post rein. Wie Du schon sagtest, nicht wirklich schwierig aber für mich dann doch zu schwierig.

                Ich bin mir sicher, dass das für Dich oder ggf. auch kerrick wahrscheinlich relativ einfach ist, insbesondere wenn man am Anfang evtl. feste Befehle nimmt und auf variable verzichtet.

                Dankeschön!!

                Kommentar

                • Gast

                  #11
                  Mittlerweile bin ich ein ganzes Stück weiter gekommen und fast am gewünschten Ergebnis... Ich bin begeistert, Cortana funktioniert wirklich einwandfrei!!
                  Nachdem ich in Windows mit Mikrofonempfindlichkeit und Boost gespielt habe, steht das Laptop jetzt einfach nur irgendwo im Raum, z.B. am anderen Ende des Betts auf dem Boden, Cortana versteht alle Befehle richtig - deutlich besser als Tasker mit Google - und schickt einen entsprechenden http request. Dieser geht nun auch tatsächlich raus, allerdings nicht, wenn ich den entsprechenden Pfad des MS benutze (könnte es daran liegen, dass es eben ein Pfad und keine Datei ist?).

                  Ich habe mit try-catch die Exception angezeigt und bekomme:
                  Klicke auf die Grafik für eine vergrößerte Ansicht

Name: not_a_URI.png
Ansichten: 464
Größe: 12,2 KB
ID: 44870

                  Die URI stimmt, wenn ich diese in einen Browser eingebe (danke für den Tipp an hismastersvoice), führt der MS den Befehl aus.
                  Wenn ich den request an einen Testserver schicke (Zeile 7) kommt er dort an und wird bestätigt. MarcusS, kerrick, irgendeine Idee, woran es liegen könnte?

                  Der Code sieht jetzt so aus:

                  {"BlindsUp", (Action)(async () => {
                  using (var client = new System.Net.Http.HttpClient())
                  {
                  try
                  {
                  var response = await client.PostAsync("http://username: passwort@msip: port/dev/sps/io/VI12/pulse", null);
                  // var response = await client.PostAsync("http://posttests erver.com/post.php", null);
                  var responseString = await response.Content.ReadAsStringAsync();
                  }
                  catch (HttpRequestException e) {

                  var dialog = new MessageDialog(e.ToString());

                  var result = await dialog.ShowAsync();
                  }
                  }

                  })},
                  Zuletzt geändert von Gast; 12.06.2016, 10:06.

                  Kommentar

                  • Christian_RX7
                    Extension Master
                    • 04.09.2015
                    • 150

                    #12
                    Wenn man per Browser eine Anfrage macht: http://admin:admin@192.168.1.77:80/dev/sps/io/VI2/pulse
                    dann ist das laut Wireshark ein GET und kein POST.
                    GET funktioniert laut Microsoft in etwa so:
                    // Create a request for the URL.
                    System.Net.WebRequest request = System.Net.WebRequest.Create("http://192.168.1.77:80/dev/sps/io/VI2/pulse");
                    // If required by the server, set the credentials.
                    request.Credentials = System.Net.CredentialCache.DefaultCredentials;
                    request.Credentials = new System.Net.NetworkCredential("admin", "admin");
                    request.PreAuthenticate = true;
                    // Get the response.
                    System.Net.WebResponse response = request.GetResponse();
                    // Display the status.
                    Console.WriteLine(((System.Net.HttpWebResponse)res ponse).StatusDescription);
                    // Get the stream containing content returned by the server.
                    Stream dataStream = response.GetResponseStream();
                    // Open the stream using a StreamReader for easy access.
                    StreamReader reader = new StreamReader(dataStream);
                    // Read the content.
                    string responseFromServer = reader.ReadToEnd();
                    // Display the content.
                    Console.WriteLine(responseFromServer);
                    // Clean up the streams and the response.
                    reader.Close();
                    response.Close();


                    Die request.GetResponse() startet die Abfrage, komischerweise erst ohne Autentifizierung und nadem er vom Miniserver abgewiesen wurde, nochmals mit Autentifizierung. Aber egal, es funktioniert. Die Zeilen bis zum response.Close(); kann man sich eigentlich sparen.

                    Christian_RX7
                    24V Bewegungsmelder für Jung, Gira und Berker
                    RS485 Tasterbus
                    Loxone KNX Import Tool

                    weitere Infos auf meiner Homepage: http://kreuzers.home.dic.at/

                    Kommentar

                    • Gast

                      #13
                      Hallo Christian_RX7 ,

                      erstmal auch hier herzlichen Dank für Deine Hilfe!! Ich konnte es gestern nicht mehr testen und bin jetzt erst dazu gekommen.

                      Evtl. hast Du schon gesehen, dass ich versuche, dieses Template: https://github.com/crclayton/custom-...mands-template ...so anzupassen, dass Cortana die Loxone steuern kann.
                      Das Problem jetzt ist, dass das Template UWP verwendet, damit die App sowohl auf Desktop, Tablet und Phone funktioniert.
                      Entsprechend funktioniert request.GetResponse() leider nicht, da in .NET für UWP nicht verfügbar, das gleiche gilt für reader/response.Close() (und Console.WriteLine was ja aber erst mal nicht wild ist). Ich hab's dann mit await request.GetResponseAsync() probiert aber das hat natürlich auch nicht funktioniert.

                      Ich werde weiter testen, falls Du Dir das für UWP anschauen könntest, wäre das natürlich super!

                      Viele Grüße
                      N.

                      Kommentar

                      • Christian_RX7
                        Extension Master
                        • 04.09.2015
                        • 150

                        #14
                        Das kann ich nicht testen, da es erst ab Windows 8.1 zu funtkionieren scheint. Aber schau dir mal das Beispiel an: https://msdn.microsoft.com/en-us/win...ing/httpclient
                        Christian_RX7
                        24V Bewegungsmelder für Jung, Gira und Berker
                        RS485 Tasterbus
                        Loxone KNX Import Tool

                        weitere Infos auf meiner Homepage: http://kreuzers.home.dic.at/

                        Kommentar

                        • Gast

                          #15
                          Hallo Gast


                          Mich würde interessieren wie du im Moment in dem Projekt steckst? Ich habe schon längere Zeit über eine Spracherkennung nachgedacht und habe mir bereits eine Sprachausgabe und Multiroom Audio Anlage aufgebaut mit Raspberry PI's. Die Variante mit MS Cortana interessiert mich natürlich sehr.

                          MFG dampflox

                          Kommentar

                          Lädt...