Fingerübung zum uzsu-widget "uzsuTimerEntry"

Begonnen von Damian, 24 März 2017, 17:37:54

Vorheriges Thema - Nächstes Thema

Damian

#15
Zitat von: justme1968 am 24 März 2017, 21:32:03
das ist kein event auf ein reading mit namen Timer sondern für state. in setList und webCmd verwendest du aber Timer als reding und kommando namen.

OK. Ich habe das Beispiel angepasst, jetzt funktioniert´s. Allerdings ist der Code mit Kanonen auf Spatzen. Man merkt, dass DOIF dafür noch nicht gut angepasst ist.

P.S. Du verwendest nicht die aktuelle fhem.pl
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Ich habe das Beispiel im ersten Post etwas aufgeräumt und minimal kommentiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Ich habe die Namensgebung vereinheitlicht. Die heißen jetzt T_time, T_day, T_mode. Die sollten angelegt werden sobald du das wiget  bedient hast.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

#18
habs grad nochmal probiert - mysteriös

dein original funzt, benennt man es aber um, geht nix mehr. (rename di_timer DOIF_Timer)
müssen name und das reading "device" zusammen passen?

nachtrag:
hab ich recht
zurückbenennen des doif, schon geht wieder alles - sowas hat ich auch noch nie (rename DOIF_Timer di_timer)
→do↑p!dnʇs↓shit←

Damian

Zitat von: the ratman am 25 März 2017, 16:08:21
habs grad nochmal probiert - mysteriös

dein original funzt, benennt man es aber um, geht nix mehr. (rename di_timer DOIF_Timer)
müssen name und das reading "device" zusammen passen?

nachtrag:
hab ich recht
zurückbenennen des doif, schon geht wieder alles - sowas hat ich auch noch nie (rename DOIF_Timer di_timer)

Durch die $SELF-Angaben ist wohl zum Teil noch der alte Name drin. Einmal über DEF in die Definition gehen und mit modify bestätigen, dann sollte alles wieder sauber initialisiert sein.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

#20
warscheinlich bist eh schon drüber gestolpert, aber wenn nicht:
der "neue" knob http://anthonyterrien.com/demo/knob/ - schau dir mal die demos an.
und nachdem der zum unsrigen kompatibel sein soll und der jetzige schon brav von aussen daten frisst, scheint mir der arbeitssaufwand für progger nicht grade groß ...

und vom selben onkel ... DAS wär sicher brauchbar http://anthonyterrien.com/demo/kontrol/
ich stell mir diesen "eq" grad wieder umgedreht als echt-anzeige bestimmter daten vor - das muß fetzen! *g*
ah, sorry nachtrag - hier saugbar: https://github.com/aterrien/jQuery-Kontrol
→do↑p!dnʇs↓shit←

Damian

Zitat von: the ratman am 26 März 2017, 12:00:03
warscheinlich bist eh schon drüber gestolpert, aber wenn nicht:
der "neue" knob http://anthonyterrien.com/demo/knob/ - schau dir mal die demos an.
und nachdem der zum unsrigen kompatibel sein soll und der jetzige schon brav von aussen daten frisst, scheint mir der arbeitssaufwand für progger nicht grade groß ...

und vom selben onkel ... DAS wär sicher brauchbar http://anthonyterrien.com/demo/kontrol/
ich stell mir diesen "eq" grad wieder umgedreht als echt-anzeige bestimmter daten vor - das muß fetzen! *g*
ah, sorry nachtrag - hier saugbar: https://github.com/aterrien/jQuery-Kontrol

ja, ist was für die Zukunft, erst mal sind andere Dinge auf der DOIF-todo-Liste und es gibt noch eine Welt außer FHEM ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

the ratman

Zitates gibt noch eine Welt außer FHEM
LÜGENPRESSE !
→do↑p!dnʇs↓shit←

SouzA

Zitat von: Damian am 24 März 2017, 17:37:54
Habe mir mal den Spaß gemacht das hier auszuprobieren:

defmod di_timer DOIF (["$SELF:Timer"]) { ## Änderung am wiget\
  if ("$EVENT"=~/^Timer (.*)\|(.*)\|(.*)$/) {\
    fhem "setreading $SELF Timer $1|$2|$3";;\
    fhem "setreading $SELF T_day $1";;\
    fhem "setreading $SELF T_time $2";;\
    fhem "setreading $SELF T_mode $3";;\
  }\
}\
DOELSEIF (["$SELF:^T_"]) ## Änderung an Readings\
(setreading $SELF Timer [$SELF:T_day]|[$SELF:T_time]|[$SELF:T_mode])\
DOELSEIF ([[$SELF:T_time]|[$SELF:T_day]] and [?$SELF:T_mode] eq "enabled") ## Timerdefinition\
  (set bla on)\

attr di_timer do always
attr di_timer setList Timer:uzsuTimerEntry
attr di_timer state [$SELF:Timer]
attr di_timer wait 0.1
attr di_timer webCmd Timer


Ich musste es allerdings kurz mit wait verzögern, da offenbar FHEM in zweiter Rekursion das Setzen des Timers verhindert.

Edit: Ich habe etwas aufgeräumt

Hallo Damian,
vielen Dank für die Inspiration.
Ich bin nämlich auf der Suche nach einer Möglichkeit eine Wochentagsauswahl durchzuführen.
Da ich auch sonst mit DOIF arbeite, dachte ich, wäre dies genau richtig.

Allerdings funktioniert dein Beispiel nicht, bzw. weiß ich nicht, wie das Beispiel anpassen muß, damit es keinen Fehler generiert.
Weiterhin habe ich die Frage, ob man nur volle Stunden eingeben kann, oder ob auch Minuten gehen?

Vielen Dank und bis denn
SouzA


Und gibt es eine Möglichkeit die Minuten
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Damian

Die "Inspiration" ist mit drei Jahre schon etwas angestaubt.  :D

Es fehlte in der Definition ein Doppelpunkt. Es muss heißen:

Zitatif ("$EVENT"=~/^Timer: (.*)\|(.*)\|(.*)$/) {\
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

SouzA

Zitat von: Damian am 27 Juni 2020, 09:32:34
Die "Inspiration" ist mit drei Jahre schon etwas angestaubt.  :D

Es fehlte in der Definition ein Doppelpunkt. Es muss heißen:
Vielen Dank für deine Antwort...
Aber:
Ich bin zu doof für deine Inspiration.
Internals:
   CFGFN     
   DEF        (["$SELF:Timer"])
{ ## Änderung am wiget
  if ("$EVENT"=~/^Timer: (.*)\|(.*)\|(.*)$/)
  {
    fhem "setreading $SELF Timer $1|$2|$3";;
    fhem "setreading $SELF T_day $1";;
    fhem "setreading $SELF T_time $2";;
    fhem "setreading $SELF T_mode $3";;
  }
}
DOELSEIF
(["$SELF:^T_"]) ## Änderung an Readings
(setreading $SELF Timer [$SELF:T_day]|[$SELF:T_time]|[$SELF:T_mode])
DOELSEIF
([[$SELF:T_time]|[$SELF:T_day]] and [?$SELF:T_mode] eq "enabled") ## Timerdefinition
(set bla on)
   DOIFDEV    ^global$|di_Wochentag|^di_Wochentag$
   FUUID      5ef70290-f33f-7c83-21e3-2cf7ba61386d1b77
   MODEL      FHEM
   NAME       di_Wochentag
   NR         60618
   NTFY_ORDER 50-di_Wochentag
   STATE     
   TYPE       DOIF
   VERSION    22195 2020-06-18 16:38:55
   READINGS:
     2020-06-27 10:36:39   cmd             1
     2020-06-27 10:36:39   cmd_event       di_Wochentag
     2020-06-27 10:36:39   cmd_nr          1
     2020-06-27 10:36:28   mode            enabled
     2020-06-27 10:36:39   state           
     2020-06-27 10:36:28   timer_01_c03    error: Wrong timespec : either HH:MM:SS or {perlcode}
     2020-06-27 10:36:39   wait_timer      no timer
   Regex:
     STATE:
       di_Wochentag:
         STATE:
           Timer      ^di_Wochentag$:^Timer:
     accu:
     cond:
       :
         0:
           "di_Wochentag:Timer" di_Wochentag:Timer
         1:
           "di_Wochentag:^T_" di_Wochentag:^T_
     itimer:
       di_Wochentag:
         itimer:
           T_time     ^di_Wochentag$:^T_time:
   attr:
     cmdState:
     wait:
       0:
         0.1
     waitdel:
   condition:
     0          ::EventDoIf('di_Wochentag',$hash,'Timer',0)
     1          ::EventDoIf('di_Wochentag',$hash,'^T_',0)
     2          ::DOIF_time_once($hash,0,$wday,"[di_Wochentag:T_day]") and ::ReadingValDoIf($hash,'di_Wochentag','T_mode') eq "enabled"
   days:
     0          [di_Wochentag:T_day]
   do:
     0:
       0          {    if ("$EVENT"=~/^Timer: (.*)\|(.*)\|(.*)$/)    {     fhem "setreading di_Wochentag Timer $1|$2|$3";;     fhem "setreading di_Wochentag T_day $1";;     fhem "setreading di_Wochentag T_time $2";;     fhem "setreading di_Wochentag T_mode $3";;   } }
     1:
       0          setreading di_Wochentag Timer [di_Wochentag:T_day]|[di_Wochentag:T_time]|[di_Wochentag:T_mode]
     2:
       0          set bla on
     3:
   helper:
     DEVFILTER  ^global$|di_Wochentag|^di_Wochentag$
     NOTIFYDEV  global|.*di_Wochentag.*|di_Wochentag
     event      Timer ,|null|enabled
     globalinit 1
     last_timer 1
     sleepdevice di_Wochentag
     sleepsubtimer -1
     sleeptimer -1
     timerdev   di_Wochentag
     timerevent Timer ,|null|enabled
     triggerDev di_Wochentag
     timerevents:
       Timer ,|null|enabled
       wait_timer: 27.06.2020 10:36:39 cmd_1 di_Wochentag
     timereventsState:
       Timer ,|null|enabled
       wait_timer: 27.06.2020 10:36:39 cmd_1 di_Wochentag
     triggerEvents:
       Timer ,|null|enabled
       wait_timer: 27.06.2020 10:36:39 cmd_1 di_Wochentag
     triggerEventsState:
       Timer ,|null|enabled
       wait_timer: 27.06.2020 10:36:39 cmd_1 di_Wochentag
   internals:
   localtime:
   readings:
   time:
     0          [di_Wochentag:T_time]
   timeCond:
     0          2
   timer:
     0          0
   timers:
     2           0
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   setList    Timer:uzsuTimerEntry
   state      [$SELF:Timer]
   wait       0.1
   webCmd     Timer


ergibt
timer_01_c03
error: Wrong timespec : either HH:MM:SS or {perlcode}


Die Buttons können gedrückt werden, bleiben aber nicht aktiv. Enabled bleibt auch nicht aktiv.
Oder habe ich grundlegend etwas falsch verstanden und man kann nur mit diesem Code keinen Wochenplaner machen?

Thx und bis denn
SouzA
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Damian

Die Sache mit dem Doppelpunkt habe ich eingebaut als ich noch das Attribut readingList gesetzt hatte, das war aber überflüssig.

Es liegt am uzsuTimerEntry-Widget.

Solange du keine Zeit auswählst, kommt bei Zeit null und dann funktioniert es nicht.

hier also meine funktionierende Lösung ohne Doppelpunkt und ohne readingList wie im ersten Post mit ausgewählter Zeit:

defmod di_timer DOIF (["$SELF:Timer"]) { ## Änderung am wiget\
  if ("$EVENT"=~/^Timer (.*)\|(.*)\|(.*)$/) {\
    fhem "setreading $SELF Timer $1|$2|$3";;\
    fhem "setreading $SELF T_day $1";;\
    fhem "setreading $SELF T_time $2";;\
    fhem "setreading $SELF T_mode $3";;\
  }\
}\
DOELSEIF (["$SELF:^T_"]) ## Änderung an Readings\
(setreading $SELF Timer [$SELF:T_day]|[$SELF:T_time]|[$SELF:T_mode])\
DOELSEIF ([[$SELF:T_time]|[$SELF:T_day]] and [?$SELF:T_mode] eq "enabled") ## Timerdefinition\
  (set bla on)\

attr di_timer do always
attr di_timer setList Timer:uzsuTimerEntry
attr di_timer state [$SELF:Timer]
attr di_timer wait 0.1
attr di_timer webCmd Timer

setstate di_timer Mi,Sa|04:00|disabled
setstate di_timer 2020-06-27 10:50:45 T_day Mi,Sa
setstate di_timer 2020-06-27 10:50:45 T_mode disabled
setstate di_timer 2020-06-27 10:50:45 T_time 04:00
setstate di_timer 2020-06-27 10:50:45 Timer Mi,Sa|04:00|disabled
setstate di_timer 2020-06-27 10:50:45 cmd 1

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

SouzA

#27
Hi,
danke, das funktioniert ja schonmal super.

Hast du eine Ahnung, wie man jetzt noch Minuten einstellen könnte?

Thx und bis denn
SouzA

Edit: oder ohne Zeit im DOIF. Die Zeit kann man zur Not ja über nen Dummy extern machen...
Raspi 4, EnOcean TCM310 USB, HM-MOD-UART-USB, Jeelink, hue, AMAD, fully, FRITZBOX, Signalbot, VIERA, Presence BT/Mac, TPLink, Gassistant, Shelly, fhempy, ZigBee

Damian

Ich werde demnächst diverse Anwendungsbeispiele zur Steuerung und Visualisierung über uiTable veröffentlichen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF