diff --git a/enervent-ctrl-python/src/EnerventCoils.py b/enervent-ctrl-python/src/EnerventCoils.py index c887c4b..61d7e32 100644 --- a/enervent-ctrl-python/src/EnerventCoils.py +++ b/enervent-ctrl-python/src/EnerventCoils.py @@ -9,6 +9,15 @@ class EnerventCoil(): self.value = 0 self.description = description self.reserved = symbol == "reserved" and description == "reserved" + + def serialize(self): + return { + "value": self.value == 1, + "symbol": self.symbol, + "description": self.description, + "reserved": self.reserved + } + class Coils(): """Class for handling Modbus coils""" coillogger = logging.getLogger(__name__) @@ -93,8 +102,8 @@ class Coils(): EnerventCoil() ] - def __init__(self, serialdevice='/dev/ttyS0', modbusaddr=1, debug=False): - self.pingvin = minimalmodbus.Instrument(serialdevice, modbusaddr) + def __init__(self, device, debug=False): + self.pingvin = device if debug: self.coillogger.debug("Updating coil values from device") self.update(debug) @@ -127,18 +136,22 @@ class Coils(): coilvals = coilvals + f"Coil {i}\t{coil.value} [{coil.symbol}] ({coil.description})\n" return coilvals - def serialize(self): + def serialize(self, include_reserved): """Returns coil values as parseable Python object""" coilvals = [] - for coil in self.coils: - coilvals.append({"value": coil.value, "symbol": coil.symbol, "description": coil.description, "reserved": coil.reserved}) + for i, coil in enumerate(self.coils): + if not coil.reserved or include_reserved: + coil = coil.serialize() + coil['address'] = i + coilvals.append(coil) return coilvals - def get(self, live=False): + def get(self, include_reserved=False, live=False): """Return all coil values in JSON format""" - return jsonify(self.serialize()) + return jsonify(self.serialize(include_reserved)) class PingvinKL(): """Class for communicating with an Enervent Pinvin Kotilämpö ventilation/heating unit""" def __init__(self, serialdevice='/dev/ttyS0', modbusaddr=1, debug=False): - self.coils = Coils(serialdevice, modbusaddr, debug) \ No newline at end of file + self.pingvin = minimalmodbus.Instrument(serialdevice, modbusaddr) + self.coils = Coils(self.pingvin, debug) \ No newline at end of file diff --git a/enervent-ctrl-python/src/enervent-logger.py b/enervent-ctrl-python/src/enervent-logger.py index ea5d65e..5038a88 100755 --- a/enervent-ctrl-python/src/enervent-logger.py +++ b/enervent-ctrl-python/src/enervent-logger.py @@ -1,7 +1,7 @@ #!/usr/bin/env python import logging from EnerventCoils import PingvinKL -from flask import Flask +from flask import Flask, request VERSION = "0.0.1" DEBUG = False @@ -18,9 +18,19 @@ pingvin = PingvinKL('/dev/ttyS0',1,debug=DEBUG) app = Flask(__name__) @app.route('/api/v1/coils') -def index(): +def get(): return pingvin.coils.get() +@app.route('/api/v1/coils/all') +def get_all(): + return pingvin.coils.get(include_reserved=True) + +@app.route('/api/v1/coils/', methods=["GET","PUT"]) +def get_coil(): + if request.method == 'GET': + return + + if __name__ == "__main__": log.info(f"Starting enervent-logger {VERSION}") # print(pingvin.coils.value(1, debug=DEBUG))