mirror of
https://github.com/PiBrewing/craftbeerpi4.git
synced 2024-11-21 22:48:16 +01:00
Add valve, pressure sensor and target pressure to fermenter class
This commit is contained in:
parent
9677357726
commit
b7d54952d1
6 changed files with 80 additions and 8 deletions
|
@ -1,3 +1,3 @@
|
||||||
__version__ = "4.0.4.a3"
|
__version__ = "4.0.5.a1"
|
||||||
__codename__ = "Spring Break"
|
__codename__ = "Spring Break"
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,12 @@ class CBPiBase(metaclass=ABCMeta):
|
||||||
async def set_fermenter_target_temp(self,id, temp):
|
async def set_fermenter_target_temp(self,id, temp):
|
||||||
await self.cbpi.fermenter.set_target_temp(id, temp)
|
await self.cbpi.fermenter.set_target_temp(id, temp)
|
||||||
|
|
||||||
|
def get_fermenter_target_pressure(self,id):
|
||||||
|
return self.cbpi.fermenter._find_by_id(id).target_pressure
|
||||||
|
|
||||||
|
async def set_fermenter_target_pressure(self,id, temp):
|
||||||
|
await self.cbpi.fermenter.set_target_pressure(id, temp)
|
||||||
|
|
||||||
def get_sensor(self,id):
|
def get_sensor(self,id):
|
||||||
return self.cbpi.sensor.find_by_id(id)
|
return self.cbpi.sensor.find_by_id(id)
|
||||||
|
|
||||||
|
|
|
@ -126,21 +126,23 @@ class Fermenter:
|
||||||
id: str = None
|
id: str = None
|
||||||
name: str = None
|
name: str = None
|
||||||
sensor: Sensor = None
|
sensor: Sensor = None
|
||||||
|
pressure_sensor : Sensor = None
|
||||||
heater: Actor = None
|
heater: Actor = None
|
||||||
cooler: Actor = None
|
cooler: Actor = None
|
||||||
|
valve: Actor = None
|
||||||
brewname: str = None
|
brewname: str = None
|
||||||
description : str = None
|
description : str = None
|
||||||
props: Props = Props()
|
props: Props = Props()
|
||||||
target_temp: float = 0
|
target_temp: float = 0
|
||||||
|
target_pressure: float = 0
|
||||||
type: str = None
|
type: str = None
|
||||||
steps: List[Step]= field(default_factory=list)
|
steps: List[Step]= field(default_factory=list)
|
||||||
instance: str = None
|
instance: str = None
|
||||||
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "name={} props={} temp={}".format(self.name, self.props, self.target_temp)
|
return "name={} props={} temp={}".format(self.name, self.props, self.target_temp, self.target_pressure)
|
||||||
|
|
||||||
# return "id={} name={} sensor={} heater={} cooler={} brewname={} props={} temp={} type={} steps={}".format(self.id, self.name, self.sensor, self.heater, self.cooler, self.brewname, self.props, self.target_temp, self.type, self.steps)
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
|
|
||||||
if self.instance is not None:
|
if self.instance is not None:
|
||||||
|
@ -151,7 +153,7 @@ class Fermenter:
|
||||||
state = False
|
state = False
|
||||||
|
|
||||||
steps = list(map(lambda item: item.to_dict(), self.steps))
|
steps = list(map(lambda item: item.to_dict(), self.steps))
|
||||||
return dict(id=self.id, name=self.name, state=state, sensor=self.sensor, heater=self.heater, cooler=self.cooler, brewname=self.brewname, description=self.description, props=self.props.to_dict() if self.props is not None else None, target_temp=self.target_temp, type=self.type, steps=steps)
|
return dict(id=self.id, name=self.name, state=state, sensor=self.sensor, pressure_sensor=self.pressure_sensor, heater=self.heater, cooler=self.cooler, valve=self.valve, brewname=self.brewname, description=self.description, props=self.props.to_dict() if self.props is not None else None, target_temp=self.target_temp, target_pressure=self.target_pressure, type=self.type, steps=steps)
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|
|
@ -114,14 +114,17 @@ class FermentationController:
|
||||||
id = data.get("id")
|
id = data.get("id")
|
||||||
name = data.get("name")
|
name = data.get("name")
|
||||||
sensor = data.get("sensor")
|
sensor = data.get("sensor")
|
||||||
|
pressure_sensor = data.get("pressure_sensor")
|
||||||
heater = data.get("heater")
|
heater = data.get("heater")
|
||||||
cooler = data.get("cooler")
|
cooler = data.get("cooler")
|
||||||
|
valve = data.get("valve")
|
||||||
logictype = data.get("type")
|
logictype = data.get("type")
|
||||||
temp = data.get("target_temp")
|
temp = data.get("target_temp")
|
||||||
|
pressure = data.get("target_pressure")
|
||||||
brewname = data.get("brewname")
|
brewname = data.get("brewname")
|
||||||
description = data.get("description")
|
description = data.get("description")
|
||||||
props = Props(data.get("props", {}))
|
props = Props(data.get("props", {}))
|
||||||
fermenter = Fermenter(id, name, sensor, heater, cooler, brewname, description, props, temp, logictype)
|
fermenter = Fermenter(id, name, sensor, pressure_sensor, heater, cooler, valve, brewname, description, props, temp, pressure, logictype)
|
||||||
fermenter.steps = list(map(lambda item: self._create_step(fermenter, item), data.get("steps", [])))
|
fermenter.steps = list(map(lambda item: self._create_step(fermenter, item), data.get("steps", [])))
|
||||||
self.push_update()
|
self.push_update()
|
||||||
return fermenter
|
return fermenter
|
||||||
|
@ -197,13 +200,16 @@ class FermentationController:
|
||||||
def _update(old_item: Fermenter, item: Fermenter):
|
def _update(old_item: Fermenter, item: Fermenter):
|
||||||
old_item.name = item.name
|
old_item.name = item.name
|
||||||
old_item.sensor = item.sensor
|
old_item.sensor = item.sensor
|
||||||
|
old_item.pressure_sensor = item.pressure_sensor
|
||||||
old_item.heater = item.heater
|
old_item.heater = item.heater
|
||||||
old_item.cooler = item.cooler
|
old_item.cooler = item.cooler
|
||||||
|
old_item.valve = item.valve
|
||||||
old_item.type = item.type
|
old_item.type = item.type
|
||||||
old_item.brewname = item.brewname
|
old_item.brewname = item.brewname
|
||||||
old_item.description = item.description
|
old_item.description = item.description
|
||||||
old_item.props = item.props
|
old_item.props = item.props
|
||||||
old_item.target_temp = item.target_temp
|
old_item.target_temp = item.target_temp
|
||||||
|
old_item.target_pressure = item.target_pressure
|
||||||
return old_item
|
return old_item
|
||||||
|
|
||||||
self.data = list(map(lambda old: _update(old, item) if old.id == item.id else old, self.data))
|
self.data = list(map(lambda old: _update(old, item) if old.id == item.id else old, self.data))
|
||||||
|
@ -222,6 +228,17 @@ class FermentationController:
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error("Failed to set Target Temp {} {}".format(id, e))
|
logging.error("Failed to set Target Temp {} {}".format(id, e))
|
||||||
|
|
||||||
|
async def set_target_pressure(self, id: str, target_pressure):
|
||||||
|
try:
|
||||||
|
item = self._find_by_id(id)
|
||||||
|
logging.info(item.target_pressure)
|
||||||
|
if item:
|
||||||
|
item.target_pressure = target_pressure
|
||||||
|
self.save()
|
||||||
|
self.push_update()
|
||||||
|
except Exception as e:
|
||||||
|
logging.error("Failed to set Target Pressure {} {}".format(id, e))
|
||||||
|
|
||||||
async def delete(self, id: str ):
|
async def delete(self, id: str ):
|
||||||
item = self._find_by_id(id)
|
item = self._find_by_id(id)
|
||||||
self.data = list(filter(lambda item: item.id != id, self.data))
|
self.data = list(filter(lambda item: item.id != id, self.data))
|
||||||
|
|
|
@ -46,7 +46,7 @@ class ConfigUpdate(CBPiExtension):
|
||||||
influxdbpwd = self.cbpi.config.get("INFLUXDBPWD", None)
|
influxdbpwd = self.cbpi.config.get("INFLUXDBPWD", None)
|
||||||
influxdbcloud = self.cbpi.config.get("INFLUXDBCLOUD", None)
|
influxdbcloud = self.cbpi.config.get("INFLUXDBCLOUD", None)
|
||||||
mqttupdate = self.cbpi.config.get("MQTTUpdate", None)
|
mqttupdate = self.cbpi.config.get("MQTTUpdate", None)
|
||||||
|
PRESSURE_UNIT = self.cbpi.config.get("PRESSURE_UNIT", None)
|
||||||
|
|
||||||
|
|
||||||
if boil_temp is None:
|
if boil_temp is None:
|
||||||
|
@ -276,6 +276,15 @@ class ConfigUpdate(CBPiExtension):
|
||||||
except:
|
except:
|
||||||
logger.warning('Unable to update database')
|
logger.warning('Unable to update database')
|
||||||
|
|
||||||
|
## Check if PRESSURE_UNIT is in config
|
||||||
|
if PRESSURE_UNIT is None:
|
||||||
|
logger.info("INIT PRESSURE_UNIT")
|
||||||
|
try:
|
||||||
|
await self.cbpi.config.add("PRESSURE_UNIT", "kPa", ConfigType.SELECT, "Set unit for pressure",
|
||||||
|
[{"label": "kPa", "value": "kPa"},
|
||||||
|
{"label": "PSI", "value": "PSI"}])
|
||||||
|
except:
|
||||||
|
logger.warning('Unable to update config')
|
||||||
|
|
||||||
def setup(cbpi):
|
def setup(cbpi):
|
||||||
cbpi.plugin.register("ConfigUpdate", ConfigUpdate)
|
cbpi.plugin.register("ConfigUpdate", ConfigUpdate)
|
||||||
|
|
|
@ -77,7 +77,9 @@ class FermentationHttpEndpoints():
|
||||||
description: successful operation
|
description: successful operation
|
||||||
"""
|
"""
|
||||||
data = await request.json()
|
data = await request.json()
|
||||||
fermenter = Fermenter(id=id, name=data.get("name"), sensor=data.get("sensor"), heater=data.get("heater"), cooler=data.get("cooler"), brewname=data.get("brewname"), description=data.get("description"), target_temp=data.get("target_temp"), props=Props(data.get("props", {})), type=data.get("type"))
|
fermenter = Fermenter(id=id, name=data.get("name"), sensor=data.get("sensor"), pressure_sensor=data.get("pressure_sensor"), heater=data.get("heater"),
|
||||||
|
cooler=data.get("cooler"), valve=data.get("valve"), brewname=data.get("brewname"), description=data.get("description"),
|
||||||
|
target_temp=data.get("target_temp"), target_pressure=data.get("target_pressure"), props=Props(data.get("props", {})), type=data.get("type"))
|
||||||
response_data = await self.controller.create(fermenter)
|
response_data = await self.controller.create(fermenter)
|
||||||
return web.json_response(data=response_data.to_dict())
|
return web.json_response(data=response_data.to_dict())
|
||||||
|
|
||||||
|
@ -115,7 +117,9 @@ class FermentationHttpEndpoints():
|
||||||
"""
|
"""
|
||||||
id = request.match_info['id']
|
id = request.match_info['id']
|
||||||
data = await request.json()
|
data = await request.json()
|
||||||
fermenter = Fermenter(id=id, name=data.get("name"), sensor=data.get("sensor"), heater=data.get("heater"), cooler=data.get("cooler"), brewname=data.get("brewname"), description=data.get("description"), target_temp=data.get("target_temp"), props=Props(data.get("props", {})), type=data.get("type"))
|
fermenter = Fermenter(id=id, name=data.get("name"), sensor=data.get("sensor"), pressure_sensor=data.get("pressure_sensor"), heater=data.get("heater"),
|
||||||
|
cooler=data.get("cooler"), valve=data.get("valve"), brewname=data.get("brewname"), description=data.get("description"),
|
||||||
|
target_temp=data.get("target_temp"), target_pressure=data.get("target_pressure"), props=Props(data.get("props", {})), type=data.get("type"))
|
||||||
return web.json_response(data=(await self.controller.update(fermenter)).to_dict())
|
return web.json_response(data=(await self.controller.update(fermenter)).to_dict())
|
||||||
|
|
||||||
@request_mapping(path="/{id}", method="DELETE", auth_required=False)
|
@request_mapping(path="/{id}", method="DELETE", auth_required=False)
|
||||||
|
@ -284,6 +288,40 @@ class FermentationHttpEndpoints():
|
||||||
await self.controller.set_target_temp(id,data.get("temp"))
|
await self.controller.set_target_temp(id,data.get("temp"))
|
||||||
return web.Response(status=204)
|
return web.Response(status=204)
|
||||||
|
|
||||||
|
@request_mapping(path="/{id}/target_pressure", method="POST", auth_required=auth)
|
||||||
|
async def http_target_pressure(self, request) -> web.Response:
|
||||||
|
"""
|
||||||
|
|
||||||
|
---
|
||||||
|
description: Set Target pressure for Fermenter
|
||||||
|
tags:
|
||||||
|
- Fermenter
|
||||||
|
parameters:
|
||||||
|
- name: "id"
|
||||||
|
in: "path"
|
||||||
|
description: "Fermenter ID"
|
||||||
|
required: true
|
||||||
|
type: "integer"
|
||||||
|
format: "int64"
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
description: Update Pressure
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
temp:
|
||||||
|
type: integer
|
||||||
|
responses:
|
||||||
|
"204":
|
||||||
|
description: successful operation
|
||||||
|
"""
|
||||||
|
id = request.match_info['id']
|
||||||
|
data = await request.json()
|
||||||
|
await self.controller.set_target_pressure(id,data.get("pressure"))
|
||||||
|
return web.Response(status=204)
|
||||||
|
|
||||||
|
|
||||||
@request_mapping(path="/{id}/addstep", method="POST", auth_required=False)
|
@request_mapping(path="/{id}/addstep", method="POST", auth_required=False)
|
||||||
async def http_add_step(self, request):
|
async def http_add_step(self, request):
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue