Za klika tygodni w mojej miejscowości startuje program instalacji PV. Przybędzie ich ok. 670 (3.2 kW). Już teraz występują przepięcia. Na szczęście krótkotrwałe. Aż nie chcę pomyśleć co będzie się działo gdy wystartują nowe instalacje.
Postanowiłem w związku z tym zabezpieczyć się i zmontować sterowanie grzałką 3x2000W.
ChatGPT stworzył mi taki oto skrypt dzvents dla Domoticza do sterowania grzałką uwzględniając też temperaturę wody w bojlerze.
Skrypt ma monitorować napięcie na poszczególnych fazach i załączać grzałki po przekroczeniu wartości napięcia powyżej 253V przez conajmiej 3 minuty. Ma też monitorować temperaturę wody w bojlerze.
Mam prośbę, żeby ktoś znający temat obejrzał skrypt i się wypowiedział.
Może ktoś już zrobił taki skrypt na tym forum. Szukałem lecz nie znalazłem takiego skryptu.
Oto skrypt utworzony przez ChatGPT:
commandArray = {} -- Funkcja sprawdzająca, czy napięcie na danej fazie jest większe niż 253V function checkVoltage(phase, voltage) if voltage > 253 then return true else print("Napięcie na fazie " .. phase .. " jest poniżej 253V") return false end end -- Funkcja sprawdzająca temperaturę wody w bojlerze function checkBoilerTemperature(temperature) if temperature < 85 then return true else print("Temperatura wody w bojlerze jest równa lub wyższa niż 85 stopni") return false end end -- Funkcja sprawdzająca, czy upłynęło wystarczająco czasu po spełnieniu warunków function checkDelay(device, delay) local lastTime = otherdevices_lastupdate[device] local currentTime = os.time() if (currentTime - lastTime) >= delay then return true else print("Nie minął wymagany czas od ostatniego włączenia dla " .. device) return false end end -- Sprawdź warunki dla każdej z trzech faz if devicechanged['VoltagePhase1'] and devicechanged['BoilerTemperature'] then local voltagePhase1 = tonumber(otherdevices_svalues['VoltagePhase1']) local boilerTemperature = tonumber(otherdevices_svalues['BoilerTemperature']) if checkVoltage("1", voltagePhase1) and checkBoilerTemperature(boilerTemperature) then if checkDelay('Heater1', 180) then -- 3 minuty opóźnienia (180 sekund) commandArray['Heater1'] = 'On' end else commandArray['Heater1'] = 'Off' end end if devicechanged['VoltagePhase2'] and devicechanged['BoilerTemperature'] then local voltagePhase2 = tonumber(otherdevices_svalues['VoltagePhase2']) local boilerTemperature = tonumber(otherdevices_svalues['BoilerTemperature']) if checkVoltage("2", voltagePhase2) and checkBoilerTemperature(boilerTemperature) then if checkDelay('Heater2', 180) then -- 3 minuty opóźnienia (180 sekund) commandArray['Heater2'] = 'On' end else commandArray['Heater2'] = 'Off' end end if devicechanged['VoltagePhase3'] and devicechanged['BoilerTemperature'] then local voltagePhase3 = tonumber(otherdevices_svalues['VoltagePhase3']) local boilerTemperature = tonumber(otherdevices_svalues['BoilerTemperature']) if checkVoltage("3", voltagePhase3) and checkBoilerTemperature(boilerTemperature) then if checkDelay('Heater3', 180) then -- 3 minuty opóźnienia (180 sekund) commandArray['Heater3'] = 'On' end else commandArray['Heater3'] = 'Off' end end -- Wyłącz grzałki, jeśli temperatura przekroczy 85 stopni if tonumber(otherdevices_svalues['BoilerTemperature']) >= 85 then commandArray['Heater1'] = 'Off' commandArray['Heater2'] = 'Off' commandArray['Heater3'] = 'Off' end -- Wyłącz grzałki, jeśli napięcie spadnie poniżej 250V po upływie 3 minut if (devicechanged['VoltagePhase1'] or devicechanged['VoltagePhase2'] or devicechanged['VoltagePhase3']) and tonumber(otherdevices_svalues['VoltagePhase1']) < 250 and tonumber(otherdevices_svalues['VoltagePhase2']) < 250 and tonumber(otherdevices_svalues['VoltagePhase3']) < 250 then if checkDelay('Heater1', 180) then commandArray['Heater1'] = 'Off' end if checkDelay('Heater2', 180) then commandArray['Heater2'] = 'Off' end if checkDelay('Heater3', 180) then commandArray['Heater3'] = 'Off' end end return commandArray