Battery charging delimiter
Posted: Friday 08 December 2023 23:34
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:
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.
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¶m=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
}
Bicycle battery chargers and the grand majority of other battery chargers don't have that option.