Ankündigung

Einklappen
Keine Ankündigung bisher.

Alexa Text to Speech

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

  • psilo
    antwortet
    Ja, ich bin auch eher für LIB.. oder man lässt es raus aus den requirements und schreibt das in die doku.. bzw wirft nen fehler wenn man mfa nutzt und die lib fehlt. das database plugin verlangt ja auch nicht zwingend via requirements.txt pymsql, nur als beispiel.

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    Danke AndreK für die schnelle Antwort.

    So exotisch scheint mir die pyotp nun auch nicht zu sein: https://pypi.org/project/pyotp/
    Ich persönlich fände es am besten pyotp in die Plugin Requirements aufzunehmen. Damit wird die lib nur installiert wenn das Plugin benutzt wird. Andererseits wird sie beim Nutzen des Plugins automatisch installiert. Mit dem Kommandozeilentool muss der User noch manuell das oathtool installieren. Da wittere ich schon wieder unnütze Support Anfragen in deine Richtung :-)

    Grundsätzlich finde ich es immer sauberer eine Lib zu nutzen anstelle von externen Aufrufen.psilo ​​​​​​​Was meinst du

    Wenn ich mir andere Plugins, z.B. mein Deebot Ozmo Plugin, da werden wesentlich exotischere und instabilere Libs installiert (zrecks Mangel an Alternativen).

    Aber du bist der Chef des Plugins, solange es funktioniert ist es mir persönlich eigentlich egal ;-)

    Mit freundlichen Grüßen,

    Serge
    ​​​​​​​

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hi Foxi352 ,

    das mit der Python-Library hatte ich auch überlegt, das würde aber heißen, das jeder die Library installieren muss ob er MFA nutzt oder nicht.
    Könnte man sicherlich über die requirements abdecken.

    Die Frage ist, was ist uns lieber OAuth-Tool oder python-library ?

    Da in der Regel von der Verwendung einer Exoten-Library abgeraten wird würde ich das OAuth-Tool mittels Popen bevorzugen, bin aber für alles offen.

    Vielleicht kann noch jemand anderes ein Statement / Meinung abgeben.

    Viele Grüsse Andre

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    Moin AndreK

    Genauso macht es auch das von dir verlinkte Script. Ich hab mir das mal angesehen:

    Code:
    #
    # add OTP if using MFA
    #
    if [ -n "${MFA_SECRET}" ] ; then
      OTP=$(${OATHTOOL} -b --totp "${MFA_SECRET}")
      PASSWORD="${PASSWORD}${OTP}"
    fi
    Wie du siehst ruft er auch vom Script aus das oathool auf und hängt das Resultat an das Password an. Natürlich nur wenn ein MFA Code eingegeben wurde.

    Besser und sauberer würde ich es natürlich finden wenn wir eine Python Library finden die das macht anstelle von popen. Hab nach einem schnellen googlen schon mal was gefunden: https://github.com/pyauth/pyotp
    Aufgerufen wird es wohl sehr einfach wie folgt:
    Code:
    totp = pyotp.TOTP('base32secret3232')
    totp.now() # => '492039'
    Wobei das base32secret das MFA_SECRET ist

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Foxi352 ,

    OK kann sein, dass es wie Du beschrieben hast laufen muss. Dann würde ich ins Plugin die Eingabe des MFA-Secrets einbauen.
    Mittels eines popen kann das OAuth-Tool den Code berechnen und ihn ans Passwort beim einloggen anhängen.
    Wie ist Deine Meinung ?

    Gruss Andre

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    AndreK Moin

    Das habe ich aber anders verstanden. Was du meinst ist der TOTP Code, also der 6-stellige OTP Code der dann hinter das Password gehängt wird. Das Problem ist, der ist dann nicht länger gültig als das Cookie und muss danach mit dem oathtool neu berechnet werden. Das wäre also kein Gewinn.

    So wie ich das verstanden habe kann man dem Script auch den MFA_Code übergeben. Das ist kein 6-stelliger Code sondern wie ich im vorherigen Post geschrieben hatte ein langer Code (Beispiel siehe vorheriger Post). Damit kann das Script dann jeweils beim login selbst den 6-stelligen TOTP Code berechnen. Wahrscheinlich nutzt das Script auf der Seite das oathtool um das zu tun ....

    Ich denke du verwechselst TOTP Code mit dem MFA_Code (das das war in dem QRCode angezeigt wird wenn mat ein neues Auth tool anmeldet).

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hallo Foxi352 ,

    soweit ich das in den Quellen von Loetzimmer und der Edomi-Lösung erkennen konnte wird der ermittelte MFA_Code einfach hinter das Passwort gehängt.

    Password = "meinPWD"
    MFA_Code "123456"

    Passwort mit MFA für die Anmeldung "meinPWD123456".
    Das Passwort mit ergänzetem MFA-Code im Web-IF des Plugins eintragen und speichern, danach einloggen.

    Man muss wohl sehr schnell sein mit der Anmeldung da das MFA-Secret nur ein paar Sekunden
    (ich meine iregendwo 15 gelesen zu haben) gültig ist.

    Wie gesagt, noch nicht selbst getestet

    Gruss Andre


    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    AndreK Mein importiertes Cookie hielt das erste mal ein paar Stunden. Inzwischen vielleicht noch 1 Stunde. Das Plugin ist so also mit MFA kaum bis gar nicht nutzbar. Hab meine Squeezeboxes wieder ausgegraben :-(

    Aber ich geb die Hoffnung nicht auf :-)

    Der von dir verlinkte Artikel erklärt dass man das oathtool Tool nutzt um ein weiteres MFA Gerät anzumelden. Dies habe ich getan und es auch mit dem oathool bestätigt.

    Jetzt habe ich ein MFA String im Format
    Code:
    E4NP GWXQ VALY HBZ3 BYFF DUEF JAPP IPYY 4JJU H62H UXPY BZ7K QEMA
    (hier natürlich verändert) den ich laut Anleitung als MFA_SECRET in dem Script auf das sich diese Seite bezieht nutzen kann. Nur hat dein Plugin die Nutzung eines MFA Secrets aber (noch) nicht vorgesehen. Deshalb frage ich mich jetzt natürlich, was ich mit dem Secret anfange ?

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hallo Foxi352 ,

    Du machst nichts falsch !

    mit MFA kannst du noch folgendes probieren. Ich selbst bin noch nicht dazu gekommen das auszutesten.
    Bei mir läuft ohne MFA der Auto-Login alle 5 Tage ohne Probleme durch (Ok, folgende Einschränkung, ich bekomme jedesmal per SMS und mail den Hinweis das sich jemand eingeloggt hat)
    Laut EDOMI-Forum tut das. Wie gesagt selbst nicht getestet.

    Wie lange hält Deine importiertes Cookie ?
    Würde mich nur interessieren da die bei Amazon sehr viel umgestellt haben und ich selbst mit dem Auto-Login ohne Probleme unterwegs bin.

    Gruss Andre

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    AndreK Läuft zwar wie gesagt jetzt, aber nie sehr lange. Wenn ich dann im WebIF des Plugin's schaue sehe ich folgendes wenn's nicht mehr funktioniert:

    Code:
     2020-06-15 17:42:33 successfully logged off
    Ich kann mich nicht mit Usernamen / Password einloggen da ich 2FA nutze und so bei jedem SHNG Start eine SMS von Amazon bekomme mit dem Code. Den kann ich ja aber nirgends eingeben.

    Deshalb nutze ich die Cookies.txt. Ich logge mich mit Chrome ein, setze auch das Häckchen bei "Angemeldet bleiben". Exportiere das Cookie dann und mache ein Paste in das WebIF wo ich dann auch speichere. Das Cookie funktioniert dann auch im Plugin, nur halt nicht sehr lange ...

    Mache ich was falsch ?

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    Zitat von AndreK Beitrag anzeigen
    lass mal den ersten Eintrag : weg.
    Es scheint, dass kein aktueller gültiger Wert für Volume vom Device ermittelt werden konnte bzw. das die Abfrage auf einen Fehler läuft.
    Bitte numeriere die Kommandos dann wieder neu durch.
    Super, scheint zu klappen ! Danke.
    Ausser, dass er natürlich jetzt nicht mehr das Default Volume setzt, das ist momentan aber OK.

    Es hat aber auch schon vorher mal mit dem VolumeSet funktioniert. Ich kann aber (bis jetzt) nicht genau sagen wann es funktioniert und wann nicht ...
    Ich habe eine Türklingel Logik in der ich auch das AlexaRC eingebaut hatte und ein VolumeSet auf eine Gruppe (Erdgeschoss) mache. Auch das funktioniert nicht mehr. Werde auch mal ohne VolumeSet probieren ...

    Andere Frage: Man kann vermutlich keine Text2Speech auf eine Gruppe machen ?

    Momentan mache ich bei Türklingel ein VolumeSet auf die Gruppe, und dann 4 einzelne Text2Speech ...

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hallo Foxi352,

    lass mal den ersten Eintrag :
    Zitat von Foxi352 Beitrag anzeigen
    alexa_cmd_01: True:Esszimmer:VolumeSet:40
    weg.
    Es scheint, dass kein aktueller gültiger Wert für Volume vom Device ermittelt werden konnte bzw. das die Abfrage auf einen Fehler läuft.
    Bitte numeriere die Kommandos dann wieder neu durch.

    Ich werde das mal nachstellen.

    Gruss Andre

    Einen Kommentar schreiben:


  • Foxi352
    antwortet
    Hab das Plugin auch mal probiert. Ist wirklich cool endlich die Alexa fernsteuern zu können. Da kann ich einige Squeezeboxes ausmustern bzw umstellen.
    Leider hab ich ein Problem damit das Plugin in den Items zu nutzen. Von admin WebIf aus funktioniert alles tadelos. Auch in den Items hat es schon mal funktioniert.

    Plugin ist ohne Probleme eingeloggt (mit cookie transfer vom Browser):
    HTML-Code:
    2020-06-08 18:15:18 Login-State checked - Result: Logged ON
    2020-06-08 18:15:18 Status of check_login_state: 200
    Hier der relevante Teil der Items definition:
    HTML-Code:
    EG:
        Kueche:
           Licht:
               type: bool
               visu_acl: rw
               knx_dpt: 1
               knx_cache: 1/1/4
               knx_send: 1/0/4
               alexa_name: Licht Küche
               alexa_description: Küche Spots Decke
               alexa_actions: TurnOn TurnOff
               alexa_icon: LIGHT
               alexa_cmd_01: True:Esszimmer:VolumeSet:40
               alexa_cmd_02: True:Esszimmer:StartTuneInStation:s265060
               alexa_cmd_03: True:Esszimmer:Text2Speech:Hallo
               alexa_cmd_04: 'False:Esszimmer:Pause: '
    Nach ein paar Tests hab ich jetzt laufend diese Fehlemeldung:

    HTML-Code:
    2020-06-08 18:25:19 ERROR lib.item Item EG.Kueche.Licht: problem running <bound method AlexaRc4shNG.update_item of <plugins.alexarc4shng.AlexaRc4shNG object at 0x7f1a1bef6a90>>: Invalid URL '/api/np/player?deviceSerialNumber=<serialNumber>&deviceTyp e=<deviceType>': No schema supplied. Perhaps you meant http:///api/np/player?deviceSerialNumber=<serialNumber>&deviceTyp e=<deviceType>?
    
    Traceback (most recent call last):
    File "/usr/local/smarthome/lib/item.py", line 2395, in __update
    method(self, caller, source, dest)
    File "/usr/local/smarthome/plugins/alexarc4shng/__init__.py", line 336, in update_item
    httpStatus, myPlayerInfo = self.receive_info_by_request(myCommand.EndPoint,"L oadPlayerInfo","")
    File "/usr/local/smarthome/plugins/alexarc4shng/__init__.py", line 508, in receive_info_by_request
    response= mySession.get(myUrl,headers=myHeader,allow_redirec ts=True)
    File "/usr/lib/python3/dist-packages/requests/sessions.py", line 546, in get
    return self.request('GET', url, **kwargs)
    File "/usr/lib/python3/dist-packages/requests/sessions.py", line 519, in request
    prep = self.prepare_request(req)
    File "/usr/lib/python3/dist-packages/requests/sessions.py", line 462, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
    File "/usr/lib/python3/dist-packages/requests/models.py", line 313, in prepare
    self.prepare_url(url, params)
    File "/usr/lib/python3/dist-packages/requests/models.py", line 387, in prepare_url
    raise MissingSchema(error)
    
    requests.exceptions.MissingSchema: Invalid URL '/api/np/player?deviceSerialNumber=<serialNumber>&deviceTyp e=<deviceType>': No schema supplied. Perhaps you meant http:///api/np/player?deviceSerialNumber=<serialNumber>&deviceTyp e=<deviceType>?
    Natürlich existiert das Device mit dem Name "Esszimmer":
    Screenshot 2020-06-08 at 18.34.59.png

    Bug, oder mache ich was falsch ??

    Einen Kommentar schreiben:


  • psilo
    antwortet
    AndreK hattest du die offenen Themen im Plugin eigentlich schon gepusht? Ich hatte die letzte Zeit leider nicht so ganz den Blick auf die Themen hier :-/ Nur damit wir nicht auf ewig Bugs im Plugin haben

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Das ist falsch:
    Zitat von schuma Beitrag anzeigen
    Code:

    AlexaRc4shNG: plugin_name: AlexaRc4shNG # class_name: alexarc4shng # class_path: plugins.alexarc4shng
    Und der könnte ja durchaus anders sein.
    plugin_name muss lowercase sein. (so wie der Name des Verzeichnisses in /plugins geschrieben ist) und der class_name ist case sensitive.
    (Außerdem fehlen die Einrückungen)

    Wenn das in dieser Form beschrieben werden soll, muss das zumindest so heissen:

    Code:
    AlexaRc4shNG:
        plugin_name: alexarc4shng
        # class_name: AlexaRc4shNG 
        # class_path: plugins.alexarc4shng
    Es sollte in Zukunft auch nur noch **plugin_name** verwendet werden. (Die Admin GUI macht das auch so).

    Einen Kommentar schreiben:

Lädt...
X