From 609ae0b97f39a53c72080bbac5b26b6641f8f21c Mon Sep 17 00:00:00 2001 From: Jarno Rankinen Date: Sun, 15 Jan 2023 21:46:14 +0200 Subject: [PATCH] include_reserved and live moved to query parameters, Coils class is now subscriptable, added a missing reserved coil, Coil class has an individual get() function --- enervent-ctrl-python/src/EnerventCoils.py | 14 +++++++++++--- enervent-ctrl-python/src/enervent-logger.py | 15 +++++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/enervent-ctrl-python/src/EnerventCoils.py b/enervent-ctrl-python/src/EnerventCoils.py index 61d7e32..be006ee 100644 --- a/enervent-ctrl-python/src/EnerventCoils.py +++ b/enervent-ctrl-python/src/EnerventCoils.py @@ -18,6 +18,9 @@ class EnerventCoil(): "reserved": self.reserved } + def get(self): + return jsonify(self.serialize()) + class Coils(): """Class for handling Modbus coils""" coillogger = logging.getLogger(__name__) @@ -46,6 +49,7 @@ class Coils(): EnerventCoil(), EnerventCoil(), EnerventCoil(), + EnerventCoil(), EnerventCoil("COIL_AWAY_H", "Heating enabled/disabled in AWAY mode"), EnerventCoil("COIL_AWAY_C", "Cooling enabled/disabled in AWAY mode"), EnerventCoil(), @@ -107,6 +111,9 @@ class Coils(): if debug: self.coillogger.debug("Updating coil values from device") self.update(debug) + def __getitem__(self, item): + return self.coils[item] + def update(self, debug=False): """Fetch all coils values from device""" self.pingvin.serial.timeout = 0.2 @@ -115,7 +122,7 @@ class Coils(): curvalues = self.pingvin.read_bits(0,len(self.coils),1) for i, coil in enumerate(self.coils): self.coils[i].value = curvalues[i] - self.coillogger.info("Coil values read succesfully") + if debug: self.coillogger.info("Coil values read succesfully") def fetchValue(self, address, debug=False): """Update single coil value from device and return it""" @@ -136,7 +143,7 @@ class Coils(): coilvals = coilvals + f"Coil {i}\t{coil.value} [{coil.symbol}] ({coil.description})\n" return coilvals - def serialize(self, include_reserved): + def serialize(self, include_reserved=False): """Returns coil values as parseable Python object""" coilvals = [] for i, coil in enumerate(self.coils): @@ -146,8 +153,9 @@ class Coils(): coilvals.append(coil) return coilvals - def get(self, include_reserved=False, live=False): + def get(self, include_reserved=False, live=False, debug=False): """Return all coil values in JSON format""" + if live: self.update(debug) return jsonify(self.serialize(include_reserved)) class PingvinKL(): diff --git a/enervent-ctrl-python/src/enervent-logger.py b/enervent-ctrl-python/src/enervent-logger.py index 5038a88..dac413d 100755 --- a/enervent-ctrl-python/src/enervent-logger.py +++ b/enervent-ctrl-python/src/enervent-logger.py @@ -18,17 +18,16 @@ pingvin = PingvinKL('/dev/ttyS0',1,debug=DEBUG) app = Flask(__name__) @app.route('/api/v1/coils') -def get(): - return pingvin.coils.get() - -@app.route('/api/v1/coils/all') def get_all(): - return pingvin.coils.get(include_reserved=True) + return pingvin.coils.get(include_reserved=request.args.get('include_reserved'),live=request.args.get('live'),debug=DEBUG) @app.route('/api/v1/coils/', methods=["GET","PUT"]) -def get_coil(): +def coil(address): if request.method == 'GET': - return + coil = pingvin.coils[address].get(debug=DEBUG) + return coil + elif request.method == 'POST': + return False if __name__ == "__main__": @@ -36,4 +35,4 @@ if __name__ == "__main__": # print(pingvin.coils.value(1, debug=DEBUG)) # print(pingvin.coils.fetchValue(1, debug=DEBUG)) # print(pingvin.coils.print()) - app.run(host='0.0.0.0',port=8888,debug=True) + app.run(host='0.0.0.0',port=8888,debug=DEBUG)