Ankündigung

Einklappen
Keine Ankündigung bisher.

Alexa Text to Speech

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

  • AndreK
    antwortet
    OK, die Attribute ändere ich, im Zuge mit den Methoden. Das mit dem "Enable"-Item hab ich in der Doku explizit nochmal erläutert (zieht nur bei update_item).

    Das mit dem Cookie - Login - Logoff Problem schau ich mir nochmal an. Auch das mit der "Küche"

    Zum Thema
    Zitat von psilo Beitrag anzeigen
    ist die response utf-8?? dumme frage aber hätte man das nicht auch mit Python Requests lösen können?
    Ich hatte beim Start des Projekts auf jeden Fall CURL vermeiden wollen. Habs mit requests, urllib, sockets, HTTPClient, http probiert. Nix ging.
    Irgendwie ist das Cookie-Handling bei CURL anders. Hab mittels wireshark alles untersucht, konnte aber die Ursache nicht finden.
    Falls es doch noch eine Lösung gibt das mit request zu lösen würde ich das auch noch umbauen. Hab versucht die CURL-Sachen so gut es ging zu kapseln.

    Vielleicht hat ja jemand dazu noch einen Ansatz.

    Einen Kommentar schreiben:


  • psilo
    antwortet
    das mit dem item mag bei mir auch nicht. ich habe das item general.communication.alexa_rc angelegt und wechselnd auf True und False geschaltet. Ich hätte in einem Fall erwartet, dass dann nichts mehr gesprochen wird?!


    Mein direkter Aufruf der Methode sh.alexarc4shng.SendCmdByCurl('Büro','Text2Speech' ,'...') führt aber in beiden Fällen zu einer Ausgabe?

    Ok sehe gerade. Das zieht nur, wenn es ein Item betrifft für das die Ausgabe aktiviert wurde. Mhmmmm. Sollte man klar kennzeichnen in der Doku. Ansich machts ja Sinn, in den Logiken kann ich komplexere Bedingungen definieren, wann ausgegeben werden soll.

    Bitte benenne Pluginattribute noch in Kleinschreibung und mit "_": Bspw:

    Item2EnableAlexaRC -> item_2_enable_alexa_rc
    Zuletzt geändert von psilo; 04.05.2019, 12:55.

    Einen Kommentar schreiben:


  • psilo
    antwortet
    nochwas (vor einem PR): das bild das du als logo im webif verwendest ist frei benutzbar?

    Einen Kommentar schreiben:


  • psilo
    antwortet
    ja das ist es.. fehler ist nach ausloggen - einloggen auf der webseite und nach einem restart des core wieder da :-( teste das mal bei dir

    ps: und nach einem erneuten update des cookies geht es auch wieder

    der fehler tritt etwas anders auch nach einem neustart auf.. besuche ich aber das web interface, geht es.. sehr sehr seltsam
    plugins.alexarc4shng Error while getting Devices: the JSON object must be str, not 'bytes'

    Ich gebe die suche aber erstmal auf, wenn du sowieso an dem autologin arbeitest.
    Zuletzt geändert von psilo; 04.05.2019, 12:44.

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Bin kurz vor der Aufgabe. Aktuell werden die Devices auch im Webif nicht mehr angezeigt.. Permanent der Encoding Error :-/ kannst du spasseshalber einem deiner devices mal ein ü oder sowas geben?

    UPDATE: habe gerade das COOKIE neu gesetzt.. jetzt geht es.. hääää?

    invalidiert das cookie evtl, wenn ich neu auf amazon alexa einlogge? (also im browser)
    Zuletzt geändert von psilo; 04.05.2019, 11:01.

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hallo psilo,

    das mit dem fixen Pfad ist korrekt, ich schreib ja das cookie dort vorher auch hin. Dann wir das cookie geprüft und bei Erfolgt unter dem korrekten Pfad
    weggeschrieben.
    Die Rückgabe des Cookies ins Web-Interface hatte ich gar nicht vor.
    Kann man aber einbauen. Mit dem Autologin mach es dann auch Sinn das Cookie anzuzeigen. Mache ich im Zuge des Autologins. (Ich denke ich bin hier auf der Zielgeraden)

    Code:
    file=open("/tmp/cookie.txt","w")
        for line in myLines:
            file.write(line+"\r\n")
        file.close()
        value1 = self.plugin.parseCookieFile("/tmp/cookie.txt")
    Gruss Andre

    Einen Kommentar schreiben:


  • psilo
    antwortet
    kriegs gerade nicht gebacken.. ich denke es ist ein problem mit dem encoding dessen was zurueckkommt. mglw wie oben abh. von der python version.

    ist die response utf-8?? dumme frage aber hätte man das nicht auch mit Python Requests lösen können?
    (bspw. https://stackoverflow.com/questions/...uests/14762163)

    und noch ein bug: im webif machst du value1 = self.plugin.parseCookieFile("/tmp/cookie.txt") auf nen fixen pfad. folglich kein cookie sichtbar
    Zuletzt geändert von psilo; 04.05.2019, 10:50.

    Einen Kommentar schreiben:


  • psilo
    antwortet
    so bin nen schritt weiter, habe die Exception umgebaut, so dass er vernünftig loggt - eines meiner Geräte heißt "Büro", das mag er wohl beim laden nicht?

    Bitte passt das ('Error while getting Devices: %s' %err) so bei Dir an.. im code war ", err"
    Code:
            try:
                buffer = BytesIO()
                myCurl = pycurl.Curl()
                myCurl.setopt(myCurl.URL,'https://alexa.amazon.de/api/devices-v2/device?cached=false')
                myCurl.setopt(pycurl.FOLLOWLOCATION, 1)
                myCurl.setopt(pycurl.COOKIEJAR ,self.cookiefile)
                myCurl.setopt(pycurl.COOKIEFILE ,self.cookiefile)
                myCurl.setopt(pycurl.WRITEDATA , buffer)
                myCurl.setopt(pycurl.HTTPGET,1)
                myCurl.perform()
                self.logger.error('Status of getDevicesbyCurl: %d' % myCurl.getinfo(myCurl.RESPONSE_CODE))
                
                body=buffer.getvalue()
                mybody = body.decode()
                myDict=json.loads(mybody)
                myDevices = EchoDevices()
                self.logger.error("DONE")
                
            except Exception as err:
                self.logger.error('Error while getting Devices: %s' %err)
                return None
    Code:
    2019-05-04  11:16:30 ERROR    plugins.alexarc4shng Status of getDevicesbyCurl: 200
    2019-05-04  11:16:30 ERROR    plugins.alexarc4shng Status of getDevicesbyCurl: 200
    2019-05-04  11:16:30 ERROR    plugins.alexarc4shng Error while getting Devices: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
    2019-05-04  11:16:30 ERROR    plugins.alexarc4shng Error while getting Devices: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
    für das ut8 brauchst du ne python weiche wie im pushbullet plugin:

    Code:
                if sys.version_info < (3, 5):
                    upload_request_response = requests.post(self._upload_apiurl, data=json.dumps(
                        {"file_name": os.path.basename(filepath),
                         "file_type": magic.from_file(filepath, mime=True).decode("UTF-8")}), headers=headers,
                                                            auth=(apikey, ""))
                else:
                    upload_request_response = requests.post(self._upload_apiurl, data=json.dumps(
                        {"file_name": os.path.basename(filepath), "file_type": magic.from_file(filepath, mime=True)}),
                                                            headers=headers, auth=(apikey, ""))
    Müsste dann so sein:
    Code:
                if sys.version_info < (3, 5):
                    mybody = body.decode()
                else:
                    mybody = body
    update das gleich nochmal, muss glaube ich noch in str casten
    Zuletzt geändert von psilo; 04.05.2019, 10:26.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Auf dem einen läuft Windows, auf dem anderen Debian. :-)

    Einen Kommentar schreiben:


  • psilo
    antwortet
    henfri kommt drauf an ob dein pc oder dein server sicherer ist

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    > vielleicht können die anderen tester sich mal dazu melden?!

    Ich habe das Plugin getestet. Danke Andre für die tolle Arbeit. Was ich leider noch immer nicht geschafft habe -aus Zeitmangel- ist die Erstellung weiterer commandlets. Allerdings habe ich jetzt wenigstens geschafft, die Beschreibung durchzugehen. Die ist mir soweit klar.

    Ich habe noch keine langzeiterfahrung mit dem plugin. D.h. Fehler, die durch irgendein Disconnect nach x Stunden, Tagen, Wochen passieren würden, hätte ich nicht entdeckt.

    Zum cookiefile: Das ist ja auf dem sh.py Server nicht mehr oder weniger sicher aufgehoben als in meinem Browser.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • psilo
    antwortet
    ich vermute, dass Du das cookiefile vorher setzen musst:

    Code:
    self.Echos = self.getDevicesbyCurl()
    self.cookiefile = self.get_parameter_value('cookiefile')
    die erste methode braucht intern das cookie file!


    update: hat den fehler leider noch nicht behoben. er liest bei mir trotz http 200 in der init keine devices ein
    Zuletzt geändert von psilo; 04.05.2019, 10:00.

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Hi, der fehler kommt offenbar doch noch, auch wenn die instanz länger schon läuft. Kann es sein, dass ohne besuch des webifs derzeit die devices nicht geladen sind?

    Code:
    2019-05-04  09:28:42 ERROR    lib.item         Item knx.gf.office.light: problem running <bound method alexarc4shng.update_item of <plugins.alexarc4shng.alexarc4shng object at 0x7f961434d4a8>>: 'NoneType' object has no attribute 'get'
    > Traceback (most recent call last):
    >   File "/python/smarthome/lib/item.py", line 2203, in __update
    >     method(self, caller, source, dest)
    >   File "/python/smarthome/plugins/alexarc4shng/__init__.py", line 362, in update_item
    >     self.SendCmdByCurl(myCommand.EndPoint,myCommand.Action,newValue2Set)
    >   File "/python/smarthome/plugins/alexarc4shng/__init__.py", line 481, in SendCmdByCurl
    >     actEcho = self.Echos.get(dvName)
    > AttributeError: 'NoneType' object has no attribute 'get'

    Einen Kommentar schreiben:


  • psilo
    antwortet
    AndreK fürs cachen könnte man ein hilfsitem nehmen oder in ein file. die commands legst du ja auch als file an? kann aber erstmal auch wegfallen und wir beobachten es.

    zur init methode: das mit den args usw war glaube ich auch mit der grund warum Msinn das umgebaut hat. und ja weglassen kann man sie dann auch.

    was meinst du mit "freigabe für kommunikation"? das item mit dem ich an und auschalten kann? das kann ich heute mal einbauen für die nacht.

    der eaDir folder ist weg bei den commandlets. dass dateien oder folder da drin "automatisch" landen kann immer sein, drum macht das explizite laden von .cmd dateien schon so oder so sinn. mein shng laeuft übrigens auch unter einem blanken debian im docker, aber der folder ist vom nas aus reingemounted. ich arbeite auf dem ordner auch von meinem windows rechner aus mit pycharm. wobei das die ordner normal in ruhe laesst .

    ja beta hats für mich auf jeden fall.

    vielleicht können die anderen tester sich mal dazu melden?!

    Einen Kommentar schreiben:


  • AndreK
    antwortet
    Hallo psilo,

    das mit den Grossbuchstaben werde ich noch mittels search/replace beheben können ;-) - Bin aktuell noch mit dem AutoLogin beschäftigt.
    Was meinst Du mit "zwischen speichern" - cachen in einer DB oder Ähnlichem ?
    Mit dem *args, **kwargs und "get_parameter_value" spricht aus meiner Sicht auch nichts gegen future-attributes,
    solange in der plugin.yaml des plugins defaults gesetzt sind läuft das ja durch (so zumindest meine Tests).

    Hast Du das mit der Freigabe für die Kommunikation getestet. Bei mir funktioniert das soweit. Ist aber wie immer unter optimalen Bedinungungen.
    (Aus Sicht des Entwicklers für den Entwickler)

    Ist das Problem beim Laden der Commandlets jetzt OK. - Das Deine NAS so böse Sachen macht, wie Verzeichnisse eigenständig anlegen, hätte ich mir gar nicht vorstellen können ;-) - da bin ich mit meinem "blanken" Ubuntu/jessie/wheezy-Installation besser dran, die machen das nicht.

    Ich denke wir kommen so langsam ins Beta-Stadium, oder ? Hinweise gerne willkommmen.

    Gruss Andre

    Einen Kommentar schreiben:

Lädt...
X