Battery charging delimiter

Easy to use, 100% Lua-based event scripting framework.

Moderator: leecollings

Post Reply
HvdW
Posts: 615
Joined: Sunday 01 November 2015 22:45
Target OS: Raspberry Pi / ODroid
Domoticz version: 2023.2
Location: Twente
Contact:

Battery charging delimiter

Post by HvdW »

I just wrote a dzvents script to delimit our electric car charging to somewhere between 80 an 90%.
It works for the car, it works for de electric bike battery, it works for the mobile phone, it works for every battery.
By delimiting the maximum charging of a battery below 90% battery life will be extended.

We're using the property of batteries that when these reach to 100% the charging speed - read delivered power - will fall off.

Here's the code:

Code: Select all

-- Shelly (get watt)
-- Howto at Luftdaten https://www.domoticz.com/forum/viewtopic.php?f=72&t=23406&hilit=luftdaten

local CHARGER_SWITCH = 'Auto laden' -- Car charging switch device
local CHARGER_POWER = 'Laadpaal'  -- S0 meter reading of car charging power (Watt)

return {
	active = true,
	on = {
		timer = { 'every minute' },   
	},
	logging = {
        --LOG_INFO, domoticz.LOG_MODULE_EXEC_INFO, domoticz.LOG_DEBUG or domoticz.LOG_ERROR
        level = domoticz.LOG_INFO and domoticz.LOG_DEBUG,
        marker = 'Car Charger info'
    },
	
	data = {
	    counter = {initial = 0 },
	    switch_state = {initial = 'Off'},
        value_10 = { initial = 0 }, 
        value_9 = { initial = 0 },
        value_8 = { initial = 0 },
        value_7 = { initial = 0 },
        value_6 = { initial = 0 },
        value_5 = { initial = 0 },
        value_4 = { initial = 0 },
        value_3 = { initial = 0 },
        value_2 = { initial = 0 },
        value_1 = { initial = 0 },
        value_0 = { initial = 0 },
    },
    

	execute = function(domoticz)
        -- domoticz.utils.dumpTable(CHARGER_POWER.json)   -- no output don't know why
        -- so the json call is there to help out
        -- http://192.168.2.1:8080/json.htm?type=command&param=getdevices&rid=IDX to view json output
		local power_usage = (domoticz.devices('Laadpaal').usage)
	    local switch_state = domoticz.devices(CHARGER_SWITCH).state
		domoticz.notify('Power Usage      ' .. power_usage, domoticz.PRIORITY_HIGH)
		domoticz.notify('Switch state     ' .. switch_state, domoticz.PRIORITY_HIGH)
		--domoticz.log(power_usage, domoticz.LOG_INFO)
	    

            if power_usage > 0 and switch_state == 'Off' then   
                    domoticz.devices(CHARGER_SWITCH).switchOn() 
                    -- bovenstaand omdat als je de plug inplugt de schakelaar in domoticz nog op off staat
            elseif switch_state == 'On' then     -- was switch_state == 'On'
                    domoticz.data.counter = domoticz.data.counter + 1    
            elseif switch_state == 'Off' then
                    domoticz.data.counter = 0
                    domoticz.data.value_0 = 0
                    domoticz.data.value_1 = 0
                    domoticz.data.value_2 = 0
                    domoticz.data.value_3 = 0
                    domoticz.data.value_4 = 0
                    domoticz.data.value_5 = 0
                    domoticz.data.value_6 = 0
                    domoticz.data.value_7 = 0
                    domoticz.data.value_8 = 0
                    domoticz.data.value_9 = 0
                    domoticz.data.value_10 = 0
            end
                
            if switch_state == 'On' and domoticz.data.counter == 4 then
                    domoticz.log('domoticz.data.counter in de loop       : ' .. domoticz.data.counter, domoticz.LOG_DEBUG)
                    domoticz.log('Charger Power value_4 : ' .. domoticz.data.value_4, domoticz.LOG_DEBUG)
                    domoticz.log('Charger Power value_3 : ' .. domoticz.data.value_3, domoticz.LOG_DEBUG)
                    domoticz.log('Charger Power value_2 : ' .. domoticz.data.value_2, domoticz.LOG_DEBUG)
                    domoticz.log('Charger Power value_1 : ' .. domoticz.data.value_1, domoticz.LOG_DEBUG)
                    domoticz.log('Charger Power value_0 : ' .. domoticz.data.value_0, domoticz.LOG_DEBUG)
                    -- clear the first 3 data because charging sometimes starts with a bump
                    domoticz.data.value_0 = 0
                    domoticz.data.value_1 = 0
                    domoticz.data.value_2 = 0
                    domoticz.data.value_3 = 0
            end

                domoticz.log('Charger status   : ' .. switch_state, domoticz.LOG_DEBUG)
                domoticz.log('counter        : ' .. domoticz.data.counter, domoticz.LOG_DEBUG)
                domoticz.log('Charger Power     : ' .. power_usage, domoticz.LOG_DEBUG)
                domoticz.data.value_10 = domoticz.data.value_9
                domoticz.data.value_9 = domoticz.data.value_8
                domoticz.data.value_8 = domoticz.data.value_7
                domoticz.data.value_7 = domoticz.data.value_6
                domoticz.data.value_6 = domoticz.data.value_5
                domoticz.data.value_5 = domoticz.data.value_4
                domoticz.data.value_4 = domoticz.data.value_3
                domoticz.data.value_3 = domoticz.data.value_2
                domoticz.data.value_2 = domoticz.data.value_1
                domoticz.data.value_1 = domoticz.data.value_0
                domoticz.data.value_0 = power_usage
                domoticz.log('domoticz.data.counter  : ' .. domoticz.data.counter, domoticz.LOG_DEBUG)
                domoticz.log('Charger value_10: ' .. domoticz.data.value_10, domoticz.LOG_DEBUG)
                domoticz.log('Charger value_9 : ' .. domoticz.data.value_9, domoticz.LOG_DEBUG)
                domoticz.log('Charger value_8 : ' .. domoticz.data.value_8, domoticz.LOG_DEBUG)
                domoticz.log('Charger value_7 : ' .. domoticz.data.value_7, domoticz.LOG_DEBUG)
                domoticz.log('Charger value_6 : ' .. domoticz.data.value_6, domoticz.LOG_DEBUG)
                domoticz.log('Charger value_5 : ' .. domoticz.data.value_5, domoticz.LOG_DEBUG)
                domoticz.log('Charger value_4 : ' .. domoticz.data.value_4, domoticz.LOG_DEBUG)
                domoticz.log('Charger value_3 : ' .. domoticz.data.value_3, domoticz.LOG_DEBUG)
                domoticz.log('Charger value_2 : ' .. domoticz.data.value_2, domoticz.LOG_DEBUG)
                domoticz.log('Charger value_1 : ' .. domoticz.data.value_1, domoticz.LOG_DEBUG)
                domoticz.log('Charger value_0 : ' .. domoticz.data.value_0, domoticz.LOG_DEBUG)

            if domoticz.data.value_9 > 1.48 * domoticz.data.value_0 then
                                        -- switch off Charger
                    domoticz.devices(CHARGER_SWITCH).switchOff()
                    --local current_time =  os.date("!%d-%m-%Y %T")
                    --os.setlocale ("", "time")
                    local current_time =  os.date("%c")
                    local subject = 'Your car (or any other device) battery has been charged. '
                    local message = 
                    ' ' ..current_time .. '\n'..
                    'Charger value_10: ' .. domoticz.data.value_10 .. '\n'..
                    'Charger value_9: ' .. domoticz.data.value_9 .. '\n' ..
                    'Charger value_8: ' .. domoticz.data.value_8 .. '\n' ..
                    -- 'Charger value_7: ' .. domoticz.data.value_7 .. '\n' ..
                    -- 'Charger value_6: ' .. domoticz.data.value_6 .. '\n' ..
                    -- 'Charger value_5: ' .. domoticz.data.value_5 .. '\n'..
                    -- 'Charger value_4: ' .. domoticz.data.value_4 .. '\n' ..
                    -- 'Charger value_3: ' .. domoticz.data.value_3 .. '\n' ..
                    'Charger value_2: ' .. domoticz.data.value_2 .. '\n' ..
                    'Charger value_1: ' .. domoticz.data.value_1 .. '\n' ..
                    'Charger value_0: ' .. domoticz.data.value_0 .. '\n'
                    domoticz.notify(subject, message, domoticz.PRIORITY_HIGH)
                    -- domoticz.notify('notifyer', deviceName .. ' is not responding anymore.',dz.PRIORITY_HIGH)
                    -- domoticz.notify(message, domoticz.PRIORITY_NORMAL)
            end
    
		
	end
}
BTW Most electric cars have an option in the menu to delimit charging to a fixed percentage.
Bicycle battery chargers and the grand majority of other battery chargers don't have that option.
Bugs bug me.
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest