Ankündigung

Einklappen
Keine Ankündigung bisher.

Unterstützung bei der Entwicklung eines Landroid-Plugin

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

    #76
    Hi SMarcus , Sipple , henfri ,

    ich habe eine neue Version vorbereitet die mit pyworxcloud 1.4.19 funktioniert. Ich habe das Parsen der "Exclusion"-Times und der Kalendermähzeiten aus der App in jeweils ein UZSU-Item umgesetzt. Somit können die Zeiten jeweils in einem UZSU-Table-Widget dargestellt werden. Ich habe auf dem letzten Stand von henfri aus Post #52 aufgesetzt.

    Der wesentliche Unterschied zu den Vorgängerversionen von pyworxcloud ist, dass "Update ()" rausflog und "tryToPoll ()" verwendet werden muss.

    Hier wird von pyworxcloud auch eine maximale Abfragefrequenz von 120 Sekunden überwacht. Der neue Stand läuft seit 24 h ohne Fehler bei mir.

    Ich werde den neuen Stand sobald ich dazu komme auf meinen Git-Account hochladen und euch informieren. Es ändern sich dann die __init__.py und die plugin.yaml

    Viele Grüsse

    Andre

    Kommentar


      #77
      Ja wunderbar, da warte ich dann natürlich gleich drauf.
      Etwas Angst macht mir nur die UZSU. Ist das ein MUSS, auch wenn man die Mähzeiten etc. (vorerst) nicht braucht? Hab die noch nie verwendet. Nur mal vor längerer Zeit damit angefangen und gescheitert, weil keine Anleitung vollständig und fehlerfrei war. Das kann inzwischen aber anders sein.
      Möchte allerdings erst mal nur die einfacheren Sachen einrichten. Statusanzeige und die drei Kommandos Start, Pause und Home, evtl. noch Rasenkantenschnitt anstoßen. Wenn das dann klappt, wage ich mich vielleicht nochmal an die Zeiten.

      Gruß, Martin

      Kommentar


        #78
        Danke Andre,

        woher hast du das mit dem tryToPoll()?
        Im example steht getUpdate().

        Gruß,
        ​​​​​​​Hendrik
        ​​​​

        Kommentar


          #79
          Meinst du die example.py? Die ist 29 Tage alt, Stand 1.14.15.
          Seitdem gab es 4 neue pyworxcloud Releases. Die letzte, 1.4.19, ist 4 Tage alt.

          siehe:

          Code:
           def tryToPoll(self) -> None:
                  """Try to issue a forced poll."""
                  try:
                      self._poll()
                  except RateLimitException as exception:
                      return f"The rate limit of {POLL_CALLS_LIMIT} status polls per {POLL_LIMIT_PERIOD} seconds has been exceeded. Please wait {round(exception.period_remaining)} seconds before polling again."
          Zuletzt geändert von Sipple; 19.05.2022, 14:40.

          Kommentar


            #80
            Kurzer Spoiler,

            Upload kommt später - keine Angst vor der UZSU die kommt mit den Structs und funktioniert out of the box.

            UZSU.jpg


            Angehängte Dateien

            Kommentar


              #81
              Hallo,

              Meinst du die example.py? Die ist 29 Tage alt, Stand 1.14.15.
              Seitdem gab es 4 neue pyworxcloud Releases. Die letzte, 1.4.19, ist 4 Tage alt.
              Und das Letzte hat update() entfernt. Es war aber zuvor schondurch getStatus() ersetzt worden.
              Edit: Jetzt sehe ich es. Im example.py ist update() ja noch drin.


              Zitat von henfri Beitrag anzeigen
              woher hast du das mit dem tryToPoll()?
              Im example steht getUpdate().
              ​​​​
              @Andre: warum denkst du, dass tryToPoll() richtig ist?

              Gruß,
              Hendrik
              Zuletzt geändert von henfri; 19.05.2022, 19:29.

              Kommentar


                #82
                https://github.com/MTrab/pyworxcloud/issues/19

                Kommentar


                  #83
                  Ernsthaft? Gedächtnisschwund? Unter Alkeinfluss programmiert?

                  Kommentar


                    #84
                    Nur mal so weil es mich interessiert und das noch nicht ganz verstehe:

                    Wie ich das sehe ist die eigentliche Datenübertragung doch simples MQTT, oder?
                    Zumindest sehe ich das hier:

                    Code:
                    mqtt_out : PRM100/F4CFA2Axxxxx/commandOut
                    mqtt_in : PRM100/F4CFA2Axxxxx/commandIn
                    und:
                    Code:
                    _worx_mqtt_client_id : android-a53ef562-d749-11ec-a75d-dca6323xxxxx
                    _worx_mqtt_endpoint : a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com
                    Und raus kommt ein JSON String:

                    Code:
                    {"cfg": {"lg": "it", "id": 0, "dt": "19/05/2022", "tm": "09:56:20", "rd": 180, "sn": "202130267212001xxxxx", "mz": [0, 0, 0, 0], "mzv": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "sc": {"p": 0, "m": 1, "distm": 0, "ots": {"bc": 0, "wtm": 0}, "d": [["00:00", 0, 0], ["09:00", 210, 1], ["09:00", 210, 0], ["09:00", 210, 0], ["09:00", 210, 0], ["09:00", 210, 1], ["00:00", 0, 0]], "dd": [["00:00", 0, 0], ["00:00", 0, 0], ["00:00", 0, 0], ["00:00", 0, 0], ["00:00", 0, 0], ["00:00", 0, 0], ["00:00", 0, 0]]}, "cmd": 0, "al": {"lvl": 0, "t": 60}}, "dat": {"mac": "F4CFA2AXXXXX", "fw": 3.26, "fwb": 1, "lz": 0, "rsi": -41, "lk": 0, "dmp": [-0.3, 0.7, 310.1], "st": {"b": 567, "d": 7809, "wt": 575, "bl": 30}, "rain": {"s": 0, "cnt": 0}, "bt": {"t": 19.6, "v": 17.9, "p": 43, "nr": 5, "c": 0, "m": 1}, "le": 0, "ls": 7, "act": 1, "conn": "wifi"}}

                    Wozu also überhaupt irgendein Polling? Sobald man auf dem MQTT Server als Client registriert ist, wird man doch eh über Updates informiert?
                    Einen über MQTT gelieferten JSON String zu dekodieren und in Items zu schreiben schafft man sogar mit SHNG Bordmitteln, mache ich z.B. mit meiner go.e Wallbox.

                    Die Herausforderung ist imho nur die Authentifizierung. Hat das Polling damit was zu tun?

                    Wie gesagt reines Interesse.

                    Kommentar


                      #85
                      Hi Sipple ,

                      Zitat von Sipple Beitrag anzeigen
                      Wie ich das sehe ist die eigentliche Datenübertragung doch simples MQTT, oder?
                      Das ist korrekt ! Allerdings werden Aktualisierungen, nach den Untersuchungen von Hendrik und mir, nicht automatisch übermittelt. Wieso auch immer.

                      Du kannst das aber gerne noch mal testen und das Polling im Plugin auf mehrere Stunden setzen und den Mäher ein wenig strapazieren und prüfen was ohne
                      polling ankommt.

                      Auch alle anderen Anbindungen (FHEM / IoBroker / Openhab / Desktop-APP) arbeiten mit Polling.

                      Der aktuelle Stand ist hochgeladen. Ich habe die Version auf 1.1 angehoben.

                      Es müssen die plugin.yaml sowie die __init__.py getauscht werden.

                      Es wurden neue Items in der plugin.yaml definiert. In der README sind Beispiel-Widgets für die Kalender. Den Visu-Ordner und die Dropins habe ich noch nicht angepasst.
                      Hier muss ich von einem anderen Rechner noch Dateien einsammeln und diese hochladen.
                      In der Visu kann ein Button für das Item "worx.commands.EDGECUT" bei den Kommando-Buttons hinzugefügt werden. Damit sollte sich der Kantenschnitt starten lassen

                      Zitat von henfri Beitrag anzeigen
                      https://github.com/MTrab/pyworxcloud/issues/19
                      MTrab verwendet in seiner Home-Assistant Anbindung auf jeden Fall RetryToPoll() -> siehe hier

                      Viel Erfolg beim Testen

                      Viele Grüsse
                      Andre

                      Kommentar


                        #86
                        Uauauaua..... Warum immer ich? 😭

                        Code:
                        2022-05-20 14:48:01 ERROR lib.plugin Plugin 'landroid' exception in run() method: 'NoneType' object is not subscriptable
                        > Traceback (most recent call last):
                        > File "/usr/local/smarthome/lib/plugin.py", line 676, in run
                        > self.plugin.run()
                        > File "/usr/local/smarthome/plugins/landroid/__init__.py", line 123, in run
                        > self.poll_device()
                        > File "/usr/local/smarthome/plugins/landroid/__init__.py", line 492, in poll_device
                        > self.parse_worx_attr()
                        > File "/usr/local/smarthome/plugins/landroid/__init__.py", line 508, in parse_worx_attr
                        > self._calc_calendar()
                        > File "/usr/local/smarthome/plugins/landroid/__init__.py", line 173, in _calc_calendar
                        > mydict = attrs['auto_schedule_settings']['exclusion_scheduler']['days']
                        > TypeError: 'NoneType' object is not subscriptable

                        Kann das sein, das der Fehler auftritt wenn man (in der Landroid App) den "Automatischen Zeitplan" nicht aktiviert hat?

                        Gruß
                        Marcus

                        Kommentar


                          #87
                          Zitat von SMarcus Beitrag anzeigen
                          Kann das sein, das der Fehler auftritt wenn man (in der Landroid App) den "Automatischen Zeitplan" nicht aktiviert hat?
                          Könnte sein, konnte ich nicht testen da ich nichts verändern wollte - hab ja keinen Mäher und muss auf die Daten von "Fremden" zugreifen.

                          Ich habe gerade ein Update hochgeladen welches prüft ob es den Eintrag für den Ausschlusskalender gibt. Damit sollte der Fehler abgefangen werden

                          Gruss Andre

                          Kommentar


                            #88
                            Versteh(t) mich nicht falsch. Ich hab null Probleme damit zu Testen, aber ich fürchte irgendwann bin ich als der "Überbringer schlechter Nachrichten" gebrandmarkt. Hoffe Ihr redet noch mit mir... 😁

                            Code:
                            2022-05-20 15:11:15 ERROR lib.plugin Plugin 'landroid' exception in run() method: local variable 'mydict' referenced before assignment
                            > Traceback (most recent call last):
                            > File "/usr/local/smarthome/lib/plugin.py", line 676, in run
                            > self.plugin.run()
                            > File "/usr/local/smarthome/plugins/landroid/__init__.py", line 123, in run
                            > self.poll_device()
                            > File "/usr/local/smarthome/plugins/landroid/__init__.py", line 493, in poll_device
                            > self.parse_worx_attr()
                            > File "/usr/local/smarthome/plugins/landroid/__init__.py", line 509, in parse_worx_attr
                            > self._calc_calendar()
                            > File "/usr/local/smarthome/plugins/landroid/__init__.py", line 184, in _calc_calendar
                            > if ('exclusion_scheduler' in mydict):
                            > UnboundLocalError: local variable 'mydict' referenced before assignment
                            Gruß
                            Marcus

                            Kommentar


                              #89
                              Hi, kein Problem

                              neues Update ist hochgeladen - war wohl etwas zu schnell :-(

                              Kommentar


                                #90
                                Sieht gut aus. Respekt Danke!

                                Gruß
                                Marcus

                                EDIT: Kriegs Du das mit der nächsten Version noch weg?
                                Code:
                                2022-05-20 15:23:49 WARNING plugins.uzsu item 'worx.visu.exclusion_uzsu.uzsu' is active but has no entries.
                                2022-05-20 15:28:43 WARNING plugins.uzsu item 'worx.visu.exclusion_uzsu.uzsu' is active but has no entries.
                                Evtl. einen Pseudo-Eintrag in der 'worx.visu.exclusion_uzsu.uzsu' ?
                                Zuletzt geändert von SMarcus; 20.05.2022, 14:37.

                                Kommentar

                                Lädt...
                                X