pyPLC/pyPlcWorker.py

95 lines
3.3 KiB
Python
Raw Normal View History

# Worker for the pyPLC
#
# Tested on Windows10 with python 3.9
#
#------------------------------------------------------------
import pyPlcHomeplug
import fsmEvse
import fsmPev
from pyPlcModes import *
2022-11-11 10:21:28 +00:00
import addressManager
class pyPlcWorker():
def __init__(self, callbackAddToTrace=None, callbackShowStatus=None, mode=C_EVSE_MODE):
print("initializing pyPlcWorker")
self.nMainFunctionCalls=0
self.mode = mode
self.strUserAction = ""
2022-11-11 10:21:28 +00:00
self.addressManager = addressManager.addressManager()
self.addressManager.findLinkLocalIpv6Address()
self.callbackAddToTrace = callbackAddToTrace
self.callbackShowStatus = callbackShowStatus
2022-11-15 18:36:20 +00:00
self.oldAvlnStatus = 0
self.hp = pyPlcHomeplug.pyPlcHomeplug(self.callbackAddToTrace, self.callbackShowStatus, self.mode, self.addressManager, self.callbackAvlnEstablished)
if (self.mode == C_EVSE_MODE):
self.evse = fsmEvse.fsmEvse()
if (self.mode == C_PEV_MODE):
self.pev = fsmPev.fsmPev()
def addToTrace(self, s):
self.callbackAddToTrace(s)
def showStatus(self, s, selection = ""):
self.callbackShowStatus(s, selection)
2022-11-15 18:36:20 +00:00
def callbackAvlnEstablished(self, status):
if (status==1):
print("[PLCWORKER] AVLN is formed")
if (self.oldAvlnStatus==0):
self.oldAvlnStatus = 1
if (self.mode == C_PEV_MODE):
self.pev.reInit()
else:
print("[PLCWORKER] no AVLN")
self.oldAvlnStatus = 0
def mainfunction(self):
self.nMainFunctionCalls+=1
2022-10-14 21:36:03 +00:00
#self.showStatus("pyPlcWorker loop " + str(self.nMainFunctionCalls))
self.hp.mainfunction() # call the lower-level worker
if (self.mode == C_EVSE_MODE):
self.evse.mainfunction() # call the evse state machine
if (self.mode == C_PEV_MODE):
self.pev.mainfunction() # call the pev state machine
def handleUserAction(self, strAction):
self.strUserAction = strAction
if (strAction == "P"):
print("switching to PEV mode")
self.mode = C_PEV_MODE
if (hasattr(self, 'evse')):
print("deleting evse")
del self.evse
self.hp.enterPevMode()
if (not hasattr(self, 'pev')):
print("creating pev")
self.pev = fsmPev.fsmPev()
self.pev.reInit()
if (strAction == "E"):
print("switching to EVSE mode")
self.mode = C_EVSE_MODE
if (hasattr(self, 'pev')):
print("deleting pev")
del self.pev
self.hp.enterEvseMode()
if (not hasattr(self, 'evse')):
print("creating fsmEvse")
self.evse = fsmEvse.fsmEvse()
self.evse.reInit()
if (strAction == "L"):
print("switching to LISTEN mode")
self.mode = C_LISTEN_MODE
2022-10-24 21:19:45 +00:00
self.hp.enterListenMode()
if (hasattr(self, 'evse')):
print("deleting evse")
del self.evse
if (hasattr(self, 'pev')):
print("deleting pev")
del self.pev
2022-10-24 21:19:45 +00:00
# self.addToTrace("UserAction " + strAction)
2022-10-16 00:57:57 +00:00
self.hp.sendTestFrame(strAction)