Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Adapter: Worx Landroid v2.x.x

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Adapter: Worx Landroid v2.x.x

    This topic has been deleted. Only users with topic management privileges can see it.
    • hsteinme
      hsteinme @Cosmicbase last edited by hsteinme

      @cosmicbase Der Ansatz, die Zeitumrechnung gleich im ersten on-Statement durchzuführen, ist ein guter Ansatz. Mit Deinem zweiten on-Statement läufst Du nämlich in eine Endlosschleife hinein: Wenn sich idBladeWorkTimeCurrent ändert, berechnest Du den Wert neu und änderst ihn damit erneut. Also schlägt wieder die zweite on-Angabe zu usw. usf.

      'use strict';
      
      const idBladeWorkTime = 'worx.0.99999999999999999999.rawMqtt.raw.blade_work_time';
      const idBladeWorkTimeReset = 'worx.0.99999999999999999999.rawMqtt.raw.blade_work_time_reset';
      const idBladeWorkTimeCurrent = '0_userdata.0.MyWorx.99999999999999999999.blade_work_time_current';
      
      function zweiStellig(zahl) {
          return zahl < 10 ? '0' + zahl : zahl
      }
      
      function stundenMinuten(minuten) {
          return parseInt(minuten / 60) + ':' + zweiStellig(minuten % 60);
      }
      
      on ({id: [idBladeWorkTime, idBladeWorkTimeReset], change: 'ne'}, function() {
          setState(idBladeWorkTimeCurrent, stundenMinuten(getState('idBladeWorkTime').val - getState('idBladeWorkTimeReset').val));
      })
      

      Wegen einer besseren Übersichtlichkeit ist es sinnvoll, die Zeitumrechnung in eine eigene Funktion auszulagern.

      Wichtig: blade_work_time_current enthält jetzt keine Zahl mehr, sondern einen String. Also diesen bestehenden Datenpunkt zunächst löschen und als Typ String neu anlegen.

      C 1 Reply Last reply Reply Quote 0
      • C
        Cosmicbase @hsteinme last edited by

        @hsteinme vielen Dank für deine Hilfe.
        Die Idee die Zeit in h/min umzurechnen war nur so ein Gedanke der sicherlich Sinn macht.
        Den DP zu löschen und Zahl in String anzulegen habe ich verstanden.
        Leider kenn ich mich mit JS so gut wie gar nicht aus, deswegen meine Fragen.
        Kann ich dein Skript jetzt so anlegen oder sollten meine Funktionen aus 2 JS bestehen?
        Eins für Bladetime und 1 für Zeitumwandlung.

        hsteinme 1 Reply Last reply Reply Quote 0
        • hsteinme
          hsteinme @Cosmicbase last edited by

          @cosmicbase Nimm das Skript, das ich Dir heute Morgen aufgeschrieben habe.

          C 2 Replies Last reply Reply Quote 0
          • C
            Cosmicbase @hsteinme last edited by

            @hsteinme Wird gemacht.

            Vielen herzlichen Dank

            1 Reply Last reply Reply Quote 0
            • C
              Cosmicbase @hsteinme last edited by Cosmicbase

              @hsteinme
              Wird der 0_userdata.0.worx.blade_work_time_current erst befüllt wenn sich eine Differenz ergibt?
              Im Moment steht weder false noch 0 drin.
              Muss aber mit mähen auch noch warten weil ich frisch angesäht habe.
              Lediglich einen Kantenschnitt habe ich durchgeführt.

              Aber da hat sich auch nix an den Werten von

              worx.0.999999999999999999.rawMqtt.raw.blade_work_time
              und
              worx.0.999999999999999999.rawMqtt.raw.blade_work_time_reset

              geändert.😕

              Der Datenpunkt ist jetzt string statt number.
              JS wird unter Skripte/Common ausgeführt. Sollte doch richtig sein.
              Die Rechte 664 habe ich unberührt lassen.

              Kuck dir mal den Screenshot an.
              c8806c3f-08c4-4c93-87c2-4abe1d4f71f0-image.png

              hsteinme 1 Reply Last reply Reply Quote 0
              • hsteinme
                hsteinme @Cosmicbase last edited by

                @cosmicbase sagte in Adapter: Worx Landroid:

                Wird der 0_userdata.0.worx.blade_work_time_current erst befüllt wenn sich eine Differenz ergibt?

                Hier steht die Antwort, wann der private Datenpunkt gefüllt wird: https://forum.iobroker.net/post/639077

                @cosmicbase sagte in Adapter: Worx Landroid:

                Im Moment steht weder false noch 0 drin.

                String-Datenpunkte sind anfänglich immer leer.

                C 1 Reply Last reply Reply Quote 0
                • C
                  Cosmicbase @hsteinme last edited by Cosmicbase

                  @hsteinme
                  Habe dein Skript ausgiebig getestet. Im Adapter ist eine Differenz vorhanden, jedoch das JS Skript spuckt immer noch 0,00h/min aus.
                  Datenpunkt ist auch noch bei 0.
                  Irgendwas muss im Skript noch nicht stimmen.
                  Auch in der App wird unter Klingenlaufzeit 2h angezeigt, was ohne Umwandlung immerhin 120min wären.

                  Unbenannt.PNG

                  Hier sieht man das eine Differenz zwischen blade_work_time und blade_work_time_reset gebildet wurde.
                  Daraus sollte das js Skript doch die Zeit in Minuten oder mit Umwandlung in h/min ausgeben.

                  Ich werde heute noch das eingangs erwähnte Skript ohne Umwandlung probieren. Also nur die Ausgabe in Minuten.

                  1 Reply Last reply Reply Quote 0
                  • C
                    Cosmicbase @hsteinme last edited by Cosmicbase

                    @hsteinme said in Adapter: Worx Landroid:

                    Für diesen Datenpunkt vergibst Du den Typ Zahl, keinen Maximalwert, keine Maßeinheit sowie Lese- und Schreibberechtigungen.

                    Bedeutet keine Lese und Schreibberechtigung = 0 oder die typische Lese-Schreibberechtigung = 664 ?

                    Kannst du nochmal einen Blich auf das oder die Skripte werfen?

                    Der 0.Userdata DP bleibt auf Wert 0 bzw. 0:00 obwohl scheinbar die blade_time_current mit Daten befüllt wird.

                    Unbenannt.PNG

                    1 Reply Last reply Reply Quote 0
                    • C
                      Cosmicbase last edited by Cosmicbase

                      Jetzt hab ich mal die 2 Datenpunkte nen Screenshoot gemacht.

                      Unbenannt.PNG

                      Unbenannt.PNG

                      Einmal läuft ein JS mit der Umrechnung in h/min und einmal ganz normal in Minuten.
                      Leider haben die Skripte zu keinem Zeitpunkt eine klare Differenz errechnet.

                      hsteinme 1 Reply Last reply Reply Quote 0
                      • hsteinme
                        hsteinme @Cosmicbase last edited by

                        @cosmicbase Sorry, in meinem Skript hatte das Fehlerteufelchen zugeschlagen. Bitte tausche die nachfolgend zitierte Zeile in dem Skript aus:

                        alt:

                            setState(idBladeWorkTimeCurrent, stundenMinuten(getState('idBladeWorkTime').val - getState('idBladeWorkTimeReset').val));
                        

                        neu:

                            setState(idBladeWorkTimeCurrent, stundenMinuten(getState(idBladeWorkTime).val - getState(idBladeWorkTimeReset).val));
                        

                        Starte das geänderte Skript. lass Deinem Mäher eine halbe Stunde lang mähen und beobachte dabei den privaten Datenpunkt nach frühestens 10 Minuten.

                        C 1 Reply Last reply Reply Quote 0
                        • C
                          Cosmicbase @hsteinme last edited by Cosmicbase

                          @hsteinme said in Adapter: Worx Landroid:

                          setState(idBladeWorkTimeCurrent, stundenMinuten(getState(idBladeWorkTime).val - getState(idBladeWorkTimeReset).val));

                          Super das es jetzt klappt. Zumindest nach dem ich das JS und den Adapter neu gestartet habe war es vollendet (siehe Bild).
                          Läuft der manuelle Kantenschnitt auch die Klingenzeit mit ein?

                          Das ganze könnte man auch mit dem Batterie cycle machen!

                          Kannst du mir das im Skript anpassen mit den stundenMinuten? Sollten ja Ladezyklen sein und keine Zeit.

                          'use strict';
                          
                          const idBatterieCycleTime = 'worx.0.99999999999999999.rawMqtt.raw.battery_charge_cycles';
                          const idBatterieCycleTimeReset = 'worx.0.99999999999999999.rawMqtt.raw.battery_charge_cycles_reset';
                          const idBatterieCycleTimeCurrent = '0_userdata.0.worx.batterie_cycle_time_current';
                          
                          on ({id: [idBatterieCycleTime, idBatterieCycleTimeReset], change: 'ne'}, function() {
                          setState(idBatterieCycleTimeCurrent, stundenMinuten(getState(idBatterieCycleTime).val - getState(idBatterieCycleTimeReset).val));
                          })
                          

                          Danke für deine Arbeit.

                          Unbenannt.PNG

                          PS:

                          Was ich bemerkt habe das auch nach 30 Minuten mähen sich nichts an den Raw Werten geändert hat. Scheinbar werden die Daten von der Cloud nur unregelmäßig zur Verfügung gestellt. Könnte natürlich auch sein das die Klingenzeit immer erst beim erreichen der vollen Stundnzahl aktualisiert wird. Schließlich wird sie in der App auch nur mit Stunden angezeigt.

                          Neues Update:

                          Wie du schon im GitHub geschrieben hast hat sich irgendwo bei der Bereitstellung der Daten aus der Cloud ein Fehler eingeschlichen.
                          Habe einen Klingenreset gemacht und dann ist die Klingenzeit ins Minus gegangen weil der Reset Wert höher ist als die tatsächliche Klingenzeit. Ich weiß das dies zwar wieder überschrieben wird, aber irgendwie komisch.
                          Hoffe das hier irgendwas verbessert wird.

                          hsteinme 1 Reply Last reply Reply Quote 0
                          • hsteinme
                            hsteinme @Cosmicbase last edited by

                            @cosmicbase sagte in Adapter: Worx Landroid:

                            Das ganze könnte man auch mit dem Batterie cycle machen!
                            Kannst du mir das im Skript anpassen mit den stundenMinuten? Sollten ja Ladezyklen sein und keine Zeit.

                            Dann schmeiß halt stundenMinuten mit dem zugehörigen Klammernpaar aus dem Skript raus.

                            Nebenbei; Die Verwendung von "time" in der Benamsung des privaten Datenpunktes und der Variablen ist extrem unglücklich, denn "Sollten ja Ladezyklen sein und keine Zeit."

                            C 1 Reply Last reply Reply Quote 0
                            • C
                              Cosmicbase @hsteinme last edited by Cosmicbase

                              @hsteinme

                              'use strict';
                               
                              const idBatterieCycleTime = 'worx.0.9999999999999999.rawMqtt.raw.battery_charge_cycles';
                              const idBatterieCycleTimeReset = 'worx.0.9999999999999999.rawMqtt.raw.battery_charge_cycles_reset';
                              const idBatterieCycleTimeCurrent = '0_userdata.0.worx.batterie_cycle_time_current';
                              
                              on ({id: [idBatterieCycleTime, idBatterieCycleTimeReset], change: 'ne'}, function() {
                                  setState(idBatterieCycleTimeCurrent, getState(idBatterieCycleTime).val - getState(idBatterieCycleTimeReset).val);
                              })
                              

                              So funktioniert auch die Batterie Cycle.

                              Aber was mich ein wenig anwiedert ist die Tatsache das mal die Reset Werte unter RAW größer mal kleiner sind.
                              So kommt es im privaten DP zu einem Minus Wert.

                              FINDE DEN FEHLER, bzw. DIE FEHLER!!!

                              Unbenannt.PNG

                              Wie kann man dem Problem entgegen wirken das die Werte sich nicht immer drehen?
                              Und warum werden die RAW Werte so zögerlich aktualisiert?

                              Eventuell im JS ne Funktion das immer automatisch der größte Wert subtrahiert wird?

                              Interessanterweise ist in der App immer alles richtig dargestellt...

                              Screenshot_20210616_012313_it.positec.landroid.jpg

                              hsteinme 1 Reply Last reply Reply Quote 0
                              • hsteinme
                                hsteinme @Cosmicbase last edited by

                                @cosmicbase sagte in Adapter: Worx Landroid:

                                Aber was mich ein wenig anwiedert

                                Geht's nicht auch 'ne Nummer kleiner?

                                1 Reply Last reply Reply Quote 0
                                • R
                                  RalfEngelberth last edited by RalfEngelberth

                                  Hallo, ich habe folgendes Problem.
                                  Bis lang hat der Worksadapter bei mir prima funktionier.
                                  Seit dem letzten Gesamtupdate von IoBroker sowie auch JS Contoler funktioniert meine Ansteuerung über VIS an den Mäher nicht mehr.
                                  Ich habe mich über den Worksadapter bei Works angemeldet.
                                  9561d93a-7bf8-4a44-a81f-45260f098d7f-image.png

                                  Die Datenpunkte (welche ich auch schon mal komplett gelöscht habe) wurden auch angelegt.
                                  60f76973-0110-4a75-a3ff-7e3c0ec4f974-image.png

                                  Hier erfolgt aber keine Aktualisierung.

                                  Im Protokoll habe ich mehrere Fehlermeldungen

                                  Was mich wundert, die Seriennummer in den Objekten endet mit der *****1286
                                  Im Fehlerprotokoll endet aber die Seriennummer mit ****3000
                                  3b93c3fd-c31d-4cae-bd42-ff1857a59eb0-image.png

                                  Hat jemand eine Lösung?

                                  1 Reply Last reply Reply Quote 0
                                  • R
                                    RalfEngelberth last edited by

                                    Hat keiner eine Lösung?

                                    arteck 1 Reply Last reply Reply Quote 0
                                    • arteck
                                      arteck Developer Most Active @RalfEngelberth last edited by arteck

                                      @ralfengelberth welcheist den jetzt dir richtige ?

                                      ausserdem ist es schnuppe ob du die nummer maskeirst oder nicht.. kann ehh keiner was mit angangen

                                      R 1 Reply Last reply Reply Quote 0
                                      • R
                                        RalfEngelberth @arteck last edited by

                                        @arteck Das in den Objekten
                                        Die 3000 in der Log gibt es nicht

                                        arteck 1 Reply Last reply Reply Quote 0
                                        • arteck
                                          arteck Developer Most Active @RalfEngelberth last edited by

                                          @ralfengelberth nein welche ist denn jetzt die die zu DEINEM Worx gehört.. ich meine ist die sereinnummer

                                          R 1 Reply Last reply Reply Quote 0
                                          • R
                                            RalfEngelberth @arteck last edited by

                                            @arteck 20193019840102591286

                                            arteck 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            961
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            121
                                            1194
                                            371118
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo