Dimmer für MQTT Device umsetzen, reading kommt zu selten, Variable zwischenspeic

Begonnen von Jackie, 08 Februar 2024, 13:08:39

Vorheriges Thema - Nächstes Thema

Jackie

Hallo,

ich versuche gerade mit einem Ikea Tradfri Schalter einen Dimmer für mein MQTT Device (Ulanzi Pixelclock) zu bauen. Leider kennt die Pixelclock keinen dimup oder dimDown befehl sondern nur absolute Werte. Und der Ikea-Schalter erkennt im Prinzip nur kurzklick, langklick, und langklickende bzw. Kurzklickende.

Folgender Ansatz funktioniert im Prinzip:

([HUESensorNachtlicht:"1002"])
  (set MQTT2_FHEM_Server publish awtrix_123456/settings {"BRI": "1"})
DOELSEIF ([HUESensorNachtlicht:"2002"])
  (set MQTT2_FHEM_Server publish awtrix_123456/settings {"BRI": "0"})
DOELSEIF ([HUESensorNachtlicht:"1001"])
  ({
    my $value = ReadingsVal("MQTT2_awtrix_123456", "bri", 0);;
    $value = ($value == 100) ? $value + 0 : $value + 1;;
    fhem(qq(set MQTT2_FHEM_Server publish awtrix_123456/settings {"BRI": "$value"}));;
  })
DOELSEIF ([HUESensorNachtlicht:"1003"])
  ## Do nothing, just stop repeatcmd from last condition
DOELSEIF ([HUESensorNachtlicht:"2001"])
  ({
    my $value = ReadingsVal("MQTT2_awtrix_123456", "bri", 0);;
    $value = ($value == 0) ? $value + 0 : $value - 1;;
    fhem(qq(set MQTT2_FHEM_Server publish awtrix_123456/settings {"BRI": "$value"}));;
  })
DOELSEIF ([HUESensorNachtlicht:"2003"])

Allerdings geht das Dimmen damit sehr stockend und langsam. Das Problem scheint zu sein, dass die Reafings für "my $value = ReadingsVal("MQTT2_awtrix_123456", "bri", 0)" viel zu selten gesendet werden. Ich müsste also irgendwie versuchen, statt des Readings die Variable für die Helligkeit zwischenzuspeichern, ich habe aber keine Idee wie ich das anstellen soll.

Oder hat jemand eine gute Idee wie man den Dimmer hinbekommt ohne ständig erneut das den Wert vom Reading holen zu müssen?
Raspi 3 mit FHEM, LWZ 304 Trend, Fronius Symo 10.0-3-M, Conbee II Stick, Optokoppler (USB, FTDI), diverse Ikea Tradfri Komponenten,...

Damian

Wenn du deine Definition in den DOIF-Perlmodus überführst, kannst du einfach mit Device-Variablen hantieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Jackie

Zitat von: Damian am 08 Februar 2024, 13:18:28Wenn du deine Definition in den DOIF-Perlmodus überführst, kannst du einfach mit Device-Variablen hantieren.

Danke, hast du mir dafür ein Beispiel? Und werden die Device-Variablen dann zwischengespeichert oder habe ich da dann das gleiche Problem dass diese nur dann aktualisiert werden wenn auch das Reading aktualisiert wird?
Raspi 3 mit FHEM, LWZ 304 Trend, Fronius Symo 10.0-3-M, Conbee II Stick, Optokoppler (USB, FTDI), diverse Ikea Tradfri Komponenten,...

Damian

Die Variablen bleiben so lange erhalten, wie das Device existiert. Sie beginnen mit $_ siehe dazu: https://wiki.fhem.de/wiki/DOIF/Perl-Modus
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF