Bewaesserungsanlage/Zone.py

122 lines
4.3 KiB
Python

import time
import json
class Zone:
def __init__(self, number=0, name="", actualHumidity="100", desiredHumidity="0", autoMode=False, state=False, setState=0, endTimeSetState=0, planedDuration=0):
self.number = number
self.name = name
self.actualHumidity = actualHumidity
self.desiredHumidity = desiredHumidity
self.autoMode = autoMode #False = manual, True = automatic
self.state = state #True = on, False = off
self.setState = setState #0=default, 1=turned off for time, 2=turned on for time, 3=command in pipeline
self.endTimeSetState = endTimeSetState
self.planedDuration = planedDuration
def toJSON(self, translater):
return {
"number": self.number,
"name": self.name,
"actualHumidity": self.actualHumidity,
"desiredHumidity": self.desiredHumidity,
"autoMode": self.autoMode,
"operationMode_text": translater.getTranslation("automatic mode" if self.autoMode else "manual mode"),
"state": self.state,
"state_text": translater.getTranslation("switched on" if self.state else "switched off"),
"setState": self.setState,
"endTimeSetState" : self.endTimeSetState,
"endTimeSetStateFormated" : translater.formatTime(self.endTimeSetState),
"planedDuration": self.planedDuration,
}
def setZoneManager(self, zoneManager):
self.zoneManager = zoneManager
def timeOver(self):
return time.time() > self.endTimeSetState
def refreshStateAutomode(self):
match self.setState:
case 0:
self.state = False
if(self.planedDuration > 0):
self.setState = 3
elif(self.desiredHumidity > self.actualHumidity):
self.zoneManager.switchZoneState(zone=self, state=True, duration=self.zoneManager.systemSettings.defaultAutoIrrigationDuration, instant=False)
case 1:
if(self.timeOver()):
if (self.planedDuration > 0):
self.setState = 3
else:
self.setState = 0
self.refreshStateAutomode()
else:
self.state = False
case 2:
if (self.timeOver()):
self.setState = 0
self.refreshStateAutomode()
else:
self.state = True
case 3:
self.state = False
if (not self.planedDuration > 0):
self.setState = 0
def refreshStateManualmode(self):
if(self.setState > 0):
match self.setState:
case 0:
self.state = False
if (self.planedDuration > 0):
self.setState = 3
case 1:
if(self.timeOver()):
if (self.planedDuration > 0):
self.setState = 3
else:
self.setState = 0
self.state = False
case 2:
if (self.timeOver()):
self.setState = 0
self.state = False
else:
self.state = True
case 3:
self.state = False
if (not self.planedDuration > 0):
self.setState = 0
def refreshState(self):
self.planedDuration = self.zoneManager.getPlanedDurationForZone(zone=self)
if(self.autoMode):
self.refreshStateAutomode()
else:
self.refreshStateManualmode()
def switchMode(self, autoMode):
if(self.autoMode != autoMode):
self.autoMode = autoMode
self.state = False
self.refreshState()
def switchState(self, state, duration, instant):
if(instant):
if(not state):
self.setState = 1
else:
self.setState = 2
self.endTimeSetState = time.time() + duration
else:
if(self.setState == 1):
pass
elif(state):
self.setState = 3
self.refreshState()