@@ -36,14 +36,27 @@ def __init__(self, hass: HomeAssistantType, api, device, force_outside_sensor, e
36
36
self .id = device ['id' ]
37
37
self .name = device ['name' ]
38
38
self .group = device ['group' ]
39
- self .data = None
40
- self .energy_data = None
39
+ # self.data = None
40
+ # self.energy_data = None
41
41
self .last_energy_reading = 0
42
42
self .last_energy_reading_time = None
43
43
self .current_power_value = 0
44
44
self .current_power_counter = 0
45
45
self ._available = True
46
46
self .constants = constants
47
+
48
+ self ._is_on = False
49
+ self ._inside_temperature = None
50
+ self ._outside_temperature = None
51
+ self ._target_temperature = None
52
+ self ._fan_mode = None
53
+ self ._swing_mode = None
54
+ self ._swing_lr_mode = None
55
+ self ._hvac_mode = None
56
+ self ._eco_mode = None
57
+ self ._nanoe_mode = None
58
+ self ._daily_energy = None
59
+
47
60
48
61
49
62
@Throttle (MIN_TIME_BETWEEN_UPDATES )
@@ -55,28 +68,58 @@ async def update_energy(self, **kwargs):
55
68
await self .do_update_energy ()
56
69
57
70
async def do_update (self ):
71
+ #_LOGGER.debug("Requesting data for device {id}".format(**self.device))
58
72
try :
59
73
data = await self .hass .async_add_executor_job (self ._api .get_device ,self .id )
60
74
except :
61
75
_LOGGER .debug ("Error trying to get device {id} state, probably expired token, trying to update it..." .format (** self .device ))
62
- await self .hass .async_add_executor_job (self ._api .login )
63
- data = await self .hass .async_add_executor_job (self ._api .get_device ,self .id )
76
+ try :
77
+ await self .hass .async_add_executor_job (self ._api .login )
78
+ data = await self .hass .async_add_executor_job (self ._api .get_device ,self .id )
79
+ except :
80
+ _LOGGER .debug ("Failed to renew token for device {id}, giving up for now" .format (** self .device ))
81
+ return
64
82
65
83
if data is None :
66
84
self ._available = False
67
85
_LOGGER .debug ("Received no data for device {id}" .format (** self .device ))
68
86
return
87
+ try :
88
+ plst = data ['parameters' ]
89
+ self ._is_on = bool ( plst ['power' ].value )
90
+ if plst ['temperatureInside' ] != 126 :
91
+ self ._inside_temperature = plst ['temperatureInside' ]
92
+ if plst ['temperatureOutside' ] != 126 :
93
+ self ._outside_temperature = plst ['temperatureOutside' ]
94
+ if plst ['temperature' ] != 126 :
95
+ self ._target_temperature = plst ['temperature' ]
96
+ self ._fan_mode = plst ['fanSpeed' ].name
97
+ self ._swing_mode = plst ['airSwingVertical' ].name
98
+ self ._swing_lr_mode = plst ['airSwingHorizontal' ].name
99
+ self ._hvac_mode = plst ['mode' ].name
100
+ self ._eco_mode = plst ['eco' ].name
101
+ if 'nanoe' in plst :
102
+ self ._nanoe_mode = plst ['nanoe' ]
103
+
104
+ except Exception as e :
105
+ _LOGGER .debug ("Failed to set data for device {id}" .format (** self .device ))
106
+ _LOGGER .debug ("Set data Error: {0}" .format (e ))
69
107
self ._available = True
70
- self .data = data
108
+ # self.data = data
71
109
72
110
async def do_update_energy (self ):
111
+ #_LOGGER.debug("Requesting energy for device {id}".format(**self.device))
73
112
try :
74
113
data = await self .hass .async_add_executor_job (self ._api .history ,self .id ,"Day" ,datetime .now ().strftime ("%Y%m%d" ))
75
114
76
115
except :
77
116
_LOGGER .debug ("Error trying to get device {id} state, probably expired token, trying to update it..." .format (** self .device ))
78
- await self .hass .async_add_executor_job (self ._api .login )
79
- data = await self .hass .async_add_executor_job (self ._api .get_device ,self .id )
117
+ try :
118
+ await self .hass .async_add_executor_job (self ._api .login )
119
+ data = await self .hass .async_add_executor_job (self ._api .get_device ,self .id )
120
+ except :
121
+ _LOGGER .debug ("Failed to renew token for device {id}, giving up for now" .format (** self .device ))
122
+ return
80
123
81
124
if data is None :
82
125
_LOGGER .debug ("Received no energy data for device {id}" .format (** self .device ))
@@ -99,7 +142,7 @@ async def do_update_energy(self):
99
142
else :
100
143
self .last_energy_reading = c_energy
101
144
self .last_energy_reading_time = t1
102
- self .energy_data = data
145
+ self ._daily_energy = data [ 'parameters' ][ 'energyConsumption' ]
103
146
104
147
@property
105
148
def available (self ) -> bool :
@@ -118,79 +161,61 @@ def device_info(self):
118
161
119
162
@property
120
163
def is_on (self ):
121
- return bool ( self .data [ 'parameters' ][ 'power' ]. value )
164
+ return self ._is_on
122
165
123
166
@property
124
167
def inside_temperature (self ):
125
- if self .data ['parameters' ]['temperatureInside' ] != 126 :
126
- return self .data ['parameters' ]['temperatureInside' ]
127
- return None
168
+ return self ._inside_temperature
128
169
129
170
@property
130
171
def support_inside_temperature (self ):
131
- return self .inside_temperature != None
172
+ return self ._inside_temperature != None
132
173
133
174
@property
134
175
def outside_temperature (self ):
135
- temp = self .data ['parameters' ]['temperatureOutside' ]
136
- if temp != 126 :
137
- return temp
138
- return None
176
+ return self ._outside_temperature
139
177
140
178
@property
141
179
def support_outside_temperature (self ):
142
180
if self .force_outside_sensor :
143
181
return True
144
- return self .outside_temperature != 126
182
+ return self ._outside_temperature != None
145
183
146
184
@property
147
185
def target_temperature (self ):
148
- """Return the target temperature."""
149
- if self .data ['parameters' ]['temperature' ] != 126 :
150
- return self .data ['parameters' ]['temperature' ]
151
- return None
186
+ return self ._target_temperature
152
187
153
188
@property
154
189
def fan_mode (self ):
155
- """Return the fan setting."""
156
- return self .data ['parameters' ]['fanSpeed' ].name
190
+ return self ._fan_mode
157
191
158
192
@property
159
193
def swing_mode (self ):
160
- """Return the fan setting."""
161
- return self .data ['parameters' ]['airSwingVertical' ].name
194
+ return self ._swing_mode
162
195
163
196
@property
164
197
def swing_lr_mode (self ):
165
- return self .data [ 'parameters' ][ 'airSwingHorizontal' ]. name
198
+ return self ._swing_lr_mode
166
199
167
200
@property
168
201
def hvac_mode (self ):
169
- """Return the current operation."""
170
- return self .data ['parameters' ]['mode' ].name
202
+ return self ._hvac_mode
171
203
172
204
@property
173
205
def eco_mode (self ) -> Optional [str ]:
174
- return self .data [ 'parameters' ][ 'eco' ]. name
206
+ return self ._eco_mode
175
207
176
208
@property
177
209
def nanoe_mode (self ):
178
- p = self .data ['parameters' ]
179
- if 'nanoe' in p :
180
- return p ['nanoe' ]
181
- return None
210
+ self ._nanoe_mode
182
211
183
212
@property
184
213
def energy_sensor_enabled (self ):
185
214
return self .enable_energy_sensor
186
215
187
216
@property
188
217
def daily_energy (self ):
189
- if not self .enable_energy_sensor :
190
- return None
191
- if self .energy_data is not None :
192
- return self .energy_data ['parameters' ]['energyConsumption' ]
193
- return None
218
+ return self ._daily_energy
194
219
195
220
@property
196
221
def current_power (self ):
0 commit comments