[Modul] Zigbee2MQTT

Hi,
es geht jetzt auch schon. Mit:

$Payload['local_temperature_calibration] = -2;
$PayloadJSON = json_encode($Payload, JSON_UNESCAPED_SLASHES);
Z2M_Command(DeviceInstanz, 'set', $PayloadJSON);

sollte der Offset gesetzt werden.

Ralf

@Burki24

Welche davon sind schreibbar?

@HarmonyFan
Richtig, ich will es aber noch als Variable darstellen. :slight_smile:

Grüße,
Kai

Das ist mir klar, aber mit einer beschreibbaren Variable wäre es einfacher zu handeln. Wenn Geräte diese Möglichkeit bieten, sollten sie auch angeboten werden. Um hier wieder mal auf den Punkt zu kommen: Es muss doch nicht Alles mit Scripte belegt werden, wenn es intuitiver funktioniert.

Gruß

Burkhard

Hallo Kai,

die sind alle beschreibbar. Die Andren habe ich schon nicht mit aufgelistet

Gruß

Burkhard

Hi,
der Hinweis auf Z2M_Command war nur gedacht falls es dringend ist.

KaiS wird bestimmt unterschreiben das ich einer bin der alles machbare auch machen bzw. gemacht haben will:-)

Apropos machbar: Der Hue Bewegungsmelder hat Variablen occupancy_timeout und motion_sensitivity die auch beschreibbar sind.

mit

Hue MotionSensitivity, OccupationTimeout

RequestAction
            case 'Z2M_MotionSensitivity':
                $this->setMotionSensitivity($Value);
                break;
            case 'Z2M_OccupancyTimeout':
                $this->setOccupancyTimeout($Value);
                break;

ReceiveData
                if (property_exists($Payload, 'occupancy_timeout')) {
                    $this->RegisterVariableInteger('Z2M_OccupancyTimeout', $this->Translate('Occupancy Timeout'), '');
                    $this->EnableAction('Z2M_OccupancyTimeout');
                    SetValue($this->GetIDForIdent('Z2M_OccupancyTimeout'), $Payload->occupancy_timeout);
                }
                if (property_exists($Payload, 'motion_sensitivity')) {
                    $this->RegisterVariableInteger('Z2M_MotionSensitivity', $this->Translate('Motion Sensitivity'), 'Z2M.Sensitivity');
                    $this->EnableAction('Z2M_MotionSensitivity');
                    switch ($Payload->motion_sensitivity) {
                        case 'medium':
                            SetValue($this->GetIDForIdent('Z2M_MotionSensitivity'), 1);
                            break;
                        case 'low':
                            SetValue($this->GetIDForIdent('Z2M_MotionSensitivity'), 2);
                            break;
                        case 'high':
                            SetValue($this->GetIDForIdent('Z2M_MotionSensitivity'), 3);
                            break;
                        default:
                            $this->SendDebug('SetValue MotionSensitivity', 'Invalid Value: ' . $Payload->motion_sensitivity, 0);
                            break;
                        }
                }

Action Routinen

    privat function setOccupancyTimeout(int $value)
    {
        $Payload['occupancy_timeout'] = $value;
        $PayloadJSON = json_encode($Payload, JSON_UNESCAPED_SLASHES);
        $this->Z2MSet($PayloadJSON);
    }

    privat function setMotionSensitivity(int $value)
    {
        switch ($value) {
            case 1:
                $Payload['motion_sensitivity'] = 'medium';
                break;
            case 2:
                $Payload['motion_sensitivity'] = 'low';
                break;
            case 3:
                $Payload['motion_sensitivity'] = 'high';
                break;
            default:
                return;
            }
        $PayloadJSON = json_encode($Payload, JSON_UNESCAPED_SLASHES);
        $this->Z2MSet($PayloadJSON);
    }


kann man sie auch bedienen.

btw. KaiS hast Du mal einen Thread wo steht das in Zukunft alles nur nur per RequestAction laufen soll? Wenn ja dann sind diese Variablen ein Beispiel das es suboptimal ist. Diese Variablen liefert der Bewegungsmelder erst wenn man sie einmal verändert hat.

Ralf

Danke für den Code. :slight_smile:
Man kann im Konfigurator, allerdings die Variablen abrufen. :wink:

Ich werde trotzdem dabei bleiben, dass die Funktionen auf private gesetzt werden. :slight_smile:
Ein Thread habe ich gerade nicht, aber soweit ich weiß, wird vermehrt auf RequestAction gesetzt, oder @paresy?

Grüße,
Kai

Moin Kai,
der Code beruht ja größtenteils auf Egoismus und ich bin kein geduldiger Mensch der warten kann:-)

btw. Mail von Samstag bekommen? Der Rollo-Antrieb hat bei Position ohne Änderung funktioniert. Bei Status habe ich Änderungen vorgenommen. Da ich dann rumspielen wollte habe ich dir die gesamte PHP-Datei geschickt in der Hoffnung das Du damit was anfangen kannst.

Mal sehen was Paresy sagt. Ich habe aber noch mehr Argumente:-)

Ralf

Es gibt eine neue Version als Stable Version.
Alle weitere dazu ist im zweiten Post zu finden, leider kann ich nicht mehr genau sagen, welche Variablen es nun alle neu gibt. :smiley:

Es gibt auch eine neue Beta Version, dort gibt es folgende neue Variablen:

  • Max Temperatur
  • Min Temperatur
  • Default (Preset)
  • Boost Zeit
  • Urlaubsmodus
  • Urlaubsmodus default (preset) Tage
  • Komfort Temperatur
  • Eco Temperatur
  • Bewegungsempfindlichkeit (gab es vorher schon, aber ohne Aktion)
  • Bewegung Timeout
  • Window State (öffnen/schließen)

Grüße,
Kai

Moin KaiS,
sieht bisher sehr gut aus.

Danke Ralf

Hallo Kai,

ich nutze das Modul recht intensiv und habe das Update vor kurzem durchgeführt.
Zeitgleich allerdings auch meinen Zigbee2MQTT Docker Container aktualisiert.
Jetzt habe ich den Effekt, dass die Batterie Zustände in neuen Variablen sind (links waren alle ungültig) und ich habe nun 2 Variablen bei den Bewegungsmeldern für die Helligkeit.
Ist das durch die Änderung im Modul? Gab es noch weitere Änderungen? Sonst müsste ich nochmal alle Trigger prüfen, ob z.B. Bewegung erkannt noch funktioniert.

Grüße
Steffen

Zigbee2Tasmota oder Zugbee2MQTT? Was nutzt du?
Du schreibst hier im Zigbee2Tasmota Thread.

Grüße,
Kai

Ah sorry, Zigbee2MQTT. Kann ich mein Posting verschieben? Das war ein Versehen.

Ich habe es verschoben.

Ich weiß nicht wieso du neue Variablen bekommen hast, eigentlich habe ich da nichts geändert.
Kannst du mal schauen wie die Idents von den alten und den neuen Variablen heißen?
Die Helligkeitsvariablen gibt es neu, da Zigbee2MQTT diese so schickt.

Es gab noch einige Änderungen, aber eigentlich habe ich nur weitere Geräte hinzugefügt, also neue Variablen.

Ansonsten ist ein Konfigurator dazu gekommen, es gibt eine Geräte- und eine Gruppeninstanz.
An der Geräteinstanz hat sich nichts weiter geändert außer der Name und der interne Ablauf.

Sollte dir dennoch etwas auffallen, dann melde dich bitte.

Grüße,
Kai

Batterie hat eine neue Variablen ID erhalten.
Beleuchtungsstärke (Lux) - da gab es aus meiner Sicht eine Veränderung.
Warum der Bewegungsmelder eine Temperatur hat ist mir auch gerade unklar. Ich werde wohl mal den Zigbee2MQTT Docker Container untersuchen müssen…

Wie gesagt, Zigbee2MQTT liefert beide Beleuchtungsstärken Variablen, deswegen werden sie angelegt. :wink:
Gab es also zwei Batterie Variablen und du hast schon eine gelöscht? Da hätte mich dann nämlich interessiert wie die beiden Idents (Nicht IDs) aussehen.
Manche Bewegungsmelder liefern Temperaturen, zum Beispiel die von Philips HUE und dann werden die Variable auch angelegt.

Grüße,
Kai

Die alten IDs habe ich leider nicht mehr.
Ich habe von jedem Batterie-Status eine Verlinkung. Sämtliche Verlinkungen führten zu einem ungültigen Ziel (VarID nicht mehr vorhanden).
Es scheint als wurden die Variablen daher vollständig ersetzt (gelöscht + neu angelegt)

Das tut mir leid.
Ich kann da leider jetzt nichts mehr dran ändern. :frowning:
Hatte sonst noch jemand das Problem?

@HarmonyFan, du hattest nicht so ein Problem, oder?
Du hast doch immer schön die Beta Versionen getestet.

Grüße,
Kai

Hallo.
Sorry stehe etwas auf dem Schaluch.

Habe die neue lib 3.1 jetzt eingebunden.
Allerdings sind jetzt die Funktionen alle Private.
Wie setzte ich jetzt, als Beispiel den „State“ bei einem Plug über „RequestAction“ Funktion?

Ich hab nur den Ident ‚Z2M_State‘ und den Value in RequestAction.
Aber wie kommt die Id des Zigbee Plugs ins Bild?
Danke.
BYE
Thomas

So:

//ID der Status Variable
$VariablenID = 12345;
RequestAction($VariablenID, true)

Grüße,
Kai

Hallo Kai,

hatte das selbe Problem.

Wenn ich es schaffe starte ich ein Backup im Docker, dann kann ich nach den alten idents gucken.