Skip to content

Commit 39a0321

Browse files
Added some better error handling incase the Panasonic Servers are having issues.
1 parent 2720959 commit 39a0321

File tree

2 files changed

+66
-41
lines changed

2 files changed

+66
-41
lines changed

custom_components/panasonic_cc/climate.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ def preset_mode(self) -> Optional[str]:
181181
eco = self._api.eco_mode
182182
for key, value in PRESET_LIST.items():
183183
if value == eco:
184-
_LOGGER.debug("Preset mode is {0}".format(key))
184+
#_LOGGER.debug("Preset mode is {0}".format(key))
185185
return key
186186

187187
async def async_set_preset_mode(self, preset_mode):
@@ -193,7 +193,7 @@ def preset_modes(self) -> Optional[List[str]]:
193193
"""Return a list of available preset modes.
194194
Requires SUPPORT_PRESET_MODE.
195195
"""
196-
_LOGGER.debug("Preset modes are {0}".format(",".join(PRESET_LIST.keys())))
196+
#_LOGGER.debug("Preset modes are {0}".format(",".join(PRESET_LIST.keys())))
197197
return list(PRESET_LIST.keys())
198198

199199
@property

custom_components/panasonic_cc/panasonic.py

Lines changed: 64 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,27 @@ def __init__(self, hass: HomeAssistantType, api, device, force_outside_sensor, e
3636
self.id = device['id']
3737
self.name = device['name']
3838
self.group = device['group']
39-
self.data = None
40-
self.energy_data = None
39+
#self.data = None
40+
#self.energy_data = None
4141
self.last_energy_reading = 0
4242
self.last_energy_reading_time = None
4343
self.current_power_value = 0
4444
self.current_power_counter = 0
4545
self._available = True
4646
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+
4760

4861

4962
@Throttle(MIN_TIME_BETWEEN_UPDATES)
@@ -55,28 +68,58 @@ async def update_energy(self, **kwargs):
5568
await self.do_update_energy()
5669

5770
async def do_update(self):
71+
#_LOGGER.debug("Requesting data for device {id}".format(**self.device))
5872
try:
5973
data= await self.hass.async_add_executor_job(self._api.get_device,self.id)
6074
except:
6175
_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
6482

6583
if data is None:
6684
self._available = False
6785
_LOGGER.debug("Received no data for device {id}".format(**self.device))
6886
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))
69107
self._available = True
70-
self.data = data
108+
#self.data = data
71109

72110
async def do_update_energy(self):
111+
#_LOGGER.debug("Requesting energy for device {id}".format(**self.device))
73112
try:
74113
data= await self.hass.async_add_executor_job(self._api.history,self.id,"Day",datetime.now().strftime("%Y%m%d"))
75114

76115
except:
77116
_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
80123

81124
if data is None:
82125
_LOGGER.debug("Received no energy data for device {id}".format(**self.device))
@@ -99,7 +142,7 @@ async def do_update_energy(self):
99142
else:
100143
self.last_energy_reading = c_energy
101144
self.last_energy_reading_time = t1
102-
self.energy_data = data
145+
self._daily_energy = data['parameters']['energyConsumption']
103146

104147
@property
105148
def available(self) -> bool:
@@ -118,79 +161,61 @@ def device_info(self):
118161

119162
@property
120163
def is_on(self):
121-
return bool( self.data['parameters']['power'].value )
164+
return self._is_on
122165

123166
@property
124167
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
128169

129170
@property
130171
def support_inside_temperature(self):
131-
return self.inside_temperature != None
172+
return self._inside_temperature != None
132173

133174
@property
134175
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
139177

140178
@property
141179
def support_outside_temperature(self):
142180
if self.force_outside_sensor:
143181
return True
144-
return self.outside_temperature != 126
182+
return self._outside_temperature != None
145183

146184
@property
147185
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
152187

153188
@property
154189
def fan_mode(self):
155-
"""Return the fan setting."""
156-
return self.data['parameters']['fanSpeed'].name
190+
return self._fan_mode
157191

158192
@property
159193
def swing_mode(self):
160-
"""Return the fan setting."""
161-
return self.data['parameters']['airSwingVertical'].name
194+
return self._swing_mode
162195

163196
@property
164197
def swing_lr_mode(self):
165-
return self.data['parameters']['airSwingHorizontal'].name
198+
return self._swing_lr_mode
166199

167200
@property
168201
def hvac_mode(self):
169-
"""Return the current operation."""
170-
return self.data['parameters']['mode'].name
202+
return self._hvac_mode
171203

172204
@property
173205
def eco_mode(self) -> Optional[str]:
174-
return self.data['parameters']['eco'].name
206+
return self._eco_mode
175207

176208
@property
177209
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
182211

183212
@property
184213
def energy_sensor_enabled(self):
185214
return self.enable_energy_sensor
186215

187216
@property
188217
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
194219

195220
@property
196221
def current_power(self):

0 commit comments

Comments
 (0)