[Modul] Zigbee2MQTT Beta Version 5.x

Hallo,

ebenfalls wie gewünscht…

und der Inhalt der translations.json:

[
    "Lock1",
    "Lock2",
    "Schedule With Preheat",
    "Setpoint",
    "Closed",
    "External Open",
    "Away Or Vacation"
]

Grüße

1 „Gefällt mir“

Das Zigbee2MQTTExposes Verzeichnis ist 512K groß.

1 „Gefällt mir“

Bitte sehr


Bildschirmfoto 2025-01-26 um 15.08.33

1 „Gefällt mir“

Anbei das directory Listing und meine translation sieht so aus …

dir.txt (4,4 KB)

[
    "Down Press",
    "Press"
]
1 „Gefällt mir“

Version 5.11

  • Child Lock konnte nicht geschaltet werden
  • einige Text Variablen wurden nicht angelegt (z.B. die Schedule Variablen)
  • Fehlende Übersetzungen ergänzt (werden nur beim neu Anlegen von Variablen/Profilen berücksichtigt)
  • Debug Download bei Gruppen war defekt
  • JSON Datei für fehlende Übersetzungen konnte kaputt gehen
  • Fehlende Übersetzungen werden im Debug Download einbezogen
  • Fehlende Übersetzungen können in der Instanz-Konfig angezeigt werden (nur wenn es welche gibt)
2 „Gefällt mir“

Moin,

beim Bosch BMCT-SLZ wird beim Schalter Modus kein Wert angezeigt.
https://www.zigbee2mqtt.io/devices/BMCT-SLZ.html
Bosch BMCT-SLZ_Z2M_Debug.json (20,1 KB)

Und beim Bosch BTH-RA kann man beim „Besetzter Heizungssollwert“ im Webfront nur als kleinsten Wert 15°C eingeben, über Variable ändern aber auch 5°C.
https://www.zigbee2mqtt.io/devices/BTH-RA.html
Bosch BTH-RA_Z2M_Debug.json (47,6 KB)

Hein09

Moin,

Magst Du mal schauen, welches Profil bei der betreffenden Variable hinterlegt ist:
(Ich denke es handelt sich um „name“: „switch_type“). Sollte eigentlich Z2M.switch_type.b9563d9d als Profile hinterlegt sein.

Andererseits ist da was mächtig falsch, da das Device nur zwei exposes besitzt:
Bosch BMCT-SLZ control via MQTT | Zigbee2MQTT

Hier wird das Profil „~Temperature.Room“ genutzt. Das geht von 15-25 Grad. Werde ich anpassen, dann erhält es ein eigenes Profile mit 5-30 Grad:

LG
Burkhard

Moin,

es ist das gleiche Profil hinterlegt:
image

Hier die Ansicht vom Webfront:

Und hier die Ansicht in Zigbee2MQTT:
image

Hein09

Magst Du mir von der Instance mal ein ankommendes Payload schicken?

Findest Du im Debug der Instanz unter:

01.02.2025, 10:40:52 | AppendVariableTypes :: Line 1064 :: Eingehendes Payload: |

LG
Burkhard

ich hoffe ich habe das richtige genommen.
dump.txt (92,6 KB)

Hi,
ich liebe ja automatisch Update. Die neue Version erzeugt zu meiner Freude eine Variable wenn ein entsprechendes Payload kommt. Heute habe ich gesehen das darunter auch ein String ‚Update‘ mit einer json Struktur ist.

Ich habe mein automatisches Update-Script an die neue Version angepasst. Beim ersten Aufruf analysiert es die Update-Strings, wenn vorhanden, und legt die Variable Update Status an. In diese Status Variable kommt dann „idle“ oder „available“. Bei letzteren wird Z2M_PerformOTAUpdate mit der InstanzID aufgerufen. Es wird ein Trigger auf Verbindungsqualität der ID aktiviert und darin wird dann der Fortschritt angezeigt.

Das Script hat bei mir auch gleich angeschlagen:

Hier das Script:

<?php
$ignoreIDs = [];
$InstanzID = @IPS_GetVariableIDByName('InstanzID', $_IPS['SELF']);
if($InstanzID === false){
    $InstanzID = IPS_CreateVariable(1);
    IPS_SetName($InstanzID, 'InstanzID');
    IPS_SetParent($InstanzID, $_IPS['SELF']);
    SetValue($InstanzID, 0);
}
$TriggerID = @IPS_GetVariableIDByName('TriggerID', $_IPS['SELF']);
if($TriggerID === false){
    $TriggerID = IPS_CreateVariable(1);
    IPS_SetName($TriggerID, 'TriggerID');
    IPS_SetParent($TriggerID, $_IPS['SELF']);
    SetValue($TriggerID, 0);
}

$Instanz = GetValue($InstanzID);
switch ($_IPS['SENDER']){
    case "Variable":
        $DeviceConfig = json_decode(IPS_GetConfiguration($Instanz), true);
        $DeviceBaseTopic = $DeviceConfig["MQTTBaseTopic"];
        $BridgeIDsList = IPS_GetInstanceListByModuleID('{00160D82-9E2F-D1BD-6D0B-952F945332C5}');  // Zigbee2MQTT
        $BridgeID = 0;
        foreach ($BridgeIDsList as $BridgeIDItem){
            $BridgeConfig = json_decode(IPS_GetConfiguration($BridgeIDItem), true);
            $BridgeBaseTopic = $BridgeConfig["MQTTBaseTopic"];
            if ($DeviceBaseTopic == $BridgeBaseTopic){
                $BridgeID = $BridgeIDItem;
                break;
            }
        } 
        if ($BridgeID === 0) return;
        $VarID = @IPS_GetObjectIDByIdent('update', $Instanz);
        $Var = json_decode(GetValue($VarID), true);
        if (isset($Var['state'])){
            if ($Var['state'] == 'available'){
                $config = json_decode(IPS_GetConfiguration($Instanz), true);
                Z2M_PerformOTAUpdate($BridgeID, $config["MQTTTopic"]);
            }
            $VarID = @IPS_GetObjectIDByIdent('update_status', $Instanz);
            if ($VarID != 0){
                $Text = $Var['state'];
                if (isset($Var['progress'])){
                    $Text .= ' : ' . $Var['progress'] . '%';
                }
                SetValue($VarID, $Text);
            }
            if ($Var['state'] == 'idle'){
                IPS_LogMessage("Update Ende", IPS_GetName($Instanz));
                $Trigger = GetValue($TriggerID);
                IPS_SetEventActive($Trigger, false);
                SetValue($InstanzID, 0);
                IPS_SetScriptTimer($_IPS['SELF'], 120);
            }
        }
        break;
    case "Execute":
    case "TimerEvent":
// Alle Zigbee2MQTT Instanzen in ein Feld einlesen
        $InstanzIDsList = IPS_GetInstanceListByModuleID('{E5BB36C6-A70B-EB23-3716-9151A09AC8A2}');  // Zigbee2MQTT
// alle Z2M Instanzen untersuchen
        foreach ($InstanzIDsList as $Instanz) {
            if (in_array($Instanz, $ignoreIDs)) {
                continue;
            }
// Gibt es Status-Variable
//{"installed_version":1107324829,"latest_version":1124102917,"state":"available"}

            $VarID = @IPS_GetObjectIDByIdent('update', $Instanz);
            if ($VarID > 0){
                $Update = json_decode(GetValue($VarID), true);
                if (isset($Update['state'])){
                    $VarID = @IPS_GetObjectIDByIdent('update_status', $Instanz);
                    if ($VarID == 0){
                        $VarID = IPS_CreateVariable(1);
                        IPS_SetName($VarID, 'Update Status');
                        IPS_SetIdent($VarID, 'update_status');
                        IPS_SetParent($VarID, $_IPS['SELF']);
                    }
                    SetValue($VarID, $Update['state']);
                }
            }
        }
        foreach ($InstanzIDsList as $Instanz) {
            if (in_array($Instanz, $ignoreIDs)) {
                continue;
            }
            $VarID = @IPS_GetObjectIDByIdent('update_status', $Instanz);
            if ($VarID != 0){
                if (GetValue($VarID) == 'available'){
                    IPS_LogMessage("Update Start", IPS_GetName($Instanz));
                    IPS_SetScriptTimer($_IPS['SELF'], 0);
                    SetValue($InstanzID, $Instanz);
                    $Trigger = GetValue($TriggerID);
                    if ($Trigger == 0){
                        $Trigger = IPS_CreateEvent(0);
                        IPS_SetParent($Trigger, $_IPS['SELF']);
                        IPS_SetEventAction($Trigger, "{7938A5A2-0981-5FE0-BE6C-8AA610D654EB}",[]);
                        IPS_SetEventActive($Trigger, false);
                        SetValue($TriggerID, $Trigger);
                    }
                    $VarID = @IPS_GetObjectIDByIdent('linkquality', $Instanz);
                    IPS_SetEventTrigger($Trigger, 0, $VarID);
                    IPS_SetEventActive($Trigger, true);
                    return;
                }
            }
        }
        IPS_SetScriptTimer($_IPS['SELF'], 7 * 24 * 3600);
        break;
}
?>

Einfach einmal aufrufen und danach wird einmal in der Woche nach Updates gesucht und wenn vorhanden gestartet.

Ralf

Das wird morgen nicht mehr funktionieren, da die eine Update Variable als String entfällt und durch einzelne Variablen ersetzt wird.
Michael

Habe auch gerade durch ein OTA-Update gesehen das die Profile bei HUEs Effekten …

image

… entweder schlecht übersetzt sind oder Überreste von alten Versionen haben!!!

Wie war es gedacht? und welche Auswahl entspricht „—“ in Z2M, weil sonst steht im Konfigdialog … Wert nicht vorhanden!?!

Gruß Heiko

Das Testcenter zeigt das an, weil die Variable keinen Wert hat. Dies betrifft alle Variablen welche nur eine Aktion (hier z.b. den Effekt) starten. Diese Aktionen sind zustandslos, entsprechend haben die Variablen keinen Wert.
Sie könnten halt nur angesteuert werden.
Michael

1 „Gefällt mir“

Dann passe ich es morgen wieder an :joy:

Lasse meine Updateorgie nach dem aktuellen Gerät beenden damit ich morgen wieder testen kann. 5 Geräte warten noch auf ein Update.

War da nicht ne Aussage zu der Option?

LG

Ich warte nicht gerne.

Ja… Aber bisher nur Vorbereitungen dazu getroffen.
Kommt wohl erst mit der Version 5.x… :grinning:
Michael

1 „Gefällt mir“

Diesen Update-String habe ich auch als Vorbereitung und positives Zeichen verstanden den gab es vorher ja nicht.

Moin,

schonmal für Neugierige und Ungeduldige :rofl:
Der neue Aufbau für Update wird so aussehen:

LG
Burkhard

2 „Gefällt mir“