Kanske det här kan vara något för dig?
viewtopic.php?f=29&t=6046&p=16965&hilit ... ing#p16965
Jag använder den med fördel till bevattning i växthuset.
Den kan bevattna flera zoner efter varandra flera gånger per dag, och den tar även hänsyn till lufttemperatur och luftfuktighet.
Man kan lägga till fler temperatursteg, så att bevattningstiden förlängs med en faktor för varje temperatursteg.
Om man dessutom har en regnmätare till Fibaron så kan scriptet hoppa över bevattningen om det regnar.
Där finns med andra ord alla funktioner som Fibaros egen system borde haft, men som saknas.
Med lite "handpåläggning" så kan man även fixa en VD med ett vecko-schema.
Jag skulle gärna se att någon skarpare hjärna än min utvecklar en lämplig VD till det här scriptet.
EDIT:
Den här varianten skickar mail efter avslutad bevattning.
EDIT:
Script ( isRaining() ) buggfixat
Code: Select all
--[[
%% autostart
%% properties
%% events
%% globals
--]]
--http://forum.fibaro.com/index.php?/topic/20698-fibaro-a-nawodnienie/?hl=sprinkler#entry83063
local irrigators = {1029, 1040}; -- En eller flera sprinklers / sektioner {185, 186,187,188}
local startTime = {"08:00", "12:00"}; -- Bevattningstider
local sectionTime = 1*60*1000; -- Bevattningstid i minuter
local timeModification = 1.5; -- Tidsmultiplikator för hög temperatur, tex. 1.5
local temperatureSteps ={20, 25, 30}; -- Tröskelvärden för temperatur, ändrar bevattningstiden
local humiditySteps = {40, 70}; -- Tröskelvärden för luftfuktighet, ändrar bevattningstiden
local modificationStep = 0.25; -- 25% stegvis förändring av bevattningstid
local criticalHumidity = 30; -- Triggar bevattning vid låg luftfuktighet även om det regnar
local rainDetector = 1046; -- EnhetsID för egen regnmätare. Oom inte, skriv 0
local tempSensor = 926; -- EnhetsID för egen temperatursensor
local humSensor = 1016; -- EnhetsID för egen fuktsensor
local rainSensor = true; -- Ändra till false om du inte har egen regnmätare
local deBug = true; -- false stänger av debug
-- Slut på egna parametrar
--------------------------------------------------
local startSource = fibaro:getSourceTrigger();
local temperature;
local humidity;
function logbug(color, message)
fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"));
end
function localTime()
local currentDate = os.date("*t");
local localTime = currentDate.day .. "/" .. currentDate.month .. "/" .. currentDate.year .. ": "
return localTime
end
function isRaining()
if rainSensor then if(tonumber(fibaro:getValue(rainDetector, "value")) > 0) then
return true;
else
return false;
end
end
end
function timeModify()
local modification = 1;
-- tidsmodifiering på grund av temperaturförändring
for i in pairs(temperatureSteps) do
if(temperature >= temperatureSteps[i]) then
modification = modification + modificationStep;
end
end
-- tidsmodifiering på grund av luftfuktighetsförändring
for i in pairs(humiditySteps) do
if(humidity <= humiditySteps[i]) then
modification = modification + modificationStep;
end
end
if deBug then logbug("yellow", (localTime() .. "Inställd bevattningstid = " .. (sectionTime/60000) .." min.")) end;
if deBug then logbug("yellow", (localTime() .. "Bevattningstiden är väderjusterad till " .. modification.." * bevattningstid.")) end;
return modification;
end
function sprinkling()
logbug ("lightgreen", (localTime() .. "Bevattningscykeln är påbörjad."));
for i in pairs(irrigators) do
if deBug then logbug("lightgreen", (localTime() .. "Bevattning av sektion " .. i .. " påbörjad. Bevattningstid = " .. sectionTime *timeModification/60000 .. " min.")) end;
fibaro:call(irrigators[i], "turnOn");
fibaro:sleep(sectionTime * timeModification);
fibaro:call(irrigators[i], "turnOff");
if deBug then logbug("lightgreen", (localTime() .. "Bevattning av sektion " .. i .. " är avslutad.")) end;
end
logbug ("green", (localTime() .. "Bevattningscykeln är klar."));
local subject = "Bevattningsautomatik"
local message = ("Bevattningen är klar, (Inställd sprinklertid: " .. (sectionTime) .." min.) - Väderjusterad bevattningstid: " .. ((timeModification * sectionTime)) .. " min.")
fibaro:call(2, "sendEmail", subject, message)
fibaro:debug("Mail sent")
return true;
end
function mainLoop()
temperature = tonumber(fibaro:getValue(tempSensor, "value"));
humidity = tonumber(fibaro:getValue(humSensor, "value"));
if deBug then logbug("yellow", (localTime() .. "Mätdata: Lufttemperatur = ".. temperature .. "°C, Luftfuktighet = " .. humidity .."%")) end;
timeModification = timeModify();
sprinkling();
end
---------- Loop
if (startSource["type"] == "autostart") then
logbug ("orange", (localTime() .. "Scenen startade automatiskt."));
while true do
currentDate = os.date("*t");
Time = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min)
for i in pairs(startTime) do
if (Time == startTime[i]) then
if(isRaining() == false) then
if deBug then logbug("lightgreen", (localTime() .. "Bevattningen startade automatiskt (inget regn).")) end;
mainLoop()
else
humidity = tonumber(fibaro:getValue(humSensor, "value"));
if (humidity <= criticalHumidity) then
if deBug then logbug("lightgreen", (localTime() .. "Bevattningen startades automatiskt (regn, men låg luftfuktighet).")) end;
mainLoop()
end
end
end
end
temp = tonumber(fibaro:getValue(tempSensor, "value"));
hum = tonumber(fibaro:getValue(humSensor, "value"));
-- logbug("green", (localTime() .. "Mätdata: Temp. = ".. temp .. "°C *** Fukt. = " .. hum .."%"));
-- logbug ("orange", (localTime() .. "Nästa loop"));
fibaro:sleep(1*60*1000);
end
elseif(startSource["type"] == "other") then
logbug ("orange", (localTime() .. "Bevattningen startades manuellt."));
mainLoop()
end