diff --git a/cbpi/__init__.py b/cbpi/__init__.py index 6f09c48..b8b91bd 100644 --- a/cbpi/__init__.py +++ b/cbpi/__init__.py @@ -1 +1 @@ -__version__ = "4.0.1.a1" +__version__ = "4.0.1.a2" diff --git a/cbpi/controller/fermentation_controller.py b/cbpi/controller/fermentation_controller.py index 8623552..4edcd5e 100644 --- a/cbpi/controller/fermentation_controller.py +++ b/cbpi/controller/fermentation_controller.py @@ -88,7 +88,7 @@ class FermentationController: self.logger = logging.getLogger(__name__) self.path = os.path.join(".", 'config', "fermenter_data.json") self._loop = asyncio.get_event_loop() - self.data = {} + self.data = [] self.types = {} self.cbpi.app.on_cleanup.append(self.shutdown) @@ -125,16 +125,14 @@ class FermentationController: self.logger.error(e) async def load(self): - if os.path.exists(self.path) is False: - with open(self.path, "w") as file: - json.dump(dict(basic={}, steps=[]), file, indent=4, sort_keys=True) +# if os.path.exists(self.path) is False: +# with open(self.path, "w") as file: +# json.dump(dict(basic={}, steps=[]), file, indent=4, sort_keys=True) with open(self.path) as json_file: - d = json.load(json_file) - self.data = list(map(lambda item: self._create(item), d)) + data = json.load(json_file) - #for item in self.data: - # logging.info("{} Starting ".format(item.name)) - # await self.start(item.id) + for i in data["data"]: + self.data.append(self._create(i)) def _create_step(self, fermenter, item): id = item.get("id") @@ -159,22 +157,25 @@ class FermentationController: asyncio.create_task(self.start(step_instance.step.fermenter.id)) def _create(self, data): - id = data.get("id") - name = data.get("name") - sensor = data.get("sensor") - heater = data.get("heater") - cooler = data.get("cooler") - logictype = data.get("type") - temp = data.get("target_temp") - brewname = data.get("brewname") - props = Props(data.get("props", {})) - fermenter = Fermenter(id, name, sensor, heater, cooler, brewname, props, temp, logictype) - fermenter.steps = list(map(lambda item: self._create_step(fermenter, item), data.get("steps", []))) - self.push_update() - #self.cbpi.ws.send(dict(topic=self.update_key, data=list(map(lambda item: item.to_dict(), self.data)))) - #self.cbpi.push_update("cbpi/{}/update".format(self.update_key), list(map(lambda item: item.to_dict(), self.data))) - - return fermenter + try: + id = data.get("id") + name = data.get("name") + sensor = data.get("sensor") + heater = data.get("heater") + cooler = data.get("cooler") + logictype = data.get("type") + temp = data.get("target_temp") + brewname = data.get("brewname") + props = Props(data.get("props", {})) + fermenter = Fermenter(id, name, sensor, heater, cooler, brewname, props, temp, logictype) + fermenter.steps = list(map(lambda item: self._create_step(fermenter, item), data.get("steps", []))) + self.push_update() + #self.cbpi.ws.send(dict(topic=self.update_key, data=list(map(lambda item: item.to_dict(), self.data)))) + #self.cbpi.push_update("cbpi/{}/update".format(self.update_key), list(map(lambda item: item.to_dict(), self.data))) + return fermenter + except: + return + def _find_by_id(self, id): return next((item for item in self.data if item.id == id), None) @@ -191,6 +192,9 @@ class FermentationController: def get_state(self): # logging.info("{} Get State".format(self.name)) + if self.data == []: + logging.info(self.data) + return {"data": list(map(lambda x: x.to_dict(), self.data)), "types":self.get_types()} async def get(self, id: str ): @@ -390,4 +394,4 @@ class FermentationController: except Exception as e: self.logger.error(e) - \ No newline at end of file + diff --git a/cbpi/extension/FermenterHysteresis/__init__.py b/cbpi/extension/FermenterHysteresis/__init__.py index d8e4ae9..3f3200d 100644 --- a/cbpi/extension/FermenterHysteresis/__init__.py +++ b/cbpi/extension/FermenterHysteresis/__init__.py @@ -18,26 +18,28 @@ class FermenterAutostart(CBPiExtension): self._task = asyncio.create_task(self.run()) self.controller : FermentationController = cbpi.fermenter - async def run(self): logging.info("Starting Fermenter Autorun") #get all kettles - self.fermenter = self.controller.get_state() - for id in self.fermenter['data']: - try: - self.autostart=(id['props']['AutoStart']) - if self.autostart == "Yes": - fermenter_id=(id['id']) - logging.info("Enabling Autostart for Fermenter {}".format(fermenter_id)) - self.fermenter=self.cbpi.fermenter._find_by_id(fermenter_id) - try: - if (self.fermenter.instance is None or self.fermenter.instance.state == False): - await self.cbpi.fermenter.toggle(self.fermenter.id) - logging.info("Successfully switched on Ferenterlogic for Fermenter {}".format(self.fermenter.id)) - except Exception as e: - logging.error("Failed to switch on FermenterLogic {} {}".format(self.fermenter.id, e)) - except: - pass + try: + self.fermenter = self.controller.get_state() + for id in self.fermenter['data']: + try: + self.autostart=(id['props']['AutoStart']) + if self.autostart == "Yes": + fermenter_id=(id['id']) + logging.info("Enabling Autostart for Fermenter {}".format(fermenter_id)) + self.fermenter=self.cbpi.fermenter._find_by_id(fermenter_id) + try: + if (self.fermenter.instance is None or self.fermenter.instance.state == False): + await self.cbpi.fermenter.toggle(self.fermenter.id) + logging.info("Successfully switched on Ferenterlogic for Fermenter {}".format(self.fermenter.id)) + except Exception as e: + logging.error("Failed to switch on FermenterLogic {} {}".format(self.fermenter.id, e)) + except: + pass + except: + pass @parameters([Property.Number(label="HeaterOffsetOn", configurable=True, description="Offset as decimal number when the heater is switched on. Should be greater then 'HeaterOffsetOff'. For example a value of 2 switches on the heater if the current temperature is 2 degrees below the target temperature"), diff --git a/cbpi/http_endpoints/http_system.py b/cbpi/http_endpoints/http_system.py index 629077d..dddfcdd 100644 --- a/cbpi/http_endpoints/http_system.py +++ b/cbpi/http_endpoints/http_system.py @@ -27,6 +27,12 @@ class SystemHttpEndpoints: "200": description: successful operation """ + try: + fermenter=self.cbpi.fermenter.get_state() + logging.info(fermenter) + except: + logging.info("!!!!!!!!!!!!!!!!!!!!!!!!!Error get fermenter state!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") + return web.json_response(data=dict( actor=self.cbpi.actor.get_state(), fermenter=self.cbpi.fermenter.get_state(),