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

This commit is contained in:
Jarno Rankinen 2023-01-15 21:46:14 +02:00
parent 327c3ecd36
commit 609ae0b97f
2 changed files with 18 additions and 11 deletions

View File

@ -18,6 +18,9 @@ class EnerventCoil():
"reserved": self.reserved "reserved": self.reserved
} }
def get(self):
return jsonify(self.serialize())
class Coils(): class Coils():
"""Class for handling Modbus coils""" """Class for handling Modbus coils"""
coillogger = logging.getLogger(__name__) coillogger = logging.getLogger(__name__)
@ -46,6 +49,7 @@ class Coils():
EnerventCoil(), EnerventCoil(),
EnerventCoil(), EnerventCoil(),
EnerventCoil(), EnerventCoil(),
EnerventCoil(),
EnerventCoil("COIL_AWAY_H", "Heating enabled/disabled in AWAY mode"), EnerventCoil("COIL_AWAY_H", "Heating enabled/disabled in AWAY mode"),
EnerventCoil("COIL_AWAY_C", "Cooling enabled/disabled in AWAY mode"), EnerventCoil("COIL_AWAY_C", "Cooling enabled/disabled in AWAY mode"),
EnerventCoil(), EnerventCoil(),
@ -107,6 +111,9 @@ class Coils():
if debug: self.coillogger.debug("Updating coil values from device") if debug: self.coillogger.debug("Updating coil values from device")
self.update(debug) self.update(debug)
def __getitem__(self, item):
return self.coils[item]
def update(self, debug=False): def update(self, debug=False):
"""Fetch all coils values from device""" """Fetch all coils values from device"""
self.pingvin.serial.timeout = 0.2 self.pingvin.serial.timeout = 0.2
@ -115,7 +122,7 @@ class Coils():
curvalues = self.pingvin.read_bits(0,len(self.coils),1) curvalues = self.pingvin.read_bits(0,len(self.coils),1)
for i, coil in enumerate(self.coils): for i, coil in enumerate(self.coils):
self.coils[i].value = curvalues[i] 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): def fetchValue(self, address, debug=False):
"""Update single coil value from device and return it""" """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" coilvals = coilvals + f"Coil {i}\t{coil.value} [{coil.symbol}] ({coil.description})\n"
return coilvals return coilvals
def serialize(self, include_reserved): def serialize(self, include_reserved=False):
"""Returns coil values as parseable Python object""" """Returns coil values as parseable Python object"""
coilvals = [] coilvals = []
for i, coil in enumerate(self.coils): for i, coil in enumerate(self.coils):
@ -146,8 +153,9 @@ class Coils():
coilvals.append(coil) coilvals.append(coil)
return coilvals 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""" """Return all coil values in JSON format"""
if live: self.update(debug)
return jsonify(self.serialize(include_reserved)) return jsonify(self.serialize(include_reserved))
class PingvinKL(): class PingvinKL():

View File

@ -18,17 +18,16 @@ pingvin = PingvinKL('/dev/ttyS0',1,debug=DEBUG)
app = Flask(__name__) app = Flask(__name__)
@app.route('/api/v1/coils') @app.route('/api/v1/coils')
def get():
return pingvin.coils.get()
@app.route('/api/v1/coils/all')
def get_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/<int:address>', methods=["GET","PUT"]) @app.route('/api/v1/coils/<int:address>', methods=["GET","PUT"])
def get_coil(): def coil(address):
if request.method == 'GET': if request.method == 'GET':
return coil = pingvin.coils[address].get(debug=DEBUG)
return coil
elif request.method == 'POST':
return False
if __name__ == "__main__": if __name__ == "__main__":
@ -36,4 +35,4 @@ if __name__ == "__main__":
# print(pingvin.coils.value(1, debug=DEBUG)) # print(pingvin.coils.value(1, debug=DEBUG))
# print(pingvin.coils.fetchValue(1, debug=DEBUG)) # print(pingvin.coils.fetchValue(1, debug=DEBUG))
# print(pingvin.coils.print()) # 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)