120 lines
4.2 KiB
Plaintext
Executable File
120 lines
4.2 KiB
Plaintext
Executable File
require "scripts/lua/functions"
|
|
|
|
--recupere les minutes
|
|
time=os.time()
|
|
seconds=tonumber(os.date('%S',time))
|
|
minutes=tonumber(os.date('%M',time))
|
|
heures=tonumber(os.date('%H',time))
|
|
jour=tonumber(os.date('%w',time))
|
|
mois=tonumber(os.date('%M',time))
|
|
|
|
capacite=76 * 12 --Wh
|
|
charge=200 --Wh
|
|
decharge=50 --Wh
|
|
tension_charge_max_off=13.3
|
|
tension_charge_max_on=13.8
|
|
tension_injection_min=11.2
|
|
tension_force_charge=10.8
|
|
|
|
--Initialise la commande de retour finale
|
|
commandArray={}
|
|
|
|
|
|
-- Tension repos V Conso charge W
|
|
-- 11.35 330
|
|
-- 12.35 270
|
|
-- 12.8 233
|
|
-- 12.67 190
|
|
-- 13.33 66
|
|
|
|
-- --------------------------------------------------------------------------------
|
|
-- --------------------------------------------------------------------------------
|
|
|
|
if false and (seconds % 5 == 0 ) then
|
|
url = "http://192.168.1.40/getData"
|
|
|
|
--result = os.execute(curl..'"'..url..'"')
|
|
local jsonContent = getJSONContent(url)
|
|
--print(cmd)
|
|
|
|
local statuses = decodeJSON(jsonContent)
|
|
--printTableAsTree(statuses)
|
|
|
|
if isempty(statuses) then
|
|
print("BAT ERROR getData")
|
|
return commandArray
|
|
end
|
|
if (otherdevices['ForceChargeBatterie'] == 'On' and
|
|
((tonumber(lastUpdateOfDevice('ForceChargeBatterie')) > 3 * 3600) or tension > tension_charge_max_on))
|
|
then
|
|
--commandArray['ForceChargeBatterie'] = "Off"
|
|
switchOff("ForceChargeBatterie")
|
|
end
|
|
|
|
local tension = round(tonumber(statuses['VOLTAGE']) / 55,2) -- tonumber(otherdevices['BatterieTension'])
|
|
local power_theorique = -131.71 * tension + 1850.45
|
|
charge=power_theorique
|
|
print("BAT Power theorique"..tostring(power_theorique))
|
|
updatenum("BatterieTension", tension)
|
|
updatenum("TemperatureBatterie", temperature)
|
|
--commandArray['Batterie'] = ternary(statuses['PIN_POWER'] == 0, 'On', 'Off')
|
|
--commandArray['InjectionBatterie'] = ternary(statuses['PIN_INJECTION'] == 0, 'On', 'Off')
|
|
--commandArray['ChargeBatterie'] = ternary(statuses['PIN_CHARGE'] == 0, 'On', 'Off')
|
|
|
|
production = tonumber(split(otherdevices['SolaireProduction'], ";")[1])
|
|
injection = tonumber(split(otherdevices['Injection_Radiateur'], ";")[1])
|
|
chauffe = tonumber(split(otherdevices['Chauffe_Eau'], ";")[1])
|
|
conso = tonumber(split(otherdevices['Consommation_Apparente'], ";")[1])
|
|
print("BAT injection="..tostring(injection)
|
|
..' chauffe='..tostring(chauffe)
|
|
..' charge='..tostring(charge)
|
|
..' conso='..tostring(conso)
|
|
.. ' voltage='..tostring(round(tonumber(statuses['VOLTAGE']) / 55,2))
|
|
..' tension='..tostring(tension)
|
|
)
|
|
print("BAT PIN_POWER="..statuses['PIN_POWER'].." PIN_CHARGE="..statuses['PIN_CHARGE'].." PIN_INJECTION="..statuses['PIN_INJECTION'].." PIN_BATTERIE="..statuses['PIN_BATTERIE'])
|
|
-- status 0 = ON / 1 = OFF
|
|
|
|
if (statuses['PIN_CHARGE'] == 1) then --(otherdevices['ChargeBatterie'] == 'Off') then
|
|
if (uservariables['Dark'] == "False"
|
|
and (conso < - charge or injection > charge or (injection - conso > charge) or otherdevices['ForceChargeBatterie'] == 'On')
|
|
and tension <= tension_charge_max_off
|
|
)
|
|
then
|
|
print("BAT charge batterie / arret injection")
|
|
switchOff("InjectionBatterie")
|
|
switchOn("ChargeBatterie")
|
|
else
|
|
if tension <= tension_force_charge then
|
|
switchOn("ForceChargeBatterie")
|
|
else
|
|
if (statuses['PIN_INJECTION'] == 1) then --(otherdevices['InjectionBatterie'] == 'Off') then
|
|
if (conso > decharge and injection < decharge and tension >= tension_injection_min) then
|
|
print("BAT Injection batterie / arret charge")
|
|
switchOff("ChargeBatterie")
|
|
switchOn("InjectionBatterie")
|
|
end
|
|
else
|
|
if (injection > decharge / 2 or conso < - decharge / 2 or tension < tension_injection_min) then -- or (production <= 100 and heures < 23 and heures > 7)) then
|
|
print("BAT arret injection batterie")
|
|
switchOff("InjectionBatterie")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
-- test sur statuses pour eviter les valeurs nulles
|
|
if (conso - injection > 14 or tension > tension_charge_max_on) then
|
|
print("BAT arret charge batterie")
|
|
switchOff("ChargeBatterie")
|
|
--switchOn("InjectionBatterie")
|
|
end
|
|
end
|
|
end
|
|
|
|
--if heures == 4 and minutes <= 2 then
|
|
-- switchOff("InjectionBatterie")
|
|
--end
|
|
|
|
return commandArray
|