Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test Adapter Husqvarna Automower v0.3.x

NEWS

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    13
    1
    1.5k

  • Neuer ioBroker-Blog online: MonatsrĂŒckblick MĂ€rz/April 2026
    BluefoxB
    Bluefox
    8
    1
    2.3k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    1.1k

Test Adapter Husqvarna Automower v0.3.x

Geplant Angeheftet Gesperrt Verschoben Tester
husqvarnaautomower
439 BeitrÀge 73 Kommentatoren 123.2k Aufrufe 62 Beobachtet
  • Ä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,
    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
                          • greyhoundG greyhound

                            Möchte euch meinen ersten Adapter vorstellen. Die Idee, mein Skript vom Vorjahr mal schnell in einen Adapter zu transferieren, hat sich dann doch schnell als grĂ¶ĂŸere Aufgabe mit MissverstĂ€ndnissen und viel Lesen herausgestellt. Danke auch an die UnterstĂŒtzer, als mich die Blindheit schlug.

                            Ich habe den Adapter jetzt mit 2 MĂ€hern im produktiven Einsatz.

                            Voraussetzung ist ein Automower mit Connectmodul und ein Konto bei Husqvarna, welches auch fĂŒr die Nutzung der Handy-App benötigt wird.

                            Ich habe mir ein spezielles Konto fĂŒr ioBroker angelegt und die MĂ€her hinzugefĂŒgt, weil es des öfteren vor kam, dass ich in der Handy-App abgemeldet war, was aber auch an meinen vielen Tests mit an- und abmelden gelegen haben kann.

                            Zu finden ist der Adapter unter https://github.com/truegreyhound/ioBrok 
 -automower

                            Ich hoffe, ich habe die Vorgaben der Adapter-Entwicklung eingehalten. Habe aber nicht so ganz verstanden, was der Unterschied zwischen index.html und index_m.html sein soll. Alter/neuer ioBroker.admin?

                            Final mĂŒssten wohl auch noch einige Übersetzungen in word.js ergĂ€nzt werden, englisch und deutsch ist zumindest enthalten.

                            Bei bestimmten Ereignissen werden speziell formatierte Nachrichten in den State mower.sendMessage geschrieben. Ggf. kann das intelligenter gelöst werden. In meinem Skript habe ich an den Stellen prioritÀtsabhÀngig Messages via Telegram versendet. Diese FunktionalitÀt bilde ich nun mit einem kleinen Skript mit einer Subscription auf diesen State nach.

                            Über Kritik, Anregungen und Fehlermeldungen werde ich gern hinwegsehen. :shock: ;)

                            Ne, bin ich gespannt und offen.

                            Bin gerade an der Überarbeitung meiner Views, werde demnĂ€chst ein paar Screenshots reinstellen.

                            Gruß

                            GH

                            S Offline
                            S Offline
                            schmidti
                            schrieb am zuletzt editiert von schmidti
                            #354

                            @greyhound

                            Hi,
                            ich wollte das Modul in Betrieb nehmen, leider kommt diese Fehlermeldung.

                            updateStatus mower object is NULL
                            

                            Kann mir jemand sagen, was das sein könnte?

                            VG
                            Schmidti

                            1 Antwort Letzte Antwort
                            0
                            • A Offline
                              A Offline
                              AndreasW63
                              schrieb am zuletzt editiert von
                              #355

                              Hallo,

                              ich wĂŒrde gerne den Adapter "husqvarna-automower v0.3.3-beta.1"
                              mit unserem Husqvarna Automower 405x "Firmware 5995776-12D_P16-SwPkg_47.11 (2023-03)" in Betrieb nehmen.

                              Der verwendete iobroker ist in folgender Version vorhanden:
                              iobroker Admin v6.3.5
                              Node.js: v16.18.1
                              NPM: 8.19.2

                              Einen Application-Key und ein Application-Secret habe ich mir bei developer.husqvarana.com erstellt.

                              Die Instanz wird gestartet und scheint auch Daten abzurufen, allerdings bleibt der Status der Instanz immer bei einem
                              gelben Ausrufenzeichen.

                              Sind Einstellungen an den Instanzen Websocket und Socket.io generell notwendig, oder nur dann, wenn ich Daten an den 405x senden möchte?

                              Gruß Andreas

                              C 1 Antwort Letzte Antwort
                              0
                              • A ArnoD

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

                                Parken fĂŒr 30 Minuten. Starten fĂŒr 120 Minuten. Woher kommen die die Daten fĂŒr 30 und 120 Minuten?
                                Im Button ist hier nichts eingetragen, bzw. wo kann man die Zeit Àndern?

                                DafĂŒr habe ich den „materialdesign – Button State Multi“ verwendet, da kann man mehre ID mit Verzögerung Ă€ndern.
                                Als Erstes wird ohne Verzögerung ACTIONS.park.parkTime auf 30 gesetzt und dann mit Verzögerung 1000 ms ACTIONS.park.PARK auf true.

                                Diese Änderungen habe ich aber erst nach meinem Upload hier gemacht, sodass der Upload der View weiter oben nicht mehr aktuell ist.

                                Hier noch mal die Importdatei meiner View mit allen Änderungen und Optimierungen:
                                Husqvarna_VIS_View V2.js

                                527c6db5-a3ff-4522-8499-d6f3ecff5d3a-grafik.png

                                R Online
                                R Online
                                RISSN
                                schrieb am zuletzt editiert von
                                #356

                                @arnod guten Morgen, wo bekomme ich denn das Bild fĂŒr den Husqvarna her? Die Seite kann ich importieren, aber ohne Bilder. Beste GrĂŒĂŸe

                                A 1 Antwort Letzte Antwort
                                0
                                • R RISSN

                                  @arnod guten Morgen, wo bekomme ich denn das Bild fĂŒr den Husqvarna her? Die Seite kann ich importieren, aber ohne Bilder. Beste GrĂŒĂŸe

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

                                  @rissn
                                  Da hilft Google. Ein Bild suchen was passt und einfach den Hintergrund (z.B. mit Gimp) ausschneiden, sodass dieser Transparent ist.
                                  Oder fĂŒr ganz Faule, das hier verwenden. :-) der-husqvarna-automower-430x.png

                                  R 1 Antwort Letzte Antwort
                                  0
                                  • A ArnoD

                                    @rissn
                                    Da hilft Google. Ein Bild suchen was passt und einfach den Hintergrund (z.B. mit Gimp) ausschneiden, sodass dieser Transparent ist.
                                    Oder fĂŒr ganz Faule, das hier verwenden. :-) der-husqvarna-automower-430x.png

                                    R Online
                                    R Online
                                    RISSN
                                    schrieb am zuletzt editiert von
                                    #358

                                    @arnod vielen Dank, hatte es natĂŒrlich auch aus dem Netz gezogen und als png umgewandelt

                                    1 Antwort Letzte Antwort
                                    0
                                    • Martin BöttcherM Offline
                                      Martin BöttcherM Offline
                                      Martin Böttcher
                                      schrieb am zuletzt editiert von Martin Böttcher
                                      #359

                                      ~~sry leute aber evtl bin ich einfach zu blind oder zu doof.
                                      ich habe gerade v0.3.3 installiert.
                                      habe auch einen Dev Acc bei Husqvarna erstellt.
                                      bekomme nun vom Adpater folgende Meldung:

                                      husqvarna-automower.0  	error	Error: No Objects found, no Objects created. Check API (ERR_#008). (ERR_#004)
                                      

                                      ich denke mir, ja klar kann der nichts finden, der Dev Account kennt ja meine Automower nicht...
                                      Jetzt meine Dummyfrage: Wie verbinde ich meine MĂ€her mit dem Dev Account?~~
                                      ok... sry ist spÀt... wenn ich mich auch mit dem falschen Account anmelde... so geh pennen... n8

                                      mcm1957M H 2 Antworten Letzte Antwort
                                      0
                                      • Martin BöttcherM Martin Böttcher

                                        ~~sry leute aber evtl bin ich einfach zu blind oder zu doof.
                                        ich habe gerade v0.3.3 installiert.
                                        habe auch einen Dev Acc bei Husqvarna erstellt.
                                        bekomme nun vom Adpater folgende Meldung:

                                        husqvarna-automower.0  	error	Error: No Objects found, no Objects created. Check API (ERR_#008). (ERR_#004)
                                        

                                        ich denke mir, ja klar kann der nichts finden, der Dev Account kennt ja meine Automower nicht...
                                        Jetzt meine Dummyfrage: Wie verbinde ich meine MĂ€her mit dem Dev Account?~~
                                        ok... sry ist spÀt... wenn ich mich auch mit dem falschen Account anmelde... so geh pennen... n8

                                        mcm1957M Online
                                        mcm1957M Online
                                        mcm1957
                                        schrieb am zuletzt editiert von
                                        #360

                                        @greyhound
                                        Wenn der Adapter funktioniert bitte in den Repositories veröffentlichen.
                                        Falls Hilfe dazu benötigt wird, bitte Bescheid geben.
                                        Danke

                                        Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
                                        Support Repositoryverwaltung.

                                        Wer 'nen Kaffee spendieren will: https://paypal.me

                                        LESEN - gute Forenbeitrage

                                        G 1 Antwort Letzte Antwort
                                        0
                                        • mcm1957M mcm1957

                                          @greyhound
                                          Wenn der Adapter funktioniert bitte in den Repositories veröffentlichen.
                                          Falls Hilfe dazu benötigt wird, bitte Bescheid geben.
                                          Danke

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

                                          @mcm57
                                          Hallo,
                                          neue Saison hat begonnen - und gleich ein Problem!
                                          Die Entfernung zur Basis wird nicht richtig berechnet, bzw. wird der Nullpunkt in der Ladestation nicht gesetzt.
                                          Der Entfernungswert liegt mom. bei 5737207,91m ???
                                          Das hat aber schon mal funktioniert.
                                          Ich benutze die v0.4.0-beta.3 und das hoffentlich zugehörige "Script for statistics" aus dem GitHub ice987987
                                          kann mir jemand dazu helfen?
                                          Gruß
                                          Gerhard

                                          R 1 Antwort Letzte Antwort
                                          0

                                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                          Hast du es satt, bei jedem Besuch durch die gleichen BeitrĂ€ge zu scrollen? Wenn du dich fĂŒr ein Konto anmeldest, kommst du immer genau dorthin zurĂŒck, wo du zuvor warst, und kannst dich ĂŒber neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und BeitrĂ€ge positiv bewerten, um anderen Community-Mitgliedern deine WertschĂ€tzung zu zeigen.

                                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                          Registrieren Anmelden
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          566

                                          Online

                                          32.9k

                                          Benutzer

                                          83.2k

                                          Themen

                                          1.3m

                                          BeitrÀge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2026
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

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