juham-automation 0.0.10__py3-none-any.whl → 0.0.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- juham_automation/automation/hotwateroptimizer.py +9 -15
- juham_automation/automation/spothintafi.py +18 -12
- {juham_automation-0.0.10.dist-info → juham_automation-0.0.12.dist-info}/METADATA +4 -5
- {juham_automation-0.0.10.dist-info → juham_automation-0.0.12.dist-info}/RECORD +8 -8
- {juham_automation-0.0.10.dist-info → juham_automation-0.0.12.dist-info}/WHEEL +1 -1
- {juham_automation-0.0.10.dist-info → juham_automation-0.0.12.dist-info}/LICENSE.rst +0 -0
- {juham_automation-0.0.10.dist-info → juham_automation-0.0.12.dist-info}/entry_points.txt +0 -0
- {juham_automation-0.0.10.dist-info → juham_automation-0.0.12.dist-info}/top_level.txt +0 -0
@@ -19,30 +19,24 @@ class HotWaterOptimizer(Juham):
|
|
19
19
|
water radiators. Reads spot prices, electricity forecast and temperatures to minimize electricity bill.
|
20
20
|
Additional control over heating is provided by the following attributes
|
21
21
|
|
22
|
-
Attributes:
|
23
|
-
schedule_start_hour (float): hour heating can start, in local time
|
24
|
-
schedule_stop_hour (float): hour heating is forced to stop
|
25
|
-
start_hour (float): start_hour (int): ordinal of the first allowed electricity price slot to be consumed
|
26
|
-
num_hours (int): the number of hour slots allowed
|
27
|
-
|
28
22
|
Computes UOI - optimization utilization index for each hour, based on the spot price and the solar power forecast.
|
29
23
|
Value of 0 means the hour is expensive, value of 1 means the hour is free. The UOI threshold determines the slots
|
30
24
|
that are allowed to be consumed.
|
31
25
|
|
32
26
|
|
33
27
|
"""
|
34
|
-
|
35
|
-
maximum_boiler_temperature = 70
|
36
|
-
minimum_boiler_temperature = 40
|
28
|
+
#: Description of the attribute
|
29
|
+
maximum_boiler_temperature : float = 70
|
30
|
+
minimum_boiler_temperature : float = 40
|
37
31
|
energy_balancing_interval: float = 3600
|
38
|
-
radiator_power = 3000
|
39
|
-
operation_threshold = 5 * 60
|
40
|
-
heating_hours_per_day = 4
|
32
|
+
radiator_power : float = 3000
|
33
|
+
operation_threshold : float = 5 * 60
|
34
|
+
heating_hours_per_day : float = 4
|
41
35
|
schedule_start_hour: float = 0
|
42
36
|
schedule_stop_hour: float = 0
|
43
|
-
timezone = "Europe/Helsinki"
|
44
|
-
expected_average_price = 0.2
|
45
|
-
uoi_threshold = 0.8
|
37
|
+
timezone : str = "Europe/Helsinki"
|
38
|
+
expected_average_price : float = 0.2
|
39
|
+
uoi_threshold : float = 0.8
|
46
40
|
|
47
41
|
def __init__(
|
48
42
|
self,
|
@@ -12,7 +12,7 @@ class SpotHintaFiThread(JuhamCloudThread):
|
|
12
12
|
"""Thread running SpotHinta.fi.
|
13
13
|
|
14
14
|
Periodically fetches the spot electricity prices and publishes them
|
15
|
-
to
|
15
|
+
to 'spot' topic.
|
16
16
|
"""
|
17
17
|
|
18
18
|
_spot_topic: str = ""
|
@@ -52,25 +52,30 @@ class SpotHintaFiThread(JuhamCloudThread):
|
|
52
52
|
|
53
53
|
spot = []
|
54
54
|
for e in data:
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
dt = datetime.fromisoformat(e["DateTime"]) # Correct timezone handling
|
56
|
+
ts = int(dt.timestamp()) # Ensure integer timestamps like in the test
|
57
|
+
|
58
|
+
hour = dt.strftime("%H") # Correctly extract hour
|
59
|
+
|
60
|
+
if 6 <= int(hour) < 22:
|
60
61
|
grid_cost = self.grid_cost_day
|
61
62
|
else:
|
62
63
|
grid_cost = self.grid_cost_night
|
63
|
-
|
64
|
+
|
65
|
+
total_price = round(e["PriceWithTax"] + grid_cost + self.grid_cost_tax, 6)
|
66
|
+
grid_cost_total = round(grid_cost + self.grid_cost_tax, 6)
|
67
|
+
|
64
68
|
h = {
|
65
69
|
"Timestamp": ts,
|
66
70
|
"hour": hour,
|
67
71
|
"Rank": e["Rank"],
|
68
72
|
"PriceWithTax": total_price,
|
69
|
-
"GridCost":
|
73
|
+
"GridCost": grid_cost_total,
|
70
74
|
}
|
71
75
|
spot.append(h)
|
76
|
+
|
72
77
|
self.publish(self._spot_topic, json.dumps(spot), 1, True)
|
73
|
-
self.info(f"Spot electricity prices published for the next {len(spot)} days")
|
78
|
+
# self.info(f"Spot electricity prices published for the next {len(spot)} days")
|
74
79
|
|
75
80
|
|
76
81
|
class SpotHintaFi(JuhamThread):
|
@@ -78,6 +83,7 @@ class SpotHintaFi(JuhamThread):
|
|
78
83
|
https://api.spot-hinta.fi site.
|
79
84
|
"""
|
80
85
|
|
86
|
+
_SPOTHINTAFI: str = "_spothintafi"
|
81
87
|
worker_thread_id = SpotHintaFiThread.get_class_id()
|
82
88
|
url = "https://api.spot-hinta.fi/TodayAndDayForward"
|
83
89
|
update_interval = 12 * 3600
|
@@ -119,7 +125,7 @@ class SpotHintaFi(JuhamThread):
|
|
119
125
|
@override
|
120
126
|
def to_dict(self) -> Dict[str, Any]:
|
121
127
|
data: Dict[str, Any] = super().to_dict()
|
122
|
-
data[
|
128
|
+
data[self._SPOTHINTAFI] = {
|
123
129
|
"topic": self.spot_topic,
|
124
130
|
"url": self.url,
|
125
131
|
"interval": self.update_interval,
|
@@ -129,6 +135,6 @@ class SpotHintaFi(JuhamThread):
|
|
129
135
|
@override
|
130
136
|
def from_dict(self, data: Dict[str, Any]) -> None:
|
131
137
|
super().from_dict(data)
|
132
|
-
if
|
133
|
-
for key, value in data[
|
138
|
+
if self._SPOTHINTAFI in data:
|
139
|
+
for key, value in data[self._SPOTHINTAFI].items():
|
134
140
|
setattr(self, key, value)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: juham-automation
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.12
|
4
4
|
Summary: Juha's Ultimate Home Automation Masterpiece
|
5
5
|
Author-email: J Meskanen <juham.api@gmail.com>
|
6
6
|
Maintainer-email: "J. Meskanen" <juham.api@gmail.com>
|
@@ -44,10 +44,9 @@ Classifier: Programming Language :: Python :: 3.8
|
|
44
44
|
Requires-Python: >=3.8
|
45
45
|
Description-Content-Type: text/markdown
|
46
46
|
License-File: LICENSE.rst
|
47
|
-
Requires-Dist:
|
48
|
-
Requires-Dist:
|
49
|
-
Requires-Dist:
|
50
|
-
Requires-Dist: juham_core>=0.0.7
|
47
|
+
Requires-Dist: masterpiece_influx>=0.1.9
|
48
|
+
Requires-Dist: masterpiece_pahomqtt>=0.1.5
|
49
|
+
Requires-Dist: juham_core>=0.1.1
|
51
50
|
Requires-Dist: requests>=2.31
|
52
51
|
Requires-Dist: pytz>=2024.1
|
53
52
|
Provides-Extra: dev
|
@@ -3,9 +3,9 @@ juham_automation/japp.py,sha256=DuxMpoI3u9xP5-HaF1s3xI29PWa05jzBcOR8JNn0M0U,1471
|
|
3
3
|
juham_automation/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
4
4
|
juham_automation/automation/__init__.py,sha256=HV67cq9oXTcoAk5uBbHw3F1vR_saKztsHQxlFizqnHQ,460
|
5
5
|
juham_automation/automation/energycostcalculator.py,sha256=R9BjsPw04ZxmpYEnn67zqiQzGFQYVT6bq-S2b3x6trg,10825
|
6
|
-
juham_automation/automation/hotwateroptimizer.py,sha256
|
6
|
+
juham_automation/automation/hotwateroptimizer.py,sha256=FNRukp-a4dPiw8TUEiaCzrSfBNzaAO8wyHu4TUu35FU,21833
|
7
7
|
juham_automation/automation/powermeter_simulator.py,sha256=3WZcjByRTdqnC77l7LjP-TEjmZ8XBEO4hClYsrjxmBE,4549
|
8
|
-
juham_automation/automation/spothintafi.py,sha256=
|
8
|
+
juham_automation/automation/spothintafi.py,sha256=cZbi7w2fVweHX_fh1r5MTjGdesX9wDQta2mfVjtiwvw,4331
|
9
9
|
juham_automation/automation/watercirculator.py,sha256=a8meMNaONbHcIH3y0vP0UulJc1-gZiLZpw7H8kAOreY,6410
|
10
10
|
juham_automation/ts/__init__.py,sha256=SinjhBcaRVP5FUyCMFWJGR3P7ZetL7ya8-VqhRb2skg,525
|
11
11
|
juham_automation/ts/electricityprice_ts.py,sha256=BYs120V4teVjSqPc8PpPDjOTc5dOrVM9Maqse7E8cvk,1684
|
@@ -15,9 +15,9 @@ juham_automation/ts/log_ts.py,sha256=XsNaazuPmRUZLUqxU0DZae_frtT6kAFcXJTc598CtOA
|
|
15
15
|
juham_automation/ts/power_ts.py,sha256=e7bSeZjitY4C_gLup9L0NjvU_WnQsl3ayDhVShj32KY,1399
|
16
16
|
juham_automation/ts/powermeter_ts.py,sha256=wkCROQj9kXHgDdMuIbbAjhgP5Pr6TA6eT2T-r9sHidw,2351
|
17
17
|
juham_automation/ts/powerplan_ts.py,sha256=LZeE7TnzPCDaugggKlaV-K48lDwwnC1ZNum50JYAWaY,1482
|
18
|
-
juham_automation-0.0.
|
19
|
-
juham_automation-0.0.
|
20
|
-
juham_automation-0.0.
|
21
|
-
juham_automation-0.0.
|
22
|
-
juham_automation-0.0.
|
23
|
-
juham_automation-0.0.
|
18
|
+
juham_automation-0.0.12.dist-info/LICENSE.rst,sha256=QVHD5V5_HSys2PdPdig_xKggDj8cGX33ALKqRsYyjtI,1089
|
19
|
+
juham_automation-0.0.12.dist-info/METADATA,sha256=N8gB9QmKA57s9T5J6J2fNNGJFlipzIVwbCXyt_aCGRQ,4747
|
20
|
+
juham_automation-0.0.12.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
21
|
+
juham_automation-0.0.12.dist-info/entry_points.txt,sha256=di8tXChhP8B_98bQ44u-1zkOha2kZCoJpCAXxTgoSw8,491
|
22
|
+
juham_automation-0.0.12.dist-info/top_level.txt,sha256=jfohvtocvX_gfT21AhJk7Iay5ZiQsS3HzrDjF7S4Qp0,17
|
23
|
+
juham_automation-0.0.12.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|