mirror of
https://github.com/Koenkk/zigbee-OTA.git
synced 2026-06-24 09:48:42 +00:00
fix: aqara/lumi enforce modelId meta (#986)
Co-authored-by: Koen Kanters <koenkanters94@gmail.com>
This commit is contained in:
31
index.json
31
index.json
@@ -2349,17 +2349,6 @@
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000",
|
||||
"modelId": "lumi.curtain.hagl07"
|
||||
},
|
||||
{
|
||||
"fileName": "20211124154453_OTA_lumi.switch.n1aeu1_0.0.0_1123_20211110.ota",
|
||||
"fileVersion": 2839,
|
||||
"fileSize": 294136,
|
||||
"url": "https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/images/Lumi/20211124154453_OTA_lumi.switch.n1aeu1_0.0.0_1123_20211110.ota",
|
||||
"imageType": 5404,
|
||||
"manufacturerCode": 4447,
|
||||
"sha512": "140be0a40f40f84fcb1878ba623ad5830bfab2049f489ee7acf8ae22c1db1e4991fbf39832482a55fee2fc5b20681d9ab5592d457d1e5bf705b0c75af45eff1f",
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000",
|
||||
"modelId": "lumi.switch.n1aeu1"
|
||||
},
|
||||
{
|
||||
"fileName": "20211228121851_OTA_lumi.switch.b1nacn02_0.0.0_0065_20211223_EB5B32.ota",
|
||||
"fileVersion": 65,
|
||||
@@ -2580,17 +2569,6 @@
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000",
|
||||
"modelId": "lumi.airm.fhac01"
|
||||
},
|
||||
{
|
||||
"fileName": "20221009111923_OTA_lumi.curtain.acn002_0.0.0_1530_20221009_6C9C3D.ota",
|
||||
"fileVersion": 3870,
|
||||
"fileSize": 296304,
|
||||
"url": "https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/images/Lumi/20221009111923_OTA_lumi.curtain.acn002_0.0.0_1530_20221009_6C9C3D.ota",
|
||||
"imageType": 14976,
|
||||
"manufacturerCode": 4447,
|
||||
"sha512": "2436508af75c9b0139d304f8b62ce5579ad721fffec74967db7256bb030f47f8172a2b2ef2003eede1c868410b007ac6c89b3936dd44dffd07fdff155bcb7451",
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000",
|
||||
"modelId": "lumi.curtain.acn002"
|
||||
},
|
||||
{
|
||||
"fileName": "20221123140517_OTA_lumi.remote.b1acn02_0.0.0_0031_20221010_8D956D.ota",
|
||||
"fileVersion": 31,
|
||||
@@ -6322,7 +6300,8 @@
|
||||
"imageType": 5404,
|
||||
"manufacturerCode": 4447,
|
||||
"sha512": "04d1359fecdd69d13d167d05b3f3bedae5b11250b6cbc79016568c3a37b9b708be0e62b519a8d13a9fbeeea0bf1a3eb36e94e1faa29da2f1264729c9c0d7af1f",
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000"
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000",
|
||||
"modelId": "lumi.switch.n1aeu1"
|
||||
},
|
||||
{
|
||||
"fileName": "20240726111850_OTA_lumi.switch.n2aeu1_0.0.0_0025_20240725_4EABF3.ota",
|
||||
@@ -6332,7 +6311,8 @@
|
||||
"imageType": 5532,
|
||||
"manufacturerCode": 4447,
|
||||
"sha512": "8887e3192c9bf2464f02930235c054a5cf7a801b91d43b355dfbd93f15391c965c767fd310ca4c7c985f0c5143484a99d26b73b7cbb8f0aa3c2c06ef0eee67be",
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000"
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000",
|
||||
"modelId": "lumi.switch.n2aeu1"
|
||||
},
|
||||
{
|
||||
"fileName": "20240624144545_OTA_lumi.curtain.acn002_0.0.0_1532_20240528_438A0E.ota",
|
||||
@@ -6342,7 +6322,8 @@
|
||||
"imageType": 14976,
|
||||
"manufacturerCode": 4447,
|
||||
"sha512": "8e4a84798920a32e6ff992eb7438d9db2665353295a27963ee3cd25c6bbdaa160a4ab13e640d46e5b459f6aa8c89c25e081e11760b8b7997abb3b9e80f919ea8",
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000"
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000",
|
||||
"modelId": "lumi.curtain.acn002"
|
||||
},
|
||||
{
|
||||
"fileName": "TRTL_ThermalSensor_PROD_OTA_V40_v1.00.40.ota",
|
||||
|
||||
22
index1.json
22
index1.json
@@ -2859,6 +2859,28 @@
|
||||
"Slacky-DIY"
|
||||
]
|
||||
},
|
||||
{
|
||||
"fileName": "20211124154453_OTA_lumi.switch.n1aeu1_0.0.0_1123_20211110.ota",
|
||||
"fileVersion": 2839,
|
||||
"fileSize": 294136,
|
||||
"url": "https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/images/Lumi/20211124154453_OTA_lumi.switch.n1aeu1_0.0.0_1123_20211110.ota",
|
||||
"imageType": 5404,
|
||||
"manufacturerCode": 4447,
|
||||
"sha512": "140be0a40f40f84fcb1878ba623ad5830bfab2049f489ee7acf8ae22c1db1e4991fbf39832482a55fee2fc5b20681d9ab5592d457d1e5bf705b0c75af45eff1f",
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000",
|
||||
"modelId": "lumi.switch.n1aeu1"
|
||||
},
|
||||
{
|
||||
"fileName": "20221009111923_OTA_lumi.curtain.acn002_0.0.0_1530_20221009_6C9C3D.ota",
|
||||
"fileVersion": 3870,
|
||||
"fileSize": 296304,
|
||||
"url": "https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/images1/Lumi/20221009111923_OTA_lumi.curtain.acn002_0.0.0_1530_20221009_6C9C3D.ota",
|
||||
"imageType": 14976,
|
||||
"manufacturerCode": 4447,
|
||||
"sha512": "2436508af75c9b0139d304f8b62ce5579ad721fffec74967db7256bb030f47f8172a2b2ef2003eede1c868410b007ac6c89b3936dd44dffd07fdff155bcb7451",
|
||||
"otaHeaderString": "ROUTERX-----JN5180--ENCRYPTED000",
|
||||
"modelId": "lumi.curtain.acn002"
|
||||
},
|
||||
{
|
||||
"fileName": "100B-0111-01001A00-ConfLight-ModuLum-EFR32MG13.zigbee",
|
||||
"fileVersion": 16783872,
|
||||
|
||||
@@ -22,6 +22,7 @@ import type {ExtraMetas, GHExtraMetas, RepoImageMeta} from "./types.js";
|
||||
const GLEDOPTO_MANUFACTURER_CODE = 4687;
|
||||
const TUYA_MANUFACTURER_CODE_1 = 4098;
|
||||
const TUYA_MANUFACTURER_CODE_2 = 4417;
|
||||
const LUMI_UNITED_TECHOLOGY_LTD_SHENZHEN = 4447;
|
||||
|
||||
const EXTRA_METAS_PR_BODY_START_TAG = "```json";
|
||||
const EXTRA_METAS_PR_BODY_END_TAG = "```";
|
||||
@@ -149,21 +150,33 @@ export async function processOtaFiles(
|
||||
const statusToBase = getParsedImageStatus(parsedImage, baseMatch);
|
||||
|
||||
// Manufacturer specific checks
|
||||
if (
|
||||
parsedImage.manufacturerCode === GLEDOPTO_MANUFACTURER_CODE &&
|
||||
!fileExtraMetas.modelId &&
|
||||
(fileExtraMetas.manufacturerName == null || fileExtraMetas.manufacturerName.some((name) => name.toLowerCase().includes("gledopto")))
|
||||
) {
|
||||
// Gledopto uses the same imageType for every device, force modelId to be present.
|
||||
// https://github.com/Koenkk/zigbee-OTA/pull/864
|
||||
throw new Error("Gledopto image requires extra `modelId` metadata");
|
||||
}
|
||||
if (
|
||||
(TUYA_MANUFACTURER_CODE_1 === parsedImage.manufacturerCode || TUYA_MANUFACTURER_CODE_2 === parsedImage.manufacturerCode) &&
|
||||
!fileExtraMetas.manufacturerName
|
||||
) {
|
||||
// Tuya uses the same imageType for every device, force manufacturerName to be present.
|
||||
throw new Error("Tuya image requires extra `manufacturerName` metadata");
|
||||
switch (parsedImage.manufacturerCode) {
|
||||
case GLEDOPTO_MANUFACTURER_CODE: {
|
||||
if (
|
||||
!fileExtraMetas.modelId &&
|
||||
(fileExtraMetas.manufacturerName == null ||
|
||||
fileExtraMetas.manufacturerName.some((name) => name.toLowerCase().includes("gledopto")))
|
||||
) {
|
||||
// Gledopto uses the same imageType for every device, force modelId to be present.
|
||||
// https://github.com/Koenkk/zigbee-OTA/pull/864
|
||||
throw new Error("Gledopto image requires extra `modelId` metadata");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TUYA_MANUFACTURER_CODE_1:
|
||||
case TUYA_MANUFACTURER_CODE_2: {
|
||||
if (!fileExtraMetas.manufacturerName) {
|
||||
// Tuya uses the same imageType for every device, force manufacturerName to be present.
|
||||
throw new Error("Tuya image requires extra `manufacturerName` metadata");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LUMI_UNITED_TECHOLOGY_LTD_SHENZHEN: {
|
||||
if (!fileExtraMetas.modelId) {
|
||||
throw new Error("Lumi/Aqara image requires extra `modelId` metadata");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (statusToBase) {
|
||||
|
||||
@@ -11,6 +11,7 @@ import {it} from "vitest";
|
||||
import * as common from "../src/common";
|
||||
import type {ExtraMetas, RepoImageMeta} from "../src/types";
|
||||
|
||||
export const IMAGE_LUMI = "20240726111155_OTA_lumi.switch.n1aeu1_0.0.0_0025_20240725_8F4299.ota";
|
||||
export const IMAGE_GLEDOPTO = "GL-B-008P_V17A1_OTAV7.ota";
|
||||
export const IMAGE_TUYA = "1662693814-oem_mg21_zg_nh_win_cover_relay_OTA_1.0.7.bin";
|
||||
export const IMAGE_V14_1 = "ZLinky_router_v14.ota";
|
||||
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
getAdjustedContent,
|
||||
IMAGE_GLEDOPTO,
|
||||
IMAGE_INVALID,
|
||||
IMAGE_LUMI,
|
||||
IMAGE_TUYA,
|
||||
IMAGE_V12_1,
|
||||
IMAGE_V12_1_METAS,
|
||||
@@ -688,6 +689,8 @@ Text after end tag`);
|
||||
["", IMAGE_TUYA, "Tuya image requires extra `manufacturerName` metadata"],
|
||||
['"modelId": "GL-C-008"', IMAGE_GLEDOPTO, undefined],
|
||||
["", IMAGE_GLEDOPTO, "Gledopto image requires extra `modelId` metadata"],
|
||||
['"modelId": "lumi.switch.n1aeu1"', IMAGE_LUMI, undefined],
|
||||
["", IMAGE_LUMI, "Lumi/Aqara image requires extra `modelId` metadata"],
|
||||
['"manufacturerName": ["GleDopto"]', IMAGE_GLEDOPTO, "Gledopto image requires extra `modelId` metadata"],
|
||||
['"manufacturerName": ["OtherManuf"]', IMAGE_GLEDOPTO, undefined],
|
||||
])("manufacturer specific checks", async (body: string, image: string, error: string | undefined) => {
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user