Ubisys S1 missing firmware (#717)

This commit is contained in:
FlorianBruckner
2025-03-09 20:10:08 +01:00
committed by GitHub
parent 3544f4255e
commit ce6f3da0ca
5 changed files with 25 additions and 10 deletions
File diff suppressed because one or more lines are too long
+4 -2
View File
@@ -20,7 +20,10 @@ const FIRMWARE_HTML_URL = 'http://fwu.ubisys.de/smarthome/OTA/release/index';
function groupByImageType(arr: Image[]): GroupedImages { function groupByImageType(arr: Image[]): GroupedImages {
return arr.reduce<GroupedImages>((acc, cur) => { return arr.reduce<GroupedImages>((acc, cur) => {
acc[cur.imageType] = [...(acc[cur.imageType] || []), cur]; acc[cur.imageType + (cur.hardwareVersionMax ? cur.hardwareVersionMax : '')] = [
...(acc[cur.imageType + (cur.hardwareVersionMax ? cur.hardwareVersionMax : '')] || []),
cur,
];
return acc; return acc;
}, {}); }, {});
} }
@@ -76,7 +79,6 @@ export async function download(): Promise<void> {
for (const imageType in imagesByType) { for (const imageType in imagesByType) {
const image = getLatestImage(imagesByType[imageType], sortByFileVersion); const image = getLatestImage(imagesByType[imageType], sortByFileVersion);
if (!image) { if (!image) {
console.error(`${LOG_PREFIX} No image found for ${imageType}.`); console.error(`${LOG_PREFIX} No image found for ${imageType}.`);
continue; continue;
+2
View File
@@ -154,6 +154,8 @@ export function findMatchImage(
i.manufacturerCode === image.manufacturerCode && i.manufacturerCode === image.manufacturerCode &&
extraMetas.minFileVersion === i.minFileVersion && extraMetas.minFileVersion === i.minFileVersion &&
extraMetas.maxFileVersion === i.maxFileVersion && extraMetas.maxFileVersion === i.maxFileVersion &&
extraMetas.hardwareVersionMin === i.hardwareVersionMin &&
extraMetas.hardwareVersionMax === i.hardwareVersionMax &&
i.modelId === extraMetas.modelId && i.modelId === extraMetas.modelId &&
(!(i.manufacturerName && extraMetas.manufacturerName) || primitivesArrayEquals(i.manufacturerName, extraMetas.manufacturerName)), (!(i.manufacturerName && extraMetas.manufacturerName) || primitivesArrayEquals(i.manufacturerName, extraMetas.manufacturerName)),
); );
+8
View File
@@ -93,6 +93,14 @@ export const IMAGE_V13_1_METAS = {
sha512: '4d7ab47dcb24e478e0abb35e691222b7691e77ed5a56de3f9c82e8682730649b1a154110b7207d4391c32eae53a869e20878e880fc153dbe046690b870be8486', sha512: '4d7ab47dcb24e478e0abb35e691222b7691e77ed5a56de3f9c82e8682730649b1a154110b7207d4391c32eae53a869e20878e880fc153dbe046690b870be8486',
otaHeaderString: 'OM15081-RTR-JN5189-0000000000000', otaHeaderString: 'OM15081-RTR-JN5189-0000000000000',
}; };
/**
* Use when V14 has a hardware constraint set.
*/
export const IMAGE_V13_1_METAS_MAIN = {
...IMAGE_V13_1_METAS,
url: `${common.BASE_REPO_URL}${common.REPO_BRANCH}/images/${IMAGES_TEST_DIR}/${IMAGE_V13_1}`,
};
/** /**
* - otaUpgradeFileIdentifier: <Buffer 1e f1 ee 0b>, * - otaUpgradeFileIdentifier: <Buffer 1e f1 ee 0b>,
* - otaHeaderVersion: 256, * - otaHeaderVersion: 256,
+11 -7
View File
@@ -17,6 +17,7 @@ import {
IMAGE_V12_1_METAS, IMAGE_V12_1_METAS,
IMAGE_V13_1, IMAGE_V13_1,
IMAGE_V13_1_METAS, IMAGE_V13_1_METAS,
IMAGE_V13_1_METAS_MAIN,
IMAGE_V14_1, IMAGE_V14_1,
IMAGE_V14_1_METAS, IMAGE_V14_1_METAS,
IMAGE_V14_2, IMAGE_V14_2,
@@ -553,12 +554,13 @@ Text after end tag`);
}); });
it('success with multiple files and specific extra metas', async () => { it('success with multiple files and specific extra metas', async () => {
filePaths = [useImage(IMAGE_V13_1), useImage(IMAGE_V14_1)]; filePaths = [useImage(IMAGE_V13_1), useImage(IMAGE_V14_1), useImage(IMAGE_V12_1)];
const newContext = withBody(`Text before start tag const newContext = withBody(`Text before start tag
\`\`\`json \`\`\`json
[ [
{"fileName": "${IMAGE_V14_1}", "manufacturerName": ["lixee"], "hardwareVersionMin": 2}, {"fileName": "${IMAGE_V14_1}", "manufacturerName": ["lixee"], "hardwareVersionMin": 2},
{"fileName": "${IMAGE_V13_1}", "manufacturerName": ["lixee"]} {"fileName": "${IMAGE_V13_1}", "manufacturerName": ["lixee"]},
{"fileName": "${IMAGE_V12_1}", "manufacturerName": ["lixee"]}
] ]
\`\`\` \`\`\`
Text after end tag`); Text after end tag`);
@@ -569,18 +571,19 @@ Text after end tag`);
expect(readManifestSpy).toHaveBeenCalledWith(common.BASE_INDEX_MANIFEST_FILENAME); expect(readManifestSpy).toHaveBeenCalledWith(common.BASE_INDEX_MANIFEST_FILENAME);
expect(readManifestSpy).toHaveBeenCalledWith(common.PREV_INDEX_MANIFEST_FILENAME); expect(readManifestSpy).toHaveBeenCalledWith(common.PREV_INDEX_MANIFEST_FILENAME);
expect(addImageToBaseSpy).toHaveBeenCalledTimes(2); expect(addImageToBaseSpy).toHaveBeenCalledTimes(2);
expect(addImageToPrevSpy).toHaveBeenCalledTimes(0); expect(addImageToPrevSpy).toHaveBeenCalledTimes(1);
expect(writeManifestSpy).toHaveBeenCalledTimes(2); expect(writeManifestSpy).toHaveBeenCalledTimes(2);
expect(writeManifestSpy).toHaveBeenCalledWith(common.BASE_INDEX_MANIFEST_FILENAME, [ expect(writeManifestSpy).toHaveBeenCalledWith(common.BASE_INDEX_MANIFEST_FILENAME, [
withExtraMetas(IMAGE_V13_1_METAS_MAIN, {manufacturerName: ['lixee']}),
withExtraMetas(IMAGE_V14_1_METAS, {manufacturerName: ['lixee'], hardwareVersionMin: 2}), withExtraMetas(IMAGE_V14_1_METAS, {manufacturerName: ['lixee'], hardwareVersionMin: 2}),
]); ]);
expect(writeManifestSpy).toHaveBeenCalledWith(common.PREV_INDEX_MANIFEST_FILENAME, [ expect(writeManifestSpy).toHaveBeenCalledWith(common.PREV_INDEX_MANIFEST_FILENAME, [
withExtraMetas(IMAGE_V13_1_METAS, {manufacturerName: ['lixee']}), withExtraMetas(IMAGE_V12_1_METAS, {manufacturerName: ['lixee']}),
]); ]);
}); });
it('success with multiple files and specific extra metas, ignore without fileName', async () => { it('success with multiple files and specific extra metas, ignore without fileName', async () => {
filePaths = [useImage(IMAGE_V13_1), useImage(IMAGE_V14_1)]; filePaths = [useImage(IMAGE_V12_1), useImage(IMAGE_V13_1), useImage(IMAGE_V14_1)];
const newContext = withBody(`Text before start tag const newContext = withBody(`Text before start tag
\`\`\`json \`\`\`json
[ [
@@ -595,12 +598,13 @@ Text after end tag`);
expect(readManifestSpy).toHaveBeenCalledWith(common.BASE_INDEX_MANIFEST_FILENAME); expect(readManifestSpy).toHaveBeenCalledWith(common.BASE_INDEX_MANIFEST_FILENAME);
expect(readManifestSpy).toHaveBeenCalledWith(common.PREV_INDEX_MANIFEST_FILENAME); expect(readManifestSpy).toHaveBeenCalledWith(common.PREV_INDEX_MANIFEST_FILENAME);
expect(addImageToBaseSpy).toHaveBeenCalledTimes(2); expect(addImageToBaseSpy).toHaveBeenCalledTimes(3);
expect(addImageToPrevSpy).toHaveBeenCalledTimes(0); expect(addImageToPrevSpy).toHaveBeenCalledTimes(0);
expect(writeManifestSpy).toHaveBeenCalledTimes(2); expect(writeManifestSpy).toHaveBeenCalledTimes(2);
expect(writeManifestSpy).toHaveBeenCalledWith(common.BASE_INDEX_MANIFEST_FILENAME, [ expect(writeManifestSpy).toHaveBeenCalledWith(common.BASE_INDEX_MANIFEST_FILENAME, [
IMAGE_V13_1_METAS_MAIN,
withExtraMetas(IMAGE_V14_1_METAS, {manufacturerName: ['lixee'], hardwareVersionMin: 2}), withExtraMetas(IMAGE_V14_1_METAS, {manufacturerName: ['lixee'], hardwareVersionMin: 2}),
]); ]);
expect(writeManifestSpy).toHaveBeenCalledWith(common.PREV_INDEX_MANIFEST_FILENAME, [IMAGE_V13_1_METAS]); expect(writeManifestSpy).toHaveBeenCalledWith(common.PREV_INDEX_MANIFEST_FILENAME, [IMAGE_V12_1_METAS]);
}); });
}); });