MQTT2 Device - dimup/dimdown

Begonnen von Thomasvonpleis, 13 September 2019, 13:20:26

Vorheriges Thema - Nächstes Thema

kinghill

Zitat von: Beta-User am 07 April 2020, 17:45:45
Aha, du hast also entweder "nur" ein Problem mit dem Eventhandler (DOIF kann ich nicht), oder du brauchst die Anpassung am MQTT2_DEVICE, damit das klappt.

Das ist kein Ding für ein Zoom-Meeting, das sind erhebliche Verständnislücken bei den Grundlagen...

Da wir bei Grundlagen sind: An der Syntax ist zu erkennen, dass du da wohl ein DOIF hast, aber wir täten uns ggf. leichter, wenn du schlicht und ergreifend die Konventionen hier einhalten könntest und list's liefern (bzw. für MQTT2_DEVICE auch gerne eine RAW-Definition)...

Aus der Hüfte würde ich ungetestet mal mit dem hier gehen:
define n_Ikeataster_Kueche notify MQTT2_zigbee_IkeaTasterKueche.click:.brightness_down { my $num=maxNum(ReadingsNum('Ikea_Kuechen_Leiste','brightness',0)-20,0);; fhem("set Ikea_Kuechen_Leiste brightness $num");;}

Btw.: Man kann sowas auch generalisieren, ich habe dafür allerdings etwas andere Geräte, aber der "Steinbruch" dafür wäre hier zu finden: https://github.com/rejoe2/FHEM/blob/master/99_myUtils_MiLight.pm

Hi,

der Code Funktioniert ja Prächtig. Ich habe es mit einem Tradfri Dimmtaster und einer Tradfri Bulb von Ikea am laufenn.
Jetzt die Frage: Wie bekomme ich es hin das ein längerer Tastendruck erkannt wird und das dimmen Praktisch von 0-100 über einen langen Klick realisiert wird?

Mein Momentaner Code:


define licht_heller notify Tadfri_Switch:brightness_up_click {{ my $num=maxNum(ReadingsNum('Ikea_lampe','brightness',0)+20,0);; fhem("set IKEA_lampe brightness $num");;}}
[/size]
[/size]Danke

Beta-User

Zitat von: kinghill am 19 Oktober 2020, 11:22:52
Jetzt die Frage: Wie bekomme ich es hin das ein längerer Tastendruck erkannt wird und das dimmen Praktisch von 0-100 über einen langen Klick realisiert wird?
Viele Wege führen nach Rom.

Der erste Schritt wäre, dass es überhaupt Events für "längerer Tastendruck" sowie das Release gibt (oder viele Events für "ist noch gedrückt"...?)...

Dann könntest du (z.B.):
- ein notify nutzen, um einen dimmup-Zyklus zu starten (ein sich selbst immer wieder aufrufender Code, bis volle Helligkeit erreicht ist oder abgebrochen wird;
- ein notify, das den Zyklus unterbricht, wenn das Loslassen-Event kommt.

Grundsätzlich kann man m.E. alle drei Events (long-up/down und Loslassen) in einem notify abhandeln, ich würde dazu aber immer noch etwas myUtils-Code gut finden, der das dann auseinanderfieselt, welche Reaktion erfolgen soll und wie die Dimmstufen ggf. ausfallen sollen.

(OT: Was soll das mit den doppelten geschweiften Klammern?)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

kinghill

#17
Hallo,

vielen Dank für die ausfühliche Antwort.

Ich bin leider nicht so der fhem Crack und bin mir nicht sicher wie das aussehen könnte. Finde deine Vorschläge aber Super. Denke sie würden beide den gleichen Efekt erzielen.
Der Ikea Taster gibt bei langem druck das Event : brightness_up_click und beim los lasen das : brightness_stop_click.
Wie könnte so ein notify aussehen?

Die doppelten klammern sind natürlich blödsinn. Den Fehler hatte ich noch garnicht edntdeckt gehabt.

Beta-User

#18
Zitat von: kinghill am 19 Oktober 2020, 15:21:49Wie könnte so ein notify aussehen?

So:
define licht_heller notify Tadfri_Switch:brightness_[a-z]+p_click|Tadfri_Switch:brightness_down_click { myDimm('Ikea_lampe',$EVENT)}
Den myUtils-Code müßtest du dann dazu noch basteln, Anleitung für den Einstieg findest du im Wiki unter https://wiki.fhem.de/wiki/99_myUtils_anlegen, guter Einstiegspunkt für unser Dimmer-Thema hier ist das letzte Beispiel "Countdown Timer" bei den Links oder das hier: https://forum.fhem.de/index.php/topic,115121.msg1093796.html#msg1093796 (ich finde es besser, sowas mit InternalTimer() zu lösen statt mit at, ist aber teilweise Geschmackssache).

Bevor ich keine eigenen Versuche oder wenigstens vernünftige lists hier sehe, werde ich nichts weiter dazu schreiben, siehe
Antw:In welcher Gruppe sollte ich meine Fragen stellen und Unbedingt vor dem ersten Post lesen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

kinghill

#19
Hallo zusammen,

nachdem ich gestern Abend ziemlich lange rum probiert habe, und zu keinem brauchbaren Ergebniss mit der 99_myUtils.pm gekommen bin, habe ich eine andere brauchbare Lösung über ein Doif gebastelt.
Ich bin leider kein Phytonkenner und bekomme so ein Programm einfach nicht geschrieben. Es war mir aber immerhin möglich den alten Zustand über die 99_myUtils.pm abzubilden.

Hier meine jetztige Löung:

Lampe heller dimmen

define licht_heller DOIF ([Tadfri_Switch] eq "brightness_up_click") { my $num=maxNum(ReadingsNum('IKEA_Lampe','brightness',0)+10,0);; fhem("set IKEALampe brightness $num")}
attr licht_heller repeatcmd 0.2


Das attr repeatcmd macht genau das was ich wollte, und wiederholt den Code alle 0,2 sekunden.

Lampe dunkler dimmen

define licht_dunkler DOIF ([Tadfri_Switch] eq "brightness_down_click" and [IKEALampe:brightness] >10 ) { my $num=maxNum(ReadingsNum(IKEALampe','brightness',0)-10,0);; fhem("set IKEALampe brightness $num")}
attr licht_dunkler repeatcmd 0.2


Hier habe ich noch eine zweite variable mit >10 eingebaut. Somit ist es nicht möglich die Lampe ganz OFF zu dimmen.

Ich hoffe da hilft jemandem weiter.

LG Frank


Damian

Naja, es fehlt aber eine Abbruchbedingung, sonst hört deine Wiederholung nie auf.

Dieser Einzeiler wiederholt alle 0.2 Sekunden bis brightness bei 100 angekommen ist:

defmod di_lamp_on DOIF {["Tadfri_Switch:brightness_up_click"];;set_Exec("timer",'$count == 0 ? 0 : 0.2','fhem_set("IKEALampe brightness ".(ReadingsNum("IKEA_Lampe","brightness",0)+10))','ReadingsNum("IKEA_Lampe","brightness",0) <= 100')}

siehe: https://fhem.de/commandref_DE.html#DOIF_set_Exec
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kinghill

#21
Hi.

doch das funktioniert auch so Perfekt. Der Taster wechselt beim loslassen das Event brightness_up_click auf brightness_stop_click. Dadurch sind nicht mehr alle Bedingungen erfüllt und der Befehl wird gestopt.


Damian

Zitat von: kinghill am 20 Oktober 2020, 10:08:21
Hi.

doch das funktioniert auch so Perfekt. Der Taster wechselt beim loslassen das Event brightness_up_click auf brightness_stop_click. Dadurch sind nicht mehr alle Bedingungen erfüllt und der Befehl wird gestopt.

Dann ist ja alles bestens.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF