Commenting
This commit is contained in:
parent
281f28fc93
commit
74694a6268
|
@ -2,18 +2,22 @@ import minimalmodbus
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
class EnerventCoil():
|
class EnerventCoil():
|
||||||
|
"""Single coil data structure"""
|
||||||
def __init__(self, symbol="reserved", description="reserved"):
|
def __init__(self, symbol="reserved", description="reserved"):
|
||||||
self.symbol = symbol
|
self.symbol = symbol
|
||||||
self.value = 0
|
self.value = 0
|
||||||
self.description = description
|
self.description = description
|
||||||
self.reserved = symbol == "reserved" and description == "reserved"
|
self.reserved = symbol == "reserved" and description == "reserved"
|
||||||
class Coils():
|
class Coils():
|
||||||
|
"""Class for handling Modbus coils"""
|
||||||
coillogger = logging.getLogger(__name__)
|
coillogger = logging.getLogger(__name__)
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
level=logging.DEBUG,
|
level=logging.DEBUG,
|
||||||
format='%(asctime)s %(message)s',
|
format='%(asctime)s %(message)s',
|
||||||
datefmt='%y/%m/%d %H:%M:%S'
|
datefmt='%y/%m/%d %H:%M:%S'
|
||||||
)
|
)
|
||||||
|
## coil descriptions and symbols courtesy of Ensto Enervent
|
||||||
|
## https://doc.enervent.com/out/out.ViewDocument.php?documentid=59
|
||||||
coils = [
|
coils = [
|
||||||
EnerventCoil("COIL_STOP", "Stop"),
|
EnerventCoil("COIL_STOP", "Stop"),
|
||||||
EnerventCoil("COIL_AWAY", "Away mode"),
|
EnerventCoil("COIL_AWAY", "Away mode"),
|
||||||
|
@ -94,6 +98,7 @@ class Coils():
|
||||||
self.update(debug)
|
self.update(debug)
|
||||||
|
|
||||||
def update(self, debug=False):
|
def update(self, debug=False):
|
||||||
|
"""Fetch all coils values from device"""
|
||||||
self.pingvin.serial.timeout = 0.2
|
self.pingvin.serial.timeout = 0.2
|
||||||
self.pingvin.debug = debug
|
self.pingvin.debug = debug
|
||||||
if debug: self.coillogger.info(f"{len(self.coils)} coils registered")
|
if debug: self.coillogger.info(f"{len(self.coils)} coils registered")
|
||||||
|
@ -103,19 +108,23 @@ class Coils():
|
||||||
self.coillogger.info("Coil values read succesfully")
|
self.coillogger.info("Coil values read succesfully")
|
||||||
|
|
||||||
def fetchValue(self, address, debug=False):
|
def fetchValue(self, address, debug=False):
|
||||||
|
"""Update single coil value from device and return it"""
|
||||||
self.pingvin.debug = debug
|
self.pingvin.debug = debug
|
||||||
if debug: self.coillogger.debug("Updating coil value from device to cache")
|
if debug: self.coillogger.debug("Updating coil value from device to cache")
|
||||||
self.coils[address].value = self.pingvin.read_bit(address, 1)
|
self.coils[address].value = self.pingvin.read_bit(address, 1)
|
||||||
return self.value(address, debug)
|
return self.value(address, debug)
|
||||||
|
|
||||||
def value(self, address, debug=False):
|
def value(self, address, debug=False):
|
||||||
|
"""Return local coil value"""
|
||||||
if debug: self.coillogger.debug("Reading coil value from cache")
|
if debug: self.coillogger.debug("Reading coil value from cache")
|
||||||
return self.coils[address].value
|
return self.coils[address].value
|
||||||
|
|
||||||
def print(self, debug=False):
|
def print(self, debug=False):
|
||||||
|
"""Human-readable print of all coil values"""
|
||||||
for i, coil in enumerate(self.coils):
|
for i, coil in enumerate(self.coils):
|
||||||
print(f"Coil {i}\t{coil.value} [{coil.symbol}] ({coil.description})")
|
print(f"Coil {i}\t{coil.value} [{coil.symbol}] ({coil.description})")
|
||||||
|
|
||||||
class PingvinKL():
|
class PingvinKL():
|
||||||
|
"""Class for communicating with an Enervent Pinvin Kotilämpö ventilation/heating unit"""
|
||||||
def __init__(self, serialdevice='/dev/ttyS0', modbusaddr=1, debug=False):
|
def __init__(self, serialdevice='/dev/ttyS0', modbusaddr=1, debug=False):
|
||||||
self.coils = Coils(serialdevice, modbusaddr, debug)
|
self.coils = Coils(serialdevice, modbusaddr, debug)
|
Loading…
Reference in New Issue