mirror of
https://github.com/PiBrewing/craftbeerpi4.git
synced 2024-11-12 18:27:47 +01:00
!!! DONT USE !!! - feasibility test to add output parameter to actor
This commit is contained in:
parent
90289ef949
commit
1c6dae875c
10 changed files with 233 additions and 13 deletions
|
@ -21,6 +21,7 @@ class CBPiActor(metaclass=ABCMeta):
|
|||
self.state = False
|
||||
self.running = False
|
||||
self.power = 100
|
||||
self.output = 100
|
||||
self.timer = 0
|
||||
|
||||
def init(self):
|
||||
|
@ -71,7 +72,7 @@ class CBPiActor(metaclass=ABCMeta):
|
|||
async def add_config_value(self, name, value, type: ConfigType, description, options=None):
|
||||
await self.cbpi.add(name, value, type, description, options=None)
|
||||
|
||||
async def on(self, power):
|
||||
async def on(self, power, output):
|
||||
'''
|
||||
Code to switch the actor on. Power is provided as integer value
|
||||
|
||||
|
@ -98,3 +99,11 @@ class CBPiActor(metaclass=ABCMeta):
|
|||
return dict(power=self.power)
|
||||
pass
|
||||
|
||||
async def set_output(self,output):
|
||||
'''
|
||||
Code to set power for actor
|
||||
|
||||
:return: dict power
|
||||
'''
|
||||
return dict(output=self.output)
|
||||
pass
|
||||
|
|
|
@ -65,10 +65,10 @@ class CBPiBase(metaclass=ABCMeta):
|
|||
logging.error("Failed to read actor state in step - actor {}".format(id))
|
||||
return False
|
||||
|
||||
async def actor_on(self,id,power=100):
|
||||
async def actor_on(self,id,power=100, output=100):
|
||||
|
||||
try:
|
||||
await self.cbpi.actor.on(id,power)
|
||||
await self.cbpi.actor.on(id,power, output)
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
|
@ -83,3 +83,9 @@ class CBPiBase(metaclass=ABCMeta):
|
|||
await self.cbpi.actor.set_power(id,power)
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
async def actor_set_output(self,id,output):
|
||||
try:
|
||||
await self.cbpi.actor.set_output(id,output)
|
||||
except Exception as e:
|
||||
pass
|
|
@ -56,14 +56,15 @@ class Actor:
|
|||
props: Props = Props()
|
||||
state: bool = False
|
||||
power: int = 100
|
||||
output: int = 100
|
||||
timer: int = 0
|
||||
type: str = None
|
||||
instance: str = None
|
||||
|
||||
def __str__(self):
|
||||
return "name={} props={}, state={}, type={}, power={}, timer={}".format(self.name, self.props, self.state, self.type, self.power, self.timer)
|
||||
return "name={} props={}, state={}, type={}, power={}, output={}, timer={}".format(self.name, self.props, self.state, self.type, self.power, self.output, self.timer)
|
||||
def to_dict(self):
|
||||
return dict(id=self.id, name=self.name, type=self.type, props=self.props.to_dict(), state=self.instance.get_state(), power=self.power, timer=self.timer)
|
||||
return dict(id=self.id, name=self.name, type=self.type, props=self.props.to_dict(), state=self.instance.get_state(), power=self.power, output=self.output, timer=self.timer)
|
||||
|
||||
class DataType(Enum):
|
||||
VALUE="value"
|
||||
|
|
|
@ -9,7 +9,7 @@ class ActorController(BasicController):
|
|||
self.update_key = "actorupdate"
|
||||
self.sorting=True
|
||||
|
||||
async def on(self, id, power=None):
|
||||
async def on(self, id, power=None, output=None):
|
||||
try:
|
||||
item = self.find_by_id(id)
|
||||
if power is None:
|
||||
|
@ -18,14 +18,22 @@ class ActorController(BasicController):
|
|||
power = item.power
|
||||
else:
|
||||
power = 100
|
||||
|
||||
if output is None:
|
||||
logging.info("Output is none")
|
||||
if item.output:
|
||||
output = item.output
|
||||
else:
|
||||
output = 100
|
||||
if item.instance.state is False:
|
||||
await item.instance.on(power)
|
||||
await item.instance.on(power,output)
|
||||
#await self.push_udpate()
|
||||
self.cbpi.ws.send(dict(topic=self.update_key, data=list(map(lambda item: item.to_dict(), self.data))),self.sorting)
|
||||
self.cbpi.push_update("cbpi/actorupdate/{}".format(id), item.to_dict(), True)
|
||||
else:
|
||||
await self.set_power(id, power)
|
||||
|
||||
await self.set_output(id, output)
|
||||
|
||||
except Exception as e:
|
||||
logging.error("Failed to switch on Actor {} {}".format(id, e))
|
||||
|
||||
|
@ -57,10 +65,18 @@ class ActorController(BasicController):
|
|||
except Exception as e:
|
||||
logging.error("Failed to set power {} {}".format(id, e))
|
||||
|
||||
async def actor_update(self, id, power):
|
||||
async def set_output(self, id, output):
|
||||
try:
|
||||
item = self.find_by_id(id)
|
||||
await item.instance.set_output(output)
|
||||
except Exception as e:
|
||||
logging.error("Failed to set output {} {}".format(id, e))
|
||||
|
||||
async def actor_update(self, id, power, output):
|
||||
try:
|
||||
item = self.find_by_id(id)
|
||||
item.power = round(power)
|
||||
item.output = round(output)
|
||||
#await self.push_udpate()
|
||||
self.cbpi.ws.send(dict(topic=self.update_key, data=list(map(lambda item: item.to_dict(), self.data))),self.sorting)
|
||||
self.cbpi.push_update("cbpi/actorupdate/{}".format(id), item.to_dict())
|
||||
|
|
|
@ -27,6 +27,7 @@ class SatelliteController:
|
|||
("cbpi/actor/+/on", self._actor_on),
|
||||
("cbpi/actor/+/off", self._actor_off),
|
||||
("cbpi/actor/+/power", self._actor_power),
|
||||
("cbpi/actor/+/output", self._actor_output),
|
||||
("cbpi/updateactor", self._actorupdate),
|
||||
("cbpi/updatekettle", self._kettleupdate),
|
||||
("cbpi/updatesensor", self._sensorupdate),
|
||||
|
@ -123,6 +124,21 @@ class SatelliteController:
|
|||
self.logger.warning("Failed to set actor power via mqtt. No valid power in message")
|
||||
except:
|
||||
self.logger.warning("Failed to set actor power via mqtt")
|
||||
|
||||
async def _actor_output(self, message):
|
||||
try:
|
||||
topic_key = str(message.topic).split("/")
|
||||
try:
|
||||
output=int(message.payload.decode())
|
||||
#if power > 100:
|
||||
# power = 100
|
||||
#if power < 0:
|
||||
# power = 0
|
||||
await self.cbpi.actor.set_output(topic_key[2],output)
|
||||
except:
|
||||
self.logger.warning("Failed to set actor output via mqtt. No valid output in message")
|
||||
except:
|
||||
self.logger.warning("Failed to set actor output via mqtt")
|
||||
|
||||
async def _kettleupdate(self, message):
|
||||
try:
|
||||
|
|
|
@ -61,6 +61,8 @@ class FermenterHysteresis(CBPiFermenterLogic):
|
|||
self.cooler_offset_max = float(self.props.get("CoolerOffsetOff", 0))
|
||||
self.heater_max_power = int(self.props.get("HeaterMaxPower", 100))
|
||||
self.cooler_max_power = int(self.props.get("CoolerMaxPower", 100))
|
||||
self.heater_max_output=self.heater_max_power
|
||||
self.cooler_max_output=self.cooler_max_power
|
||||
|
||||
self.fermenter = self.get_fermenter(self.id)
|
||||
self.heater = self.fermenter.heater
|
||||
|
@ -85,7 +87,7 @@ class FermenterHysteresis(CBPiFermenterLogic):
|
|||
|
||||
if sensor_value + self.heater_offset_min <= target_temp:
|
||||
if self.heater and (heater_state == False):
|
||||
await self.actor_on(self.heater, self.heater_max_power)
|
||||
await self.actor_on(self.heater, self.heater_max_power, self.heater_max_output)
|
||||
|
||||
if sensor_value + self.heater_offset_max >= target_temp:
|
||||
if self.heater and (heater_state == True):
|
||||
|
@ -93,7 +95,7 @@ class FermenterHysteresis(CBPiFermenterLogic):
|
|||
|
||||
if sensor_value >= self.cooler_offset_min + target_temp:
|
||||
if self.cooler and (cooler_state == False):
|
||||
await self.actor_on(self.cooler, self.cooler_max_power)
|
||||
await self.actor_on(self.cooler, self.cooler_max_power, self.cooler_max_output)
|
||||
|
||||
if sensor_value <= self.cooler_offset_max + target_temp:
|
||||
if self.cooler and (cooler_state == True):
|
||||
|
|
|
@ -24,7 +24,7 @@ class DummyActor(CBPiActor):
|
|||
async def start(self):
|
||||
await super().start()
|
||||
|
||||
async def on(self, power=0):
|
||||
async def on(self, power=0, output=0):
|
||||
logger.info("ACTOR %s ON " % self.id)
|
||||
self.state = True
|
||||
|
||||
|
|
|
@ -3,9 +3,11 @@
|
|||
{
|
||||
"id": "3CUJte4bkxDMFCtLX8eqsX",
|
||||
"name": "SomeActor",
|
||||
"output": 100,
|
||||
"power": 100,
|
||||
"props": {},
|
||||
"state": false,
|
||||
"timer": 0,
|
||||
"type": "DummyActor"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -41,6 +41,128 @@
|
|||
"type": "select",
|
||||
"value": "Yes"
|
||||
},
|
||||
"AutoReboot": {
|
||||
"description": "Reboot Pi once a day at selected time",
|
||||
"name": "AutoReboot",
|
||||
"options": [
|
||||
{
|
||||
"label": "Yes",
|
||||
"value": "Yes"
|
||||
},
|
||||
{
|
||||
"label": "No",
|
||||
"value": "No"
|
||||
}
|
||||
],
|
||||
"source": "cbpi4-system",
|
||||
"type": "select",
|
||||
"value": "No"
|
||||
},
|
||||
"AutoRebootTime": {
|
||||
"description": "Time for daily reboot",
|
||||
"name": "AutoRebootTime",
|
||||
"options": [
|
||||
{
|
||||
"label": "0",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"label": "1",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"label": "2",
|
||||
"value": 2
|
||||
},
|
||||
{
|
||||
"label": "3",
|
||||
"value": 3
|
||||
},
|
||||
{
|
||||
"label": "4",
|
||||
"value": 4
|
||||
},
|
||||
{
|
||||
"label": "5",
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"label": "6",
|
||||
"value": 6
|
||||
},
|
||||
{
|
||||
"label": "7",
|
||||
"value": 7
|
||||
},
|
||||
{
|
||||
"label": "8",
|
||||
"value": 8
|
||||
},
|
||||
{
|
||||
"label": "9",
|
||||
"value": 9
|
||||
},
|
||||
{
|
||||
"label": "10",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"label": "11",
|
||||
"value": 11
|
||||
},
|
||||
{
|
||||
"label": "12",
|
||||
"value": 12
|
||||
},
|
||||
{
|
||||
"label": "13",
|
||||
"value": 13
|
||||
},
|
||||
{
|
||||
"label": "14",
|
||||
"value": 14
|
||||
},
|
||||
{
|
||||
"label": "15",
|
||||
"value": 15
|
||||
},
|
||||
{
|
||||
"label": "16",
|
||||
"value": 16
|
||||
},
|
||||
{
|
||||
"label": "17",
|
||||
"value": 17
|
||||
},
|
||||
{
|
||||
"label": "18",
|
||||
"value": 18
|
||||
},
|
||||
{
|
||||
"label": "19",
|
||||
"value": 19
|
||||
},
|
||||
{
|
||||
"label": "20",
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"label": "21",
|
||||
"value": 21
|
||||
},
|
||||
{
|
||||
"label": "22",
|
||||
"value": 22
|
||||
},
|
||||
{
|
||||
"label": "23",
|
||||
"value": 23
|
||||
}
|
||||
],
|
||||
"source": "cbpi4-system",
|
||||
"type": "select",
|
||||
"value": "0"
|
||||
},
|
||||
"BREWERY_NAME": {
|
||||
"description": "Brewery Name",
|
||||
"name": "BREWERY_NAME",
|
||||
|
@ -80,7 +202,7 @@
|
|||
"options": null,
|
||||
"source": "hidden",
|
||||
"type": "string",
|
||||
"value": "4.3.2.a6"
|
||||
"value": "4.4.3"
|
||||
},
|
||||
"CSVLOGFILES": {
|
||||
"description": "Write sensor data to csv logfiles (enabling requires restart)",
|
||||
|
@ -302,6 +424,14 @@
|
|||
"type": "select",
|
||||
"value": "C"
|
||||
},
|
||||
"TasmotaTopic": {
|
||||
"description": "Tasmota MQTT Topic",
|
||||
"name": "TasmotaTopic",
|
||||
"options": null,
|
||||
"source": "craftbeerpi",
|
||||
"type": "string",
|
||||
"value": ""
|
||||
},
|
||||
"brewfather_api_key": {
|
||||
"description": "Brewfather API Key",
|
||||
"name": "brewfather_api_key",
|
||||
|
@ -310,6 +440,35 @@
|
|||
"type": "string",
|
||||
"value": ""
|
||||
},
|
||||
"brewfather_list_length": {
|
||||
"description": "Brewfather Recipe List length",
|
||||
"name": "brewfather_list_length",
|
||||
"options": [
|
||||
{
|
||||
"label": "5",
|
||||
"value": 5
|
||||
},
|
||||
{
|
||||
"label": "10",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"label": "25",
|
||||
"value": 25
|
||||
},
|
||||
{
|
||||
"label": "50",
|
||||
"value": 50
|
||||
},
|
||||
{
|
||||
"label": "100",
|
||||
"value": 100
|
||||
}
|
||||
],
|
||||
"source": "craftbeerpi",
|
||||
"type": "select",
|
||||
"value": 50
|
||||
},
|
||||
"brewfather_user_id": {
|
||||
"description": "Brewfather User ID",
|
||||
"name": "brewfather_user_id",
|
||||
|
@ -318,6 +477,14 @@
|
|||
"type": "string",
|
||||
"value": ""
|
||||
},
|
||||
"cbpi4-system_update": {
|
||||
"description": "cbpi4 system version update",
|
||||
"name": "cbpi4-system_update",
|
||||
"options": null,
|
||||
"source": "hidden",
|
||||
"type": "string",
|
||||
"value": "0.0.9a6"
|
||||
},
|
||||
"current_dashboard_number": {
|
||||
"description": "Number of current Dashboard",
|
||||
"name": "current_dashboard_number",
|
||||
|
|
|
@ -18,3 +18,4 @@ password: 123
|
|||
plugins:
|
||||
- cbpi4ui
|
||||
|
||||
mqtt_offset: false
|
||||
|
|
Loading…
Reference in a new issue