on-for-timer mit Minuten Angabe statt Sekunden

Begonnen von pschlaeppi, 31 Juli 2020, 13:09:56

Vorheriges Thema - Nächstes Thema

pschlaeppi

Hallo zusammen,

Bei den Dachfenster habe ich aktuell eine Möglichkeit mit on-for-timer konfiguriert um die Dachfenster manuell auf Wunsch eine gewünschte Zeitspanne zu öffnen.
Die jeweils notwendige Division durch 3600 um die Stunden zu erhalten hat aber nicht ganz unerwartet einen schlechten WAF Wert zur Folge.

Gibt es dafür allenfalls eine konfiguratorische Möglichkeit, dass das Dropdown mit Minuten Angaben statt Sekunden genutzt werden kann?

Wäre um allfällige Tips sehr dankbar.

Grüsse Philipp


Otto123

Hi,

ich weiß nicht genau wie Deine Frage zu deuten ist, aber im Prinzip so:

set Dachfenster on-for-timer {(3*60)}

Die 3 müsste dann aus deinem Dropdown / Minutenwahl kommen :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

ggf. könnte/sollte auch eventMap weiterhelfen. Damit könnte man aus "xh" "ySekunden" machen. Das würde ich dann aber eher über uzsuSelectRadio lösen (widget siehe hier: https://wiki.fhem.de/wiki/FHEMWEB/Widgets).

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

Beta-User

...hat mich jetzt interessiert, wie es im Detail funktioniert...

Hier ein Test-Dummy mit Stundenauswahl:
defmod ot_dummy dummy
attr ot_dummy eventMap { usr=>{'^on-for-hour?(.*)'=>'on-for-timer {($1*3600)}'} }
attr ot_dummy setExtensionsEvent 1
attr ot_dummy setList on off
attr ot_dummy useSetExtensions 1
attr ot_dummy webCmd on:off:on-for-hour
attr ot_dummy widgetOverride on-for-hour:selectnumbers,1,0.5,24,1,lin
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

pschlaeppi

Hallo zusammen,

Herzlichen Dank für eure Feedbacks. Ich war mit meiner Anfrage doch etwas sehr wortkarg, sorry dafür. Ich verwende eine readingsGroup zur Darstellung meiner Velux Dachfesnster Steuerung. Ich steuere sie mittels KLF200. Hier habe ich setList und readingsList nicht direkt im Aktor zur Verfügung und wollte eigentlich nicht noch mehr zusätzliche Dummy's einsetzen müssen. Ausser der Nutzerunfreundlichen Angabe der Timer Zeit in Sekunden funktioniert alles andere bereits perfekt durch alleinige Konfingurationen in der readingsGroup und den Devices.

Mein Ziel wäre es nun in der readingsGroup die Zeit im Timer Dropdown in Minuten zu haben und diese dann an den Aktor zu übergeben das er das dann halt in Sekunden fährt, oder eventuell den Aktor zu motivieren das in Minuten zu akzeptieren und da allenfalls rauf zu multiplizieren wie von Ott vorgeschlagen. Ich habe schon versucht den Perlcode mit der Multiplikation als Command rein zu pfriemeln in der readingsGroup aber dann bekomme ich natürlich kein Dropdown mehr wenn nicht im Aktor und in der readingsGroup der Timer identisch parametrisiert ist.
Irgendwie habe ich noch nicht gerafft wo ich da mit der Multiplikation dazwischen kann falls überhaupt.

Ich habe untenstehend den Code der readingsGroup und des Aktors eigefügt sowie einen Screenshot der readingsGroup attached.
Hoffe das hilft etwas Licht auf die Frage zu werfen.

Grüsse Philipp


Aktuelle Konfiguration der readingsGroup:
# ReadingsGroup Dachfenster und Markisen im Wintergarten
define rg.DFMA.Wiga readingsGroup <%fts_roof_shutter_70>,<Status>,<Auf>,<Zu>,<Stop>,<Timer>,<Position>,<&emsp;;>,<Limit>,<currentMode>\
(eg.wg.DF.[^_]+):!state,!Auf,!Zu,!Stop,!Timer,!pct,<&emsp;;>,!limitationMax,!RCtl_currentMode\
<>,<>,<>,<>,<>,<>,<>,<>,<>\
(eg.wg.MA.[^_]+):!state,!Auf,!Zu,!Stop,<>,!pct,<&emsp;;>,!limitationMax,!RCtl_currentMode\
<>,<>,<>,<>,<>,<>,<>,<>,<>\
dm_Wetter:!Regen,!FreezeLock,!WindLock,!StormLock\

attr rg.DFMA.Wiga alias Wintergarten: Dachfenster und Markisen
attr rg.DFMA.Wiga commands {pct => 'pct:selectnumbers,0,10,100,0,lin',\
Timer => 'Timer:selectnumbers,0,600,14400,0,lin',\
Auf => 'set $DEVICE Auf',\
Zu => 'set $DEVICE Zu',\
Stop => 'set $DEVICE Stop',\
RCtl_AutoShade => 'RCtl_AutoShade:off,Summer,Winter,Both,Work',\
RCtl_FreezeProtection => 'RCtl_FreezeProtection:on,off',state => 'state:'}
attr rg.DFMA.Wiga group 02 Dachfenster und Markisen
attr rg.DFMA.Wiga nameStyle style="font-weight:bold"
attr rg.DFMA.Wiga room Dachfenster
attr rg.DFMA.Wiga style style="border:3px;;background:none;;box-shadow:none;;"
attr rg.DFMA.Wiga valueIcon {FreezeLock => '{return \'frost_roof_shutter@red\' if( $VALUE eq "on");; return \'frost_roof_shutter@green\'}',\
Regen => '{return \'humidity@red\' if( $VALUE eq "rain");; return \'humidity@green\'}',\
WindLock => '{return \'weather_wind@red\' if( $VALUE eq "on");; return \'weather_wind@green\'}',\
StormLock => '{return \'weather_storm@red\' if( $VALUE eq "on");; return \'weather_storm@green\'}', \
state => '%devStateIcon',\
Auf => 'control_arrow_up', Zu => 'control_arrow_down', Stop => 'stop_rund',RCtl_LockState => '$VALUE'}
attr rg.DFMA.Wiga valueStyle style="text-align:center"



Stellvertretende Konfiguration linken Wiga Dachfensters:
define eg.wg.DF.Links KLF200Node xxx.xxx.xxx.xxx:xxxxx 1
attr eg.wg.DF.Links alias Fenster Links
attr eg.wg.DF.Links cmdIcon Auf:control_arrow_up Zu:control_arrow_down Stop:stop_rund
attr eg.wg.DF.Links devStateIcon .*up:control_arrow_up:toggle .*down:control_arrow_down:toggle .*-.7\).*:weather_rain:toggle \d.\(.*:fts_window_roof:toggle [1-10]\d.\(.*:fts_window_roof_open_1:toggle [10-80]\d.\(.*:fts_window_roof_open_2:toggle 100.\(.*:fts_window_roof_open_2:toggle
attr eg.wg.DF.Links event-min-interval pct:600
attr eg.wg.DF.Links eventMap on:Auf off:Zu stop:Stop on-for-timer:selectnumbers,0,600,14400,0,lin
attr eg.wg.DF.Links group 04 Dachfenster Wintergarten
attr eg.wg.DF.Links icon fts_window_roof
attr eg.wg.DF.Links room KLF200Node,Wiga
attr eg.wg.DF.Links sortby wg.df.01
attr eg.wg.DF.Links stateFormat pct (limitationMin - limitationMax) execution
attr eg.wg.DF.Links userReadings rainSensor {(ReadingsVal($name,"limitationMax",100) == 7)?"rain":"dry"}
attr eg.wg.DF.Links webCmd Auf:Zu:Stop:Timer:pct
attr eg.wg.DF.Links webCmdLabel &nbsp:&nbsp:&nbsp:Timer:%-Offen:


Beta-User

Das war auch nicht  so gedacht, dass du das mit dummy-Devices löst. Die drei relevanten Attribute sollten sich eigentlich auch bei deinen KFL200Node-Devices (oder überhaupt praktisch jedem Geräte-Device, das on-for.* kennt) setzen lassen, und vermutlich brauchst du auch nicht die dezidierte Richtungs-Variante von eventMap...

Wenn der setter dann am Device vorhanden ist, sollte es auch in der ReadingsGroup darstellbar sein. Notfalls kannst du da auch Code verwenden, das ist aber etwas komplizierter, afaik. Basis könnte da eine neuere ASC-ReadingsGroup sein, aber damit habe ich mich auch noch nicht intensiver beschäftigt und kann daher auch nicht mehr wie grade mal das Stichwort liefern.
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

pschlaeppi

#6
Hallo Beta-User,

Ganz herzlichen Dank für die Anschubhilfe.
Hatte nach der ersten Durchsicht deines Vorschlages angenommen das ich dazu setList und setExtensionUse und setExtensionEvent benötige, und die stehen bei KLF200 nicht zur Verfügung. Habe nach deiner letzten Antwort angenommen das ich genau die nicht brauchen würde.
Ganz herzlichen Dank auch für das Code Beispiel für eventMap.

Habe das nun unter Verwendung der Attribute eventMap, webCmd und widgetOverride versucht zu realisieren und es scheint zu klappen. Konnte es aber noch nicht ausgiebig testen da es aktuell gerade regnet.

Habe es nun mit unterschiedlichen Zeitspannen gelöst mit einigen kürzeren für die kalte Jahreszeit zum lüften und längeren für die warme Jahreszeit. Die verwende ich in erster Linie manuell. Daneben habe ich auch noch eine Temperatur gesteuerte Automatik für die heissen SommerMonate.

Gelöst habe ich es nun wie folgt:

Konfiguration der readingsGroup:
# ReadingsGroup Dachfenster und Markisen im Wintergarten
define rg.DFMA.Wiga readingsGroup <%fts_roof_shutter_70>,<Status>,<Auf>,<Zu>,<Stop>,<Timer>,<Position>,<&emsp;;>,<Limit>,<currentMode>\
(eg.wg.DF.[^_]+):!state,!Auf,!Zu,!Stop,!Timer,!pct,<&emsp;;>,!limitationMax,!RCtl_currentMode\
<>,<>,<>,<>,<>,<>,<>,<>,<>\
(eg.wg.MA.[^_]+):!state,!Auf,!Zu,!Stop,<>,!pct,<&emsp;;>,!limitationMax,!RCtl_currentMode\
<>,<>,<>,<>,<>,<>,<>,<>,<>\
dm_Wetter:!Regen,!FreezeLock,!WindLock,!StormLock\

attr rg.DFMA.Wiga alias Wintergarten: Dachfenster und Markisen
attr rg.DFMA.Wiga commands {pct => 'pct:selectnumbers,0,10,100,0,lin',\
Timer => 'Timer:0,5,10,15,30,60,90,120,180,240,300',\
Auf => 'set $DEVICE Auf',\
Zu => 'set $DEVICE Zu',\
Stop => 'set $DEVICE Stop',\
RCtl_AutoShade => 'RCtl_AutoShade:off,Summer,Winter,Both,Work',\
RCtl_FreezeProtection => 'RCtl_FreezeProtection:on,off',state => 'state:'}
attr rg.DFMA.Wiga group 02 Dachfenster und Markisen
attr rg.DFMA.Wiga nameStyle style="font-weight:bold"
attr rg.DFMA.Wiga room Dachfenster
attr rg.DFMA.Wiga style style="border:3px;;background:none;;box-shadow:none;;"
attr rg.DFMA.Wiga valueIcon {FreezeLock => '{return \'frost_roof_shutter@red\' if( $VALUE eq "on");; return \'frost_roof_shutter@green\'}',\
Regen => '{return \'humidity@red\' if( $VALUE eq "rain");; return \'humidity@green\'}',\
WindLock => '{return \'weather_wind@red\' if( $VALUE eq "on");; return \'weather_wind@green\'}',\
StormLock => '{return \'weather_storm@red\' if( $VALUE eq "on");; return \'weather_storm@green\'}', \
state => '%devStateIcon',\
Auf => 'control_arrow_up', Zu => 'control_arrow_down', Stop => 'stop_rund',RCtl_LockState => '$VALUE'}
attr rg.DFMA.Wiga valueStyle style="text-align:center"


Konfiguration eines stellvertretenden Dachfensters:
define eg.wg.DF.Links KLF200Node XXX.XXX.XXX.XXX:XXXXX 1
attr eg.wg.DF.Links alias Fenster Links
attr eg.wg.DF.Links cmdIcon Auf:control_arrow_up Zu:control_arrow_down Stop:stop_rund
attr eg.wg.DF.Links devStateIcon .*up:control_arrow_up:toggle .*down:control_arrow_down:toggle .*-.7\).*:weather_rain:toggle \d.\(.*:fts_window_roof:toggle [1-10]\d.\(.*:fts_window_roof_open_1:toggle [10-80]\d.\(.*:fts_window_roof_open_2:toggle 100.\(.*:fts_window_roof_open_2:toggle
attr eg.wg.DF.Links event-min-interval pct:600
attr eg.wg.DF.Links eventMap { usr=>{'^Timer?(.*)'=>'on-for-timer {($1*60)}'}, on =>'Auf', off => 'Zu', stop => 'Stop' }
attr eg.wg.DF.Links group 04 Dachfenster Wintergarten
attr eg.wg.DF.Links icon fts_window_roof
attr eg.wg.DF.Links room KLF200Node,Wiga
attr eg.wg.DF.Links sortby wg.df.01
attr eg.wg.DF.Links stateFormat pct (limitationMin - limitationMax) execution
attr eg.wg.DF.Links userReadings rainSensor {(ReadingsVal($name,"limitationMax",100) == 7)?"rain":"dry"}
attr eg.wg.DF.Links webCmd Auf:Zu:Stop:Timer:pct
attr eg.wg.DF.Links webCmdLabel &nbsp:&nbsp:&nbsp:Timer:%-Offen:
attr eg.wg.DF.Links widgetOverride Timer:0,5,10,15,30,60,90,120,180,240,300


herzlichen Dank für eure Unterstützung. Hätte ohne euren Input die Zusammenhänge nicht geschnallt.

Grüsse Philipp

 

pschlaeppi

Hallo Beta-User,

Hatte nach dem Regen nun die Möglichkeit obenstehende Lösung ausgiebiger zu testen und musste dabei feststellen das nun die Bedienung über den Auf- und Zu-Pfeil sowie das Stop nicht mehr funktioniert.

Ich habe versucht meine ursprünglichen EventMap Definition
attr eg.wg.DF.Links eventMap on:Auf off:Zu stop:Stop

in die von Dir vorgeschlagene  usr EventMap Definition zu integrieren.
attr eg.wg.DF.Links eventMap { usr=>{'^Timer?(.*)'=>'on-for-timer {($1*60)}'}, on =>'Auf', off => 'Zu', stop => 'Stop' }


Dieses hat leider nicht funktioniert. Wie müsste die "alte Definition" mit deinem Code zusammngeführt werden dass beides funktioniert?

Grüsse Philipp

Beta-User

Hmm, die vereinfachte Variante scheint ja nicht zu gehen, von daher muß es wohl schon die "erweiterte" sein.
In der cref ist die Syntax aber anders, da findet sich:
ZitatThe explicit variant of this attribute has the following syntax:

       
  • attr store eventMap { dev=>{'on'=>'open'}, usr=>{'open'=>'on'} }
    attr store eventMap { dev=>{'^on(-for-timer)?(.*)'=>'open$2'}, usr=>{'^open(.*)'=>'on$1'}, fw=>{'^open(.*)'=>'open'} }
This variant must be used, if the mapping is not symmetrical, the first part (dev) representing the device to user mapping, i.e. if the device reports on 100 or on-for-timer 100, the user will see open 100.  The second part (usr) is the other direction, if the user specified open 10, the device will receive on 10.  On both occasions the key will be first compared directly with the text, and if it is not equal, then it will be tried to match it as a regexp.  When using regexps in the usr part with wildcards, the fw part must be filled with the exact same keys to enable a correct display in the FHEMWEB set dropdown list in the detail view.
Demnach könnte eher sowas klappen:
{ usr=>{'^Timer?(.*)'=>'on-for-timer {($1*60)}', '^on' =>'Auf', '^off' => 'Zu', '^stop' => 'Stop' }, fw=>{'^Timer?(.*)'=>'Timer', '^on' =>'Auf', '^off' => 'Zu', '^stop' => 'Stop'} }
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

pschlaeppi

Hallo Beta-User,

Herzlichen Dank für deine Geduld.

Direkt mit deiner Version hatte es noch nicht geklappt. Da es ja die usr => dev Richtung beschreibt im ersten Teil des Statements. Hier musste ich noch die Position on gegen Auf tauschen und umgekehrt. So lief es dann schon mal das die Auf, Zu und Stop Icons sowie auch der Timer sowohl im Device selber wie auch in der readingsGroup betätigt werden können und so funktionieren wie gewünscht.

Einzig das Timerfeld ist im Normalzustand im WebBrowser meines Laptops leer. Es zeigt nicht die erwartete "0" an.
Das heisst also vermutlich dass die Rückrichtung vom Dev zum Usr noch nicht richtig funktioniert und vermutlich natürlich noch die Sekunden zurückgibt die ja noch umgerechnet werden müssten in Minuten.

Ich habe das mal versucht analog dem Beispiel in der Syntax umzusetzen.
attr eg.wg.DF.Links eventMap { dev=>{'^on-for-timer?(.*)'=>'Timer{($2/60)}', '^on' =>'Auf', '^off' => 'Zu', '^stop' => 'Stop' }, usr=>{'^Timer?(.*)'=>'on-for-timer {($1*60)}', '^Auf' =>'on', '^Zu' => 'off', '^Stop' => 'stop' }, fw=>{'^Timer?(.*)'=>'Timer'} }


Da ist aber offensichtlich noch der Wurm drin betreffend der Timer Rückgabe. Ich könnte natürlich mit dem aktuellen Resultat bereits gut leben. Da mann aber nie ausgelernt hat, würde ich dem gerne noch nachgehen und rausfinden wie die Rückgabe korrekt sein müsste.

- hättest du dazu allenfalls noch nen letzten Tipp
- gibt es allenfalls ne Möglichkeit irgendwie abzufragen was ich in $2 zurück kriege
- ist $2 überhaupt die richtige Variable die ich da aus dem Beispiel in der Commandref genommen habe?


Grüsse Philipp

Beta-User

$2 gibt es nicht, das wäre die 2. "capture group" aus einer regex, aber da ist nur eine...

Vom Device her kommt allerdings (vermutlich) nichts zurück, das ist afaik eine "Einbahnstraße", jedenfalls dann, wenn es via SetExtensions läuft wie hier (?).
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