Ankündigung

Einklappen
Keine Ankündigung bisher.

Amazon Echo - Lautsprecher von amazon mit Alexa Spracherkennung

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

  • patrickgoll
    antwortet
    Okay wenn das passt muss ich jetzt erst das parsing umbauen, damit ich es effektiv testen kann. Als erstes muss anstatt wie bei edomi der Pfad mit remote und Login und Passwort was anderes rauskommen bei smart home. Das soll aussehen wie das hier.: /item|EG.Wohnzimmer.Spots.Schalten|1 wobei der mittlere Part aus der Config.txt kommen soll und der letzte Part den Zustand bestimmt. Ich bin mal gespannt ob ich das irgendwie raffen, wie ich das umbauen kann

    Einen Kommentar schreiben:


  • steffen79
    antwortet
    Ja sieht doch gut aus, dann läuft auf der Seite doch alles?
    Dann trigger doch mal über alexa die lambda funktion und schau mal was dein alexa-log.txt bei dir anzeigt und vergleich nochmal die aws logs
    Hast Du vielleicht doch was mit http bzw https verwechselt?
    aws sollte nach meinem vorschlag ja über https und client zertifikat laufen.
    Was sagen Deine apache log files?

    Einen Kommentar schreiben:


  • patrickgoll
    antwortet
    Wenn ich auf der CLI php5 alexa.php aufrufe bekomme ich folgende Ausgabe (ohne dass ich irgendeinen String angepasst habe)

    Code:
    {"header":{"namespace":"Alexa.ConnectedHome.Discovery","name":"DiscoverAppliancesResponse","payloadVersion":"2"},"payload":{"discoveredAppliances":[{"applianceId":"deviceTest","manufacturerName":"Patrick","modelName":"Model LichtDimmer","version":"VER01","friendlyName":"Test","isReachable":true,"friendlyDescription":"Licht\/Dimmer im Test (deviceTest)","actions":["turnOn","turnOff","setPercentage","incrementPercentage","decrementPercentage"]}]}}
    Das passt so halbwegs zu meiner Testconfig (config.txt)

    Einen Kommentar schreiben:


  • patrickgoll
    antwortet
    beide https Verbindungen gehen ohne Problem.

    Das Testszenario solltest du mir nochmal genauer beschreiben. Ich soll den Teststring wohin packen und das wie aufrufen!?
    Danke und Grüße,
    Patrick

    Einen Kommentar schreiben:


  • steffen79
    antwortet
    Code 400 heiß BAD REQUEST.
    Ich würde folgende Reihenfolge testen:
    Geht Dein https mit client-auth? Teste lokal im Netz
    Geht Dein https mit client-auth von extern (router ok)? Teste von extern, zb über handy
    Geht alexa? Nimm den test-string, pack den (recht weit unten) in die Variable $postdata. Ruf alexa.php zum test von kommandozeile auf (php alexa.php) und/oder über webbrowser.

    Irgendwo da sollte es schon haken....

    Einen Kommentar schreiben:


  • patrickgoll
    antwortet
    Mach ich irgendwas falsch? Hab jetzt nen Apache2 aufgesetzt und mit Client Zertifikat Auth versehen. Und dann habe ich die alexa.php hinterlegt und die index.js mit dem crt und dem key hochgeladen. Dann habe ich das auf meine dyndns angepasst.

    Wenn ich nun ein Discovery hinschicke meldet die AWS Console

    Code:
     
     START RequestId: ae7e548e-ac04-11e6-9724-83b11e870fa2  Version: $LATEST  2016-11-16T13:57:58.996Z	ae7e548e-ac04-11e6-9724-83b11e870fa2	Received Directive: {"header":{"namespace":"Alexa.ConnectedHome.Discovery","name":"DiscoverAppliancesRequest","payloadVersion":"2","messageId":"06c4efaf-da9b-4deb-8561-54412400382c"},"payload":{"accessToken":"BLA BLA aber brauchen wir nicht(?)"}}  2016-11-16T13:57:59.958Z	ae7e548e-ac04-11e6-9724-83b11e870fa2	STATUS: 400  2016-11-16T13:57:59.958Z	ae7e548e-ac04-11e6-9724-83b11e870fa2	HEADERS: {"date":"Wed, 16 Nov 2016 13:57:59 GMT","server":"Apache/2.4.10 (Debian)","content-length":"316","connection":"close","content-type":"text/html; charset=iso-8859-1"}  2016-11-16T13:57:59.998Z	ae7e548e-ac04-11e6-9724-83b11e870fa2	No more data in response.  2016-11-16T13:57:59.998Z	ae7e548e-ac04-11e6-9724-83b11e870fa2	Response: : <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">  <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache/2.4.10 (Debian) Server at virtual.heneronline.de Port 8080</address> </body></html>  2016-11-16T13:58:00.057Z	ae7e548e-ac04-11e6-9724-83b11e870fa2	SyntaxError: Unexpected token <     at Object.parse (native)     at IncomingMessage.<anonymous> (/var/task/index.js:51:20)     at emitNone (events.js:72:20)     at IncomingMessage.emit (events.js:166:7)     at endReadableNT (_stream_readable.js:905:12)     at nextTickCallbackWith2Args (node.js:437:9)     at process._tickDomainCallback (node.js:392:17) END RequestId: ae7e548e-ac04-11e6-9724-83b11e870fa2 REPORT RequestId: ae7e548e-ac04-11e6-9724-83b11e870fa2	Duration: 1237.84 ms	Billed Duration: 1300 ms 	Memory Size: 128 MB	Max Memory Used: 7 MB	 Process exited before completing request
    Ich habe zwar noch nicht das Parsing angepasst, aber ich hätte wenigstens eine Antwort von meinem Server erwartet. Kann ich das Script irgendwie anders testen, als von AWS aus?

    Einen Kommentar schreiben:


  • patrickgoll
    antwortet
    Okay habe ich soweit verstanden. Das wird sicherlich eine Gewaltsaufgabe für mich, da ich im Programmieren nicht so der Oberprofi bin. Aber ich denke mit etwas Gehirnschmalz und ein wenig Zeit werde ich das schon portiert bekommen Sollte es was Neues zu deinem Plugin geben wäre ich dir dankbar, wenn du das mit uns teilen könntest.

    Grüße,
    Patrick

    Einen Kommentar schreiben:


  • steffen79
    antwortet
    Ja ich hab nen Apache, der direkt über den Router von aussen auf Port 443 erreichbar ist. Dieser Apache läßt aber nur Verbindungen mit https und ganz bestimmten Client-Zertifikaten zu. Amazon-Lambda (eigenes Skript, siehe oben, das die Client-Zertifikate benutzt) schickt Anfragen an meinen apache (mit alexa.php) und bekommt auch die Antworten von da.
    readConfig parst nur die Konfigurationsdatei und speichert sie in einem Array-Objekt.
    getValue und setValue sind "dumme" Funktionen die einen Wert an edomi schreiben bzw von dort lesen. Diese müsstest Du ändern, das config.txt auch ein wenig, falls Du für SH mehr als nur einfach Zahlen benötigst.

    Einen Kommentar schreiben:


  • patrickgoll
    antwortet
    Mir scheint dein Quellcode immer klarer zu werden. Was ich noch nicht ganz verstehe sind die 3 ersten Funktionen readConfig, setVlaue und getValue. Mir ist hier noch nicht ganz klar geworden, wie ich das wohl auf meinen Anwendungsfall umbiegen kann. Außerdem ist mir noch nicht ganz klar, wie die Gesamtkommunikation funktioniert.

    Du hast also einen Apache und der hat die alexa.php drauf. Du machst also ne virtual site und fragst ein Client Zertifikat ab, das du deiner Lambda Funktion mitgegeben hast.
    Dann verweist du in der virtual site auf die alexa.php als index und die verarbeitet dann das JSON, was die Lambda Funktion liefert?

    Und die Möglichkeiten, die die alexa.php vorgibt sind also alle Items, die in der config.txt stehen?

    Das heißt ich muss nur das trimming und exploding, so wie die Host Parameter auf das Network Plugin von SmartHome umbiegen?
    Das sollte machbar sein denke ich.

    Einen Kommentar schreiben:


  • steffen79
    antwortet
    Hi Thorsten,

    ne sorry ich habe da noch keinen Weg gefunden (aber auh noch nicht lange gesucht) um Alexa derart fernzusteuern.
    Habe aber auch nur den Dot, daher werd ich den eh nicht zum Musik abspielen verwenden...

    Anbei meine aktualisierte Version, diese kann jetzt auch Dimmen und Heizung einstellen.
    Das config-Format wurde dafür geändert, siehe Beispiel...


    Gruß,
    Steffen
    Angehängte Dateien

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    HI Steffen,
    hut ab und danke für das Code veröffentlichen.
    Was mir echt noch fehlt ist der Weg Alexa fernzusteuern (z.B. automatisch Musik an wenn man ins Bad geht - oder ausschalten wenn man das Bad verlassen hat).
    Hast du da schon was gefunden?
    Ich denke bisher geht nur: wav-dateien mit dem gesprochenen Befehl an Amazon schicken. Nicht sonderlich "smart" - aber wenigstens mal ein Weg... Leider habe ich das noch nicht umgesetzt bekommen...
    Irgendwelche Ideen dazu?

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • steffen79
    antwortet
    Ja das sollte sehr einfach portierbar sein.
    Wie du erkannt hast sendet mein lokales Alexa nur per GET einen Wert in der Prozedur setValue.
    Da mütest Du vor allem die Zeile
    PHP-Code:
    $out "GET $url?".implode($params'&')." HTTP/1.1\r\n"
    und die Parameter
    PHP-Code:
    urlencode('login')."=".urlencode('remote'),
    urlencode('pass')."=".urlencode('remote'),
    urlencode('koid')."=".urlencode($koId),
    urlencode('kovalue')."=".urlencode($koValue
    anpassen. Falls Du mehr Informationen speichern musst eben noch den Aufbau der config datei und das entsprechende einlesen:

    PHP-Code:
    foreach ($configLines as $line) {
            if (
    trim($line)!="") {
                
    $subStrings explode(';'$line);
                if (
    count($subStrings)==2) {
                    
    $koConfig[trim($subStrings[0])*1]=trim($subStrings[1]);
                }
            }
        } 
    Gruß,
    Steffen

    Einen Kommentar schreiben:


  • patrickgoll
    antwortet
    Okay ich hab mir das jetzt mal etwas genauer angeschaut. Sehe ich das richtig, dass deine Anfrage einfach nur zusammengebaut wird und du nachher einen POST auf http://hostort/remote... machst? Kann ich das vielleicht dann auch so zusammenbauen mit der smarthome network API? Diese nutzt folgendes Format:

    http://iport/item|PFAD.DES.ITEMS|1 (1 für an, 0 für aus).

    Meinst du man kann das einfach portieren?

    Ich müsste dann doch meine Lampen praktisch nur so angeben:

    Gruppenadresse; EG.Wohnzimmer.Lampe.Schalten

    zum Beispiel.

    Danke mal vorab für den Denkanstoß.

    Grüße,
    Patrick

    Einen Kommentar schreiben:


  • steffen79
    antwortet
    Moin, na klar kannst Du gerne fragen. Aber ruhig im Forum, dann haben alle was davon. Bin aber wie gesagt im Prinzip noch Neuling und habe habe auch kein SmartHome sondern Edomi...
    Joa wollte die GrundKonfig auch möglichst klein, flexibel und überschaubar in einer separaten Datei haben.
    Da werd ich später noch ein Feld/Spalte für Typ (Licht an/aus, Dimmer, <was auch immer Alexa kann>) zufügen...

    Gruß,
    Steffen

    Einen Kommentar schreiben:


  • patrickgoll
    antwortet
    Coole Wurst, sieht hammer aus. Muss ich mir mal in Ruhe noch genauer anschauen. Möglicherweise kann ich das portieren in SmarHome.py. Ich finde es gut, dass du das config File auslagerst. So muss sich der Benutzer nur um seine "ITEMS" (in smarthome Sprache) kümmern und nicht um den Mechanismus.

    Danke mal für die Vorarbeit.
    Könnte ich eventuell mal auf dich zukommen, wenn ich Fragen dazu habe?

    Grüße,
    Patrick

    Einen Kommentar schreiben:

Lädt...
X