alexa-remote-control | Alexa per Shell fernsteuern - Alexa Sprachausgabe Text-to-Speech über Homebridge in HomeKit

  • So ein Gedanke für spätere Nachahmer: Magst die Klammer im Nachhinein noch einfügen? ?

    Sehr gute Idee :thumbup:. Erledigt.

  • sschuste Du sagemal, wie bekomm ich denn ein script hin, dass Alexa ein bisschen "dynamischer" ist.

    Hast Du da als alter Hase eine Idee? Danke vorab...


    "Guten Morgen, es ist %Uhrzeit% Uhr."

    Oder "Es ist %Wochentag%, der "Datum". Die Uhrzeit ist %Uhr%.


    Und ich hab hier ein Problem... Da stimmt mit dem Zeichen was nicht in der config.json

    Wie bekomm ich das mit dem sh script hin? Die " " zerschießen da was. :/


    Code
    {
    "accessory": "Script2",
    "name": "Ansage Guten Morgen",
    "on": "/home/pi/.homebridge/alexa_remote_control.sh -d Flur -e speak:"$(/home/pi/.homebridge/random_message_morning.sh)",
    "off": "/home/pi/.homebridge/off.sh",
    "fileState": "/home/pi/.homebridge/alexa_remote_control_Morgen.flag"
    },

    Irgendwas ab "on": "/home... Zeile 4 im Code oben.

    Hilfreich?

  • Ja, die Anführungszeichen. Ich wusste schon, dass das in die Hose gehen würde. Aber Hauptsache, erst mal eine "Lösung" rausposten :rolleyes:


    Ich habe mein Skript nun verbessert, siehe Post #35 (erste und letzte Zeile). Das Skript ersetzt nun in dem Satz, der an Alexa gesendet wird, alle Leerzeichen durch einen Unterstrich. Aus Guten Morgen Hase wird nun Guten_Morgen_Hase. So entsteht ein einziges Wort, das an Alexa gesendet wird (vorher waren es drei, und das kann alexa_remote_control.sh nicht leiden und daher habe ich die vorher in Anführungszeichen setzen müssen).


    Dein Aufruf funktioniert nun so:


    /home/pi/.homebridge/alexa_remote_control.sh -d Flur -e speak:$(/home/pi/.homebridge/random_message_morning.sh)


    Also ohne Anführungszeichen hinter dem speak. Das sollte jetzt fehlerfrei in Homebridge laufen.


    Dynamisch wird's später, hoffe ich mal.

    Stefan

  • sschuste Da hüpf ich mal vor Freude im Kreis. :S:thumbup: Funktioniert einwandfrei. Vielen Dank!

    Jetzt gibt es in HomeKit einen Button der mit einer Automation als Wecker ausgelöst wird und über den Lautsprecher gibt es jeden Morgen eine andere Begrüßung.


    Wenn Du jetzt noch bei Gelegenheit für mich das Rätsel löst wie ich Datum und Uhrzeit rein bekomme, dann schaffe ich es bestimmt ab dann immer korrekt aufzustehen und Du bist der Held. ;)

    Hilfreich?

  • Vorfreude: es ist ganz einfach. Das machen wir mit dem date-Kommando. Du kannst schon mal auf der Shell mit date herumspielen und deine Wunschausgabe entwerfen.


    Gib ein: date

    Da kommst so etwas heraus wie:


    Code
    date
    Fri Sep  7 14:11:06 CEST 2018

    Damit kann man erstmal wenig anfangen, aber glücklicherweise kann man date zu einer formatierten Ausgabe zwingen.


    Gib ein:

    date '+Heute ist %A, der %d.%m.%Y und es ist %H:%m und %S Sekunden oder so.'


    Ha! Eine formatierte Ausgabe! Die Formatzeichen wie %d oder %H zwingen das Datum und die Zeit in geordnete Bahnen. Damit können wir was anfangen. Und es gibt noch viele andere Formatierungszeichen wie %B oder %g oder was auch immer. Eine Liste der Möglichkeiten findet man mit Google, beispielsweise hier. Achte unbedingt auf das + am Anfang des Formatstrings.


    So, quick and dirty:


    Bash
    #!/bin/bash
    
    now=$(LC_TIME=de_DE date '+Heute ist der %d.%m.%Y und es ist %H:%m und %S Sekunden oder so.')
    
    messages=("eins" "zwei" "drei drei" "vier vier vier" "fünf" "ja sowas!")
    randomMax=$(echo ${#messages[@]})
    randomVal=$((RANDOM % randomMax))
    
    echo "$now ${messages[$randomVal]}" | tr '[:blank:]' _


    Ich hab's nicht getestet. Und so richtig dynamisch ist es auch noch nicht, wär ja toll, wenn es da auch zufällige Ausgaben geben würde. Ich habe vor das date-Kommando noch ein LC_TIME=de_DE gesetzt, damit die Ausgabe von Monats- oder Wochentagsnamen auf deutsch erfolgt. Kann man weglassen, wenn der Raspi eh auf deutsch installiert ist. Dann nur: now=$(date '+Heute ist der %d.%m.%Y und es ist %H:%m und %S Sekunden oder so.')

    Schau mal, ob das klappt. Ich kann's selbst erst heute Abend ausprobieren.


    Stefan

  • Das funktioniert so halbwegs. Doppelpunkte sollte im Text nicht vorkommen, denn alexa-remote-control.sh (oder Alexa?) ignoriert alles, was vor dem Doppelpunkt steht und spricht nur den Rest. So wird aus Es ist in diesem Augenblick 18:09 Uhr nur noch ein 09 Uhr.


    Punkte werden ebenfalls ignoriert. Alexa macht keine Pause zwischen den Sätzen, was sich echt behindert anhört. Um zwei Sätze wenigstens ein bisschen zu trennen, geht ein Komma anstatt eines Punktes. Mehrere Kommas gehen auch, aber irgendwie dauert es dann auch länger, bis Alexa loslegt - Zufall? Weiß nicht.


    So geht's halbwegs:

    now=$(LC_TIME=de_DE date '+Heute ist der %d. %B %Y und es ist %k Uhr %M und %S Sekunden oder so,')

    ergibt: Heute_ist_der_07._September_2018_und_es_ist_18_Uhr_31_und_37_Sekunden_oder_so,


    Sieht so aus, als sei da noch ordentlich Luft nach oben.


    Stefan

    Einmal editiert, zuletzt von sschuste ()

  • Doppelt und dreifach Daumen hoch und noch höher. :thumbup::thumbup::thumbup::thumbup::thumbup:

    Und besonders mag ich, wie gut Du auch noch den Lösungsweg und die Zusammenhänge erklärst. Respekt und vielen Dank.

    Beim Lesen und Ausprobieren, kam ich mir vor wie bei einem kleinen online Lehrgang mit praktischen Übungen. :D Gefällt mir:!:

    Hilfreich?

  • Wow, bin begeistert, DJay für deine Idee und sschuste für die prompte Umsetzung und Lösung und das Erklären nicht zu vergessen. „Schade“, dass ich gerade im Urlaub bin, ich würd mich heut Nacht grad noch an den RasPi setzen.


    Aber ich kann mir ja schon mal ein paar Sätze und Szenarien ausdenken ?



    Gesendet von iPhone mit Community

  • Und hier ist mein Werk und Wecker. ^^


    Bash: random_message_morning.sh
    #!/bin/bash
    
    now=$(date '+Heute ist %A der %d. %B,- Es ist %k Uhr %M! - ich rufe gleich noch das Wetter ab.')
    
    messages=("Guten Morgen - " "Einen guten Morgen - " "Lass die Sonne rein - Guten Morgen -" "Guten Morgen Sonnenschein - Zeit aufzustehen - " "Naah? - Gut geschlafen? - Guten Morgen - " "Halli, Hallo, Hallöchen, - und guten Morgen - " "Guten Morgen - Zeit zum Aufstehen - " "Hallo Hallo - Alle wach? - Aufstehen! - " "Guten Morgen - Raus aus den Federn! - " "Hello little Miss Sunshine - Aufstehen - ")
    randomMax=$(echo ${#messages[@]})
    randomVal=$((RANDOM % randomMax))
    
    echo "${messages[$randomVal]} $now" | tr '[:blank:]' _


    Das rein in die config.json mit Script2 und los gehts in einer Szene und/oder Automation.


    Code
    {
    "accessory": "Script2",
    "name": "Ansage Guten Morgen",
    "on": "/home/pi/.homebridge/alexa_remote_control.sh -d Schlafzimmer -e speak:$(/home/pi/.homebridge/random_message_morning.sh)",
    "off": "/home/pi/.homebridge/off.sh",
    "fileState": "/home/pi/.homebridge/alexa_remote_control_Morgen.flag"
    },

    Hilfreich?

  • Und besonders mag ich, wie gut Du auch noch den Lösungsweg und die Zusammenhänge erklärst. Respekt und vielen Dank.

    Beim Lesen und Ausprobieren, kam ich mir vor wie bei einem kleinen online Lehrgang mit praktischen Übungen. :D Gefällt mir:!:

    Freut mich, dass es euch gefällt. Die Erklärungen sollen nur ein bisschen die Magie aus diesen Linux-Kram herausnehmen. Ich finde es wichtig, dass man versteht, wie etwas funktioniert. Nur dann kann man manchmal auch verstehen, warum es nicht funktioniert :-).


    Danke DJay und Kohle_81 für das Lob, und jetzt kommt mal wieder runter, ich werd sonst noch ganz rot um die Ohrläppchen. Ich wollt's ja auch haben :D


    Stefan

  • Nicht so bescheiden sschuste Für mich war das Dank Dir ein Aha-Erlebnis und ein Erfolg die .sh noch ein bisschen umzubasteln. Aber nur weil ich durch die Erklärung, Zusammenhänge verstanden habe und mit dem Hinweis auf die https://www.cyberciti.biz/faq/…atting-dates-for-display/

    Wenn alles immer so toll zusammenspielen würde, wäre die Welt eine bessere. :love:


    Für mich bei Gelegenheit der nächste Step, wie kann ich eine Audi-Datei oder einen eigenen kurzen Audio-Stream da rein bauen.

    Ich sag nur...

    :D

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Und schönen Urlaub Kohle_81

    Hilfreich?

  • Für mich bei Gelegenheit der nächste Step, wie kann ich eine Audi-Datei oder einen eigenen kurzen Audio-Stream da rein bauen.

    Da kann ich dir nicht helfen. Nein, falsch. Ich will es nicht. Ich bin der totale Morgenmuffel. Wenn mal wieder eine meiner Homebridge-Makramee-Arbeiten dafür gesorgt hat, dass morgens um sieben in der halben Bude das Licht brennt, nur weil um 4:37 Uhr irgendein Plugin Amok gelaufen ist, krieg ich nicht mal die Lippen auseinander, um Alexa aufzufordern, das Licht wieder auszuschalten. Dann bleibt das halt brennen.


    Ganz schlimm wäre dein Wecker-Skript für mich. Ein morgendliches "Halli, Hallo, Hallöchen - Zeit zum Aufstehen" von Alexa in die Ohren gedudelt würde übelste Aggressionen auslösenX(. Und ich will lieber gar nicht darüber nachdenken, was passiert, wenn dann noch Nana Mouskouri loslegt :cursing:


    Kann man mit alexa-remote-control.sh nicht irgendwie Bibliotheken erstellen und Musik abrufen? Die Beschreibung hab ich nicht wirklich verstanden, aber ich brauch das eh nicht und da hab ich's auch nur irgendwie überflogen.


    Stefan

  • 4:37 Uhr irgendein Plugin Amok gelaufen ist, krieg ich nicht mal die Lippen auseinander, um Alexa aufzufordern, das Licht wieder auszuschalten. Dann bleibt das halt brennen.


    Ganz schlimm wäre dein Wecker-Skript für mich. Ein morgendliches "Halli, Hallo, Hallöchen - Zeit zum Aufstehen" von Alexa in die Ohren gedudelt würde übelste Aggressionen auslösen X( . Und ich will lieber gar nicht darüber nachdenken, was passiert, wenn dann noch Nana Mouskouri loslegt :cursing:

    :D Glaube das wäre dann tatsächlich nichts für Dich, wenn Dich dann auch noch ein Lautsprecher mit "Guten Morgen Sonnenscheinchen" wach küsst. :D

    Dein fröhliches Gemüt braucht Ruhe und Schlaf. ;) Ohne Blaskapelle würde ich überhaupt nicht die Augen auf bekommen.

    Hilfreich?

  • Diesen habe ich dann über https://alexa.amazon.de/?tag=hktips-forum-21 , Alexa-Konto, Amazon-Haushalt hinzugefügt.

    Die Daten von dem "Dummy" Amazon Account nutze ich nun für das Script zum Login und nur für Alexa.

    Kannst du diesen Schritt noch etwas näher erläutern? Während ich auf dem Alexa Web Interface unterwegs bin, bin ich ja mit dem Main Account eingeloggt. Doch wie füge ich den Zweitaccount hinzu? Meinst du mit "Amazon-Haushalt" die Familienbibliothek? Dort wird mir angezeigt, dass der Zweitaccount dann auch auf die Zahlarten des Erstaccounts Zugriff hat, was ja nicht Sinn der Sache wäre.

  • Also wenn ich mich mit dem zweiten Nutzer Account bei Amazon einlogge, ist da weder eine Anschrift noch eine Bankverbindung bzw. CC hinterlegt.

    Und wenn ich ich damit etwas kaufen will, klappt das entsprechend auch nicht. Selbst mit einer Fake Liefer/Rechnungsadresse. Zahlungsmittel sind weiterhin leer.

    Auch hat der Nutzer kein "Prime" so wie mein Hauptaccount. Lediglich ist dieser Account meinem Haushalt hinzugefügt.

    Wahrscheinlich hätte ich selbst das noch nichtmal machen müssen. Mir ging es nur darum, da ich meinen eigentlichen Amazon Account gar nicht mit dem Script nutzen kann, da dieses über die Zwei-Schritt-Verifizierung abgesichert ist. Das funktioniert wohl mit dem Script nicht. Mit dem "Homebridge User" Amazon Account, alles einwandfrei. Mehr mach ich mit Alexa so wieso nicht und für die tägliche Zusammenfassung, Wetter und eben nun die Text-to-Speech Sache, passt das gut.

    Hilfreich?

  • Jetzt verstehe ich, du verwendest also nur den Zweitaccount mit Alexa, richtig?

    Lediglich das Hinzufügen zum Haushalt hab ich noch nicht herausgefunden.

    das würde mich auch interessieren.;)

    noch eine Frage dazu. Funktionieren dann die Echos auf beiden accounts?

    Danke Klaus

  • Für mich war das auch unbekannt vorher. Und auch nie gebraucht.

    Bin einfach nach der Anleitung vorgegangen.

    https://www.amazon.de/gp/help/…28040&tag=hktips-forum-21


    Was mir auch noch gerade aufgefallen ist, man kann über "Alexa, Konto wechseln" auch zwischen den Accounts wechseln.

    Aber auch da hab ich in meinem Fall keinen Bedarf. ;) Aber vielleicht auch gut zu wissen.


    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Hilfreich?

  • Bei mir scheint das ganze etwas komplizierter zu sein. Nachdem das Zweitkonto nun in der "Amazon-Familie" hinzugefügt ist und Zugriff auf Alexa hat, war es dennoch nicht möglich, eine Anmeldung im Account über das Script auszuführen:

    Code
    pi@raspberrypi:~ $ alexa_remote_control.sh
    cookie does not exist. logging in ...
    ERROR: Amazon Login was unsuccessful. Possibly you get a captcha login screen.
     Try logging in to https://alexa.amazon.de with your browser. In your browser
     make sure to have all Amazon related cookies deleted and Javascript disabled!
    
     (For more information have a look at /tmp/.alexa.login)

    Nach einiger Suche folgender Workaround: In Chrome alle Cookies löschen, auf alexa.amazon.de einloggen, die cookie.txt manuell erstellen: sudo nano /tmp/.alexa.cookie

    Der Inhalt ist hier derer aus der aktuell in Chrome laufenden Session. Mal sehen, wie lange diese über das Script aktiv bleiben kann.


    Anmeldung erfolgreich, erster Test lässt Alexa aber kein Wort sagen: alexa_remote_control.sh -d ALL -e speak:'Guten Tag' ergibt folgendes:

    Code
    sending cmd:speak:Guten Tag to dev: Echo Dot type:xxx serial:xxx customerid:xxx
    Sequence command: Alexa.Speak
    {"message":null}

    Ideen?

  • Was als Workaround bei mir bereits zwei Mal geholfen hat:


    Ändern des User Agent im Script. Hierbei genügt es, u.U. einfach nur die Versionsnummer im User Agent hochzuzählen.


    Beides hat bereits geholfen, um wieder ein Cookie ohne Captcha zu erhalten.