Skip to content

Commit

Permalink
Merge pull request #180 from itsniawan/master
Browse files Browse the repository at this point in the history
Add compatibility with new app API request in TrueNAS 24.10
  • Loading branch information
tomaae authored Nov 14, 2024
2 parents 2c5ed51 + 7085fb4 commit e23f611
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 20 deletions.
2 changes: 2 additions & 0 deletions custom_components/truenas/binary_sensor_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@
"human_version",
"update_available",
"container_images_update_available",
"upgrade_available",
"image_updates_available",
"portal",
]

Expand Down
73 changes: 53 additions & 20 deletions custom_components/truenas/coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ def __init__(self, hass: HomeAssistant, config_entry: ConfigEntry):
self._is_scale = False
self._is_virtual = False
self._version_major = 0
self._version_minor = 0

# ---------------------------
# connected
Expand Down Expand Up @@ -216,6 +217,15 @@ def get_systeminfo(self) -> None:
.split(".")[0]
)

if not self._version_minor:
self._version_minor = int(
self.ds["system_info"]
.get("version")
.removeprefix("TrueNAS-")
.removeprefix("SCALE-")
.split(".")[1]
)

self._is_virtual = self.ds["system_info"]["system_manufacturer"] in [
"QEMU",
"VMware, Inc.",
Expand Down Expand Up @@ -282,7 +292,7 @@ def get_updatecheck(self) -> None:
{
"name": "update_version",
"source": "version",
"default": "unknown",
"default": self.ds["system_info"]["version"],
},
],
)
Expand Down Expand Up @@ -1123,23 +1133,46 @@ def get_app(self) -> None:
if not self._is_scale:
return

self.ds["app"] = parse_api(
data=self.ds["app"],
source=self.api.query("chart/release"),
key="id",
vals=[
{"name": "id", "default": 0},
{"name": "name", "default": "unknown"},
{"name": "human_version", "default": "unknown"},
{"name": "update_available", "default": "unknown"},
{"name": "container_images_update_available", "default": "unknown"},
{"name": "portal", "source": "portals/open", "default": "unknown"},
{"name": "status", "default": "unknown"},
],
ensure_vals=[
{"name": "running", "type": "bool", "default": False},
],
)
if self._version_major <= 23 or (self._version_major == 24 and self._version_minor < 10):
self.ds["app"] = parse_api(
data=self.ds["app"],
source=self.api.query("chart/release"),
key="id",
vals=[
{"name": "id", "default": 0},
{"name": "name", "default": "unknown"},
{"name": "human_version", "default": "unknown"},
{"name": "update_available", "default": "unknown"},
{"name": "container_images_update_available", "default": "unknown"},
{"name": "portal", "source": "portals/open", "default": "unknown"},
{"name": "status", "default": "unknown"},
],
ensure_vals=[
{"name": "running", "type": "bool", "default": False},
],
)

for uid, vals in self.ds["app"].items():
self.ds["app"][uid]["running"] = vals["status"] == "ACTIVE"

for uid, vals in self.ds["app"].items():
self.ds["app"][uid]["running"] = vals["status"] == "ACTIVE"
else:
self.ds["app"] = parse_api(
data=self.ds["app"],
source=self.api.query("app"),
key="id",
vals=[
{"name": "id", "default": 0},
{"name": "name", "default": "unknown"},
{"name": "human_version", "default": "unknown"},
{"name": "upgrade_available", "default": "unknown"},
{"name": "image_updates_available", "default": "unknown"},
{"name": "portal", "source": "portals/Web UI", "default": "unknown"},
{"name": "state", "default": "unknown"},
],
ensure_vals=[
{"name": "running", "type": "bool", "default": False},
],
)

for uid, vals in self.ds["app"].items():
self.ds["app"][uid]["running"] = vals["state"] == "RUNNING"

0 comments on commit e23f611

Please sign in to comment.