Skip to content

Instantly share code, notes, and snippets.

@CurlyMoo
Last active January 20, 2024 21:26
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CurlyMoo/41aeae713bedb261e40130c2aadeb456 to your computer and use it in GitHub Desktop.
Save CurlyMoo/41aeae713bedb261e40130c2aadeb456 to your computer and use it in GitHub Desktop.
Heishamon rules
on System#Boot then
#WPAan = 0;
#WPUit = 0;
#dTOffset = -1;
#newTargetTemp = 0;
#prevTargetTemp = 0;
#maxTa = 0;
#doStart = 1;
#onTemp = 0;
#outletOnTemp = 0;
#varCounter = 0;
#allowPumpDuty = 1;
#newPumpDuty = 109;
setTimer(2, 0);
setTimer(3, 60);
end
on setThermostaat then
#T1 = ?setpoint + 0.20;
#T2 = ?setpoint - 0.20;
end
on timer=4 then
#allowPumpDuty = 1;
end
on setPumpDuty then
if #allowPumpDuty == 1 then
if @Max_Pump_Duty != #newPumpDuty then
setTimer(4, 900);
#allowPumpDuty = 0;
@SetMaxPumpDuty = #newPumpDuty;
end
end
end
on checkPumpDuty then
if #targetTempDiff <= 0.2 then
#newPumpDuty = 80;
else
if @Outside_Temp < 2 then
#newPumpDuty = 98;
else
#newPumpDuty = 115;
end
end
setPumpDuty();
end
on @Outside_Temp then
checkPumpDuty();
end
on stooklijn then
$diff = 0;
if #targetTempDiff <= -0.10 then
$diff = 4;
else
if #targetTempDiff <= 0 then
$diff = 2;
else
if #targetTempDiff <= 0.25 then
$diff = 1;
end
end
end
if (#maxTa - $diff) > #Taanvoer1 then
#maxTa = #maxTa - $diff;
else
#maxTa = #Taanvoer1;
end
end
on berekenWar then
#Taanvoer1 = 32;
$Tbuiten1 = 14;
$Taanvoer2 = 41;
$Tbuiten2 = -4;
if @Outside_Temp >= $Tbuiten1 then
#maxTa = #Taanvoer1;
else
if @Outside_Temp <= $Tbuiten2 then
#maxTa = $Taanvoer2;
else
#maxTa = #Taanvoer1 + (($Tbuiten1 - @Outside_Temp) * ($Taanvoer2 - #Taanvoer1) / ($Tbuiten1 - $Tbuiten2));
end
end
if #onTemp == 0 then
if @Outside_Temp < 0 then
#maxTa = #maxTa + 4;
else
if @Outside_Temp < 6 then
#maxTa = #maxTa + 3;
else
#maxTa = #maxTa + 2;
end
end
end
stooklijn();
end
on setNewTemp then
if isset(@Main_Outlet_Temp) && isset(@Main_Inlet_Temp) && isset(?setpoint) then
if #onTemp == 3 && #outletOnTemp == 1 then
if #newTargetTemp < #maxTa then
#newTargetTemp = #maxTa - 1;
end
if #newTargetTemp < #Taanvoer1 then
#newTargetTemp = #Taanvoer1;
end
end
if #newTargetTemp > #maxTa then
#newTargetTemp = #maxTa;
end
#dTOutlet = @Main_Outlet_Temp - #newTargetTemp;
#dT = @Main_Outlet_Temp - @Main_Inlet_Temp;
if #dTOffset < 0 && ((#dT < 3 && #outletOnTemp == 0) || @High_Pressure < 15) then
#dTOffset = 0;
end
if (#dTOutlet > 1 || #dTOffset >= 0) && @Defrosting_State == 0 then
#newTargetTemp = @Main_Outlet_Temp + #dTOffset;
end
if @Outside_Temp <= 2 && #onTemp == 0 then
#newTargetTemp = #maxTa;
end
if #newTargetTemp < 20 || ?state == 0 then
#newTargetTemp = 20;
end
if #newTargetTemp < #prevTargetTemp && #outletOnTemp == 0 && #doStart == 0 then
#newTargetTemp = #prevTargetTemp;
end
if #newTargetTemp != @Main_Target_Temp || #newTargetTemp != #prevTargetTemp then
#prevTargetTemp = #newTargetTemp;
#varCounter = coalesce(#varCounter, 0) + 1;
@SetZ1HeatRequestTemperature = round(#newTargetTemp);
end
end
end
on resetTeller then
#tellerAan = 0;
#tellerUit = 0;
end
on resetDummy then
#WPAan = 0;
#WPUit = 0;
resetTeller();
end
on schakelWP then
if #WPUit == 1 then
WPUit();
end
if #WPAan == 1 then
WPAan();
end
resetTeller();
resetDummy();
end
on ?state then
if ?state == 0 then
WPUit();
end
if ?state == 1 then
WPAan();
end
end
on WPUit then
#runTime = 0;
#WPAan = 0;
#WPUit = 2;
#Teller = 0;
#outletOnTemp = 0;
setTimer(5, 0);
setTimer(2, 60);
end
on WPAan then
#WPAan = 2;
#WPUit = 0;
end
on @Main_Outlet_Temp then
if @Main_Outlet_Temp >= #maxTa then
#outletOnTemp = 1;
end
berekenWar();
setNewTemp();
end
on @Main_Inlet_Temp then
berekenWar();
setNewTemp();
end
on setTimer5 then
if #Temp < #T2 && @Main_Outlet_Temp < #maxTa then
setTimer(5, 5);
setTimer(2, 0);
else
setTimer(5, 0);
setTimer(2, 60);
end
end
on setTimers then
if @Outside_Temp > 2 then
if @Outside_Temp < 6 || #targetTempDiff >= 1 then
setTimer5();
else
if #onTemp == 0 && #runTime > 60 then
setTimer5();
else
setTimer(5, 0);
setTimer(2, 60);
end
end
else
setTimer(5, 0);
setTimer(2, 60);
end
end
on timer=5 then
if @Defrosting_State == 0 then
if (@Main_Outlet_Temp < #maxTa) || #onTemp == 0 then
#teller1 = coalesce(#teller1, 0) + 1;
#teller2 = coalesce(#teller1, 0) % 60;
if #teller2 > 120 then
#teller1 = 61;
end
if #teller2 == 0 then
#dTOffset = coalesce(#dTOffset, 0) + 2;
end
if #dTOffset > 2 then
#dTOffset = 2;
end
else
#teller1 = 0;
#teller2 = 0;
end
end
if coalesce(#prevOutletTemp, 0) < @Main_Outlet_Temp then
if (coalesce(#prevOutletTemp, 0) < @Main_Outlet_Temp) || @Defrosting_State == 0 then
#teller1 = 0;
end
#prevOutletTemp = @Main_Outlet_Temp;
end
setTimers();
end
on setOnTemp then
#onTemp = coalesce(#onTemp, 0) + 1;
if #onTemp > 3 then
#onTemp = 3;
if #dTOffset > 0 then
#dTOffset = -1;
end
end
end
on ?Temperature then
setThermostaat();
end
on timer=3 then
#Temp = ?Temperature;
#setpoint = ?setpoint;
#targetTempDiff = #setpoint - #Temp;
if #Temp > #T1 then
setOnTemp();
else
if #Temp < #T2 then
#onTemp = 0;
else
setOnTemp();
resetDummy();
end
end
if @Outside_Temp > 0 then
if @Defrosting_State == 0 then
if @Compressor_Freq == 0 && ?state == 1 && @Outside_Temp >= 6 then
if #onTemp == 3 then
#WPAan = 0;
#WPUit = 1;
schakelWP();
else
#doStart = 1;
#dTOffset = 5;
#outletOnTemp = 0;
end
end
end
end
if @Compressor_Freq > 0 && #doStart == 1 then
#doStart = 0;
#dTOffset = -1;
#newTargetTemp = @Main_Outlet_Temp + #dTOffset;
#prevTargetTemp = #newTargetTemp - 1;
end
berekenWar();
setNewTemp();
checkPumpDuty();
if ?state == 1 then
#runTime = coalesce(#runTime, 0) + 1;
setTimers();
end
setTimer(3, 60);
end
on timer=2 then
#Teller = coalesce(#Teller, 0) + 1;
if @Compressor_Freq > 0 then
#dTOffset = -1;
end
if #onTemp == 3 && @Outside_Temp < 4 then
if #dTOffset > 0 then
#dTOffset = -1;
setTimer(2, 60);
else
if @Defrosting_State == 0 then
if #Teller == 2 then
#dTOffset = -1;
setTimer(2, 60);
else
#dTOffset = -2;
setTimer(2, 30);
end
if #dTOffset <= -2 then
#dTOffset = -2;
setTimer(2, 30);
end
else
setTimer(2, 60);
end
end
if coalesce(#outletOnTemp, 0) == 0 && @Compressor_Freq > 0 then
#dTOffset = -1;
setTimer(2, 60);
end
berekenWar();
setNewTemp();
setTimers();
else
setTimer(2, 30);
end
if #Teller == 2 then
#Teller = 0;
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment