FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: morph am 20 Juli 2016, 17:35:01

Titel: Mit einem Button mehrere Befehle ausführen und auch Zeitversetzt
Beitrag von: morph am 20 Juli 2016, 17:35:01
Hi,

aktuell sitze ich an zwei Problemen.

Ich habe HM-Jalousie-Aktoren eingebunden. Ich möchte mit einem Klick auf dem Tablet alle einer bestimmten Gruppe herunterfahren. Das habe ich mittlerweile auch hinbekommen. Doch wie gebe ich es dann an, das sie in unterschiedlichen Positionen halten sollen?
So funktioniert es momentan nicht, sie fahren alle auf xx herunter:

<div data-type="button"
                data-icon="oa-it_television"
                data-background-icon="fa-circle"
data-on-background-color="#E6FF57"
data-device="'Rollo_Essen','Rollo_Kueche','Rollo_SZ'"
data-set="'pct 30','pct 70','pct 30'"
            class="cell">
                </div>
<div data-type="label" class="narrow darker">Rollo Süd Sonne</div>



Und dann möchte ich noch SchaltMessSteckdosen durch drücken am Pad zeitversetzt schalten, Nummer1, 5sec später Nummer2, 5sec Später Nummer 3.

Mit Sicherheit eine Kleinigkeit, ich bin gespannt.

<div data-type="switch"
data-device="Hifi1,Hifi2,Hifi3"
data-get-on="on"
data-get-off="off"
data-icon="oa-it_television"
data-off-color="#A6BF17"
data-on-background-color="#E6FF57"
class="cell"></div>
<div data-type="label" class="narrow darker">Hifi</div>


Danke!
Titel: Antw:Mit einem Button mehrere Befehle ausführen und auch Zeitversetzt
Beitrag von: phil82 am 20 Juli 2016, 19:32:19
Hallo morph,

also ich steuere solche Sachen direkt im FHEM: Dummy mit dem Befehlen "rauf, runter, stop, sonne" (Sonne = Pos 30).
Per Notify oder DOIF den Befehl vom Dummy auf die Rollos verteilen. Und im FTUI nur noch das Dummy einbinden.
Hat auch den Vorteil, dass ich auch in FHEM die Logik "auslösen" kann und ich die Buttons mehrfach an unterschiedlichen Stellen integrieren kann, ohne jeweils die Steuerlogik zu "kopieren".
Außerdem gehört Steuerlogik für mich nicht in die GUI - ala MVC-Muster.

Zum Zeitverzögertem Triggern würde ich ein AT-Device in Fhem verwenden. Hat den Vorteil, dass der Timer auch auslöst, wenn FTUI bzw. die Webseite/Browser "geschlossen" ist.
Ich wüsste auch nicht, dass das in FTUI überhaupt möglich ist.
Titel: Antw:Mit einem Button mehrere Befehle ausführen und auch Zeitversetzt
Beitrag von: Reinhart am 20 Juli 2016, 19:36:53
Hallo Morph

ich würde das Ganze in Fhem lösen und von der Gui aus nur einen Dummy Ein/ oder Ausschalten, welcher eine Gruppe ansteuert.
Hier kannst du dann die Zeiten frei definieren und zusätzlich auch den Gruppenschaltbefehl über Fhem absetzen.

define Switchgroup dummy
attr Switchgroup setList state:On,Off
attr Switchgroup webCmd state


define SwitchGr1_on notify Switchgroup.On {\
  fhem("set Switch1 on")};;{\
  fhem("define Time1 at +00:00:05 set Switch2 on")};;{\
  fhem("define Time2 at +00:00:10 set Switch3 on")};;{\
  }

define SwitchGr1_off notify Switchgroup.Off {\
  fhem("set Switch1 off")};;{\
  fhem("define Time3 at +00:00:05 set Switch2 off")};;{\
  fhem("define Time4 at +00:00:10 set Switch3 off")};;{\
  }


hier im Beispiel wird auch jeweils um 5 sec verzögert Ausgeschaltet.

LG
Reinhart

PS: habe gerade gesehen, phil82 war schneller und meint im Prinzip dasselbe.
Titel: Antw:Mit einem Button mehrere Befehle ausführen und auch Zeitversetzt
Beitrag von: morph am 21 Juli 2016, 16:05:24
Danke euch beide, aber Reinhart ist mehr auf meiner Wellenlänge, da ich leider nicht allzuviel von der Thematik verstehe.. :-)

Also, ich hab jetzt mal ein


define Rollo_Sued dummy
attr Rollo_Sued setList state:On,Off
attr Rollo_Sued webCmd state   

define Rollo_Sued_on notify Rollo_Sued.On {\
            fhem("set Rollo_Essen on")};;{\
  fhem("define Time1 at +00:00:05 set Rollo_Kueche on")};;{\
  fhem("define Time2 at +00:00:10 set Rollo_SZ on")};;{\
  }     
 
define Rollo_Sued_off notify Rollo_Sued.Off {\
            fhem("set Rollo_Essen off")};;{\
  fhem("define Time1 at +00:00:05 set Rollo_Kueche off")};;{\
  fhem("define Time2 at +00:00:10 set Rollo_SZ off")};;{\
  }



in die cfg rein.
Richtig?


Es bewegt sich nämlich nix :-)



Tante Edit sagt: Schuldigung... cfg neu einlesen..... sorry...
Titel: Antw:Mit einem Button mehrere Befehle ausführen und auch Zeitversetzt
Beitrag von: Reinhart am 22 Juli 2016, 10:55:59
so wie ich deinen Edit richtig deute geht's nun, oder? (aber sicher nicht wenn du schnell hintereinander drückst).

Ansonsten setzt den Gruppenbefehl ab und schau ins Log. Da sieht man dann was tatsächlich passiert ist oder ob eventuell Fehler produziert wurden.

Aber deine cfg sieht gut aus, sollte so klappen. Ich würde aber bei "Rollo_Sued.Off " den Timer "Time3" und "Time4" benennen, da du ansonsten diese Fehlermeldung bekommst weil ja derselbe Namen schon definiert wurde.!

define Time2 at +00:00:10 set Switch3 on : Time2 already defined, delete it first


LG
Reinhart
Titel: Antw:Mit einem Button mehrere Befehle ausführen und auch Zeitversetzt
Beitrag von: morph am 03 August 2016, 08:29:24
Hm, Fehler hab ich bisher eigentlich keine, das läuft so eigentlich...

define Rollo_Sued dummy
attr Rollo_Sued icon fts_shutter_1w_90
attr Rollo_Sued room Beschattung
attr Rollo_Sued setList state:On,Off,Sonne
attr Rollo_Sued webCmd state

define Rollo_Sued_on notify Rollo_Sued.On {\
            fhem("set Rollo_Essen on")};;{\
  fhem("define Time1 at +00:00:02 set Rollo_Kueche on")};;{\
  fhem("define Time2 at +00:00:04 set Rollo_SZ on")};;{\
  }
attr Rollo_Sued_on icon fts_sunblind_100
attr Rollo_Sued_on room Beschattung
 
define Rollo_Sued_off notify Rollo_Sued.Off {\
            fhem("set Rollo_Essen off")};;{\
  fhem("define Time1 at +00:00:02 set Rollo_Kueche off")};;{\
  fhem("define Time2 at +00:00:04 set Rollo_SZ off")};;{\
  }
attr Rollo_Sued_off icon fts_sunblind_0
attr Rollo_Sued_off room Beschattung
 
   
define Rollo_Sued_sonne notify Rollo_Sued.Sonne {\
            fhem("set Rollo_Essen pct 30")};;{\
  fhem("define Time1 at +00:00:02 set Rollo_Kueche pct 40")};;{\
  fhem("define Time2 at +00:00:04 set Rollo_SZ pct 35")};;{\
  }
attr Rollo_Sued_sonne icon fts_sunblind_50
attr Rollo_Sued_sonne room Beschattung

define Rollo_Ost dummy
attr Rollo_Ost icon fts_shutter_1w_90
attr Rollo_Ost room Beschattung
attr Rollo_Ost setList state:On,Off,Sonne
attr Rollo_Ost webCmd state

define Rollo_Ost_on notify Rollo_Ost.On {\
            fhem("set Rollo_KZ on")};;{\
  fhem("define Time1 at +00:00:03 set Rollo_WZ on")};;{\
  fhem("define Time2 at +00:00:05 set Rollo_HWR on")};;{\
  }
attr Rollo_Ost_on icon fts_sunblind_100
attr Rollo_Ost_on room Beschattung
 
define Rollo_Ost_off notify Rollo_Ost.Off {\
            fhem("set Rollo_KZ off")};;{\
  fhem("define Time1 at +00:00:03 set Rollo_WZ off")};;{\
  fhem("define Time2 at +00:00:05 set Rollo_HWR off")};;{\
  }
attr Rollo_Ost_off icon fts_sunblind_0
attr Rollo_Ost_off room Beschattung
 
   
define Rollo_Ost_sonne notify Rollo_Ost.Sonne {\
            fhem("set Rollo_KZ pct 30")};;{\
  fhem("define Time1 at +00:00:03 set Rollo_WZ pct 30")};;{\
  fhem("define Time2 at +00:00:05 set Rollo_HWR pct 30")};;{\
  }
attr Rollo_Ost_sonne icon fts_sunblind_50
attr Rollo_Ost_sonne room Beschattung

define Rollos dummy
attr Rollos icon fts_shutter_1w_90
attr Rollos room Beschattung
attr Rollos setList state:On,Off,Sonne
attr Rollos webCmd state

define Rollos_on notify Rollos.On {\
            fhem("set Rollo_Essen on")};;{\
  fhem("define Time1 at +00:00:02 set Rollo_Kueche on")};;{\
  fhem("define Time2 at +00:00:03 set Rollo_SZ on")};;{\
  fhem("define Time3 at +00:00:04 set Rollo_KZ on")};;{\
  fhem("define Time4 at +00:00:05 set Rollo_WZ on")};;{\
  fhem("define Time5 at +00:00:06 set Rollo_HWR on")};;{\
  }
attr Rollos_on icon fts_sunblind_100
attr Rollos_on room Beschattung
 
define Rollos_off notify Rollos.Off {\
            f fhem("set Rollo_Essen off")};;{\
  fhem("define Time1 at +00:00:02 set Rollo_Kueche off")};;{\
  fhem("define Time2 at +00:00:03 set Rollo_SZ off")};;{\
  fhem("define Time3 at +00:00:04 set Rollo_KZ off")};;{\
  fhem("define Time4 at +00:00:05 set Rollo_WZ off")};;{\
  fhem("define Time5 at +00:00:06 set Rollo_HWR off")};;{\
  }
attr Rollos_off icon fts_sunblind_0
attr Rollos_off room Beschattung
 
   
define Rollos_sonne notify Rollos.Sonne {\
             fhem("set Rollo_Essen pct 30")};;{\
  fhem("define Time1 at +00:00:02 set Rollo_Kueche pct 40")};;{\
  fhem("define Time2 at +00:00:03 set Rollo_SZ pct 35")};;{\
  fhem("define Time3 at +00:00:04 set Rollo_KZ pct 30")};;{\
  fhem("define Time4 at +00:00:05 set Rollo_WZ pct 30")};;{\
  fhem("define Time5 at +00:00:06 set Rollo_HWR pct 30")};;{\
  }
attr Rollos_sonne icon fts_sunblind_50
attr Rollos_sonne room Beschattung
 
                     
define Rollo_KZ_morgens at *07:05 set Rollo_KZ on
attr Rollo_KZ_morgens icon light_on-for-timer
attr Rollo_KZ_morgens room Zeitschaltungen

define Rollo_WZ_morgens at *07:00 set Rollo_WZ on
attr Rollo_WZ_morgens icon light_on-for-timer
attr Rollo_WZ_morgens room Zeitschaltungen

#define Rollo_HWR_morgens at *07:00 set Rollo_HWR on
#attr Rollo_HWR_morgens room Zeitschaltungen

define Rollo_Essen_morgens at *06:57 set Rollo_Essen on
attr Rollo_Essen_morgens icon light_on-for-timer
attr Rollo_Essen_morgens room Zeitschaltungen

define Rollo_Kueche_morgens at *06:55 set Rollo_Kueche on
attr Rollo_Kueche_morgens icon light_on-for-timer
attr Rollo_Kueche_morgens room Zeitschaltungen

define Rollo_SZ_morgens at *09:00 set Rollo_SZ on
attr Rollo_SZ_morgens icon light_on-for-timer
attr Rollo_SZ_morgens room Zeitschaltungen
                                           

#define Rollo_KZ_abends at *{sunset(+3600)} set Rollo_KZ Off
#attr Rollo_KZ_abends room Zeitschaltungen

#define Rollo_WZ_abends at *{sunset(+1800)} set Rollo_WZ pct 30
#attr Rollo_WZ_abends room Zeitschaltungen
 
#define Rollo_HWR_abends at *{sunset} set Rollo_HWR off
#attr Rollo_HWR_abends room Zeitschaltungen

define Rollo_Essen_abends at *{sunset(+1800)} set Rollo_Essen pct 30
attr Rollo_Essen_abends icon light_off-for-timer
attr Rollo_Essen_abends room Zeitschaltungen

define Rollo_Kueche_abends at *{sunset} set Rollo_Kueche off
attr Rollo_Kueche_abends icon light_off-for-timer
attr Rollo_Kueche_abends room Zeitschaltungen

define Rollo_SZ_abends at *{sunset(+3600)} set Rollo_SZ off
attr Rollo_SZ_abends icon light_off-for-timer
attr Rollo_SZ_abends room Zeitschaltungen



Jetzt möchte ich es noch komplizierter machen:



define Rollo_Kueche_abends at *{sunset} set Rollo_Kueche off

Das soll nur dann passieren, wenn

define Handy_Patrick2 PRESENCE lan-ping 192.168.4.47 5
attr Handy_Patrick2 event-on-change-reading state
attr Handy_Patrick2 icon security_password
attr Handy_Patrick2 room Anwesenheit
define FileLog_Handy_Patrick2 FileLog ./log/Handy_Patrick2-%Y.log Handy_Patrick2
attr FileLog_Handy_Patrick2 logtype text
attr FileLog_Handy_Patrick2 room Log


abwesend ist. Ist er Present, soll der Rollo nicht schalten.

Also im Prinzip ein einfaches IF xx THEN DO, OR DO oder wie man das nennt ;-)
Titel: Antw:Mit einem Button mehrere Befehle ausführen und auch Zeitversetzt
Beitrag von: phil82 am 03 August 2016, 19:55:48
Nimm ein DOIF


define myDoif DOIF ([({sunset()})] and [Handy_Patrick2] ne "Present")
   (set Rollo_Kueche off)


so oder so ähnlich

Ich weiß nicht, welche Status "Handy_Patrick2" hat, wenn du "unterwegs" bist. Ich kenne das PRESENCE Modul nicht.
Titel: Antw:Mit einem Button mehrere Befehle ausführen und auch Zeitversetzt
Beitrag von: morph am 16 August 2016, 09:11:58
Hi,


das muss hier wirklich "ne" heißen?

[Handy_Patrick2] ne "Present")


Ich habe für mich jetzt mal so umgeschrieben:

define DOIF_Rollo_SZ_Present DOIF ([({sunset(+3600)})] and [Handy_Patrick2] ne "present")    (set Rollo_SZ on)

und

define DOIF_Rollo_SZ_Absent DOIF ([({sunset(+3600)})] and [Handy_Patrick2] ne "absent")    (set Rollo_SZ off)

Die Normale Zeit Definition hab ich mal ausgeschalten.

Wann genau fragt er den Presence jetzt ab? genau um "sunset+3600"?

Wenn ich jetzt mehrere Devices habe, die er abfragen soll, ob sie present sind, und wenn auch nur eines davon auf present ist, nicht schalten soll, wie mache ich das dann?
Titel: Antw:Mit einem Button mehrere Befehle ausführen und auch Zeitversetzt
Beitrag von: morph am 21 August 2016, 09:02:42
 8)
Titel: Antw:Mit einem Button mehrere Befehle ausführen und auch Zeitversetzt
Beitrag von: phil82 am 31 August 2016, 21:41:09
Zitat von: morph am 16 August 2016, 09:11:58
das muss hier wirklich "ne" heißen?

Wenn "not equals" abfragen willst, dann ja.

Zitat von: morph am 16 August 2016, 09:11:58
Wann genau fragt er den Presence jetzt ab? genau um "sunset+3600"?

exakt.
Wenn du einen Zeitraum brauchst, dann geht z.B. so:
define di_lamp DOIF ([06:00-09:00] and [sensor:brightness] < 40) (set lamp on) DOELSE (set lamp off)
Sollte auch mit dem sunset kombinierbar sein.

Zitat von: morph am 16 August 2016, 09:11:58
Wenn ich jetzt mehrere Devices habe, die er abfragen soll, ob sie present sind, und wenn auch nur eines davon auf present ist, nicht schalten soll, wie mache ich das dann?

Einfach die Bedindungen mit "or" und "and" verknüpfen.
Schau am besten mal in die Doku vom DOIF, da wird auch das "DOELSE" beschrieben ;)