Skip to content

Commit

Permalink
feat: Add autodl for Hue (partial)
Browse files Browse the repository at this point in the history
  • Loading branch information
Nerivec committed Feb 1, 2025
1 parent d35435f commit 08e3e0b
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 1 deletion.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "zigbee-ota",
"version": "1.1.1",
"version": "1.2.0",
"repository": {
"type": "git",
"url": "git+https://github.com/Koenkk/zigbee-OTA.git"
Expand Down
105 changes: 105 additions & 0 deletions src/autodl/hue.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
import {getJson, getLatestImage, readCacheJson, writeCacheJson} from '../common.js';
import {processFirmwareImage} from '../process_firmware_image.js';

type ImageJson = {
createdAt: string;
updatedAt: string;
fileSize: number;
md5: string;
binaryUrl: string;
version: number;
versionName: string;
releaseNotes: string;
};
type PageJson = {updates: ImageJson[]};

const NAME = 'Hue';
const BASE_URL = 'https://firmware.meethue.com/v1/checkupdate?version=0&deviceTypeId=';
const DEVICE_TYPE_IDS: string[] = [
'100b-111',
'100b-112',
// '100b-113',
'100b-114',
'100b-115',
// '100b-116',
'100b-117',
'100b-118',
// '100b-119',
'100b-11a',
// '100b-11b',
// '100b-11c',
'100b-11d',
'100b-11e',
'100b-11f',
'100b-120',
// '100b-121',
// '100b-122',
'100b-123',
// '100b-124',
'100b-125',
// '100b-126',
'100b-127',
// '100b-128',
'100b-129',
// '100b-12a',
// '100b-12b',
// '100b-12c',
// '100b-12d',
// '100b-12e',
// '100b-12f',
];

function sortByVersion(a: ImageJson, b: ImageJson): number {
return a.version < b.version ? -1 : a.version > b.version ? 1 : 0;
}

function isDifferent(newData: PageJson, cachedData?: PageJson): boolean {
return (
Boolean(process.env.IGNORE_CACHE) ||
!cachedData?.updates.length ||
getLatestImage(cachedData.updates, sortByVersion)?.version !== getLatestImage(newData.updates, sortByVersion)?.version
);
}

export async function writeCache(): Promise<void> {
for (const deviceTypeId of DEVICE_TYPE_IDS) {
const url = `${BASE_URL}${deviceTypeId}`;
const page = await getJson<PageJson>(NAME, url);

if (page?.updates.length) {
writeCacheJson(`${NAME}_${deviceTypeId}`, page);
}
}
}

export async function download(): Promise<void> {
for (const deviceTypeId of DEVICE_TYPE_IDS) {
const logPrefix = `[${NAME}:${deviceTypeId}]`;
const url = `${BASE_URL}${deviceTypeId}`;
const page = await getJson<PageJson>(NAME, url);

if (!page?.updates.length) {
console.error(`${logPrefix} No image data.`);
continue;
}

const cacheFileName = `${NAME}_${deviceTypeId}`;

if (!isDifferent(page, readCacheJson(cacheFileName))) {
console.log(`${logPrefix} No change from last run.`);
continue;
}

writeCacheJson(cacheFileName, page);

const image = getLatestImage(page.updates, sortByVersion);

if (!image) {
continue;
}

const firmwareFileName = image.binaryUrl.split('/').pop()!;

await processFirmwareImage(NAME, firmwareFileName, image.binaryUrl, {releaseNotes: image.releaseNotes || undefined});
}
}
1 change: 1 addition & 0 deletions src/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export const PR_ARTIFACT_NUMBER_FILEPATH = path.join(PR_ARTIFACT_DIR, PR_NUMBER_
*/
export const ALL_AUTODL_MANUFACTURERS = [
'gammatroniques',
'hue',
'ikea_new',
'ikea',
'inovelli',
Expand Down

0 comments on commit 08e3e0b

Please sign in to comment.