Skip to content

Commit 46fe2aa

Browse files
authored
Merge pull request #94 from plugwise/ha_energy
Implement HA Core Energy support for both Stick and Smiles
2 parents 3475a56 + 7f41e98 commit 46fe2aa

File tree

11 files changed

+614
-140
lines changed

11 files changed

+614
-140
lines changed

.github/workflows/verify.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
name: Latest commit
55

66
env:
7-
CACHE_VERSION: 3
7+
CACHE_VERSION: 1
88
DEFAULT_PYTHON: 3.9
99
PRE_COMMIT_HOME: ~/.cache/pre-commit
1010

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Changelog
22

3+
## 0.12.0 - Energy support and bugfixes
4+
5+
- Stick: Add new properties `energy_consumption_today` counter and `energy_consumption_today_last_reset` timestamp. These properties can be used to properly measure the used energy. Very useful for the 'Energy' capabilities introduced in Home Assistant 2021.8
6+
- Stick: Synchronize clock of all plugwise devices once a day
7+
- Stick: Reduced local clock drift from 30 to 5 seconds
8+
- Stick: Optimized retrieval and handling of energy history
9+
- Smile: add the required sensor attributes for Energy support
10+
- Smile: add last_reset timestamps for interval-sensors and cumulative sensors
11+
- Smile: fix the unit_of_measurement of electrical-cumulative-sensors (Wh --> kWh)
12+
313
## 0.11.2 - Fix new and remaining pylint warnings
414

515
## 0.11.1 - Code improvements

plugwise/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Plugwise module."""
22

3-
__version__ = "0.11.2"
3+
__version__ = "0.12.0"
44

55
from plugwise.smile import Smile
66
from plugwise.stick import Stick

plugwise/constants.py

Lines changed: 87 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
"""Plugwise Stick and Smile constants."""
22

3+
import datetime as dt
4+
35
# Copied homeassistant.consts
46
ATTR_DEVICE_CLASS = "device_class"
7+
ATTR_LAST_RESET = "last_reset"
58
ATTR_NAME = "name"
69
ATTR_STATE = "state"
10+
ATTR_STATE_CLASS = "state_class"
711
ATTR_UNIT_OF_MEASUREMENT = "unit_of_measurement"
812
DEGREE = "°"
913
HVAC_MODE_AUTO = "auto"
@@ -22,6 +26,9 @@
2226
VOLUME_CUBIC_METERS = "m³"
2327
VOLUME_CUBIC_METERS_PER_HOUR = "m³/h"
2428

29+
UTC = dt.timezone.utc
30+
LR_TIME_0 = dt.datetime.utcfromtimestamp(0).replace(tzinfo=UTC)
31+
2532
### Stick constants ###
2633

2734
UTF8_DECODE = "utf-8"
@@ -150,7 +157,7 @@
150157

151158
# Max seconds the internal clock of plugwise nodes
152159
# are allowed to drift in seconds
153-
MAX_TIME_DRIFT = 30
160+
MAX_TIME_DRIFT = 5
154161

155162
# Default sleep time in seconds for watchdog daemon
156163
WATCHDOG_DEAMON = 60
@@ -244,6 +251,12 @@
244251
"state": "available",
245252
"unit": "state",
246253
}
254+
FEATURE_ENERGY_CONSUMPTION_TODAY = {
255+
"id": "energy_consumption_today",
256+
"name": "Energy consumption today",
257+
"state": "Energy_consumption_today",
258+
"unit": ENERGY_KILO_WATT_HOUR,
259+
}
247260
FEATURE_HUMIDITY = {
248261
"id": "humidity",
249262
"name": "Humidity",
@@ -564,6 +577,8 @@
564577
ATTR_NAME: "Battery",
565578
ATTR_STATE: None,
566579
ATTR_DEVICE_CLASS: "battery",
580+
ATTR_STATE_CLASS: "measurement",
581+
ATTR_LAST_RESET: None,
567582
ATTR_ICON: None,
568583
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
569584
}
@@ -573,6 +588,8 @@
573588
ATTR_NAME: "Temperature",
574589
ATTR_STATE: None,
575590
ATTR_DEVICE_CLASS: "temperature",
591+
ATTR_STATE_CLASS: "measurement",
592+
ATTR_LAST_RESET: None,
576593
ATTR_ICON: None,
577594
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
578595
}
@@ -582,6 +599,8 @@
582599
ATTR_NAME: "Device State",
583600
ATTR_STATE: None,
584601
ATTR_DEVICE_CLASS: None,
602+
ATTR_STATE_CLASS: None,
603+
ATTR_LAST_RESET: None,
585604
ATTR_ICON: None,
586605
ATTR_UNIT_OF_MEASUREMENT: None,
587606
}
@@ -591,6 +610,8 @@
591610
ATTR_NAME: "Electricity Consumed",
592611
ATTR_STATE: None,
593612
ATTR_DEVICE_CLASS: "power",
613+
ATTR_STATE_CLASS: "measurement",
614+
ATTR_LAST_RESET: None,
594615
ATTR_ICON: None,
595616
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
596617
}
@@ -600,6 +621,8 @@
600621
ATTR_NAME: "Electricity Consumed Interval",
601622
ATTR_STATE: None,
602623
ATTR_DEVICE_CLASS: "energy",
624+
ATTR_STATE_CLASS: "measurement",
625+
ATTR_LAST_RESET: None,
603626
ATTR_ICON: None,
604627
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
605628
}
@@ -609,15 +632,19 @@
609632
ATTR_NAME: "Electricity Consumed Off Peak Cumulative",
610633
ATTR_STATE: None,
611634
ATTR_DEVICE_CLASS: "energy",
635+
ATTR_STATE_CLASS: "measurement",
636+
ATTR_LAST_RESET: LR_TIME_0,
612637
ATTR_ICON: None,
613-
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
638+
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
614639
}
615640
EL_CONSUMED_OFF_PEAK_INTERVAL = {
616641
ATTR_ID: "electricity_consumed_off_peak_interval",
617642
ATTR_ENABLED: True,
618643
ATTR_NAME: "Electricity Consumed Off Peak Interval",
619644
ATTR_STATE: None,
620645
ATTR_DEVICE_CLASS: "energy",
646+
ATTR_STATE_CLASS: "measurement",
647+
ATTR_LAST_RESET: None,
621648
ATTR_ICON: None,
622649
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
623650
}
@@ -627,6 +654,8 @@
627654
ATTR_NAME: "Electricity Consumed Off Peak Point",
628655
ATTR_STATE: None,
629656
ATTR_DEVICE_CLASS: "power",
657+
ATTR_STATE_CLASS: "measurement",
658+
ATTR_LAST_RESET: None,
630659
ATTR_ICON: None,
631660
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
632661
}
@@ -636,15 +665,19 @@
636665
ATTR_NAME: "Electricity Consumed Peak Cumulative",
637666
ATTR_STATE: None,
638667
ATTR_DEVICE_CLASS: "energy",
668+
ATTR_STATE_CLASS: "measurement",
669+
ATTR_LAST_RESET: LR_TIME_0,
639670
ATTR_ICON: None,
640-
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
671+
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
641672
}
642673
EL_CONSUMED_PEAK_INTERVAL = {
643674
ATTR_ID: "electricity_consumed_peak_interval",
644675
ATTR_ENABLED: True,
645676
ATTR_NAME: "Electricity Consumed Peak Interval",
646677
ATTR_STATE: None,
647678
ATTR_DEVICE_CLASS: "energy",
679+
ATTR_STATE_CLASS: "measurement",
680+
ATTR_LAST_RESET: None,
648681
ATTR_ICON: None,
649682
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
650683
}
@@ -654,6 +687,8 @@
654687
ATTR_NAME: "Electricity Consumed Peak Point",
655688
ATTR_STATE: None,
656689
ATTR_DEVICE_CLASS: "power",
690+
ATTR_STATE_CLASS: "measurement",
691+
ATTR_LAST_RESET: None,
657692
ATTR_ICON: None,
658693
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
659694
}
@@ -663,6 +698,8 @@
663698
ATTR_NAME: "Electricity Produced",
664699
ATTR_STATE: None,
665700
ATTR_DEVICE_CLASS: "power",
701+
ATTR_STATE_CLASS: "measurement",
702+
ATTR_LAST_RESET: None,
666703
ATTR_ICON: None,
667704
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
668705
}
@@ -672,6 +709,8 @@
672709
ATTR_NAME: "Electricity Produced Interval",
673710
ATTR_STATE: None,
674711
ATTR_DEVICE_CLASS: "energy",
712+
ATTR_STATE_CLASS: "measurement",
713+
ATTR_LAST_RESET: None,
675714
ATTR_ICON: None,
676715
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
677716
}
@@ -681,15 +720,19 @@
681720
ATTR_NAME: "Electricity Produced Off Peak Cumulative",
682721
ATTR_STATE: None,
683722
ATTR_DEVICE_CLASS: "energy",
723+
ATTR_STATE_CLASS: "measurement",
724+
ATTR_LAST_RESET: LR_TIME_0,
684725
ATTR_ICON: None,
685-
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
726+
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
686727
}
687728
EL_PRODUCED_OFF_PEAK_INTERVAL = {
688729
ATTR_ID: "electricity_produced_off_peak_interval",
689730
ATTR_ENABLED: True,
690731
ATTR_NAME: "Electricity Produced Off Peak Interval",
691732
ATTR_STATE: None,
692733
ATTR_DEVICE_CLASS: "energy",
734+
ATTR_STATE_CLASS: "measurement",
735+
ATTR_LAST_RESET: None,
693736
ATTR_ICON: None,
694737
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
695738
}
@@ -699,6 +742,8 @@
699742
ATTR_NAME: "Electricity Produced Off Peak Point",
700743
ATTR_STATE: None,
701744
ATTR_DEVICE_CLASS: "power",
745+
ATTR_STATE_CLASS: "measurement",
746+
ATTR_LAST_RESET: None,
702747
ATTR_ICON: None,
703748
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
704749
}
@@ -708,15 +753,19 @@
708753
ATTR_NAME: "Electricity Produced Peak Cumulative",
709754
ATTR_STATE: None,
710755
ATTR_DEVICE_CLASS: "energy",
756+
ATTR_STATE_CLASS: "measurement",
757+
ATTR_LAST_RESET: LR_TIME_0,
711758
ATTR_ICON: None,
712-
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
759+
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
713760
}
714761
EL_PRODUCED_PEAK_INTERVAL = {
715762
ATTR_ID: "electricity_produced_peak_interval",
716763
ATTR_ENABLED: True,
717764
ATTR_NAME: "Electricity Produced Peak Interval",
718765
ATTR_STATE: None,
719766
ATTR_DEVICE_CLASS: "energy",
767+
ATTR_STATE_CLASS: "measurement",
768+
ATTR_LAST_RESET: None,
720769
ATTR_ICON: None,
721770
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
722771
}
@@ -726,6 +775,8 @@
726775
ATTR_NAME: "Electricity Produced Peak Point",
727776
ATTR_STATE: None,
728777
ATTR_DEVICE_CLASS: "power",
778+
ATTR_STATE_CLASS: "measurement",
779+
ATTR_LAST_RESET: None,
729780
ATTR_ICON: None,
730781
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
731782
}
@@ -735,6 +786,8 @@
735786
ATTR_NAME: "Gas Consumed Cumulative",
736787
ATTR_STATE: None,
737788
ATTR_DEVICE_CLASS: None,
789+
ATTR_STATE_CLASS: "measurement",
790+
ATTR_LAST_RESET: LR_TIME_0,
738791
ATTR_ICON: FLAME_ICON,
739792
ATTR_UNIT_OF_MEASUREMENT: VOLUME_CUBIC_METERS,
740793
}
@@ -744,6 +797,8 @@
744797
ATTR_NAME: "Gas Consumed Interval",
745798
ATTR_STATE: None,
746799
ATTR_DEVICE_CLASS: None,
800+
ATTR_STATE_CLASS: "measurement",
801+
ATTR_LAST_RESET: None,
747802
ATTR_ICON: FLAME_ICON,
748803
ATTR_UNIT_OF_MEASUREMENT: VOLUME_CUBIC_METERS,
749804
}
@@ -753,6 +808,8 @@
753808
ATTR_NAME: "Relative Humidity",
754809
ATTR_STATE: None,
755810
ATTR_DEVICE_CLASS: "humidity",
811+
ATTR_STATE_CLASS: "measurement",
812+
ATTR_LAST_RESET: None,
756813
ATTR_ICON: None,
757814
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
758815
}
@@ -762,6 +819,8 @@
762819
ATTR_NAME: "Illuminance",
763820
ATTR_STATE: None,
764821
ATTR_DEVICE_CLASS: "illuminance",
822+
ATTR_STATE_CLASS: "measurement",
823+
ATTR_LAST_RESET: None,
765824
ATTR_ICON: None,
766825
ATTR_UNIT_OF_MEASUREMENT: UNIT_LUMEN,
767826
}
@@ -771,6 +830,8 @@
771830
ATTR_NAME: "Intended Boiler Temperature",
772831
ATTR_STATE: None,
773832
ATTR_DEVICE_CLASS: "temperature",
833+
ATTR_STATE_CLASS: "measurement",
834+
ATTR_LAST_RESET: None,
774835
ATTR_ICON: None,
775836
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
776837
}
@@ -780,6 +841,8 @@
780841
ATTR_NAME: "Modulation Level",
781842
ATTR_STATE: None,
782843
ATTR_DEVICE_CLASS: None,
844+
ATTR_STATE_CLASS: "measurement",
845+
ATTR_LAST_RESET: None,
783846
ATTR_ICON: "mdi:percent",
784847
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
785848
}
@@ -789,15 +852,19 @@
789852
ATTR_NAME: "Net Electricity Cumulative",
790853
ATTR_STATE: None,
791854
ATTR_DEVICE_CLASS: "energy",
855+
ATTR_STATE_CLASS: "measurement",
856+
ATTR_LAST_RESET: LR_TIME_0,
792857
ATTR_ICON: None,
793-
ATTR_UNIT_OF_MEASUREMENT: ENERGY_WATT_HOUR,
858+
ATTR_UNIT_OF_MEASUREMENT: ENERGY_KILO_WATT_HOUR,
794859
}
795860
NET_EL_POINT = {
796861
ATTR_ID: "net_electricity_point",
797862
ATTR_ENABLED: True,
798863
ATTR_NAME: "Net Electricity Point",
799864
ATTR_STATE: None,
800865
ATTR_DEVICE_CLASS: "power",
866+
ATTR_STATE_CLASS: "measurement",
867+
ATTR_LAST_RESET: None,
801868
ATTR_ICON: None,
802869
ATTR_UNIT_OF_MEASUREMENT: POWER_WATT,
803870
}
@@ -807,6 +874,8 @@
807874
ATTR_NAME: "Outdoor Temperature",
808875
ATTR_STATE: None,
809876
ATTR_DEVICE_CLASS: "temperature",
877+
ATTR_STATE_CLASS: "measurement",
878+
ATTR_LAST_RESET: None,
810879
ATTR_ICON: None,
811880
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
812881
}
@@ -816,6 +885,8 @@
816885
ATTR_NAME: "Return Temperature",
817886
ATTR_STATE: None,
818887
ATTR_DEVICE_CLASS: "temperature",
888+
ATTR_STATE_CLASS: "measurement",
889+
ATTR_LAST_RESET: None,
819890
ATTR_ICON: None,
820891
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
821892
}
@@ -825,6 +896,8 @@
825896
ATTR_NAME: "Setpoint",
826897
ATTR_STATE: None,
827898
ATTR_DEVICE_CLASS: "temperature",
899+
ATTR_STATE_CLASS: "measurement",
900+
ATTR_LAST_RESET: None,
828901
ATTR_ICON: None,
829902
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
830903
}
@@ -834,6 +907,8 @@
834907
ATTR_NAME: "Temperature Difference",
835908
ATTR_STATE: None,
836909
ATTR_DEVICE_CLASS: None,
910+
ATTR_STATE_CLASS: "measurement",
911+
ATTR_LAST_RESET: None,
837912
ATTR_ICON: None,
838913
ATTR_UNIT_OF_MEASUREMENT: TEMP_KELVIN,
839914
}
@@ -843,6 +918,8 @@
843918
ATTR_NAME: "Valve Position",
844919
ATTR_STATE: None,
845920
ATTR_DEVICE_CLASS: None,
921+
ATTR_STATE_CLASS: "measurement",
922+
ATTR_LAST_RESET: None,
846923
ATTR_ICON: "mdi:valve",
847924
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
848925
}
@@ -852,6 +929,8 @@
852929
ATTR_NAME: "Water Pressure",
853930
ATTR_STATE: None,
854931
ATTR_DEVICE_CLASS: "pressure",
932+
ATTR_STATE_CLASS: "measurement",
933+
ATTR_LAST_RESET: None,
855934
ATTR_ICON: None,
856935
ATTR_UNIT_OF_MEASUREMENT: PRESSURE_BAR,
857936
}
@@ -861,6 +940,8 @@
861940
ATTR_NAME: "Water Temperature",
862941
ATTR_STATE: None,
863942
ATTR_DEVICE_CLASS: "temperature",
943+
ATTR_STATE_CLASS: "measurement",
944+
ATTR_LAST_RESET: None,
864945
ATTR_ICON: None,
865946
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
866947
}

0 commit comments

Comments
 (0)