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

Firmware update status of xxxxx changed to 1 #1137

Open
krobipd opened this issue Jan 22, 2024 · 1 comment
Open

Firmware update status of xxxxx changed to 1 #1137

krobipd opened this issue Jan 22, 2024 · 1 comment

Comments

@krobipd
Copy link

krobipd commented Jan 22, 2024

Hallo

mich würde es sehr interessieren wie ich via datenpunkt/script herausfinden kann wann ein Homematic ip geräte update fertig übertragen ist.

im log bekomme ich eine Meldung vom rpc adapter (siehe Titel) aber ich finde nirgends in den Datenpunkten diese information.
dachte ursprünglich das im channel 0 der datenpunkt update_pending dies ausspucken würde, tut er aber nicht.

@neopholus
Copy link

neopholus commented Nov 19, 2024

Hallo @krobipd ,

vielleicht hilft dir das:

/**
 * Generiert den Status-String für den FirmwareUpdate-Status aller HMIP-Devices.
 * Der Status der Devices kann folgende Werte annehmen:
 * - UP_TO_DATE: Es liegen keine Änderungen vor.
 * - NEW_FIRMWARE_AVAILABLE: Eine neue Firmware Version liegt vor.
 * - DELIVER_FIRMWARE_IMAGE: Das ausliefern der Firmware Datei läuft.
 * - READY_FOR_UPDATE: Die Firmware Datei wurde übertragen und mit
 *   installFirmware (String device) kann der Updatevorgang gestartet werden.
 * - PERFORMING_UPDATE: Das Gerät führt den Update Vorgang aus, führt
 *   einen Werksreset durch und meldet sich dann mit einem Inclusion Request
 *   wieder und wird automatisch inkludiert.
 * 
 * @return  Ein String mit der Liste aller Devices die Beachtung im Hinblick auf FW-Updates benötigen
 */
async function generateDeviceUpdateString():Promise<string> {
    var idArray:string[] = $('state[id=hm-rpc.1.*.0.CONFIG_PENDING]').toArray();
    let updateInfo:string = '';
    let res;

    for (let i:number = 0; i < idArray.length; i++ ) {
        let id:string = idArray[i];
        let idForgetDeviceDescription:string = id.match(/[0-9A-F]{14}\.\d+/)!.at(0)!;
 
        // idForGetParamSet sieht so aus: 00085BE9A56142:4
        // wir brauchen um den Namen zu finden: 'hm-rpc.1.00085BE9A56142.4'
        let name:string = (<string>(<iobJS.StateObject><unknown>getObject('hm-rpc.1.' + idForgetDeviceDescription)).common.name).replace(':0','');
        // wir brauchen um es für getDeviceDescription zu verwenden: '00085BE9A56142'
        idForgetDeviceDescription = idForgetDeviceDescription.replace('.CONFIG_PENDING', '').replace('.0', ''); 

        res = await sendToAsync('hm-rpc.1', 'getDeviceDescription', {ID: idForgetDeviceDescription, paramType: 'FIRMWARE'});
        if (res?.result?.FIRMWARE_UPDATE_STATE != 'UP_TO_DATE') {
            let mappedString:string;

            switch (res?.result?.FIRMWARE_UPDATE_STATE) {
                case 'UP_TO_DATE': 
                    mappedString = 'FW aktuell'; 
                    break; 
                case 'NEW_FIRMWARE_AVAILABLE': 
                    mappedString = 'Neue FW verfügbar'; 
                    break; 
                case 'DELIVER_FIRMWARE_IMAGE': 
                    mappedString = 'Übertragung läuft'; 
                    break; 
                case 'READY_FOR_UPDATE': 
                    mappedString = 'Update per CCU starten!'; 
                    break; 
                case 'PERFORMING_UPDATE': 
                    mappedString = 'Installation läuft'; 
                    break; 
                case 'DO_UPDATE_PENDING': 
                    mappedString = 'Update am Gerät starten!'; 
                    break; 
                default: 
                    mappedString = res?.result?.FIRMWARE_UPDATE_STATE;
            }


            updateInfo += `${name}: ${mappedString}\n`;
        }
    };

    updateInfo = updateInfo.trim().split('\n').sort().join('\n');

    if (updateInfo == '') {
        updateInfo = 'Alle Geräte haben aktuelle Firmware.'
    }

    return updateInfo;
}

Falls deine HMIP-Geräte nicht unter hm-rpc.1.* hängen, musst du alle Vorkommen dieses Stings an deine Instanz-ID anpassen.

Viele Grüße
Stefan

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants