PUT /api/v1/coils/<int:address> to flip a coil
This commit is contained in:
parent
609ae0b97f
commit
595b94a896
|
@ -6,13 +6,13 @@ class EnerventCoil():
|
||||||
"""Single coil data structure"""
|
"""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 = False
|
||||||
self.description = description
|
self.description = description
|
||||||
self.reserved = symbol == "reserved" and description == "reserved"
|
self.reserved = symbol == "reserved" and description == "reserved"
|
||||||
|
|
||||||
def serialize(self):
|
def serialize(self):
|
||||||
return {
|
return {
|
||||||
"value": self.value == 1,
|
"value": self.value,
|
||||||
"symbol": self.symbol,
|
"symbol": self.symbol,
|
||||||
"description": self.description,
|
"description": self.description,
|
||||||
"reserved": self.reserved
|
"reserved": self.reserved
|
||||||
|
@ -21,6 +21,9 @@ class EnerventCoil():
|
||||||
def get(self):
|
def get(self):
|
||||||
return jsonify(self.serialize())
|
return jsonify(self.serialize())
|
||||||
|
|
||||||
|
def flip(self):
|
||||||
|
self.value = not self.value
|
||||||
|
|
||||||
class Coils():
|
class Coils():
|
||||||
"""Class for handling Modbus coils"""
|
"""Class for handling Modbus coils"""
|
||||||
coillogger = logging.getLogger(__name__)
|
coillogger = logging.getLogger(__name__)
|
||||||
|
@ -121,14 +124,14 @@ class Coils():
|
||||||
if debug: self.coillogger.info(f"{len(self.coils)} coils registered")
|
if debug: self.coillogger.info(f"{len(self.coils)} coils registered")
|
||||||
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 = bool(curvalues[i])
|
||||||
if debug: 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"""
|
||||||
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 = bool(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):
|
||||||
|
@ -158,6 +161,13 @@ class Coils():
|
||||||
if live: self.update(debug)
|
if live: self.update(debug)
|
||||||
return jsonify(self.serialize(include_reserved))
|
return jsonify(self.serialize(include_reserved))
|
||||||
|
|
||||||
|
def write(self, address):
|
||||||
|
self.pingvin.write_bit(address, int(not self.coils[address].value))
|
||||||
|
if self.pingvin.read_bit(address, 1) != self.coils[address].value:
|
||||||
|
self.coils[address].flip()
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
class PingvinKL():
|
class PingvinKL():
|
||||||
"""Class for communicating with an Enervent Pinvin Kotilämpö ventilation/heating unit"""
|
"""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):
|
||||||
|
|
|
@ -4,7 +4,7 @@ from EnerventCoils import PingvinKL
|
||||||
from flask import Flask, request
|
from flask import Flask, request
|
||||||
|
|
||||||
VERSION = "0.0.1"
|
VERSION = "0.0.1"
|
||||||
DEBUG = False
|
DEBUG = True
|
||||||
|
|
||||||
## Logging configuration
|
## Logging configuration
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
@ -24,15 +24,12 @@ def get_all():
|
||||||
@app.route('/api/v1/coils/<int:address>', methods=["GET","PUT"])
|
@app.route('/api/v1/coils/<int:address>', methods=["GET","PUT"])
|
||||||
def coil(address):
|
def coil(address):
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
coil = pingvin.coils[address].get(debug=DEBUG)
|
coil = pingvin.coils[address].get()
|
||||||
return coil
|
return coil
|
||||||
elif request.method == 'POST':
|
elif request.method == 'PUT':
|
||||||
return False
|
return {"success": pingvin.coils.write(address)}
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
log.info(f"Starting enervent-logger {VERSION}")
|
log.info(f"Starting enervent-logger {VERSION}")
|
||||||
# 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=DEBUG)
|
app.run(host='0.0.0.0',port=8888,debug=DEBUG)
|
||||||
|
|
Loading…
Reference in New Issue