From 5a9b5a697fddf199b35f61dc9334fa32027215a8 Mon Sep 17 00:00:00 2001 From: Jarno Rankinen Date: Sun, 15 Jan 2023 19:58:30 +0200 Subject: [PATCH] First steps for Flask API, print returns a string instead of printing, get() function to get values as JSON array, serialize() function to get values as Python list object --- enervent-ctrl-python/src/EnerventCoils.py | 18 ++++++++++++++++-- enervent-ctrl-python/src/enervent-logger.py | 16 ++++++++++++---- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/enervent-ctrl-python/src/EnerventCoils.py b/enervent-ctrl-python/src/EnerventCoils.py index 1adf117..c887c4b 100644 --- a/enervent-ctrl-python/src/EnerventCoils.py +++ b/enervent-ctrl-python/src/EnerventCoils.py @@ -1,5 +1,6 @@ import minimalmodbus import logging +from flask import jsonify class EnerventCoil(): """Single coil data structure""" @@ -115,14 +116,27 @@ class Coils(): return self.value(address, debug) def value(self, address, debug=False): - """Return local coil value""" + """Get single local coil value""" if debug: self.coillogger.debug("Reading coil value from cache") return self.coils[address].value def print(self, debug=False): """Human-readable print of all coil values""" + coilvals = "" for i, coil in enumerate(self.coils): - print(f"Coil {i}\t{coil.value} [{coil.symbol}] ({coil.description})") + coilvals = coilvals + f"Coil {i}\t{coil.value} [{coil.symbol}] ({coil.description})\n" + return coilvals + + def serialize(self): + """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}) + return coilvals + + def get(self, live=False): + """Return all coil values in JSON format""" + return jsonify(self.serialize()) class PingvinKL(): """Class for communicating with an Enervent Pinvin Kotilämpö ventilation/heating unit""" diff --git a/enervent-ctrl-python/src/enervent-logger.py b/enervent-ctrl-python/src/enervent-logger.py index d1e0db5..ea5d65e 100755 --- a/enervent-ctrl-python/src/enervent-logger.py +++ b/enervent-ctrl-python/src/enervent-logger.py @@ -1,6 +1,7 @@ #!/usr/bin/env python import logging from EnerventCoils import PingvinKL +from flask import Flask VERSION = "0.0.1" DEBUG = False @@ -13,9 +14,16 @@ logging.basicConfig( datefmt='%y/%m/%d %H:%M:%S' ) +pingvin = PingvinKL('/dev/ttyS0',1,debug=DEBUG) +app = Flask(__name__) + +@app.route('/api/v1/coils') +def index(): + return pingvin.coils.get() + if __name__ == "__main__": log.info(f"Starting enervent-logger {VERSION}") - pingvin = PingvinKL('/dev/ttyS0',1,debug=DEBUG) - print(pingvin.coils.value(1, debug=DEBUG)) - print(pingvin.coils.fetchValue(1, debug=DEBUG)) - print(pingvin.coils.print()) + # 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)