Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. Test Adapter Husqvarna Automower v0.3.x

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Test Adapter Husqvarna Automower v0.3.x

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      lustig29 @ArnoD last edited by

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

      A 1 Reply Last reply Reply Quote 0
      • A
        ArnoD @lustig29 last edited by

        @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 Replies Last reply Reply Quote 0
        • L
          lustig29 @ArnoD last edited by

          @arnod Super, vielen Dank 👍🏻

          1 Reply Last reply Reply Quote 0
          • L
            lustig29 @ArnoD last edited by

            @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 Reply Last reply Reply Quote 0
            • A
              ArnoD @lustig29 last edited by

              @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 Reply Last reply Reply Quote 0
              • S
                schmidti @greyhound last edited by schmidti

                @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 Reply Last reply Reply Quote 0
                • A
                  AndreasW63 last edited by

                  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 Reply Last reply Reply Quote 0
                  • R
                    RISSN @ArnoD last edited by

                    @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 Reply Last reply Reply Quote 0
                    • A
                      ArnoD @RISSN last edited by

                      @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 Reply Last reply Reply Quote 0
                      • R
                        RISSN @ArnoD last edited by

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

                        1 Reply Last reply Reply Quote 0
                        • Martin Böttcher
                          Martin Böttcher last edited by 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

                          mcm1957 H 2 Replies Last reply Reply Quote 0
                          • mcm1957
                            mcm1957 @Martin Böttcher last edited by

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

                            G 1 Reply Last reply Reply Quote 0
                            • G
                              ghifunk @mcm1957 last edited by

                              @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 Reply Last reply Reply Quote 0
                              • R
                                RISSN @ghifunk last edited by

                                @ghifunk das hatte ich auch, nach 2-3x fahren war es dann wieder richtig, also denke ich, die GPS Daten brauchen erstmal ne Weile um gesammelt zu werden.

                                1 Reply Last reply Reply Quote 0
                                • C
                                  crAsh220977 @AndreasW63 last edited by

                                  @andreasw63 Hallo. Konntest Du das Problem lösen? Stehe nämlich auch vor diesem Problem. Gruß...

                                  1 Reply Last reply Reply Quote 0
                                  • P
                                    Pehe28 last edited by Pehe28

                                    hi zusammen,
                                    ich habe den Adapter "ice987987 / ioBroker.husqvarna-automower" Version 0.5.0-beta.3 installert, aber er läuft nicht richtig.
                                    Folgende Fehlermeldung:
                                    error TypeError: Cannot read properties of undefined (reading 'dirty') (ERR_#004)
                                    Hat jmd eine Idee?
                                    Danke, Peter

                                    R 1 Reply Last reply Reply Quote 0
                                    • R
                                      reutli @Pehe28 last edited by

                                      @pehe28
                                      Isuue aufgemacht in Github?

                                      P 1 Reply Last reply Reply Quote 0
                                      • P
                                        Pehe28 @reutli last edited by

                                        @reutli
                                        Nein, noch nicht.

                                        R 1 Reply Last reply Reply Quote 0
                                        • R
                                          reutli @Pehe28 last edited by

                                          @pehe28

                                          0.5.0-beta.3 WORK IN PROGRESS
                                          

                                          hast Du aber gelesen, oder?

                                          P 1 Reply Last reply Reply Quote 0
                                          • P
                                            Pehe28 @reutli last edited by

                                            @reutli
                                            schon...
                                            ich habe über url istalliert
                                            586d676e-f241-4b63-b387-f8451bdc0a09-grafik.png

                                            wie kann ich denn eine stabile Version installieren?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            956
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            automower husqvarna
                                            72
                                            435
                                            83056
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo