Gelöst: on-for-timer für zigbee 4x kanal schalter

Begonnen von Müller, 18 August 2024, 09:00:18

Vorheriges Thema - Nächstes Thema

Müller

Hallo,

ich möchte einen 4 Kanal Schalter für eine Beregnungssteuerung benutzen.
Da dies schön komprimiert dargestellt werden soll, möchte ich keinen Split in 4 Devices.

Das ganze funktioniert fast wie es soll:
defmod MQTT2_zigbee_Beregnung MQTT2_DEVICE zigbee_Beregnung
attr MQTT2_zigbee_Beregnung alias Beregnung
attr MQTT2_zigbee_Beregnung comment Channel 1 for MQTT2_zigbee_Beregnung, see also MQTT2_zigbee_Beregnung_CH2
attr MQTT2_zigbee_Beregnung devStateIcon 1.ON:sani_sprinkling@blue:off1 1.OFF:sani_sprinkling@gray:on1  2.ON:sani_sprinkling@blue:off2 2.OFF:sani_sprinkling@gray:on2  3.ON:sani_sprinkling@blue:off3 3.OFF:sani_sprinkling@gray:on3  4.ON:sani_sprinkling@blue:off4 4.OFF:sani_sprinkling@gray:on4
attr MQTT2_zigbee_Beregnung devicetopic zigbee2mqtt/Beregnung
attr MQTT2_zigbee_Beregnung eventMap /on-for-timer1 3600:AN1/on-for-timer2 3600:AN2/on-for-timer3 3600:AN3/on-for-timer4 600:AN4/
attr MQTT2_zigbee_Beregnung model zigbee2mqtt_2channel_split
attr MQTT2_zigbee_Beregnung readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT,'',$JSONMAP);; $ret->{state}=lc($ret->{state}) if defined $ret->{state};; return $ret }
attr MQTT2_zigbee_Beregnung room MQTT2_DEVICE
attr MQTT2_zigbee_Beregnung setList on1:noArg $DEVICETOPIC/l1/set {"state":"ON"}\
  off1:noArg $DEVICETOPIC/l1/set {"state":"OFF"}\
  toggle1:noArg $DEVICETOPIC/l1/set {"state":"TOGGLE"}\
\
on2:noArg $DEVICETOPIC/l2/set {"state":"ON"}\
  off2:noArg $DEVICETOPIC/l2/set {"state":"OFF"}\
  toggle2:noArg $DEVICETOPIC/l2/set {"state":"TOGGLE"}\
\
on3:noArg $DEVICETOPIC/l3/set {"state":"ON"}\
  off3:noArg $DEVICETOPIC/l3/set {"state":"OFF"}\
  toggle3:noArg $DEVICETOPIC/l3/set {"state":"TOGGLE"}\
\
on4:noArg $DEVICETOPIC/l4/set {"state":"ON"}\
  off4:noArg $DEVICETOPIC/l4/set {"state":"OFF"}\
  toggle4:noArg $DEVICETOPIC/l4/set {"state":"TOGGLE"}
attr MQTT2_zigbee_Beregnung setStateList on1 off1 toggle1 on2 off2 toggle2
attr MQTT2_zigbee_Beregnung stateFormat 1:state_l1\
2:state_l2\
3:state_l3\
4:state_l4\


setstate MQTT2_zigbee_Beregnung 1:OFF\
2:OFF\
3:OFF\
4:OFF\

doch leider ist der on-for-timer nicht in der SetList includiert....
Den hätte ich jedoch gerne, das die Beregnung nach bspw. 30 min wieder ausgeht. Kann mit jemand helfen die setList entsprechend zu erweitern:

on-for-timer1 {my $duration = .....

vielen Dank & sommerliche Grüße
FHEM auf Raspberry, 433mHz & Zigbee für Rollläden, Gartenbewässerung, Beleuchtung, Fußbodenheizung

eisman

hi,

aufteilung in 4 Devices wäre einfacher

und sonst einen watchdog auf 30min

viele spass
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Müller

#2
Danke für die schnelle Antwort. Ich wollte vermeiden 4 unterschiedliche devices zu generieren (aus Platzgründen auf der Bildschirmoberfläche.)

In dieser Quelle
https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele

wurde die SetList ergänzt
on-for-timer {my $duration = $EVTPART1*10; 'cmnd/DVES_575127/Backlog POWER1 1; delay '.$duration.'; POWER1 0'}
kann mir jemand helfen das für meinen Schalter anzupassen ?
FHEM auf Raspberry, 433mHz & Zigbee für Rollläden, Gartenbewässerung, Beleuchtung, Fußbodenheizung

betateilchen

Zitat von: Müller am 18 August 2024, 12:24:52Ich wollte vermeiden 4 unterschiedliche devices zu generieren

Tja, nicht alles, was man "will" ergibt tatsächlich sinnvolle Ergebnisse.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Müller

FHEM auf Raspberry, 433mHz & Zigbee für Rollläden, Gartenbewässerung, Beleuchtung, Fußbodenheizung

eisman

#5
hi,

es geht schon, mit 4 Devices,

und 1 anzeige Device z.B. readingsGroup

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Müller

FHEM auf Raspberry, 433mHz & Zigbee für Rollläden, Gartenbewässerung, Beleuchtung, Fußbodenheizung

Müller

Hättest du noch die raw definition für mich als Anleitung ?
Danke
FHEM auf Raspberry, 433mHz & Zigbee für Rollläden, Gartenbewässerung, Beleuchtung, Fußbodenheizung

eisman

#8
hi,

ja

z.B. Steckdose:
defmod rg.Steckdose.Wohnzimmer readingsGroup SO_0101:state@Fernseher,state@SO_0102,state@SO_0103,state@SO_0201_Sw,state@SO_0401,state@SO_0402,state@Radio\
SO_0101:<LG_TV>,<DVD>,<Test>,<PC>,!LA,!AL,!RA
attr rg.Steckdose.Wohnzimmer alias Wohnzimmer
attr rg.Steckdose.Wohnzimmer cellStyle {"r:1" => 'style="text-align:center;; color:#FFA500;; font-weight:bold;; font-size:10px;;"',\
 "r:2" => 'style="text-align:center;; color:#FFA500;; font-weight:bold;; font-size:10px;;"'}
attr rg.Steckdose.Wohnzimmer noheading 1
attr rg.Steckdose.Wohnzimmer nonames 1
attr rg.Steckdose.Wohnzimmer notime 1
attr rg.Steckdose.Wohnzimmer room Wohnzimmer,multimedia,readingsGroup
attr rg.Steckdose.Wohnzimmer style style="border:0px;;background:none;;box-shadow:none;;"
attr rg.Steckdose.Wohnzimmer valueColumns { "Wohnzimmer" => 'colspan="3"', "Arbeitszimmer" => 'colspan="3"', "Schlafzimmer" => 'colspan="2"',\
  "Küche"      => 'colspan="3"', "Bad"           => 'colspan="1"', "Flur"         => 'colspan="1"'}
attr rg.Steckdose.Wohnzimmer valueFormat { if($READING eq "LA") { \
    if(ReadingsVal("SO_0401","power",0) > 0) {\
  $VALUE = "Laden"." ". ReadingsVal("SO_0401","power",0) . " W";;\
} else {\
  $VALUE = "Laden";;\
}\
  }\
  elsif($READING eq "AL") { \
    if(ReadingsVal("SO_0402","power",0) > 0) {\
  $VALUE = "Alexa"." ". ReadingsVal("SO_0402","power",0) . " W";;\
} else {\
  $VALUE = "Alexa";;\
}\
  }\
  elsif($READING eq "RA") { \
    if(ReadingsVal("SO_0403","power",0) > 0) {\
  $VALUE = "Radio"." ". ReadingsVal("SO_0403","power",0) . " W";;\
} else {\
  $VALUE = "Radio";;\
}\
  }\
}
attr rg.Steckdose.Wohnzimmer valueIcon { state => '%devStateIcon' }


z.B. Licht
defmod rg.Licht.wz readingsGroup DL_0101:state@DL_0101,state@LED_0101,state@SL_0101,state@FL_0101_Sw1,state@FL_0101_Sw2\
DL_0101:<Wohnzimmer>
attr rg.Licht.wz alias Wohnzimmer
attr rg.Licht.wz cellStyle {\
"r:1" => 'style="text-align:center;; color:#FFA500;; font-weight:bold;; font-size:10px;;"',\
"r:2" => 'style="text-align:center;; color:#FFA500;; font-weight:bold;; font-size:10px;;"'}
attr rg.Licht.wz noheading 1
attr rg.Licht.wz nonames 1
attr rg.Licht.wz notime 1
attr rg.Licht.wz room light,readingsGroup
attr rg.Licht.wz style style="border:0px;;background:none;;box-shadow:none;;"
attr rg.Licht.wz valueColumns { "Wohnzimmer" => 'colspan="5"', "Arbeitszimmer" => 'colspan="2"', "Schlafzimmer" => 'colspan="2"',\
  "Küche"      => 'colspan="2"', "Bad"           => 'colspan="1"', "Flur"         => 'colspan="1"'}
attr rg.Licht.wz valueIcon { state => '%devStateIcon', all_on => '%devStateIcon'}
defmod rg.Licht.wz readingsGroup DL_0101:state@DL_0101,state@LED_0101,state@SL_0101,state@FL_0101_Sw1,state@FL_0101_Sw2\
DL_0101:<Wohnzimmer>
attr rg.Licht.wz alias Wohnzimmer
attr rg.Licht.wz cellStyle {\
"r:1" => 'style="text-align:center;; color:#FFA500;; font-weight:bold;; font-size:10px;;"',\
"r:2" => 'style="text-align:center;; color:#FFA500;; font-weight:bold;; font-size:10px;;"'}
attr rg.Licht.wz noheading 1
attr rg.Licht.wz nonames 1
attr rg.Licht.wz notime 1
attr rg.Licht.wz room light,readingsGroup
attr rg.Licht.wz style style="border:0px;;background:none;;box-shadow:none;;"
attr rg.Licht.wz valueColumns { "Wohnzimmer" => 'colspan="5"', "Arbeitszimmer" => 'colspan="2"', "Schlafzimmer" => 'colspan="2"',\
  "Küche"      => 'colspan="2"', "Bad"           => 'colspan="1"', "Flur"         => 'colspan="1"'}
attr rg.Licht.wz valueIcon { state => '%devStateIcon', all_on => '%devStateIcon'}


es sind nur ein paar Beispiele!

SO_0101:state@Fernseher,state@SO_0102,state@SO_0103 ist die steckdosen leiste

defmod SO_0101 MQTT2_DEVICE
attr SO_0101 IODev MQTT2C
attr SO_0101 alias Fernseher
attr SO_0101 cmdIcon on:general_an off:general_aus
attr SO_0101 devStateIcon { my $Schalter = ReadingsVal($name,"state_l1","off");;\
  my $Status   = ReadingsVal($name,"availability","offline");;\
  if($Status eq "online") {\
    if($Schalter eq "on") { \
      return "on:it_television@#00FF00:off";;\
    } elsif($Schalter eq "off") {\
      return "off:it_television@#8C8C8C:on";;\
    } else {\
      return ".*:it_television@#FF0000:off";; \
    }\
  } else {\
    return ".*:it_television@#FF0000:off";;\
  }\
}
attr SO_0101 devicetopic zigbee2mqtt/EG/SO_0101
attr SO_0101 group socket
attr SO_0101 icon hue_filled_outlet@#00FF00
attr SO_0101 readingList $DEVICETOPIC/availability:.* availability\
$DEVICETOPIC:.* { my $ret=json2nameValue($EVENT);; $ret->{state_l1}=lc($ret->{state_l1}) if defined $ret->{state_l1};; return $ret }
attr SO_0101 room Wohnzimmer,mqtt,multimedia
attr SO_0101 setList on:noArg  $DEVICETOPIC/set {"state_l1":"on"}\
off:noArg $DEVICETOPIC/set {"state_l1":"off"}
attr SO_0101 stateFormat state_l1
attr SO_0101 webCmd on:off

defmod SO_0102 MQTT2_DEVICE
attr SO_0102 IODev MQTT2C
attr SO_0102 alias DVD
attr SO_0102 cmdIcon on:general_an off:general_aus
attr SO_0102 devStateIcon { my $Schalter = ReadingsVal($name,"state_l2","off");;\
  my $Status   = ReadingsVal($name,"availability","offline");;\
  if($Status eq "online") {\
    if($Schalter eq "on") { \
      return "on:it_drive_removable@#00FF00:off";;\
    } elsif($Schalter eq "off") {\
      return "off:it_drive_removable@#8C8C8C:on";;\
    } else {\
      return ".*:it_drive_removable@#FF0000:off";; \
    }\
  } else {\
    return ".*:it_drive_removable@#FF0000:off";;\
  }\
}
attr SO_0102 devicetopic zigbee2mqtt/EG/SO_0101
attr SO_0102 group socket
attr SO_0102 icon hue_filled_outlet@#00FF00
attr SO_0102 readingList $DEVICETOPIC/availability:.* availability\
$DEVICETOPIC:.* { my $ret=json2nameValue($EVENT);; $ret->{state_l2}=lc($ret->{state_l2}) if defined $ret->{state_l2};; return $ret }
attr SO_0102 room Wohnzimmer,mqtt,multimedia
attr SO_0102 setList on:noArg  $DEVICETOPIC/set {"state_l2":"on"}\
off:noArg $DEVICETOPIC/set {"state_l2":"off"}
attr SO_0102 stateFormat state_l2
attr SO_0102 webCmd on:off

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

TomLee

Hallo,

wenn man genau wüsste was für ein Device das auf zigbee2mqtt.io ist, könnte man in der Doku nachschauen ob on-for-timer im Gerät unterstützt wird.

Dann könnte man wieder alles in einem MQTT2_DEVICE umsetzen...

Gruß Thomas

Müller

FHEM auf Raspberry, 433mHz & Zigbee für Rollläden, Gartenbewässerung, Beleuchtung, Fußbodenheizung

eisman

hi,

Lidl HG06338

bei meiner gibt es auch die gleichen befehle:  {"state" : "ON", "on_time": 300} => 5min

war aber nie begeistert!

einfacher war eben

  fhem("set DL_0601 on-for-timer 30");

gruss
 
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

TomLee

OT

Zitat von: eisman am 18 August 2024, 14:12:20war aber nie begeistert!

einfacher war eben

Hab keine Devices welche das unterstützen, wie muss man das verstehen ?
Funktioniert der Timer nicht zuverlässig oder hat dir nur die Umsetzung in setList nicht gepasst/gefallen ?

eisman

#13
hi,TomLee

setList 300:noArg  $DEVICETOPIC/set {"state" : "ON", "on_time": 300, "off_wait_time": 120}

läst sich in SUB besser schreiben_
    fhem("set DL_0601 on-for-timer " . ReadingsVal("RA_0600","Licht",30));

ich habe in jeden Raum einen Dummy für Grundeinstellungen. wo ich den timer wert ändern kann

gruss


1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Müller

#14
setList
timer:noArg $DEVICETOPIC/l1/set {"state" : "ON", "on_time": 300} gibt mir in zigbee2mqtt
die Fehlermeldung
error 2024-08-18 14:42:29Invalid message 'null', skipping...

auch diese Variante:
timer:noArg $DEVICETOPIC/l1/set {"state":"ON","on_time":30}
kein Effekt und die gleiche Fehlermeldung
FHEM auf Raspberry, 433mHz & Zigbee für Rollläden, Gartenbewässerung, Beleuchtung, Fußbodenheizung