allow float values for kettle target temp

This commit is contained in:
avollkopf 2023-02-11 15:30:19 +01:00
parent 616503eed6
commit be59c7c9e4
6 changed files with 60 additions and 22 deletions

View file

@ -1,3 +1,3 @@
__version__ = "4.1.1" __version__ = "4.1.2"
__codename__ = "Groundhog Day" __codename__ = "Groundhog Day"

View file

@ -89,7 +89,7 @@ class Kettle:
heater: Actor = None heater: Actor = None
sensor: Sensor = None sensor: Sensor = None
type: str = None type: str = None
target_temp: int = 0 target_temp: float = 0
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)

View file

@ -388,7 +388,7 @@ class BoilStep(CBPiStep):
self.kettle=self.get_kettle(self.props.get("Kettle", None)) self.kettle=self.get_kettle(self.props.get("Kettle", None))
if self.kettle is not None: if self.kettle is not None:
self.kettle.target_temp = int(self.props.get("Temp", 0)) self.kettle.target_temp = float(self.props.get("Temp", 0))
if self.cbpi.kettle is not None and self.timer is None: if self.cbpi.kettle is not None and self.timer is None:
self.timer = Timer(int(self.props.get("Timer", 0)) *60 ,on_update=self.on_timer_update, on_done=self.on_timer_done) self.timer = Timer(int(self.props.get("Timer", 0)) *60 ,on_update=self.on_timer_update, on_done=self.on_timer_done)
@ -450,7 +450,7 @@ class BoilStep(CBPiStep):
self.cbpi.notify("Please remove lid!", "Reached temp close to boiling", NotificationType.INFO) self.cbpi.notify("Please remove lid!", "Reached temp close to boiling", NotificationType.INFO)
self.lid_flag = False self.lid_flag = False
if sensor_value >= int(self.props.get("Temp", 0)) and self.timer.is_running is not True: if sensor_value >= float(self.props.get("Temp", 0)) and self.timer.is_running is not True:
self.timer.start() self.timer.start()
self.timer.is_running = True self.timer.is_running = True
estimated_completion_time = datetime.fromtimestamp(time.time()+ (int(self.props.get("Timer", 0)))*60) estimated_completion_time = datetime.fromtimestamp(time.time()+ (int(self.props.get("Timer", 0)))*60)
@ -496,7 +496,7 @@ class CooldownStep(CBPiStep):
self.kettle = self.get_kettle(self.props.get("Kettle", None)) self.kettle = self.get_kettle(self.props.get("Kettle", None))
self.actor = self.props.get("Actor", None) self.actor = self.props.get("Actor", None)
self.target_temp = int(self.props.get("Temp",0)) self.target_temp = int(self.props.get("Temp",0))
self.Interval = 15 # Interval in minutes on how often cooldwon end time is calculated self.Interval = 10 # Interval in minutes on how often cooldwon end time is calculated
self.cbpi.notify(self.name, 'Cool down to {}°'.format(self.target_temp), NotificationType.INFO) self.cbpi.notify(self.name, 'Cool down to {}°'.format(self.target_temp), NotificationType.INFO)
if self.timer is None: if self.timer is None:
@ -526,7 +526,7 @@ class CooldownStep(CBPiStep):
await self.push_update() await self.push_update()
while self.running == True: while self.running == True:
current_temp = self.get_sensor_value(self.props.get("Sensor", None)).get("value") current_temp = self.get_sensor_value(self.props.get("Sensor", None)).get("value")
if self.count == 10: if self.count == 3:
self.temp_array.append(current_temp) self.temp_array.append(current_temp)
current_time = time.time() current_time = time.time()
if self.initial_date == None: if self.initial_date == None:
@ -541,6 +541,10 @@ class CooldownStep(CBPiStep):
target_timestring= datetime.fromtimestamp(target_time) target_timestring= datetime.fromtimestamp(target_time)
self.summary="ECT: {}".format(target_timestring.strftime("%H:%M")) self.summary="ECT: {}".format(target_timestring.strftime("%H:%M"))
self.cbpi.notify("Cooldown Step","Current: {}°, reaching {}° at {}".format(round(current_temp,1), self.target_temp, target_timestring.strftime("%d.%m %H:%M")), NotificationType.INFO) self.cbpi.notify("Cooldown Step","Current: {}°, reaching {}° at {}".format(round(current_temp,1), self.target_temp, target_timestring.strftime("%d.%m %H:%M")), NotificationType.INFO)
self.temp_array = []
self.time_array = []
self.temp_array.append(self.get_sensor_value(self.props.get("Sensor", None)).get("value"))
self.time_array.append(time.time())
await self.push_update() await self.push_update()
if current_temp <= self.target_temp and self.timer.is_running is not True: if current_temp <= self.target_temp and self.timer.is_running is not True:

View file

@ -1,6 +1,6 @@
Metadata-Version: 2.1 Metadata-Version: 2.1
Name: cbpi4 Name: cbpi4
Version: 4.0.6 Version: 4.1.1
Summary: CraftBeerPi4 Brewing Software Summary: CraftBeerPi4 Brewing Software
Home-page: http://web.craftbeerpi.com Home-page: http://web.craftbeerpi.com
Author: Manuel Fritsch / Alexander Vollkopf Author: Manuel Fritsch / Alexander Vollkopf

View file

@ -42,7 +42,6 @@ cbpi/config/plugin_list.txt
cbpi/config/sensor.json cbpi/config/sensor.json
cbpi/config/splash.png cbpi/config/splash.png
cbpi/config/step_data.json cbpi/config/step_data.json
cbpi/config/dashboard/cbpi_dashboard_1.json
cbpi/controller/__init__.py cbpi/controller/__init__.py
cbpi/controller/actor_controller.py cbpi/controller/actor_controller.py
cbpi/controller/basic_controller2.py cbpi/controller/basic_controller2.py
@ -64,40 +63,60 @@ cbpi/controller/upload_controller.py
cbpi/extension/__init__.py cbpi/extension/__init__.py
cbpi/extension/ConfigUpdate/__init__.py cbpi/extension/ConfigUpdate/__init__.py
cbpi/extension/ConfigUpdate/config.yaml cbpi/extension/ConfigUpdate/config.yaml
cbpi/extension/ConfigUpdate/__pycache__/__init__.cpython-310.pyc
cbpi/extension/ConfigUpdate/__pycache__/__init__.cpython-311.pyc
cbpi/extension/ConfigUpdate/__pycache__/__init__.cpython-37.pyc cbpi/extension/ConfigUpdate/__pycache__/__init__.cpython-37.pyc
cbpi/extension/ConfigUpdate/__pycache__/__init__.cpython-39.pyc cbpi/extension/ConfigUpdate/__pycache__/__init__.cpython-39.pyc
cbpi/extension/FermentationStep/__init__.py cbpi/extension/FermentationStep/__init__.py
cbpi/extension/FermentationStep/config.yaml cbpi/extension/FermentationStep/config.yaml
cbpi/extension/FermentationStep/__pycache__/__init__.cpython-310.pyc
cbpi/extension/FermentationStep/__pycache__/__init__.cpython-311.pyc
cbpi/extension/FermentationStep/__pycache__/__init__.cpython-37.pyc cbpi/extension/FermentationStep/__pycache__/__init__.cpython-37.pyc
cbpi/extension/FermentationStep/__pycache__/__init__.cpython-39.pyc cbpi/extension/FermentationStep/__pycache__/__init__.cpython-39.pyc
cbpi/extension/FermenterHysteresis/__init__.py cbpi/extension/FermenterHysteresis/__init__.py
cbpi/extension/FermenterHysteresis/config.yaml cbpi/extension/FermenterHysteresis/config.yaml
cbpi/extension/FermenterHysteresis/__pycache__/__init__.cpython-310.pyc
cbpi/extension/FermenterHysteresis/__pycache__/__init__.cpython-311.pyc
cbpi/extension/FermenterHysteresis/__pycache__/__init__.cpython-37.pyc cbpi/extension/FermenterHysteresis/__pycache__/__init__.cpython-37.pyc
cbpi/extension/FermenterHysteresis/__pycache__/__init__.cpython-39.pyc cbpi/extension/FermenterHysteresis/__pycache__/__init__.cpython-39.pyc
cbpi/extension/__pycache__/__init__.cpython-310.pyc
cbpi/extension/__pycache__/__init__.cpython-311.pyc
cbpi/extension/__pycache__/__init__.cpython-37.pyc cbpi/extension/__pycache__/__init__.cpython-37.pyc
cbpi/extension/__pycache__/__init__.cpython-39.pyc cbpi/extension/__pycache__/__init__.cpython-39.pyc
cbpi/extension/dummyactor/__init__.py cbpi/extension/dummyactor/__init__.py
cbpi/extension/dummyactor/config.yaml cbpi/extension/dummyactor/config.yaml
cbpi/extension/dummyactor/__pycache__/__init__.cpython-310.pyc
cbpi/extension/dummyactor/__pycache__/__init__.cpython-311.pyc
cbpi/extension/dummyactor/__pycache__/__init__.cpython-37.pyc cbpi/extension/dummyactor/__pycache__/__init__.cpython-37.pyc
cbpi/extension/dummyactor/__pycache__/__init__.cpython-39.pyc cbpi/extension/dummyactor/__pycache__/__init__.cpython-39.pyc
cbpi/extension/dummysensor/__init__.py cbpi/extension/dummysensor/__init__.py
cbpi/extension/dummysensor/config.yaml cbpi/extension/dummysensor/config.yaml
cbpi/extension/dummysensor/__pycache__/__init__.cpython-310.pyc
cbpi/extension/dummysensor/__pycache__/__init__.cpython-311.pyc
cbpi/extension/dummysensor/__pycache__/__init__.cpython-37.pyc cbpi/extension/dummysensor/__pycache__/__init__.cpython-37.pyc
cbpi/extension/dummysensor/__pycache__/__init__.cpython-39.pyc cbpi/extension/dummysensor/__pycache__/__init__.cpython-39.pyc
cbpi/extension/gpioactor/__init__.py cbpi/extension/gpioactor/__init__.py
cbpi/extension/gpioactor/config.yaml cbpi/extension/gpioactor/config.yaml
cbpi/extension/gpioactor/__pycache__/__init__.cpython-310.pyc
cbpi/extension/gpioactor/__pycache__/__init__.cpython-311.pyc
cbpi/extension/gpioactor/__pycache__/__init__.cpython-37.pyc cbpi/extension/gpioactor/__pycache__/__init__.cpython-37.pyc
cbpi/extension/gpioactor/__pycache__/__init__.cpython-39.pyc cbpi/extension/gpioactor/__pycache__/__init__.cpython-39.pyc
cbpi/extension/httpsensor/__init__.py cbpi/extension/httpsensor/__init__.py
cbpi/extension/httpsensor/config.yaml cbpi/extension/httpsensor/config.yaml
cbpi/extension/httpsensor/__pycache__/__init__.cpython-310.pyc
cbpi/extension/httpsensor/__pycache__/__init__.cpython-311.pyc
cbpi/extension/httpsensor/__pycache__/__init__.cpython-37.pyc cbpi/extension/httpsensor/__pycache__/__init__.cpython-37.pyc
cbpi/extension/httpsensor/__pycache__/__init__.cpython-39.pyc cbpi/extension/httpsensor/__pycache__/__init__.cpython-39.pyc
cbpi/extension/hysteresis/__init__.py cbpi/extension/hysteresis/__init__.py
cbpi/extension/hysteresis/config.yaml cbpi/extension/hysteresis/config.yaml
cbpi/extension/hysteresis/__pycache__/__init__.cpython-310.pyc
cbpi/extension/hysteresis/__pycache__/__init__.cpython-311.pyc
cbpi/extension/hysteresis/__pycache__/__init__.cpython-37.pyc cbpi/extension/hysteresis/__pycache__/__init__.cpython-37.pyc
cbpi/extension/hysteresis/__pycache__/__init__.cpython-39.pyc cbpi/extension/hysteresis/__pycache__/__init__.cpython-39.pyc
cbpi/extension/mashstep/__init__.py cbpi/extension/mashstep/__init__.py
cbpi/extension/mashstep/config.yaml cbpi/extension/mashstep/config.yaml
cbpi/extension/mashstep/__pycache__/__init__.cpython-310.pyc
cbpi/extension/mashstep/__pycache__/__init__.cpython-311.pyc
cbpi/extension/mashstep/__pycache__/__init__.cpython-37.pyc cbpi/extension/mashstep/__pycache__/__init__.cpython-37.pyc
cbpi/extension/mashstep/__pycache__/__init__.cpython-39.pyc cbpi/extension/mashstep/__pycache__/__init__.cpython-39.pyc
cbpi/extension/mqtt_actor/__init__.py cbpi/extension/mqtt_actor/__init__.py
@ -105,24 +124,38 @@ cbpi/extension/mqtt_actor/config.yaml
cbpi/extension/mqtt_actor/generic_mqtt_actor.py cbpi/extension/mqtt_actor/generic_mqtt_actor.py
cbpi/extension/mqtt_actor/mqtt_actor.py cbpi/extension/mqtt_actor/mqtt_actor.py
cbpi/extension/mqtt_actor/tasmota_mqtt_actor.py cbpi/extension/mqtt_actor/tasmota_mqtt_actor.py
cbpi/extension/mqtt_actor/__pycache__/__init__.cpython-310.pyc
cbpi/extension/mqtt_actor/__pycache__/__init__.cpython-311.pyc
cbpi/extension/mqtt_actor/__pycache__/__init__.cpython-37.pyc cbpi/extension/mqtt_actor/__pycache__/__init__.cpython-37.pyc
cbpi/extension/mqtt_actor/__pycache__/__init__.cpython-39.pyc cbpi/extension/mqtt_actor/__pycache__/__init__.cpython-39.pyc
cbpi/extension/mqtt_actor/__pycache__/generic_mqtt_actor.cpython-310.pyc
cbpi/extension/mqtt_actor/__pycache__/generic_mqtt_actor.cpython-311.pyc
cbpi/extension/mqtt_actor/__pycache__/generic_mqtt_actor.cpython-37.pyc cbpi/extension/mqtt_actor/__pycache__/generic_mqtt_actor.cpython-37.pyc
cbpi/extension/mqtt_actor/__pycache__/generic_mqtt_actor.cpython-39.pyc cbpi/extension/mqtt_actor/__pycache__/generic_mqtt_actor.cpython-39.pyc
cbpi/extension/mqtt_actor/__pycache__/mqtt_actor.cpython-310.pyc
cbpi/extension/mqtt_actor/__pycache__/mqtt_actor.cpython-311.pyc
cbpi/extension/mqtt_actor/__pycache__/mqtt_actor.cpython-37.pyc cbpi/extension/mqtt_actor/__pycache__/mqtt_actor.cpython-37.pyc
cbpi/extension/mqtt_actor/__pycache__/mqtt_actor.cpython-39.pyc cbpi/extension/mqtt_actor/__pycache__/mqtt_actor.cpython-39.pyc
cbpi/extension/mqtt_actor/__pycache__/tasmota_mqtt_actor.cpython-310.pyc
cbpi/extension/mqtt_actor/__pycache__/tasmota_mqtt_actor.cpython-311.pyc
cbpi/extension/mqtt_actor/__pycache__/tasmota_mqtt_actor.cpython-37.pyc cbpi/extension/mqtt_actor/__pycache__/tasmota_mqtt_actor.cpython-37.pyc
cbpi/extension/mqtt_actor/__pycache__/tasmota_mqtt_actor.cpython-39.pyc cbpi/extension/mqtt_actor/__pycache__/tasmota_mqtt_actor.cpython-39.pyc
cbpi/extension/mqtt_sensor/__init__.py cbpi/extension/mqtt_sensor/__init__.py
cbpi/extension/mqtt_sensor/config.yaml cbpi/extension/mqtt_sensor/config.yaml
cbpi/extension/mqtt_sensor/__pycache__/__init__.cpython-310.pyc
cbpi/extension/mqtt_sensor/__pycache__/__init__.cpython-311.pyc
cbpi/extension/mqtt_sensor/__pycache__/__init__.cpython-37.pyc cbpi/extension/mqtt_sensor/__pycache__/__init__.cpython-37.pyc
cbpi/extension/mqtt_sensor/__pycache__/__init__.cpython-39.pyc cbpi/extension/mqtt_sensor/__pycache__/__init__.cpython-39.pyc
cbpi/extension/mqtt_util/__init__.py cbpi/extension/mqtt_util/__init__.py
cbpi/extension/mqtt_util/config.yaml cbpi/extension/mqtt_util/config.yaml
cbpi/extension/mqtt_util/__pycache__/__init__.cpython-310.pyc
cbpi/extension/mqtt_util/__pycache__/__init__.cpython-311.pyc
cbpi/extension/mqtt_util/__pycache__/__init__.cpython-37.pyc cbpi/extension/mqtt_util/__pycache__/__init__.cpython-37.pyc
cbpi/extension/mqtt_util/__pycache__/__init__.cpython-39.pyc cbpi/extension/mqtt_util/__pycache__/__init__.cpython-39.pyc
cbpi/extension/onewire/__init__.py cbpi/extension/onewire/__init__.py
cbpi/extension/onewire/config.yaml cbpi/extension/onewire/config.yaml
cbpi/extension/onewire/__pycache__/__init__.cpython-310.pyc
cbpi/extension/onewire/__pycache__/__init__.cpython-311.pyc
cbpi/extension/onewire/__pycache__/__init__.cpython-37.pyc cbpi/extension/onewire/__pycache__/__init__.cpython-37.pyc
cbpi/extension/onewire/__pycache__/__init__.cpython-39.pyc cbpi/extension/onewire/__pycache__/__init__.cpython-39.pyc
cbpi/http_endpoints/__init__.py cbpi/http_endpoints/__init__.py

View file

@ -1,23 +1,24 @@
aiohttp==3.8.1 typing-extensions>=4
aiohttp==3.8.3
aiohttp-auth==0.1.1 aiohttp-auth==0.1.1
aiohttp-route-decorator==0.1.4 aiohttp-route-decorator==0.1.4
aiohttp-security==0.4.0 aiohttp-security==0.4.0
aiohttp-session==2.11.0 aiohttp-session==2.12.0
aiohttp-swagger==1.0.16 aiohttp-swagger==1.0.16
aiojobs==1.0.0 aiojobs==1.1.0
aiosqlite==0.17.0 aiosqlite==0.17.0
cryptography==36.0.1 cryptography==36.0.1
requests==2.27.1 requests==2.28.1
voluptuous==0.12.2 voluptuous==0.13.1
pyfiglet==0.8.post1 pyfiglet==0.8.post1
click==8.0.4 click==8.1.3
shortuuid==1.0.8 shortuuid==1.0.11
tabulate==0.8.9 tabulate==0.9.0
asyncio-mqtt asyncio-mqtt==0.16.1
PyInquirer==1.0.3 inquirer==3.1.1
colorama==0.4.4 colorama==0.4.6
psutil==5.9.0 psutil==5.9.4
cbpi4gui cbpi4gui
importlib_metadata importlib_metadata
numpy==1.22.2 numpy==1.24.1
pandas==1.4.1 pandas==1.5.3