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.