Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RC Stable7 7.1.019 #1824

Merged
merged 12 commits into from
Jan 24, 2025
52 changes: 31 additions & 21 deletions Classes/WebServer/WebServer.py
Original file line number Diff line number Diff line change
Expand Up @@ -1082,8 +1082,8 @@ def rest_zDevice(self, verb, data, parameters):
if attribut == "Battery" and attribut in self.ListOfDevices[item]:
if self.ListOfDevices[item]["Battery"] in ( {}, ) and "IASBattery" in self.ListOfDevices[item]:
device[attribut] = str(self.ListOfDevices[item][ "IASBattery" ])
elif isinstance( self.ListOfDevices[item]["Battery"], int):
device[attribut] = self.ListOfDevices[item]["Battery"]
elif isinstance( self.ListOfDevices[item]["Battery"], (int,float)):
device[attribut] = int(self.ListOfDevices[item]["Battery"])
device["BatteryInside"] = True

elif item == "CheckParam":
Expand Down Expand Up @@ -1530,43 +1530,53 @@ def rest_zigate_mode(self, verb, data, parameters):
_response["Data"] = json.dumps("ZiGate mode: %s requested" % mode)
return _response


def rest_battery_state(self, verb, data, parameters):
_response = prepResponseMessage(self, setupHeadersResponse())
_response["Headers"]["Content-Type"] = "application/json; charset=utf-8"
if verb == "GET":
_battEnv = {"Battery":{"<30%":{}, "<50%": {}, ">50%" : {}},"Update Time":{ "Unknown": {}, "< 1 week": {}, "> 1 week": {}}}
for x in self.ListOfDevices:
self.logging("Debug", f"rest_battery_state - {x}")
if x == "0000":
continue
continue

if self.ListOfDevices[x]["ZDeviceName"] == "":
_deviceName = x
else:
_deviceName = self.ListOfDevices[x]["ZDeviceName"]
battery = self.ListOfDevices[x].get("Battery")

if "Battery" in self.ListOfDevices[x] and isinstance(self.ListOfDevices[x]["Battery"], int):
if self.ListOfDevices[x]["Battery"] > 50:
_battEnv["Battery"][">50%"][_deviceName] = {"Battery": self.ListOfDevices[x]["Battery"]}
if battery is None:
continue
self.logging("Debug", f"rest_battery_state - {x} Battery found")

elif self.ListOfDevices[x]["Battery"] > 30:
_battEnv["Battery"]["<50%"][_deviceName] = {"Battery": self.ListOfDevices[x]["Battery"]}
_device_name = self.ListOfDevices[x].get("ZDeviceName", x )

else:
_battEnv["Battery"]["<30%"][_deviceName] = {"Battery": self.ListOfDevices[x]["Battery"]}
if not isinstance( battery, (int, float)):
self.logging("Debug", f"rest_battery_state - {x} Battery found, but not int !! {type(battery)}")
continue
battery = int(battery)

if "BatteryUpdateTime" in self.ListOfDevices[x]:
if (int(time.time()) - self.ListOfDevices[x]["BatteryUpdateTime"]) > 604800: # one week in seconds
_battEnv["Update Time"]["> 1 week"][_deviceName] = {"BatteryUpdateTime": self.ListOfDevices[x]["BatteryUpdateTime"]}
if self.ListOfDevices[x]["Battery"] > 50:
_battEnv["Battery"][">50%"][_device_name] = {"Battery": battery}

else:
_battEnv["Update Time"]["< 1 week"][_deviceName] = {"BatteryUpdateTime": self.ListOfDevices[x]["BatteryUpdateTime"]}
elif self.ListOfDevices[x]["Battery"] > 30:
_battEnv["Battery"]["<50%"][_device_name] = {"Battery": battery}

else:
_battEnv["Battery"]["<30%"][_device_name] = {"Battery": battery}

if "BatteryUpdateTime" in self.ListOfDevices[x]:
if (int(time.time()) - self.ListOfDevices[x]["BatteryUpdateTime"]) > 604800: # one week in seconds
_battEnv["Update Time"]["> 1 week"][_device_name] = {"BatteryUpdateTime": self.ListOfDevices[x]["BatteryUpdateTime"]}

else:
_battEnv["Update Time"]["Unknown"][_deviceName] = "Unknown"
_battEnv["Update Time"]["< 1 week"][_device_name] = {"BatteryUpdateTime": self.ListOfDevices[x]["BatteryUpdateTime"]}

else:
_battEnv["Update Time"]["Unknown"][_device_name] = "Unknown"

self.logging("Debug", f"rest_battery_state - {_battEnv}")
_response["Data"] = json.dumps(_battEnv, sort_keys=True)
return _response

def logging(self, logType, message):
self.log.logging("WebServer", logType, message)

Expand Down
2 changes: 2 additions & 0 deletions Classes/WebServer/com.py
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,8 @@ def run_server(self, host='0.0.0.0', port=9440): # nosec
self.logging( "Log", f"++ WebUI - SSL Private key {server_private_key}")

context = check_cert_and_key(self, server_certificate, server_private_key)
if context:
context.minimum_version = ssl.TLSVersion.TLSv1_2

if context:
self.server = context.wrap_socket( self.server, server_side=True, )
Expand Down
2 changes: 1 addition & 1 deletion Classes/ZigpyTransport/AppGeneric.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ def connection_lost(self, exc: Exception) -> None:

super(type(self),self).connection_lost(exc)

if not self.shutting_down and not self.restarting and isinstance( exc, serial.serialutil.SerialException):
if not self.shutting_down and not self.restarting and isinstance( exc, (serial.serialutil.SerialException, TimeoutError)):
LOGGER.error( "++++++++++++++++++++++ Connection to coordinator failed on Serial, let's restart the plugin")
LOGGER.warning( f"--> : self.shutting_down: {self.shutting_down}, {self.restarting}")

Expand Down
Loading
Loading