Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test Adapter Husqvarna Automower v0.3.x

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Test Adapter Husqvarna Automower v0.3.x

Geplant Angeheftet Gesperrt Verschoben Tester
husqvarnaautomower
439 Beiträge 73 Kommentatoren 104.4k Aufrufe 62 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • G ghifunk

    @arnod
    Hallo, eine Frage:
    Ich habe den Automower 415X und bekomme den Zeitplan auss der Vis nicht an den Mäher übertragen.
    Hat das Problem noch jemand mit dem Gerät oder geht es nur bei mir nicht?
    Die mit der App eingestellten Mähtage werden in den kleinen Markierungen neben den Tagen grün
    eingetragen aber die Werte aus der Visu erreichen den Mäher nicht.
    vieleicht kann jemand helfen?
    Gruß Gerhard

    A Offline
    A Offline
    ArnoD
    schrieb am zuletzt editiert von
    #334

    @ghifunk sagte in Test Adapter Husqvarna Automower v0.3.x:

    Die mit der App eingestellten Mähtage werden in den kleinen Markierungen neben den Tagen grün
    eingetragen aber die Werte aus der Visu erreichen den Mäher nicht.

    Wenn die kleinen Markierungen grün sind, wurde das auch an den Mäher übertragen.
    Diese Felder verweisen auf die ID husqvarna-automower.0.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxxx.calendar
    0 bis 3 und das sind Werte die vom Mäher kommen.

    303d6a84-3560-4f2e-908c-23e59dc84689-grafik.png

    G 1 Antwort Letzte Antwort
    0
    • A ArnoD

      @ghifunk sagte in Test Adapter Husqvarna Automower v0.3.x:

      Die mit der App eingestellten Mähtage werden in den kleinen Markierungen neben den Tagen grün
      eingetragen aber die Werte aus der Visu erreichen den Mäher nicht.

      Wenn die kleinen Markierungen grün sind, wurde das auch an den Mäher übertragen.
      Diese Felder verweisen auf die ID husqvarna-automower.0.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxxxx.calendar
      0 bis 3 und das sind Werte die vom Mäher kommen.

      303d6a84-3560-4f2e-908c-23e59dc84689-grafik.png

      G Offline
      G Offline
      ghifunk
      schrieb am zuletzt editiert von
      #335

      @arnod
      die Markierungen die bei mir erscheinen, sind die welche in der Handy App gesetzt wurden.

      1 Antwort Letzte Antwort
      0
      • A ArnoD

        @ghifunk
        Was steht dann im LOG, wenn du das auf debug einstellst?
        Werden die Daten richtig zum Server geschickt ?

        "data":"{\"data\":{\"type\":\"calendar\",\"attributes\":{\"tasks\":[{\"start\":1020,\"duration\":240,\"monday\":false,\"tuesday\":true,\"wednesday\":false,\"thursday\":false,\"friday\":true,\"saturday\":false,\"sunday\":false}]}}}"};
        

        und wie sieht die Antwort aus ?

        [wss.on - message]: {"id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","type":"settings-event","attributes":{"calendar":{"tasks":[{"start":1020,"duration":240,"monday":false,"tuesday":true,"wednesday":false,"thursday":false,"friday":true,"saturday":false,"sunday":false}]}}}
        
        G Offline
        G Offline
        ghifunk
        schrieb am zuletzt editiert von ghifunk
        #336

        @arnod
        im Log finde ich nichts, was mit Wochentagen oder Zeiten dazu zu tun hat ?
        oder ich suche an der falschen Stelle.

        A 1 Antwort Letzte Antwort
        0
        • G ghifunk

          @arnod
          im Log finde ich nichts, was mit Wochentagen oder Zeiten dazu zu tun hat ?
          oder ich suche an der falschen Stelle.

          A Offline
          A Offline
          ArnoD
          schrieb am zuletzt editiert von
          #337

          @ghifunk
          Wird bei dir überhaupt was übertragen oder fehlen nur die Timer?

          G 1 Antwort Letzte Antwort
          0
          • G Offline
            G Offline
            ghifunk
            schrieb am zuletzt editiert von
            #338

            wie ich sehe, wird nichts übertragen, was mit timern oder zeiten zu tun hat.
            ich habe den Adapter auf debug eingestellt und dann im Log danach gesucht.

            G 1 Antwort Letzte Antwort
            0
            • G ghifunk

              wie ich sehe, wird nichts übertragen, was mit timern oder zeiten zu tun hat.
              ich habe den Adapter auf debug eingestellt und dann im Log danach gesucht.

              G Offline
              G Offline
              ghifunk
              schrieb am zuletzt editiert von ghifunk
              #339

              @ghifunk ich habe gerade nochmal in den scheduler-Werten gesehen, daß alle Werte rot sind. hat das was zu bedeuten?
              Wenn ich dann auf Speichern drücke, geht der "Speichern" -Wert kurz af True (grün) und dann wieder auf rot

              jetzt ha ich im Log doch noch was gefunden:
              "Content-Length":191},"method":" post","url":"https://api.amc.husqvarna.dev/v1/mowers/xxxxxxxx-xxxx-xxxx -xxxx-xxxxxxxxxxxx/calendar","data":"{"data":{ "type":"calendar","attributes":{"tasks":[{"start":540,"duration":360,"monday":true ,"Dienstag":wahr,"Mittwoch":falsch,"Donnerstag":wahr,"Freitag":falsch,"Samstag":wahr,"Sonntag":falsch}] }}}"}axios/0.27.2","Content-Length":191},"method":"post","url":"https://api.amc.husqvarna.dev/v1/mowers/xxxxxxxx-xxxx-xxxx -xxxx-xxxxxxxxxxxx/calendar","data":"{"data":{"type":"calendar","attributes":{"tasks":[{" start":540,"dauer":360,"montag":wahr,"dienstag":wahr,"mittwoch":falsch,"donnerstag":wahr,"freitag\ ":false,"samstag":true,"sonntag":false}]}}}"}axios/0.27.2","Content-Length":191},"method":"post","url":"https://api.amc.husqvarna.dev/v1/mowers/xxxxxxxx-xxxx-xxxx -xxxx-xxxxxxxxxxxx/calendar","data":"{"data":{"type":"calendar","attributes":{"tasks":[{" start":540,"dauer":360,"montag":wahr,"dienstag":wahr,"mittwoch":falsch,"donnerstag":wahr,"freitag\ ":false,"samstag":true,"sonntag":false}]}}}"}"Kalender","Attribute":{"Aufgaben":[{"Start":540,"Dauer":360,"Montag":true,"Dienstag" :true,"mittwoch":false,"donnerstag":true,"freitag":false,"samstag":true,"sonntag":false}]}}}"}"Kalender","Attribute":{"Aufgaben":[{"Start":540,"Dauer":360,"Montag":true,"Dienstag" :true,"mittwoch":false,"donnerstag":true,"freitag":false,"samstag":true,"sonntag":false}]}}}"}

              1 Antwort Letzte Antwort
              0
              • A ArnoD

                @baddik
                Dafür findest du auf Github ein Script, das diese Werte berechnet.
                Funktioniert aber nicht sehr gut und muss noch mal optimiert werden.
                Habe ich mir mal vorgenommen, wenn ich mehr Zeit habe.

                B Offline
                B Offline
                Baddik
                schrieb am zuletzt editiert von
                #340

                @arnod Vielen Dank - habe es gefunden 👍

                1 Antwort Letzte Antwort
                0
                • A ArnoD

                  @ghifunk
                  Wird bei dir überhaupt was übertragen oder fehlen nur die Timer?

                  G Offline
                  G Offline
                  ghifunk
                  schrieb am zuletzt editiert von ghifunk
                  #341

                  @arnod hallo,
                  ich habe eben nochmal die Daten etwas aufgeschlüsselt:
                  Ich denke mal, da ist was durcheinander... ist original so aus dem Log kopiert!

                  Content-Length":607},"method":" post","url":"https://api.amc.husqvarna.dev/v1/mowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/calendar","data":"{"data":{ "type":"calendar","attributes":{"tasks":

                  [{"start":540,"duration":360,"monday":true ,"Dienstag":wahr,"Mittwoch":falsch,"Donnerstag":wahr,"Freitag":falsch,"Samstag":wahr,"Sonntag":falsch},

                  {"Start":420,"Dauer":360,"Montag":false,"Dienstag":true,"Mittwoch":false,"donnerstag":wahr,"freitag":falsch,"samstag":wahr,"sonntag":falsch},

                  {"start":300,"dauer":120," Montag":wahr,"Dienstag":falsch,"Mittwoch":wahr,"Donnerstag":falsch,"Freitag":wahr,"Samstag":falsch,"Sonntag\ ":true},

                  {"Start":600,"Dauer":120,"Montag":false,"Dienstag":true,"Mittwoch":false,"Donnerstag\ ":true,"freitag":false,"samstag":false,"sonntag":true}]}}}"}donnerstag":falsch,"freitag":true,"samstag":falsch,"sonntag":true},

                  {"start":600,"dauer":120," Montag":falsch,"Dienstag":wahr,"Mittwoch":falsch,"Donnerstag":wahr,"Freitag":falsch,"Samstag":falsch,"Sonntag\ ":Stimmt}]}}}"}donnerstag":falsch,"freitag":true,"samstag":falsch,"sonntag":true},

                  {"start":600,"dauer":120," Montag":falsch,"Dienstag":wahr,"Mittwoch":falsch,"Donnerstag":wahr,"Freitag":falsch,"Samstag":falsch,"Sonntag\ ":Stimmt}]}}}"}

                  dazu die Eingabemaske:

                  31-08-_2022_15-12-40.jpg

                  [onStateChange]: HTTP-Statusantwort: 400; headers: {"content-type":"application/vnd.api+json","
                  content-length":"435","connection":"close","date":"Mi, 31. Aug. 2022 13:03 :16 GMT","
                  x-amzn-requestid":"zzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz","
                  x-amzn-remapped-content-length":"435","x-amzn-remapped-connection" :"keep-alive","
                  x-amz-apigw-id":"XutTTFnQjoEFW0g=","x-amzn-remapped-date":"Mi, 31. August 2022 13:03:16 GMT","
                  x-cache ":"Fehler von cloudfront","via":"1.1 b88825ad151091557d336c3519215162.cloudfront.net (CloudFront)","
                  x-amz-cf-pop":"TXL52-C1","x-amz-cf-id": " r4Pv0Um_UADmOY2-N1yfx3SIGAGv12Kbd3RlfL9iJo8if3HOqad0Lg=="};
                  Daten: {"errors":[{"id":"yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy","status":"400","code":"
                  invalid.mower. schedule.format","title":"Ungültiges Mähplanformat","detail":"Ungültiges Planformat im Anfragetext.
                  Parsing-Nachricht: Mehr als zwei Aufgaben betreffen den Dienstag. Entstand beim Hinzufügen: MowerSchedule.
                  Task[start=600,duration=120,monday=false,tuesday=true,wednesday=false,thursday=true,friday=false,saturday=false,sunday=true,missionId=<null>] "}]}
                  Ungültiges Mähplanformat","detail":"Ungültiges Planformat im Anfragetext.
                  Parsing-Nachricht: Mehr als zwei Aufgaben betreffen den Dienstag. Entstand beim Hinzufügen:
                  MowerSchedule.Task[start=600,duration=120,monday=false,tuesday=true,wednesday=false,thursday=true,friday=false,saturday=false,sunday=true,missionId=<null>] "}]}
                  Ungültiges Mähplanformat","detail":"Ungültiges Planformat im Anfragetext.
                  Parsing-Nachricht: Mehr als zwei Aufgaben betreffen den Dienstag. Entstand beim Hinzufügen: MowerSchedule.
                  Task[start=600,duration=120,monday=false,tuesday=true,wednesday=false,thursday=true,friday=false,saturday=false,sunday=true,missionId=<null>] "}]}

                  A 1 Antwort Letzte Antwort
                  0
                  • G ghifunk

                    @arnod hallo,
                    ich habe eben nochmal die Daten etwas aufgeschlüsselt:
                    Ich denke mal, da ist was durcheinander... ist original so aus dem Log kopiert!

                    Content-Length":607},"method":" post","url":"https://api.amc.husqvarna.dev/v1/mowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/calendar","data":"{"data":{ "type":"calendar","attributes":{"tasks":

                    [{"start":540,"duration":360,"monday":true ,"Dienstag":wahr,"Mittwoch":falsch,"Donnerstag":wahr,"Freitag":falsch,"Samstag":wahr,"Sonntag":falsch},

                    {"Start":420,"Dauer":360,"Montag":false,"Dienstag":true,"Mittwoch":false,"donnerstag":wahr,"freitag":falsch,"samstag":wahr,"sonntag":falsch},

                    {"start":300,"dauer":120," Montag":wahr,"Dienstag":falsch,"Mittwoch":wahr,"Donnerstag":falsch,"Freitag":wahr,"Samstag":falsch,"Sonntag\ ":true},

                    {"Start":600,"Dauer":120,"Montag":false,"Dienstag":true,"Mittwoch":false,"Donnerstag\ ":true,"freitag":false,"samstag":false,"sonntag":true}]}}}"}donnerstag":falsch,"freitag":true,"samstag":falsch,"sonntag":true},

                    {"start":600,"dauer":120," Montag":falsch,"Dienstag":wahr,"Mittwoch":falsch,"Donnerstag":wahr,"Freitag":falsch,"Samstag":falsch,"Sonntag\ ":Stimmt}]}}}"}donnerstag":falsch,"freitag":true,"samstag":falsch,"sonntag":true},

                    {"start":600,"dauer":120," Montag":falsch,"Dienstag":wahr,"Mittwoch":falsch,"Donnerstag":wahr,"Freitag":falsch,"Samstag":falsch,"Sonntag\ ":Stimmt}]}}}"}

                    dazu die Eingabemaske:

                    31-08-_2022_15-12-40.jpg

                    [onStateChange]: HTTP-Statusantwort: 400; headers: {"content-type":"application/vnd.api+json","
                    content-length":"435","connection":"close","date":"Mi, 31. Aug. 2022 13:03 :16 GMT","
                    x-amzn-requestid":"zzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz","
                    x-amzn-remapped-content-length":"435","x-amzn-remapped-connection" :"keep-alive","
                    x-amz-apigw-id":"XutTTFnQjoEFW0g=","x-amzn-remapped-date":"Mi, 31. August 2022 13:03:16 GMT","
                    x-cache ":"Fehler von cloudfront","via":"1.1 b88825ad151091557d336c3519215162.cloudfront.net (CloudFront)","
                    x-amz-cf-pop":"TXL52-C1","x-amz-cf-id": " r4Pv0Um_UADmOY2-N1yfx3SIGAGv12Kbd3RlfL9iJo8if3HOqad0Lg=="};
                    Daten: {"errors":[{"id":"yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy","status":"400","code":"
                    invalid.mower. schedule.format","title":"Ungültiges Mähplanformat","detail":"Ungültiges Planformat im Anfragetext.
                    Parsing-Nachricht: Mehr als zwei Aufgaben betreffen den Dienstag. Entstand beim Hinzufügen: MowerSchedule.
                    Task[start=600,duration=120,monday=false,tuesday=true,wednesday=false,thursday=true,friday=false,saturday=false,sunday=true,missionId=<null>] "}]}
                    Ungültiges Mähplanformat","detail":"Ungültiges Planformat im Anfragetext.
                    Parsing-Nachricht: Mehr als zwei Aufgaben betreffen den Dienstag. Entstand beim Hinzufügen:
                    MowerSchedule.Task[start=600,duration=120,monday=false,tuesday=true,wednesday=false,thursday=true,friday=false,saturday=false,sunday=true,missionId=<null>] "}]}
                    Ungültiges Mähplanformat","detail":"Ungültiges Planformat im Anfragetext.
                    Parsing-Nachricht: Mehr als zwei Aufgaben betreffen den Dienstag. Entstand beim Hinzufügen: MowerSchedule.
                    Task[start=600,duration=120,monday=false,tuesday=true,wednesday=false,thursday=true,friday=false,saturday=false,sunday=true,missionId=<null>] "}]}

                    A Offline
                    A Offline
                    ArnoD
                    schrieb am zuletzt editiert von ArnoD
                    #342

                    @ghifunk

                    Werden die anderen Objekt ID's vom Adapter befüllt oder bleiben alle leer?

                    Ich würde mal mit einem Timer anfangen und alle anderen löschen.
                    Prüfe mal, ob beim Ändern der Tage in der ersten Zeile in VIS auch die entsprechenden ID's vom Adapter geändert werden (...calendar.0.monday bis sundday), wenn ja, dann mal speichern und im LOG schauen, wie die Antwort von Husqvarna ist, ob die Werte übernommen wurden.
                    Versuch es mal nur mit einem Tag und prüfe, ob die Rückantwort von Husqvarna passt.

                    G 1 Antwort Letzte Antwort
                    0
                    • A ArnoD

                      @ghifunk

                      Werden die anderen Objekt ID's vom Adapter befüllt oder bleiben alle leer?

                      Ich würde mal mit einem Timer anfangen und alle anderen löschen.
                      Prüfe mal, ob beim Ändern der Tage in der ersten Zeile in VIS auch die entsprechenden ID's vom Adapter geändert werden (...calendar.0.monday bis sundday), wenn ja, dann mal speichern und im LOG schauen, wie die Antwort von Husqvarna ist, ob die Werte übernommen wurden.
                      Versuch es mal nur mit einem Tag und prüfe, ob die Rückantwort von Husqvarna passt.

                      G Offline
                      G Offline
                      ghifunk
                      schrieb am zuletzt editiert von
                      #343

                      @arnod
                      Hallo, habe jetzt nur den ersten timer stehen gelassen. Es erfolgt auch nur die entsprechende Ausgabe, welche zumindest die richtigen Werte beinhaltet. Es erfolgt aber wieder eine Fehlermeldung.
                      Ich weiß nicht was ich noch machen kann? Oder braucht der 415X ein anders Datenformat?
                      Vielleicht ist doch jemand hier der auch einen 415X hat und evtl. das gleiche Problem...

                      hier der entsprechende Log-Auszug:
                      "Content-Length":191},"method":"post","url":"https://api.amc.husqvarna.dev/v1/mowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/calendar","data":"{"data":{"type":"calendar","attributes":{"tasks":
                      [{"start":540,"duration":360,"monday":true,"tuesday":true,"wednesday":false,"thursday":true,"friday":false,"saturday":true,"sunday":false}]}}}"}

                      husqvarna-automower.0
                      2022-08-31 20:33:54.473 info This mower use missions and can not be updated by this endpoint Nothing set

                      [onStateChange]: HTTP status response: 400; headers: {"content-type":"application/vnd.api+json","content-length":"201","connection":"close","date":"Wed, 31 Aug 2022 18:33:54 GMT","
                      x-amzn-requestid":"yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy","x-amzn-remapped-content-length":"201","
                      x-amzn-remapped-connection":"keep-alive","
                      x-amz-apigw-id":"Xvdu7HYxDoEFmmw=","
                      x-amzn-remapped-date":"Wed, 31 Aug 2022 18:33:54 GMT","
                      x-cache":"Error from cloudfront","via":"1.1 969e7c67b62bdfae78f727a06e4512c2.cloudfront.net (CloudFront)","
                      x-amz-cf-pop":"TXL52-C1","x-amz-cf-id":"LPrXqGEaWud_7zyvx6nyYadgtVgNL2mEEuP0giMSJ73MA8MeNuzM7g=="}; data: {"errors":[{"id":"zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzz","
                      status":"400","code":"illegal.argument","title":"Illegal argument","detail":"This mower use missions and can not be updated by this endpoint"}]}

                      A 1 Antwort Letzte Antwort
                      0
                      • K Kaschi68

                        @thomas-braun

                        Alles erledigt, aber Werte ändern sich nur bei Neustart des Adapters. Selbst wenn der Mower unterwegs ist ändert sich nichts. Developer Acc hat ice987 für mich geprüft. Der ist iO angelegt und verknüpft.

                        Es handelt sich bei den Mower um den AM 415X mit neuster Firmware.

                        Im App werden die Daten ständig aktualisiert, im Adapter nur bei Neustart des Adapters.

                        js-controller ist jetzt 4.0.23 und node bei 16.

                        G Offline
                        G Offline
                        ghifunk
                        schrieb am zuletzt editiert von
                        #344

                        @kaschi68
                        Hallo Kaschi68,
                        ich habe gerade gelesen, daß du auch einen 415X hast. Ich habe ein Problem mit der Übertragung des Zeitplanes an den Mäher..
                        Hast du schon mal ausprobiert ob das bei dir funktioniert? Das würde mich sehr interessieren.
                        Gruß Gerhard

                        K 1 Antwort Letzte Antwort
                        0
                        • G ghifunk

                          @arnod
                          Hallo, habe jetzt nur den ersten timer stehen gelassen. Es erfolgt auch nur die entsprechende Ausgabe, welche zumindest die richtigen Werte beinhaltet. Es erfolgt aber wieder eine Fehlermeldung.
                          Ich weiß nicht was ich noch machen kann? Oder braucht der 415X ein anders Datenformat?
                          Vielleicht ist doch jemand hier der auch einen 415X hat und evtl. das gleiche Problem...

                          hier der entsprechende Log-Auszug:
                          "Content-Length":191},"method":"post","url":"https://api.amc.husqvarna.dev/v1/mowers/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/calendar","data":"{"data":{"type":"calendar","attributes":{"tasks":
                          [{"start":540,"duration":360,"monday":true,"tuesday":true,"wednesday":false,"thursday":true,"friday":false,"saturday":true,"sunday":false}]}}}"}

                          husqvarna-automower.0
                          2022-08-31 20:33:54.473 info This mower use missions and can not be updated by this endpoint Nothing set

                          [onStateChange]: HTTP status response: 400; headers: {"content-type":"application/vnd.api+json","content-length":"201","connection":"close","date":"Wed, 31 Aug 2022 18:33:54 GMT","
                          x-amzn-requestid":"yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy","x-amzn-remapped-content-length":"201","
                          x-amzn-remapped-connection":"keep-alive","
                          x-amz-apigw-id":"Xvdu7HYxDoEFmmw=","
                          x-amzn-remapped-date":"Wed, 31 Aug 2022 18:33:54 GMT","
                          x-cache":"Error from cloudfront","via":"1.1 969e7c67b62bdfae78f727a06e4512c2.cloudfront.net (CloudFront)","
                          x-amz-cf-pop":"TXL52-C1","x-amz-cf-id":"LPrXqGEaWud_7zyvx6nyYadgtVgNL2mEEuP0giMSJ73MA8MeNuzM7g=="}; data: {"errors":[{"id":"zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzz","
                          status":"400","code":"illegal.argument","title":"Illegal argument","detail":"This mower use missions and can not be updated by this endpoint"}]}

                          A Offline
                          A Offline
                          ArnoD
                          schrieb am zuletzt editiert von
                          #345

                          @ghifunk
                          Kann auch sein, dass dein Mäher das über die API nicht unterstützt.
                          Du kannst ja mal auf der Husqvarna API Seite mit deiner Mower ID direkt versuchen, ob das funktioniert.
                          Dazu einfach unter POST /mowers/{id}/calendar auf der Seite im Feld ID deine ID eintragen:
                          Husqvarna Connect API

                          1 Antwort Letzte Antwort
                          0
                          • G ghifunk

                            @kaschi68
                            Hallo Kaschi68,
                            ich habe gerade gelesen, daß du auch einen 415X hast. Ich habe ein Problem mit der Übertragung des Zeitplanes an den Mäher..
                            Hast du schon mal ausprobiert ob das bei dir funktioniert? Das würde mich sehr interessieren.
                            Gruß Gerhard

                            K Offline
                            K Offline
                            Kaschi68
                            schrieb am zuletzt editiert von
                            #346

                            @ghifunk
                            Hallo Gerhard, ich nutze den Mähplan aus dem Adapter nicht. Ich hatte ihn mal getestet, aber bei mir wurden die Mähzeiten (auch) nicht übertragen.
                            Dazu muss ich aber sagen das ich noch ein grösseres Problem hatte. Meine Objekte haben sich nur nach Adapter Neustart aktualisiert.
                            Heute den Fehler gefunden. Ist bisher nicht aufgefallen bei anderen Adaptern. Meine Ordner-Rechte müssen nicht gepasst haben. Nach dem Durchlaufen vom ioBroker Fixer wurden jetzt im Betrieb alle Objekte aktualisiert.
                            Den Mähplan organisiere ich anders, da mein Rolltor auf sein muss, bevor der Mower startet.
                            Ich starte und stoppe über den Adapter Zeitschaltuhr in VIS. Alles andere hat nicht geklappt, da es zu Verzögerungen mit den Statusmeldungen kommt und der Mower sonst das Rolltor einfährt.

                            Gruß und schönen Abend,
                            Kaschi

                            1 Antwort Letzte Antwort
                            0
                            • A ArnoD

                              @ghifunk sagte in Test Adapter Husqvarna Automower v0.3.x:

                              @arnod
                              Jetzt sehe ich gerade, daß bei mir im Ordner unter dem Ordner schedule nochmal einer mit "0" angelegt ist...!!30-08-_2022_21-45-24.jpg
                              Da passt doch glaube ich was nicht?

                              Das ist so in Ordnung.
                              Es sind vier Timer, die eingestellt werden können, von 0 bis 3.

                              L Offline
                              L Offline
                              lustig29
                              schrieb am zuletzt editiert von
                              #347

                              @arnod Ich bekomme bei irgendwie nur den Datenpunkt Distance from Charingstation angezeigt. Müssten das nicht mehr sein?

                              A 1 Antwort Letzte Antwort
                              0
                              • L lustig29

                                @arnod Ich bekomme bei irgendwie nur den Datenpunkt Distance from Charingstation angezeigt. Müssten das nicht mehr sein?

                                A Offline
                                A Offline
                                ArnoD
                                schrieb am zuletzt editiert von
                                #348

                                @lustig29
                                Welches Script verwendest du?
                                Das originale von Github oder das geänderte von mir?
                                Beim Script von Github wurden anscheinend alle Tageswerte entfernt, sei dem im Adapter die "Statistics" Werte hinzugefügt wurden.
                                Wenn ich mein Script optimiert habe, werde ich ice987987 mal fragen, ob er das auf seiner Github Seite verwenden will.

                                Bei meinem Script, das ich ursprünglich von ice987987 übernommen habe, werden noch folgende Objekt ID's angelegt:
                                drivenDistanceToday
                                drivenDistanceTotal
                                chargingTimeToday
                                mowingTimeToday
                                GoogleMapsLink

                                Es werden auch ID's für die Timer angelegt und die Urzeit umgerechnet für die Adapter ID's
                                .calendar.0.duration und .calendar.0.start.

                                Was noch nicht richtig funktioniert, ist die Berechnung der Ladezeiten und gefahrene Distanz.

                                L 1 Antwort Letzte Antwort
                                0
                                • A ArnoD

                                  @lustig29
                                  Welches Script verwendest du?
                                  Das originale von Github oder das geänderte von mir?
                                  Beim Script von Github wurden anscheinend alle Tageswerte entfernt, sei dem im Adapter die "Statistics" Werte hinzugefügt wurden.
                                  Wenn ich mein Script optimiert habe, werde ich ice987987 mal fragen, ob er das auf seiner Github Seite verwenden will.

                                  Bei meinem Script, das ich ursprünglich von ice987987 übernommen habe, werden noch folgende Objekt ID's angelegt:
                                  drivenDistanceToday
                                  drivenDistanceTotal
                                  chargingTimeToday
                                  mowingTimeToday
                                  GoogleMapsLink

                                  Es werden auch ID's für die Timer angelegt und die Urzeit umgerechnet für die Adapter ID's
                                  .calendar.0.duration und .calendar.0.start.

                                  Was noch nicht richtig funktioniert, ist die Berechnung der Ladezeiten und gefahrene Distanz.

                                  L Offline
                                  L Offline
                                  lustig29
                                  schrieb am zuletzt editiert von
                                  #349

                                  @arnod Kannst du mir dein Script eventuell zur Verfügung stellen?

                                  A 1 Antwort Letzte Antwort
                                  0
                                  • L lustig29

                                    @arnod Kannst du mir dein Script eventuell zur Verfügung stellen?

                                    A Offline
                                    A Offline
                                    ArnoD
                                    schrieb am zuletzt editiert von
                                    #350

                                    @lustig29
                                    Kein Problem:

                                    //***************************************************************************************************
                                    //++++++++++++++++++++++++++++++++++++++++  USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++++
                                    
                                    const instanz = '0_userdata.0.';                                // Hier kann die Instanz angepasst werden
                                    const PfadEbene1 = 'Husqvarna.';                                // Hier kann der Pfad angepasst werden
                                    const PfadEbene2 = ['Statistik.', 'Zeiten.', 'Allgemein.'];     // Hier kann der Pfad angepasst werden
                                    const Mower_ID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'         // Mower ID vom Husqvarna Adapter
                                    const sID_Regensensor = 'hm-rpc.3.1.RAINING'                    // Pfad Regensensor true = Regen
                                    
                                    //++++++++++++++++++++++++++++++++++++++ ENDE USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++
                                    //***************************************************************************************************
                                    
                                    
                                    let drivenDistanceToday,drivenDistanceTotal,drivenDistance = 0,chargingTimeToday,chargingTimeTotal,chargingTime = 0,mowingTimeToday,mowingTimeTotal,mowingTime = 0;
                                    let chargingStationLatitude = 0,chargingStationLongitude = 0,distanceFromChargingStation = 0;
                                    
                                    // create required folders and states
                                    CreateState();
                                    async function CreateState(){
                                        for (let i = 0; i <= 3; i++) {
                                            createStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_'+i, '00:00', false, {name: 'Schedule '+i+' Start Zeit ', desc: 'Start Zeit Timer '+i, role: 'value', type: 'string', read: true, write: true, def: '00:00', unit: 'Uhr'});
                                            createStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_'+i, '00:00', false, {name: 'Schedule '+i+' Ende Zeit ', desc: 'Ende Zeit Timer '+i, role: 'value', type: 'string', read: true, write: true, def: '00:00', unit: 'Uhr'});
                                        }
                                        await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday', 0, false, {name: 'Driven Distance Today', desc: 'Driven Distance Today', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'km'});
                                        await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal', 0, false, {name: 'Driven Distance Total', desc: 'Driven Distance Total', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'km'});
                                        await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday', 0, false, {name: 'Charging Time Today', desc: 'Charging Time Today', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'ms'});
                                        await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday', 0, false, {name: 'Mowing Time Total', desc: 'Mowing Time Total', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'ms'});
                                        await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'distanceFromChargingStation', 0, false, {name: 'Distance from charging station', desc: 'Distance from charging station', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'm'});
                                        await createStateAsync(instanz + PfadEbene1 + PfadEbene2[2] + 'GoogleMapsLink', '', false, {name: 'Link für Google Maps', desc: 'Link für Google Maps', role: 'value', type: 'string', read: true, write: true, def: ''});
                                        log('-==== Alle Ordner und State wurden erstellt ====-')
                                        drivenDistanceToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday')).val;
                                        drivenDistanceTotal = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal')).val;
                                        chargingTimeToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday')).val;
                                        mowingTimeToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday')).val;
                                    }
                                    //******************************************************* Adapter Husqvarna-Automower *******************************************************/
                                    const sID_Mower_activity = 'husqvarna-automower.0.' + Mower_ID + '.mower.activity'
                                    const sID_Latlong = 'husqvarna-automower.0.' + Mower_ID + '.positions.latlong'
                                    const sID_PARKUNTILNEXTSCHEDULE = 'husqvarna-automower.0.' + Mower_ID + '.ACTIONS.PARKUNTILNEXTSCHEDULE'
                                    const sID_MoverLatLong = 'husqvarna-automower.0.'+Mower_ID+'.positions.latlong'
                                    //************************************************************ Script Husqvarna *************************************************************/
                                    const sID_drivenDistanceToday = instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday';
                                    const sID_drivenDistanceTotal = instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal';
                                    const sID_distanceFromChargingStation = instanz + PfadEbene1 + PfadEbene2[0] + 'distanceFromChargingStation';
                                    const sID_chargingTimeToday = instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday';
                                    const sID_mowingTimeToday = instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday';
                                    const sID_GoogleLink = instanz + PfadEbene1 + PfadEbene2[2] + 'GoogleMapsLink';
                                    const sID_StartZeit_0 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_0';
                                    const sID_EndeZeit_0 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_0';
                                    const sID_StartZeit_1 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_1';
                                    const sID_EndeZeit_1 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_1';
                                    const sID_StartZeit_2 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_2';
                                    const sID_EndeZeit_2 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_2';
                                    const sID_StartZeit_3 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_3';
                                    const sID_EndeZeit_3 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_3';
                                    const arrayID_Zeiten =[sID_StartZeit_0,sID_EndeZeit_0,sID_StartZeit_1,sID_EndeZeit_1,sID_StartZeit_2,sID_EndeZeit_2,sID_StartZeit_3,sID_EndeZeit_3];
                                    
                                    
                                    // reset variables "[...]Today" every midnight
                                    schedule('0 0 * * *', function () {
                                        drivenDistanceToday = 0;
                                        setState(sID_drivenDistanceToday, drivenDistanceToday, true);
                                        chargingTimeToday = 0;
                                        setState(sID_chargingTimeToday, chargingTimeToday, true);
                                        mowingTimeToday = 0;
                                        setState(sID_mowingTimeToday, mowingTimeToday, true);
                                    });
                                    
                                    // get chargingTimeToday and chargingTimeTotal
                                    on({id: sID_Mower_activity, oldVal: 'CHARGING'}, function (obj) {
                                        chargingTime = obj.state.ts - obj.oldState.ts;
                                        log('chargingTime: ' + chargingTime/1000 + 's', 'debug');
                                        chargingTimeToday = chargingTime + chargingTimeToday;
                                        setState(sID_chargingTimeToday, chargingTimeToday, true);
                                    });
                                    
                                    // get mowingTimeToday and mowingTimeTotal
                                    on({id: sID_Mower_activity, oldVal: 'MOWING'}, function (obj) {
                                        mowingTime = obj.state.ts - obj.oldState.ts;
                                        log('mowingTime: ' + mowingTime/1000 + 's', 'debug');
                                        mowingTimeToday = mowingTime + mowingTimeToday;
                                        setState(sID_mowingTimeToday, mowingTimeToday, true);
                                    });
                                    
                                    // get distance from automower to charging station, drivenDistanceToday and drivenDistanceTotal
                                    on({id: sID_Latlong, change: 'ne'}, async function (obj) {
                                        if (getState(sID_Mower_activity).val === 'CHARGING' || getState(sID_Mower_activity).val === 'PARKED_IN_CS') {
                                            if (chargingStationLatitude !== 0 && chargingStationLongitude !== 0) {
                                                chargingStationLatitude = (Number(obj.state.val.split(';')[0]) + Number(chargingStationLatitude)) / 2;
                                                chargingStationLongitude = (Number(obj.state.val.split(';')[1]) + Number(chargingStationLongitude)) / 2;
                                            } else {
                                                chargingStationLatitude = obj.state.val.split(';')[0];
                                                chargingStationLongitude = obj.state.val.split(';')[1];
                                            }
                                        } 
                                        distanceFromChargingStation = 1000 * 6378.388 * Math.acos(Math.sin(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.sin(chargingStationLatitude * (Math.PI / 180)) + Math.cos(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.cos(chargingStationLatitude * (Math.PI / 180)) * Math.cos(chargingStationLongitude * (Math.PI / 180) - obj.state.val.split(';')[1] * (Math.PI / 180))); // reference: https://www.kompf.de/gps/distcalc.html
                                        log('distanceFromChargingStation: ' + distanceFromChargingStation + 'm', 'debug');
                                        await setStateAsync(sID_distanceFromChargingStation, distanceFromChargingStation, true);
                                        
                                        if (getState(sID_Mower_activity).val === 'MOWING' || getState(sID_Mower_activity).val === 'GOING_HOME' || getState(sID_Mower_activity).val === 'LEAVING') {
                                            drivenDistance = 6378.388 * Math.acos(Math.sin(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.sin(obj.oldState.val.split(';')[0] * (Math.PI / 180)) + Math.cos(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.cos(obj.oldState.val.split(';')[0] * (Math.PI / 180)) * Math.cos(obj.oldState.val.split(';')[1] * (Math.PI / 180) - obj.state.val.split(';')[1] * (Math.PI / 180))); // reference: https://www.kompf.de/gps/distcalc.html
                                            log('distanceDriven: ' + drivenDistance + 'km', 'debug');
                                            drivenDistanceToday = drivenDistanceToday + drivenDistance;
                                            drivenDistanceTotal = drivenDistanceTotal + drivenDistance;
                                            await setStateAsync(sID_drivenDistanceToday, round(drivenDistanceToday,2), true);
                                            await setStateAsync(sID_drivenDistanceTotal, round(drivenDistanceTotal,2), true);
                                        }
                                    });
                                    
                                    // Uhrzeiten für StartZeit und EndZeit in Minuten umrechnen und Adapter ID's ändern
                                    on({id: arrayID_Zeiten, change: 'ne'}, async function (obj) {
                                        let arryObj_ID = obj.id.split('.')
                                        let ScheduleNr = arryObj_ID[4].substring(arryObj_ID[4].length-1,arryObj_ID[4].length)
                                        let Dauer_min =0, Start_min=0;        
                                        let StartZeit=(await getStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_'+ScheduleNr)).val;
                                        let EndeZeit=(await getStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_'+ScheduleNr)).val;
                                        
                                        // Uhrzeit wird in Stunden und Minuten geteilt
                                        let arrayStartZeit = StartZeit.split(":");
                                        let arrayEndeZeit = EndeZeit.split(":");
                                        let StartZeit_Stunden = arrayStartZeit[0];   
                                        let EndeZeit_Stunden = arrayEndeZeit[0];   
                                        let StartZeit_Minuten = arrayStartZeit[1];   
                                        let EndeZeit_Minuten = arrayEndeZeit[1];   
                                        
                                        // Umrechnen der Uhrzeit in Minuten seit Tagesbeginn
                                        Start_min = (StartZeit_Stunden *60)+ parseInt(StartZeit_Minuten)
                                        // Umrechnen der Uhrzeit in Minuten von Start bis Ende Zeit (Dauer)
                                        Dauer_min = ((EndeZeit_Stunden *60)+ parseInt(EndeZeit_Minuten))-Start_min
                                        if(Dauer_min <0){Dauer_min = 0;}
                                        await setStateAsync('husqvarna-automower.0.' + Mower_ID + '.ACTIONS.schedule.'+ScheduleNr+'.start',Start_min)
                                        await setStateAsync('husqvarna-automower.0.' + Mower_ID + '.ACTIONS.schedule.'+ScheduleNr+'.duration',Dauer_min)
                                    });
                                    
                                    //Google Maps Link aktualisieren, wenn sich die Koordinaten ändern.
                                    on({id: sID_MoverLatLong, change: "ne"}, async function (obj) {
                                        let arryLatLong = getState(obj.id).val.split(';');
                                        let GoogleLink = 'https://www.google.com/maps/place/'+arryLatLong[0]+','+arryLatLong[1]+'/@?hl=de';
                                        await setStateAsync(sID_GoogleLink,GoogleLink);
                                    });
                                    
                                    
                                    // Bei Regen Parken bis zum nächsten Start
                                    on({id: sID_Regensensor, change: 'ne', val: true}, async function (obj) {
                                       await setStateAsync(sID_PARKUNTILNEXTSCHEDULE,true);
                                       log('-==== Es regnet, Mäher wird geparkt ====-','warn')
                                    });
                                    
                                    // Runden. Parameter float wert, int dez Anzahl der Stellen
                                    function round(wert, dez) {
                                        let umrechnungsfaktor = Math.pow(10,dez);
                                        return Math.round(wert * umrechnungsfaktor) / umrechnungsfaktor;
                                    } 
                                    
                                    
                                    L 2 Antworten Letzte Antwort
                                    0
                                    • A ArnoD

                                      @lustig29
                                      Kein Problem:

                                      //***************************************************************************************************
                                      //++++++++++++++++++++++++++++++++++++++++  USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++++
                                      
                                      const instanz = '0_userdata.0.';                                // Hier kann die Instanz angepasst werden
                                      const PfadEbene1 = 'Husqvarna.';                                // Hier kann der Pfad angepasst werden
                                      const PfadEbene2 = ['Statistik.', 'Zeiten.', 'Allgemein.'];     // Hier kann der Pfad angepasst werden
                                      const Mower_ID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'         // Mower ID vom Husqvarna Adapter
                                      const sID_Regensensor = 'hm-rpc.3.1.RAINING'                    // Pfad Regensensor true = Regen
                                      
                                      //++++++++++++++++++++++++++++++++++++++ ENDE USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++
                                      //***************************************************************************************************
                                      
                                      
                                      let drivenDistanceToday,drivenDistanceTotal,drivenDistance = 0,chargingTimeToday,chargingTimeTotal,chargingTime = 0,mowingTimeToday,mowingTimeTotal,mowingTime = 0;
                                      let chargingStationLatitude = 0,chargingStationLongitude = 0,distanceFromChargingStation = 0;
                                      
                                      // create required folders and states
                                      CreateState();
                                      async function CreateState(){
                                          for (let i = 0; i <= 3; i++) {
                                              createStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_'+i, '00:00', false, {name: 'Schedule '+i+' Start Zeit ', desc: 'Start Zeit Timer '+i, role: 'value', type: 'string', read: true, write: true, def: '00:00', unit: 'Uhr'});
                                              createStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_'+i, '00:00', false, {name: 'Schedule '+i+' Ende Zeit ', desc: 'Ende Zeit Timer '+i, role: 'value', type: 'string', read: true, write: true, def: '00:00', unit: 'Uhr'});
                                          }
                                          await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday', 0, false, {name: 'Driven Distance Today', desc: 'Driven Distance Today', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'km'});
                                          await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal', 0, false, {name: 'Driven Distance Total', desc: 'Driven Distance Total', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'km'});
                                          await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday', 0, false, {name: 'Charging Time Today', desc: 'Charging Time Today', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'ms'});
                                          await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday', 0, false, {name: 'Mowing Time Total', desc: 'Mowing Time Total', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'ms'});
                                          await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'distanceFromChargingStation', 0, false, {name: 'Distance from charging station', desc: 'Distance from charging station', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'm'});
                                          await createStateAsync(instanz + PfadEbene1 + PfadEbene2[2] + 'GoogleMapsLink', '', false, {name: 'Link für Google Maps', desc: 'Link für Google Maps', role: 'value', type: 'string', read: true, write: true, def: ''});
                                          log('-==== Alle Ordner und State wurden erstellt ====-')
                                          drivenDistanceToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday')).val;
                                          drivenDistanceTotal = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal')).val;
                                          chargingTimeToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday')).val;
                                          mowingTimeToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday')).val;
                                      }
                                      //******************************************************* Adapter Husqvarna-Automower *******************************************************/
                                      const sID_Mower_activity = 'husqvarna-automower.0.' + Mower_ID + '.mower.activity'
                                      const sID_Latlong = 'husqvarna-automower.0.' + Mower_ID + '.positions.latlong'
                                      const sID_PARKUNTILNEXTSCHEDULE = 'husqvarna-automower.0.' + Mower_ID + '.ACTIONS.PARKUNTILNEXTSCHEDULE'
                                      const sID_MoverLatLong = 'husqvarna-automower.0.'+Mower_ID+'.positions.latlong'
                                      //************************************************************ Script Husqvarna *************************************************************/
                                      const sID_drivenDistanceToday = instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday';
                                      const sID_drivenDistanceTotal = instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal';
                                      const sID_distanceFromChargingStation = instanz + PfadEbene1 + PfadEbene2[0] + 'distanceFromChargingStation';
                                      const sID_chargingTimeToday = instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday';
                                      const sID_mowingTimeToday = instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday';
                                      const sID_GoogleLink = instanz + PfadEbene1 + PfadEbene2[2] + 'GoogleMapsLink';
                                      const sID_StartZeit_0 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_0';
                                      const sID_EndeZeit_0 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_0';
                                      const sID_StartZeit_1 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_1';
                                      const sID_EndeZeit_1 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_1';
                                      const sID_StartZeit_2 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_2';
                                      const sID_EndeZeit_2 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_2';
                                      const sID_StartZeit_3 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_3';
                                      const sID_EndeZeit_3 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_3';
                                      const arrayID_Zeiten =[sID_StartZeit_0,sID_EndeZeit_0,sID_StartZeit_1,sID_EndeZeit_1,sID_StartZeit_2,sID_EndeZeit_2,sID_StartZeit_3,sID_EndeZeit_3];
                                      
                                      
                                      // reset variables "[...]Today" every midnight
                                      schedule('0 0 * * *', function () {
                                          drivenDistanceToday = 0;
                                          setState(sID_drivenDistanceToday, drivenDistanceToday, true);
                                          chargingTimeToday = 0;
                                          setState(sID_chargingTimeToday, chargingTimeToday, true);
                                          mowingTimeToday = 0;
                                          setState(sID_mowingTimeToday, mowingTimeToday, true);
                                      });
                                      
                                      // get chargingTimeToday and chargingTimeTotal
                                      on({id: sID_Mower_activity, oldVal: 'CHARGING'}, function (obj) {
                                          chargingTime = obj.state.ts - obj.oldState.ts;
                                          log('chargingTime: ' + chargingTime/1000 + 's', 'debug');
                                          chargingTimeToday = chargingTime + chargingTimeToday;
                                          setState(sID_chargingTimeToday, chargingTimeToday, true);
                                      });
                                      
                                      // get mowingTimeToday and mowingTimeTotal
                                      on({id: sID_Mower_activity, oldVal: 'MOWING'}, function (obj) {
                                          mowingTime = obj.state.ts - obj.oldState.ts;
                                          log('mowingTime: ' + mowingTime/1000 + 's', 'debug');
                                          mowingTimeToday = mowingTime + mowingTimeToday;
                                          setState(sID_mowingTimeToday, mowingTimeToday, true);
                                      });
                                      
                                      // get distance from automower to charging station, drivenDistanceToday and drivenDistanceTotal
                                      on({id: sID_Latlong, change: 'ne'}, async function (obj) {
                                          if (getState(sID_Mower_activity).val === 'CHARGING' || getState(sID_Mower_activity).val === 'PARKED_IN_CS') {
                                              if (chargingStationLatitude !== 0 && chargingStationLongitude !== 0) {
                                                  chargingStationLatitude = (Number(obj.state.val.split(';')[0]) + Number(chargingStationLatitude)) / 2;
                                                  chargingStationLongitude = (Number(obj.state.val.split(';')[1]) + Number(chargingStationLongitude)) / 2;
                                              } else {
                                                  chargingStationLatitude = obj.state.val.split(';')[0];
                                                  chargingStationLongitude = obj.state.val.split(';')[1];
                                              }
                                          } 
                                          distanceFromChargingStation = 1000 * 6378.388 * Math.acos(Math.sin(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.sin(chargingStationLatitude * (Math.PI / 180)) + Math.cos(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.cos(chargingStationLatitude * (Math.PI / 180)) * Math.cos(chargingStationLongitude * (Math.PI / 180) - obj.state.val.split(';')[1] * (Math.PI / 180))); // reference: https://www.kompf.de/gps/distcalc.html
                                          log('distanceFromChargingStation: ' + distanceFromChargingStation + 'm', 'debug');
                                          await setStateAsync(sID_distanceFromChargingStation, distanceFromChargingStation, true);
                                          
                                          if (getState(sID_Mower_activity).val === 'MOWING' || getState(sID_Mower_activity).val === 'GOING_HOME' || getState(sID_Mower_activity).val === 'LEAVING') {
                                              drivenDistance = 6378.388 * Math.acos(Math.sin(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.sin(obj.oldState.val.split(';')[0] * (Math.PI / 180)) + Math.cos(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.cos(obj.oldState.val.split(';')[0] * (Math.PI / 180)) * Math.cos(obj.oldState.val.split(';')[1] * (Math.PI / 180) - obj.state.val.split(';')[1] * (Math.PI / 180))); // reference: https://www.kompf.de/gps/distcalc.html
                                              log('distanceDriven: ' + drivenDistance + 'km', 'debug');
                                              drivenDistanceToday = drivenDistanceToday + drivenDistance;
                                              drivenDistanceTotal = drivenDistanceTotal + drivenDistance;
                                              await setStateAsync(sID_drivenDistanceToday, round(drivenDistanceToday,2), true);
                                              await setStateAsync(sID_drivenDistanceTotal, round(drivenDistanceTotal,2), true);
                                          }
                                      });
                                      
                                      // Uhrzeiten für StartZeit und EndZeit in Minuten umrechnen und Adapter ID's ändern
                                      on({id: arrayID_Zeiten, change: 'ne'}, async function (obj) {
                                          let arryObj_ID = obj.id.split('.')
                                          let ScheduleNr = arryObj_ID[4].substring(arryObj_ID[4].length-1,arryObj_ID[4].length)
                                          let Dauer_min =0, Start_min=0;        
                                          let StartZeit=(await getStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_'+ScheduleNr)).val;
                                          let EndeZeit=(await getStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_'+ScheduleNr)).val;
                                          
                                          // Uhrzeit wird in Stunden und Minuten geteilt
                                          let arrayStartZeit = StartZeit.split(":");
                                          let arrayEndeZeit = EndeZeit.split(":");
                                          let StartZeit_Stunden = arrayStartZeit[0];   
                                          let EndeZeit_Stunden = arrayEndeZeit[0];   
                                          let StartZeit_Minuten = arrayStartZeit[1];   
                                          let EndeZeit_Minuten = arrayEndeZeit[1];   
                                          
                                          // Umrechnen der Uhrzeit in Minuten seit Tagesbeginn
                                          Start_min = (StartZeit_Stunden *60)+ parseInt(StartZeit_Minuten)
                                          // Umrechnen der Uhrzeit in Minuten von Start bis Ende Zeit (Dauer)
                                          Dauer_min = ((EndeZeit_Stunden *60)+ parseInt(EndeZeit_Minuten))-Start_min
                                          if(Dauer_min <0){Dauer_min = 0;}
                                          await setStateAsync('husqvarna-automower.0.' + Mower_ID + '.ACTIONS.schedule.'+ScheduleNr+'.start',Start_min)
                                          await setStateAsync('husqvarna-automower.0.' + Mower_ID + '.ACTIONS.schedule.'+ScheduleNr+'.duration',Dauer_min)
                                      });
                                      
                                      //Google Maps Link aktualisieren, wenn sich die Koordinaten ändern.
                                      on({id: sID_MoverLatLong, change: "ne"}, async function (obj) {
                                          let arryLatLong = getState(obj.id).val.split(';');
                                          let GoogleLink = 'https://www.google.com/maps/place/'+arryLatLong[0]+','+arryLatLong[1]+'/@?hl=de';
                                          await setStateAsync(sID_GoogleLink,GoogleLink);
                                      });
                                      
                                      
                                      // Bei Regen Parken bis zum nächsten Start
                                      on({id: sID_Regensensor, change: 'ne', val: true}, async function (obj) {
                                         await setStateAsync(sID_PARKUNTILNEXTSCHEDULE,true);
                                         log('-==== Es regnet, Mäher wird geparkt ====-','warn')
                                      });
                                      
                                      // Runden. Parameter float wert, int dez Anzahl der Stellen
                                      function round(wert, dez) {
                                          let umrechnungsfaktor = Math.pow(10,dez);
                                          return Math.round(wert * umrechnungsfaktor) / umrechnungsfaktor;
                                      } 
                                      
                                      
                                      L Offline
                                      L Offline
                                      lustig29
                                      schrieb am zuletzt editiert von
                                      #351

                                      @arnod Super, vielen Dank 👍🏻

                                      1 Antwort Letzte Antwort
                                      0
                                      • A ArnoD

                                        @lustig29
                                        Kein Problem:

                                        //***************************************************************************************************
                                        //++++++++++++++++++++++++++++++++++++++++  USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++++
                                        
                                        const instanz = '0_userdata.0.';                                // Hier kann die Instanz angepasst werden
                                        const PfadEbene1 = 'Husqvarna.';                                // Hier kann der Pfad angepasst werden
                                        const PfadEbene2 = ['Statistik.', 'Zeiten.', 'Allgemein.'];     // Hier kann der Pfad angepasst werden
                                        const Mower_ID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'         // Mower ID vom Husqvarna Adapter
                                        const sID_Regensensor = 'hm-rpc.3.1.RAINING'                    // Pfad Regensensor true = Regen
                                        
                                        //++++++++++++++++++++++++++++++++++++++ ENDE USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++
                                        //***************************************************************************************************
                                        
                                        
                                        let drivenDistanceToday,drivenDistanceTotal,drivenDistance = 0,chargingTimeToday,chargingTimeTotal,chargingTime = 0,mowingTimeToday,mowingTimeTotal,mowingTime = 0;
                                        let chargingStationLatitude = 0,chargingStationLongitude = 0,distanceFromChargingStation = 0;
                                        
                                        // create required folders and states
                                        CreateState();
                                        async function CreateState(){
                                            for (let i = 0; i <= 3; i++) {
                                                createStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_'+i, '00:00', false, {name: 'Schedule '+i+' Start Zeit ', desc: 'Start Zeit Timer '+i, role: 'value', type: 'string', read: true, write: true, def: '00:00', unit: 'Uhr'});
                                                createStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_'+i, '00:00', false, {name: 'Schedule '+i+' Ende Zeit ', desc: 'Ende Zeit Timer '+i, role: 'value', type: 'string', read: true, write: true, def: '00:00', unit: 'Uhr'});
                                            }
                                            await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday', 0, false, {name: 'Driven Distance Today', desc: 'Driven Distance Today', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'km'});
                                            await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal', 0, false, {name: 'Driven Distance Total', desc: 'Driven Distance Total', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'km'});
                                            await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday', 0, false, {name: 'Charging Time Today', desc: 'Charging Time Today', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'ms'});
                                            await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday', 0, false, {name: 'Mowing Time Total', desc: 'Mowing Time Total', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'ms'});
                                            await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'distanceFromChargingStation', 0, false, {name: 'Distance from charging station', desc: 'Distance from charging station', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'm'});
                                            await createStateAsync(instanz + PfadEbene1 + PfadEbene2[2] + 'GoogleMapsLink', '', false, {name: 'Link für Google Maps', desc: 'Link für Google Maps', role: 'value', type: 'string', read: true, write: true, def: ''});
                                            log('-==== Alle Ordner und State wurden erstellt ====-')
                                            drivenDistanceToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday')).val;
                                            drivenDistanceTotal = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal')).val;
                                            chargingTimeToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday')).val;
                                            mowingTimeToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday')).val;
                                        }
                                        //******************************************************* Adapter Husqvarna-Automower *******************************************************/
                                        const sID_Mower_activity = 'husqvarna-automower.0.' + Mower_ID + '.mower.activity'
                                        const sID_Latlong = 'husqvarna-automower.0.' + Mower_ID + '.positions.latlong'
                                        const sID_PARKUNTILNEXTSCHEDULE = 'husqvarna-automower.0.' + Mower_ID + '.ACTIONS.PARKUNTILNEXTSCHEDULE'
                                        const sID_MoverLatLong = 'husqvarna-automower.0.'+Mower_ID+'.positions.latlong'
                                        //************************************************************ Script Husqvarna *************************************************************/
                                        const sID_drivenDistanceToday = instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday';
                                        const sID_drivenDistanceTotal = instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal';
                                        const sID_distanceFromChargingStation = instanz + PfadEbene1 + PfadEbene2[0] + 'distanceFromChargingStation';
                                        const sID_chargingTimeToday = instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday';
                                        const sID_mowingTimeToday = instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday';
                                        const sID_GoogleLink = instanz + PfadEbene1 + PfadEbene2[2] + 'GoogleMapsLink';
                                        const sID_StartZeit_0 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_0';
                                        const sID_EndeZeit_0 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_0';
                                        const sID_StartZeit_1 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_1';
                                        const sID_EndeZeit_1 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_1';
                                        const sID_StartZeit_2 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_2';
                                        const sID_EndeZeit_2 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_2';
                                        const sID_StartZeit_3 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_3';
                                        const sID_EndeZeit_3 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_3';
                                        const arrayID_Zeiten =[sID_StartZeit_0,sID_EndeZeit_0,sID_StartZeit_1,sID_EndeZeit_1,sID_StartZeit_2,sID_EndeZeit_2,sID_StartZeit_3,sID_EndeZeit_3];
                                        
                                        
                                        // reset variables "[...]Today" every midnight
                                        schedule('0 0 * * *', function () {
                                            drivenDistanceToday = 0;
                                            setState(sID_drivenDistanceToday, drivenDistanceToday, true);
                                            chargingTimeToday = 0;
                                            setState(sID_chargingTimeToday, chargingTimeToday, true);
                                            mowingTimeToday = 0;
                                            setState(sID_mowingTimeToday, mowingTimeToday, true);
                                        });
                                        
                                        // get chargingTimeToday and chargingTimeTotal
                                        on({id: sID_Mower_activity, oldVal: 'CHARGING'}, function (obj) {
                                            chargingTime = obj.state.ts - obj.oldState.ts;
                                            log('chargingTime: ' + chargingTime/1000 + 's', 'debug');
                                            chargingTimeToday = chargingTime + chargingTimeToday;
                                            setState(sID_chargingTimeToday, chargingTimeToday, true);
                                        });
                                        
                                        // get mowingTimeToday and mowingTimeTotal
                                        on({id: sID_Mower_activity, oldVal: 'MOWING'}, function (obj) {
                                            mowingTime = obj.state.ts - obj.oldState.ts;
                                            log('mowingTime: ' + mowingTime/1000 + 's', 'debug');
                                            mowingTimeToday = mowingTime + mowingTimeToday;
                                            setState(sID_mowingTimeToday, mowingTimeToday, true);
                                        });
                                        
                                        // get distance from automower to charging station, drivenDistanceToday and drivenDistanceTotal
                                        on({id: sID_Latlong, change: 'ne'}, async function (obj) {
                                            if (getState(sID_Mower_activity).val === 'CHARGING' || getState(sID_Mower_activity).val === 'PARKED_IN_CS') {
                                                if (chargingStationLatitude !== 0 && chargingStationLongitude !== 0) {
                                                    chargingStationLatitude = (Number(obj.state.val.split(';')[0]) + Number(chargingStationLatitude)) / 2;
                                                    chargingStationLongitude = (Number(obj.state.val.split(';')[1]) + Number(chargingStationLongitude)) / 2;
                                                } else {
                                                    chargingStationLatitude = obj.state.val.split(';')[0];
                                                    chargingStationLongitude = obj.state.val.split(';')[1];
                                                }
                                            } 
                                            distanceFromChargingStation = 1000 * 6378.388 * Math.acos(Math.sin(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.sin(chargingStationLatitude * (Math.PI / 180)) + Math.cos(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.cos(chargingStationLatitude * (Math.PI / 180)) * Math.cos(chargingStationLongitude * (Math.PI / 180) - obj.state.val.split(';')[1] * (Math.PI / 180))); // reference: https://www.kompf.de/gps/distcalc.html
                                            log('distanceFromChargingStation: ' + distanceFromChargingStation + 'm', 'debug');
                                            await setStateAsync(sID_distanceFromChargingStation, distanceFromChargingStation, true);
                                            
                                            if (getState(sID_Mower_activity).val === 'MOWING' || getState(sID_Mower_activity).val === 'GOING_HOME' || getState(sID_Mower_activity).val === 'LEAVING') {
                                                drivenDistance = 6378.388 * Math.acos(Math.sin(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.sin(obj.oldState.val.split(';')[0] * (Math.PI / 180)) + Math.cos(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.cos(obj.oldState.val.split(';')[0] * (Math.PI / 180)) * Math.cos(obj.oldState.val.split(';')[1] * (Math.PI / 180) - obj.state.val.split(';')[1] * (Math.PI / 180))); // reference: https://www.kompf.de/gps/distcalc.html
                                                log('distanceDriven: ' + drivenDistance + 'km', 'debug');
                                                drivenDistanceToday = drivenDistanceToday + drivenDistance;
                                                drivenDistanceTotal = drivenDistanceTotal + drivenDistance;
                                                await setStateAsync(sID_drivenDistanceToday, round(drivenDistanceToday,2), true);
                                                await setStateAsync(sID_drivenDistanceTotal, round(drivenDistanceTotal,2), true);
                                            }
                                        });
                                        
                                        // Uhrzeiten für StartZeit und EndZeit in Minuten umrechnen und Adapter ID's ändern
                                        on({id: arrayID_Zeiten, change: 'ne'}, async function (obj) {
                                            let arryObj_ID = obj.id.split('.')
                                            let ScheduleNr = arryObj_ID[4].substring(arryObj_ID[4].length-1,arryObj_ID[4].length)
                                            let Dauer_min =0, Start_min=0;        
                                            let StartZeit=(await getStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_'+ScheduleNr)).val;
                                            let EndeZeit=(await getStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_'+ScheduleNr)).val;
                                            
                                            // Uhrzeit wird in Stunden und Minuten geteilt
                                            let arrayStartZeit = StartZeit.split(":");
                                            let arrayEndeZeit = EndeZeit.split(":");
                                            let StartZeit_Stunden = arrayStartZeit[0];   
                                            let EndeZeit_Stunden = arrayEndeZeit[0];   
                                            let StartZeit_Minuten = arrayStartZeit[1];   
                                            let EndeZeit_Minuten = arrayEndeZeit[1];   
                                            
                                            // Umrechnen der Uhrzeit in Minuten seit Tagesbeginn
                                            Start_min = (StartZeit_Stunden *60)+ parseInt(StartZeit_Minuten)
                                            // Umrechnen der Uhrzeit in Minuten von Start bis Ende Zeit (Dauer)
                                            Dauer_min = ((EndeZeit_Stunden *60)+ parseInt(EndeZeit_Minuten))-Start_min
                                            if(Dauer_min <0){Dauer_min = 0;}
                                            await setStateAsync('husqvarna-automower.0.' + Mower_ID + '.ACTIONS.schedule.'+ScheduleNr+'.start',Start_min)
                                            await setStateAsync('husqvarna-automower.0.' + Mower_ID + '.ACTIONS.schedule.'+ScheduleNr+'.duration',Dauer_min)
                                        });
                                        
                                        //Google Maps Link aktualisieren, wenn sich die Koordinaten ändern.
                                        on({id: sID_MoverLatLong, change: "ne"}, async function (obj) {
                                            let arryLatLong = getState(obj.id).val.split(';');
                                            let GoogleLink = 'https://www.google.com/maps/place/'+arryLatLong[0]+','+arryLatLong[1]+'/@?hl=de';
                                            await setStateAsync(sID_GoogleLink,GoogleLink);
                                        });
                                        
                                        
                                        // Bei Regen Parken bis zum nächsten Start
                                        on({id: sID_Regensensor, change: 'ne', val: true}, async function (obj) {
                                           await setStateAsync(sID_PARKUNTILNEXTSCHEDULE,true);
                                           log('-==== Es regnet, Mäher wird geparkt ====-','warn')
                                        });
                                        
                                        // Runden. Parameter float wert, int dez Anzahl der Stellen
                                        function round(wert, dez) {
                                            let umrechnungsfaktor = Math.pow(10,dez);
                                            return Math.round(wert * umrechnungsfaktor) / umrechnungsfaktor;
                                        } 
                                        
                                        
                                        L Offline
                                        L Offline
                                        lustig29
                                        schrieb am zuletzt editiert von
                                        #352

                                        @arnod said in Test Adapter Husqvarna Automower v0.3.x:

                                                                                                                                                                    //***************************************************************************************************                                                                                                                                                                            //++++++++++++++++++++++++++++++++++++++++  USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++++                                                                                                                                                                                                                                                                                                                                                         const instanz = '0_userdata.0.';                                // Hier kann die Instanz angepasst werden                                                                                                                                                                            const PfadEbene1 = 'Husqvarna.';                                // Hier kann der Pfad angepasst werden                                                                                                                                                                            const PfadEbene2 = ['Statistik.', 'Zeiten.', 'Allgemein.'];     // Hier kann der Pfad angepasst werden                                                                                                                                                                            const Mower_ID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'         // Mower ID vom Husqvarna Adapter                                                                                                                                                                            const sID_Regensensor = 'hm-rpc.3.1.RAINING'                    // Pfad Regensensor true = Regen                                                                                                                                                                                                                                                                                                                                                         //++++++++++++++++++++++++++++++++++++++ ENDE USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++                                                                                                                                                                            //***************************************************************************************************                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      let drivenDistanceToday,drivenDistanceTotal,drivenDistance = 0,chargingTimeToday,chargingTimeTotal,chargingTime = 0,mowingTimeToday,mowingTimeTotal,mowingTime = 0;                                                                                                                                                                            let chargingStationLatitude = 0,chargingStationLongitude = 0,distanceFromChargingStation = 0;                                                                                                                                                                                                                                                                                                                                                         // create required folders and states                                                                                                                                                                            CreateState();                                                                                                                                                                            async function CreateState(){                                                                                                                                                                                for (let i = 0; i <= 3; i++) {                                                                                                                                                                                    createStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_'+i, '00:00', false, {name: 'Schedule '+i+' Start Zeit ', desc: 'Start Zeit Timer '+i, role: 'value', type: 'string', read: true, write: true, def: '00:00', unit: 'Uhr'});                                                                                                                                                                                    createStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_'+i, '00:00', false, {name: 'Schedule '+i+' Ende Zeit ', desc: 'Ende Zeit Timer '+i, role: 'value', type: 'string', read: true, write: true, def: '00:00', unit: 'Uhr'});                                                                                                                                                                                }                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday', 0, false, {name: 'Driven Distance Today', desc: 'Driven Distance Today', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'km'});                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal', 0, false, {name: 'Driven Distance Total', desc: 'Driven Distance Total', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'km'});                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday', 0, false, {name: 'Charging Time Today', desc: 'Charging Time Today', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'ms'});                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday', 0, false, {name: 'Mowing Time Total', desc: 'Mowing Time Total', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'ms'});                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'distanceFromChargingStation', 0, false, {name: 'Distance from charging station', desc: 'Distance from charging station', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'm'});                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[2] + 'GoogleMapsLink', '', false, {name: 'Link für Google Maps', desc: 'Link für Google Maps', role: 'value', type: 'string', read: true, write: true, def: ''});                                                                                                                                                                                log('-==== Alle Ordner und State wurden erstellt ====-')                                                                                                                                                                                drivenDistanceToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday')).val;                                                                                                                                                                                drivenDistanceTotal = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal')).val;                                                                                                                                                                                chargingTimeToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday')).val;                                                                                                                                                                                mowingTimeToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday')).val;                                                                                                                                                                            }                                                                                                                                                                            //******************************************************* Adapter Husqvarna-Automower *******************************************************/                                                                                                                                                                            const sID_Mower_activity = 'husqvarna-automower.0.' + Mower_ID + '.mower.activity'                                                                                                                                                                            const sID_Latlong = 'husqvarna-automower.0.' + Mower_ID + '.positions.latlong'                                                                                                                                                                            const sID_PARKUNTILNEXTSCHEDULE = 'husqvarna-automower.0.' + Mower_ID + '.ACTIONS.PARKUNTILNEXTSCHEDULE'                                                                                                                                                                            const sID_MoverLatLong = 'husqvarna-automower.0.'+Mower_ID+'.positions.latlong'                                                                                                                                                                            //************************************************************ Script Husqvarna *************************************************************/                                                                                                                                                                            const sID_drivenDistanceToday = instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday';                                                                                                                                                                            const sID_drivenDistanceTotal = instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal';                                                                                                                                                                            const sID_distanceFromChargingStation = instanz + PfadEbene1 + PfadEbene2[0] + 'distanceFromChargingStation';                                                                                                                                                                            const sID_chargingTimeToday = instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday';                                                                                                                                                                            const sID_mowingTimeToday = instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday';                                                                                                                                                                            const sID_GoogleLink = instanz + PfadEbene1 + PfadEbene2[2] + 'GoogleMapsLink';                                                                                                                                                                            const sID_StartZeit_0 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_0';                                                                                                                                                                            const sID_EndeZeit_0 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_0';                                                                                                                                                                            const sID_StartZeit_1 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_1';                                                                                                                                                                            const sID_EndeZeit_1 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_1';                                                                                                                                                                            const sID_StartZeit_2 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_2';                                                                                                                                                                            const sID_EndeZeit_2 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_2';                                                                                                                                                                            const sID_StartZeit_3 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_3';                                                                                                                                                                            const sID_EndeZeit_3 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_3';                                                                                                                                                                            const arrayID_Zeiten =[sID_StartZeit_0,sID_EndeZeit_0,sID_StartZeit_1,sID_EndeZeit_1,sID_StartZeit_2,sID_EndeZeit_2,sID_StartZeit_3,sID_EndeZeit_3];                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // reset variables "[...]Today" every midnight                                                                                                                                                                            schedule('0 0 * * *', function () {                                                                                                                                                                                drivenDistanceToday = 0;                                                                                                                                                                                setState(sID_drivenDistanceToday, drivenDistanceToday, true);                                                                                                                                                                                chargingTimeToday = 0;                                                                                                                                                                                setState(sID_chargingTimeToday, chargingTimeToday, true);                                                                                                                                                                                mowingTimeToday = 0;                                                                                                                                                                                setState(sID_mowingTimeToday, mowingTimeToday, true);                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         // get chargingTimeToday and chargingTimeTotal                                                                                                                                                                            on({id: sID_Mower_activity, oldVal: 'CHARGING'}, function (obj) {                                                                                                                                                                                chargingTime = obj.state.ts - obj.oldState.ts;                                                                                                                                                                                log('chargingTime: ' + chargingTime/1000 + 's', 'debug');                                                                                                                                                                                chargingTimeToday = chargingTime + chargingTimeToday;                                                                                                                                                                                setState(sID_chargingTimeToday, chargingTimeToday, true);                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         // get mowingTimeToday and mowingTimeTotal                                                                                                                                                                            on({id: sID_Mower_activity, oldVal: 'MOWING'}, function (obj) {                                                                                                                                                                                mowingTime = obj.state.ts - obj.oldState.ts;                                                                                                                                                                                log('mowingTime: ' + mowingTime/1000 + 's', 'debug');                                                                                                                                                                                mowingTimeToday = mowingTime + mowingTimeToday;                                                                                                                                                                                setState(sID_mowingTimeToday, mowingTimeToday, true);                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         // get distance from automower to charging station, drivenDistanceToday and drivenDistanceTotal                                                                                                                                                                            on({id: sID_Latlong, change: 'ne'}, async function (obj) {                                                                                                                                                                                if (getState(sID_Mower_activity).val === 'CHARGING' || getState(sID_Mower_activity).val === 'PARKED_IN_CS') {                                                                                                                                                                                    if (chargingStationLatitude !== 0 && chargingStationLongitude !== 0) {                                                                                                                                                                                        chargingStationLatitude = (Number(obj.state.val.split(';')[0]) + Number(chargingStationLatitude)) / 2;                                                                                                                                                                                        chargingStationLongitude = (Number(obj.state.val.split(';')[1]) + Number(chargingStationLongitude)) / 2;                                                                                                                                                                                    } else {                                                                                                                                                                                        chargingStationLatitude = obj.state.val.split(';')[0];                                                                                                                                                                                        chargingStationLongitude = obj.state.val.split(';')[1];                                                                                                                                                                                    }                                                                                                                                                                                }                                                                                                                                                                                 distanceFromChargingStation = 1000 * 6378.388 * Math.acos(Math.sin(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.sin(chargingStationLatitude * (Math.PI / 180)) + Math.cos(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.cos(chargingStationLatitude * (Math.PI / 180)) * Math.cos(chargingStationLongitude * (Math.PI / 180) - obj.state.val.split(';')[1] * (Math.PI / 180))); // reference: https://www.kompf.de/gps/distcalc.html                                                                                                                                                                                log('distanceFromChargingStation: ' + distanceFromChargingStation + 'm', 'debug');                                                                                                                                                                                await setStateAsync(sID_distanceFromChargingStation, distanceFromChargingStation, true);                                                                                                                                                                                                                                                                                                                                                                if (getState(sID_Mower_activity).val === 'MOWING' || getState(sID_Mower_activity).val === 'GOING_HOME' || getState(sID_Mower_activity).val === 'LEAVING') {                                                                                                                                                                                    drivenDistance = 6378.388 * Math.acos(Math.sin(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.sin(obj.oldState.val.split(';')[0] * (Math.PI / 180)) + Math.cos(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.cos(obj.oldState.val.split(';')[0] * (Math.PI / 180)) * Math.cos(obj.oldState.val.split(';')[1] * (Math.PI / 180) - obj.state.val.split(';')[1] * (Math.PI / 180))); // reference: https://www.kompf.de/gps/distcalc.html                                                                                                                                                                                    log('distanceDriven: ' + drivenDistance + 'km', 'debug');                                                                                                                                                                                    drivenDistanceToday = drivenDistanceToday + drivenDistance;                                                                                                                                                                                    drivenDistanceTotal = drivenDistanceTotal + drivenDistance;                                                                                                                                                                                    await setStateAsync(sID_drivenDistanceToday, round(drivenDistanceToday,2), true);                                                                                                                                                                                    await setStateAsync(sID_drivenDistanceTotal, round(drivenDistanceTotal,2), true);                                                                                                                                                                                }                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         // Uhrzeiten für StartZeit und EndZeit in Minuten umrechnen und Adapter ID's ändern                                                                                                                                                                            on({id: arrayID_Zeiten, change: 'ne'}, async function (obj) {                                                                                                                                                                                let arryObj_ID = obj.id.split('.')                                                                                                                                                                                let ScheduleNr = arryObj_ID[4].substring(arryObj_ID[4].length-1,arryObj_ID[4].length)                                                                                                                                                                                let Dauer_min =0, Start_min=0;                                                                                                                                                                                        let StartZeit=(await getStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_'+ScheduleNr)).val;                                                                                                                                                                                let EndeZeit=(await getStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_'+ScheduleNr)).val;                                                                                                                                                                                                                                                                                                                                                                // Uhrzeit wird in Stunden und Minuten geteilt                                                                                                                                                                                let arrayStartZeit = StartZeit.split(":");                                                                                                                                                                                let arrayEndeZeit = EndeZeit.split(":");                                                                                                                                                                                let StartZeit_Stunden = arrayStartZeit[0];                                                                                                                                                                                   let EndeZeit_Stunden = arrayEndeZeit[0];                                                                                                                                                                                   let StartZeit_Minuten = arrayStartZeit[1];                                                                                                                                                                                   let EndeZeit_Minuten = arrayEndeZeit[1];                                                                                                                                                                                                                                                                                                                                                                   // Umrechnen der Uhrzeit in Minuten seit Tagesbeginn                                                                                                                                                                                Start_min = (StartZeit_Stunden *60)+ parseInt(StartZeit_Minuten)                                                                                                                                                                                // Umrechnen der Uhrzeit in Minuten von Start bis Ende Zeit (Dauer)                                                                                                                                                                                Dauer_min = ((EndeZeit_Stunden *60)+ parseInt(EndeZeit_Minuten))-Start_min                                                                                                                                                                                if(Dauer_min <0){Dauer_min = 0;}                                                                                                                                                                                await setStateAsync('husqvarna-automower.0.' + Mower_ID + '.ACTIONS.schedule.'+ScheduleNr+'.start',Start_min)                                                                                                                                                                                await setStateAsync('husqvarna-automower.0.' + Mower_ID + '.ACTIONS.schedule.'+ScheduleNr+'.duration',Dauer_min)                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         //Google Maps Link aktualisieren, wenn sich die Koordinaten ändern.                                                                                                                                                                            on({id: sID_MoverLatLong, change: "ne"}, async function (obj) {                                                                                                                                                                                let arryLatLong = getState(obj.id).val.split(';');                                                                                                                                                                                let GoogleLink = 'https://www.google.com/maps/place/'+arryLatLong[0]+','+arryLatLong[1]+'/@?hl=de';                                                                                                                                                                                await setStateAsync(sID_GoogleLink,GoogleLink);                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // Bei Regen Parken bis zum nächsten Start                                                                                                                                                                            on({id: sID_Regensensor, change: 'ne', val: true}, async function (obj) {                                                                                                                                                                               await setStateAsync(sID_PARKUNTILNEXTSCHEDULE,true);                                                                                                                                                                               log('-==== Es regnet, Mäher wird geparkt ====-','warn')                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         // Runden. Parameter float wert, int dez Anzahl der Stellen                                                                                                                                                                            function round(wert, dez) {                                                                                                                                                                                let umrechnungsfaktor = Math.pow(10,dez);                                                                                                                                                                                return Math.round(wert * umrechnungsfaktor) / umrechnungsfaktor;                                                                                                                                                                            }                                                                                                                                                                                                                          
                                        

                                        Nochmal danke für dein Skript. Hat auch funktioniert. Datenpunkte wurden agelegt. Aber leider sind sie nicht beschrieben wurden. Muss ich in dem Skript ausser der Mover Id noch was eingeben?

                                        A 1 Antwort Letzte Antwort
                                        0
                                        • L lustig29

                                          @arnod said in Test Adapter Husqvarna Automower v0.3.x:

                                                                                                                                                                      //***************************************************************************************************                                                                                                                                                                            //++++++++++++++++++++++++++++++++++++++++  USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++++                                                                                                                                                                                                                                                                                                                                                         const instanz = '0_userdata.0.';                                // Hier kann die Instanz angepasst werden                                                                                                                                                                            const PfadEbene1 = 'Husqvarna.';                                // Hier kann der Pfad angepasst werden                                                                                                                                                                            const PfadEbene2 = ['Statistik.', 'Zeiten.', 'Allgemein.'];     // Hier kann der Pfad angepasst werden                                                                                                                                                                            const Mower_ID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'         // Mower ID vom Husqvarna Adapter                                                                                                                                                                            const sID_Regensensor = 'hm-rpc.3.1.RAINING'                    // Pfad Regensensor true = Regen                                                                                                                                                                                                                                                                                                                                                         //++++++++++++++++++++++++++++++++++++++ ENDE USER ANPASSUNGEN ++++++++++++++++++++++++++++++++++++++                                                                                                                                                                            //***************************************************************************************************                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      let drivenDistanceToday,drivenDistanceTotal,drivenDistance = 0,chargingTimeToday,chargingTimeTotal,chargingTime = 0,mowingTimeToday,mowingTimeTotal,mowingTime = 0;                                                                                                                                                                            let chargingStationLatitude = 0,chargingStationLongitude = 0,distanceFromChargingStation = 0;                                                                                                                                                                                                                                                                                                                                                         // create required folders and states                                                                                                                                                                            CreateState();                                                                                                                                                                            async function CreateState(){                                                                                                                                                                                for (let i = 0; i <= 3; i++) {                                                                                                                                                                                    createStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_'+i, '00:00', false, {name: 'Schedule '+i+' Start Zeit ', desc: 'Start Zeit Timer '+i, role: 'value', type: 'string', read: true, write: true, def: '00:00', unit: 'Uhr'});                                                                                                                                                                                    createStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_'+i, '00:00', false, {name: 'Schedule '+i+' Ende Zeit ', desc: 'Ende Zeit Timer '+i, role: 'value', type: 'string', read: true, write: true, def: '00:00', unit: 'Uhr'});                                                                                                                                                                                }                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday', 0, false, {name: 'Driven Distance Today', desc: 'Driven Distance Today', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'km'});                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal', 0, false, {name: 'Driven Distance Total', desc: 'Driven Distance Total', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'km'});                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday', 0, false, {name: 'Charging Time Today', desc: 'Charging Time Today', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'ms'});                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday', 0, false, {name: 'Mowing Time Total', desc: 'Mowing Time Total', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'ms'});                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'distanceFromChargingStation', 0, false, {name: 'Distance from charging station', desc: 'Distance from charging station', role: 'state', type: 'number', read: true, write: true, def: 0, unit: 'm'});                                                                                                                                                                                await createStateAsync(instanz + PfadEbene1 + PfadEbene2[2] + 'GoogleMapsLink', '', false, {name: 'Link für Google Maps', desc: 'Link für Google Maps', role: 'value', type: 'string', read: true, write: true, def: ''});                                                                                                                                                                                log('-==== Alle Ordner und State wurden erstellt ====-')                                                                                                                                                                                drivenDistanceToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday')).val;                                                                                                                                                                                drivenDistanceTotal = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal')).val;                                                                                                                                                                                chargingTimeToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday')).val;                                                                                                                                                                                mowingTimeToday = (await getStateAsync(instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday')).val;                                                                                                                                                                            }                                                                                                                                                                            //******************************************************* Adapter Husqvarna-Automower *******************************************************/                                                                                                                                                                            const sID_Mower_activity = 'husqvarna-automower.0.' + Mower_ID + '.mower.activity'                                                                                                                                                                            const sID_Latlong = 'husqvarna-automower.0.' + Mower_ID + '.positions.latlong'                                                                                                                                                                            const sID_PARKUNTILNEXTSCHEDULE = 'husqvarna-automower.0.' + Mower_ID + '.ACTIONS.PARKUNTILNEXTSCHEDULE'                                                                                                                                                                            const sID_MoverLatLong = 'husqvarna-automower.0.'+Mower_ID+'.positions.latlong'                                                                                                                                                                            //************************************************************ Script Husqvarna *************************************************************/                                                                                                                                                                            const sID_drivenDistanceToday = instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceToday';                                                                                                                                                                            const sID_drivenDistanceTotal = instanz + PfadEbene1 + PfadEbene2[0] + 'drivenDistanceTotal';                                                                                                                                                                            const sID_distanceFromChargingStation = instanz + PfadEbene1 + PfadEbene2[0] + 'distanceFromChargingStation';                                                                                                                                                                            const sID_chargingTimeToday = instanz + PfadEbene1 + PfadEbene2[0] + 'chargingTimeToday';                                                                                                                                                                            const sID_mowingTimeToday = instanz + PfadEbene1 + PfadEbene2[0] + 'mowingTimeToday';                                                                                                                                                                            const sID_GoogleLink = instanz + PfadEbene1 + PfadEbene2[2] + 'GoogleMapsLink';                                                                                                                                                                            const sID_StartZeit_0 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_0';                                                                                                                                                                            const sID_EndeZeit_0 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_0';                                                                                                                                                                            const sID_StartZeit_1 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_1';                                                                                                                                                                            const sID_EndeZeit_1 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_1';                                                                                                                                                                            const sID_StartZeit_2 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_2';                                                                                                                                                                            const sID_EndeZeit_2 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_2';                                                                                                                                                                            const sID_StartZeit_3 = instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_3';                                                                                                                                                                            const sID_EndeZeit_3 = instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_3';                                                                                                                                                                            const arrayID_Zeiten =[sID_StartZeit_0,sID_EndeZeit_0,sID_StartZeit_1,sID_EndeZeit_1,sID_StartZeit_2,sID_EndeZeit_2,sID_StartZeit_3,sID_EndeZeit_3];                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // reset variables "[...]Today" every midnight                                                                                                                                                                            schedule('0 0 * * *', function () {                                                                                                                                                                                drivenDistanceToday = 0;                                                                                                                                                                                setState(sID_drivenDistanceToday, drivenDistanceToday, true);                                                                                                                                                                                chargingTimeToday = 0;                                                                                                                                                                                setState(sID_chargingTimeToday, chargingTimeToday, true);                                                                                                                                                                                mowingTimeToday = 0;                                                                                                                                                                                setState(sID_mowingTimeToday, mowingTimeToday, true);                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         // get chargingTimeToday and chargingTimeTotal                                                                                                                                                                            on({id: sID_Mower_activity, oldVal: 'CHARGING'}, function (obj) {                                                                                                                                                                                chargingTime = obj.state.ts - obj.oldState.ts;                                                                                                                                                                                log('chargingTime: ' + chargingTime/1000 + 's', 'debug');                                                                                                                                                                                chargingTimeToday = chargingTime + chargingTimeToday;                                                                                                                                                                                setState(sID_chargingTimeToday, chargingTimeToday, true);                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         // get mowingTimeToday and mowingTimeTotal                                                                                                                                                                            on({id: sID_Mower_activity, oldVal: 'MOWING'}, function (obj) {                                                                                                                                                                                mowingTime = obj.state.ts - obj.oldState.ts;                                                                                                                                                                                log('mowingTime: ' + mowingTime/1000 + 's', 'debug');                                                                                                                                                                                mowingTimeToday = mowingTime + mowingTimeToday;                                                                                                                                                                                setState(sID_mowingTimeToday, mowingTimeToday, true);                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         // get distance from automower to charging station, drivenDistanceToday and drivenDistanceTotal                                                                                                                                                                            on({id: sID_Latlong, change: 'ne'}, async function (obj) {                                                                                                                                                                                if (getState(sID_Mower_activity).val === 'CHARGING' || getState(sID_Mower_activity).val === 'PARKED_IN_CS') {                                                                                                                                                                                    if (chargingStationLatitude !== 0 && chargingStationLongitude !== 0) {                                                                                                                                                                                        chargingStationLatitude = (Number(obj.state.val.split(';')[0]) + Number(chargingStationLatitude)) / 2;                                                                                                                                                                                        chargingStationLongitude = (Number(obj.state.val.split(';')[1]) + Number(chargingStationLongitude)) / 2;                                                                                                                                                                                    } else {                                                                                                                                                                                        chargingStationLatitude = obj.state.val.split(';')[0];                                                                                                                                                                                        chargingStationLongitude = obj.state.val.split(';')[1];                                                                                                                                                                                    }                                                                                                                                                                                }                                                                                                                                                                                 distanceFromChargingStation = 1000 * 6378.388 * Math.acos(Math.sin(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.sin(chargingStationLatitude * (Math.PI / 180)) + Math.cos(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.cos(chargingStationLatitude * (Math.PI / 180)) * Math.cos(chargingStationLongitude * (Math.PI / 180) - obj.state.val.split(';')[1] * (Math.PI / 180))); // reference: https://www.kompf.de/gps/distcalc.html                                                                                                                                                                                log('distanceFromChargingStation: ' + distanceFromChargingStation + 'm', 'debug');                                                                                                                                                                                await setStateAsync(sID_distanceFromChargingStation, distanceFromChargingStation, true);                                                                                                                                                                                                                                                                                                                                                                if (getState(sID_Mower_activity).val === 'MOWING' || getState(sID_Mower_activity).val === 'GOING_HOME' || getState(sID_Mower_activity).val === 'LEAVING') {                                                                                                                                                                                    drivenDistance = 6378.388 * Math.acos(Math.sin(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.sin(obj.oldState.val.split(';')[0] * (Math.PI / 180)) + Math.cos(obj.state.val.split(';')[0] * (Math.PI / 180)) * Math.cos(obj.oldState.val.split(';')[0] * (Math.PI / 180)) * Math.cos(obj.oldState.val.split(';')[1] * (Math.PI / 180) - obj.state.val.split(';')[1] * (Math.PI / 180))); // reference: https://www.kompf.de/gps/distcalc.html                                                                                                                                                                                    log('distanceDriven: ' + drivenDistance + 'km', 'debug');                                                                                                                                                                                    drivenDistanceToday = drivenDistanceToday + drivenDistance;                                                                                                                                                                                    drivenDistanceTotal = drivenDistanceTotal + drivenDistance;                                                                                                                                                                                    await setStateAsync(sID_drivenDistanceToday, round(drivenDistanceToday,2), true);                                                                                                                                                                                    await setStateAsync(sID_drivenDistanceTotal, round(drivenDistanceTotal,2), true);                                                                                                                                                                                }                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         // Uhrzeiten für StartZeit und EndZeit in Minuten umrechnen und Adapter ID's ändern                                                                                                                                                                            on({id: arrayID_Zeiten, change: 'ne'}, async function (obj) {                                                                                                                                                                                let arryObj_ID = obj.id.split('.')                                                                                                                                                                                let ScheduleNr = arryObj_ID[4].substring(arryObj_ID[4].length-1,arryObj_ID[4].length)                                                                                                                                                                                let Dauer_min =0, Start_min=0;                                                                                                                                                                                        let StartZeit=(await getStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'StartZeit_'+ScheduleNr)).val;                                                                                                                                                                                let EndeZeit=(await getStateAsync(instanz + PfadEbene1 + PfadEbene2[1] + 'EndZeit_'+ScheduleNr)).val;                                                                                                                                                                                                                                                                                                                                                                // Uhrzeit wird in Stunden und Minuten geteilt                                                                                                                                                                                let arrayStartZeit = StartZeit.split(":");                                                                                                                                                                                let arrayEndeZeit = EndeZeit.split(":");                                                                                                                                                                                let StartZeit_Stunden = arrayStartZeit[0];                                                                                                                                                                                   let EndeZeit_Stunden = arrayEndeZeit[0];                                                                                                                                                                                   let StartZeit_Minuten = arrayStartZeit[1];                                                                                                                                                                                   let EndeZeit_Minuten = arrayEndeZeit[1];                                                                                                                                                                                                                                                                                                                                                                   // Umrechnen der Uhrzeit in Minuten seit Tagesbeginn                                                                                                                                                                                Start_min = (StartZeit_Stunden *60)+ parseInt(StartZeit_Minuten)                                                                                                                                                                                // Umrechnen der Uhrzeit in Minuten von Start bis Ende Zeit (Dauer)                                                                                                                                                                                Dauer_min = ((EndeZeit_Stunden *60)+ parseInt(EndeZeit_Minuten))-Start_min                                                                                                                                                                                if(Dauer_min <0){Dauer_min = 0;}                                                                                                                                                                                await setStateAsync('husqvarna-automower.0.' + Mower_ID + '.ACTIONS.schedule.'+ScheduleNr+'.start',Start_min)                                                                                                                                                                                await setStateAsync('husqvarna-automower.0.' + Mower_ID + '.ACTIONS.schedule.'+ScheduleNr+'.duration',Dauer_min)                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         //Google Maps Link aktualisieren, wenn sich die Koordinaten ändern.                                                                                                                                                                            on({id: sID_MoverLatLong, change: "ne"}, async function (obj) {                                                                                                                                                                                let arryLatLong = getState(obj.id).val.split(';');                                                                                                                                                                                let GoogleLink = 'https://www.google.com/maps/place/'+arryLatLong[0]+','+arryLatLong[1]+'/@?hl=de';                                                                                                                                                                                await setStateAsync(sID_GoogleLink,GoogleLink);                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // Bei Regen Parken bis zum nächsten Start                                                                                                                                                                            on({id: sID_Regensensor, change: 'ne', val: true}, async function (obj) {                                                                                                                                                                               await setStateAsync(sID_PARKUNTILNEXTSCHEDULE,true);                                                                                                                                                                               log('-==== Es regnet, Mäher wird geparkt ====-','warn')                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         // Runden. Parameter float wert, int dez Anzahl der Stellen                                                                                                                                                                            function round(wert, dez) {                                                                                                                                                                                let umrechnungsfaktor = Math.pow(10,dez);                                                                                                                                                                                return Math.round(wert * umrechnungsfaktor) / umrechnungsfaktor;                                                                                                                                                                            }                                                                                                                                                                                                                          
                                          

                                          Nochmal danke für dein Skript. Hat auch funktioniert. Datenpunkte wurden agelegt. Aber leider sind sie nicht beschrieben wurden. Muss ich in dem Skript ausser der Mover Id noch was eingeben?

                                          A Offline
                                          A Offline
                                          ArnoD
                                          schrieb am zuletzt editiert von
                                          #353

                                          @lustig29
                                          Eigentlich nicht, außer der Adapter Husqvarna hat bei dir eine andere Instanz als 0, dann musst du das noch bei

                                          //******************************************************* Adapter Husqvarna-Automower *******************************************************/
                                          

                                          Einstellen und husqvarna-automower.0. in husqvarna-automower.1. ändern.

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          772

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe