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.
@@ -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 # 3 kW
39
- operation_threshold = 5 * 60
40
- heating_hours_per_day = 4 # use the four cheapest hours per day
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 # 20 eur per kWh
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 'spot' topic.
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
- ts = time.mktime(time.strptime(e["DateTime"], "%Y-%m-%dT%H:%M:%S%z"))
56
- hour = datetime.utcfromtimestamp(ts).strftime("%H")
57
- total_price: float
58
- grid_cost: float
59
- if int(hour) < 22 and int(hour) >= 6:
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
- total_price = e["PriceWithTax"] + grid_cost + self.grid_cost_tax
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": grid_cost + self.grid_cost_tax,
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["_spothintafi"] = {
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 "_spothintafi" in data:
133
- for key, value in data["_spothintafi"].items():
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.10
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: masterpiece>=0.1.21
48
- Requires-Dist: masterpiece_influx>=0.0.2
49
- Requires-Dist: masterpiece_pahomqtt>=0.0.3
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=-g6EJv0_gh6y1De8f0FAFhfX6OKjJxn0Ccis84gAiT4,22132
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=2efmqi-ooWHXplqVMi_HVS638r9vl4jd_H-LY4NHjBc,4201
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.10.dist-info/LICENSE.rst,sha256=QVHD5V5_HSys2PdPdig_xKggDj8cGX33ALKqRsYyjtI,1089
19
- juham_automation-0.0.10.dist-info/METADATA,sha256=_TkkCUZlaOCFb-geBlQHF0ieqAsXj7uNcAy0GuUo_64,4782
20
- juham_automation-0.0.10.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
21
- juham_automation-0.0.10.dist-info/entry_points.txt,sha256=di8tXChhP8B_98bQ44u-1zkOha2kZCoJpCAXxTgoSw8,491
22
- juham_automation-0.0.10.dist-info/top_level.txt,sha256=jfohvtocvX_gfT21AhJk7Iay5ZiQsS3HzrDjF7S4Qp0,17
23
- juham_automation-0.0.10.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (75.8.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5