[gelöst] DOIF: Zustandswechsel funktioniert nicht, wieso?

Begonnen von Pfriemler, 25 April 2015, 13:21:29

Vorheriges Thema - Nächstes Thema

Pfriemler

Ich dächte, ich hätte es nun endlich begriffen, aber nein ...
Dieses DOIF soll mir den Status von TV und Dreambox anzeigen und beide bei Nichtbenutzung vom Stromnetz nehmen.
([Dreambox] eq "present" and [PhilipsTV] eq "present")
DOELSEIF ([Dreambox] eq "absent" and [PhilipsTV] eq "present")
DOELSEIF ([Dreambox] eq "present" and [PhilipsTV] eq "absent")
DOELSEIF ([Dreambox] eq "absent" and [PhilipsTV] eq "absent" and [PWRSW_TV] eq "aus")
DOELSEIF ([Dreambox] eq "absent" and [PhilipsTV] eq "absent" and [PWRSW_TV] eq "an") (set PWRSW_TV off)
...
Readings
cmd_event    Dreambox   2015-04-25 10:46:56
cmd_nr   3    2015-04-25 10:46:56
e_Dreambox_STATE   absent    2015-04-25 13:01:52
e_PWRSW_TV_STATE   an   2015-04-25 11:59:01
e_PhilipsTV_STATE   absent   2015-04-24 06:02:46
state  Dreambox(aufnahme/bereit)   2015-04-25 10:46:56
wait_timer  no timer  2015-04-25 10:46:56


Um 10:46 wurde die Dreambox aktiv, cmd_nr 3 wurde richtig aktiv.
Auch der Status des Stromschalters PWRSW_TV wird richtig erkannt (11:59 erging der letzte Einschaltbefehl).
Um 13:01 ging die Dreambox "absent": Das bekommt das DOIF also auch mit.

Ich würde erwarten, dass das DOIF jetzt in den Zustand 5 wechselt und den wait_timer anwirft (attr ... wait 0:0:0:0:300). Nach fünf Minuten soll der Schalter ausgeschaltet werden, dann würde Bedingung 4 zutreffen.
Beides tritt nicht ein. Warum?
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Damian

Zitat von: Pfriemler am 25 April 2015, 13:21:29
Ich dächte, ich hätte es nun endlich begriffen, aber nein ...
Dieses DOIF soll mir den Status von TV und Dreambox anzeigen und beide bei Nichtbenutzung vom Stromnetz nehmen.
([Dreambox] eq "present" and [PhilipsTV] eq "present")
DOELSEIF ([Dreambox] eq "absent" and [PhilipsTV] eq "present")
DOELSEIF ([Dreambox] eq "present" and [PhilipsTV] eq "absent")
DOELSEIF ([Dreambox] eq "absent" and [PhilipsTV] eq "absent" and [PWRSW_TV] eq "aus")
DOELSEIF ([Dreambox] eq "absent" and [PhilipsTV] eq "absent" and [PWRSW_TV] eq "an") (set PWRSW_TV off)
...
Readings
cmd_event    Dreambox   2015-04-25 10:46:56
cmd_nr   3    2015-04-25 10:46:56
e_Dreambox_STATE   absent    2015-04-25 13:01:52
e_PWRSW_TV_STATE   an   2015-04-25 11:59:01
e_PhilipsTV_STATE   absent   2015-04-24 06:02:46
state  Dreambox(aufnahme/bereit)   2015-04-25 10:46:56
wait_timer  no timer  2015-04-25 10:46:56


Um 10:46 wurde die Dreambox aktiv, cmd_nr 3 wurde richtig aktiv.
Auch der Status des Stromschalters PWRSW_TV wird richtig erkannt (11:59 erging der letzte Einschaltbefehl).
Um 13:01 ging die Dreambox "absent": Das bekommt das DOIF also auch mit.

Ich würde erwarten, dass das DOIF jetzt in den Zustand 5 wechselt und den wait_timer anwirft (attr ... wait 0:0:0:0:300). Nach fünf Minuten soll der Schalter ausgeschaltet werden, dann würde Bedingung 4 zutreffen.
Beides tritt nicht ein. Warum?

Abgefragt wird der Zustand des Status nicht das Event (in dem Fall auch nicht das Reading state). Wahrscheinlich hast du bei PWRSW_TV on auf an, bzw. off auf aus umgemappt.

Gruß

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

Pfriemler

Zitat von: Damian am 25 April 2015, 15:36:16
Abgefragt wird der Zustand des Status nicht das Event (in dem Fall auch nicht das Reading state). Wahrscheinlich hast du bei PWRSW_TV on auf an, bzw. off auf aus umgemappt.
verdammt. Exakt. Welche Events das NETIO230B erzeugt, erschließt sich mir sowieso bis heute nicht. Die internen States sind eher 0 und 1, trotzdem kann ich von on und off mappen. devStateIcons musste ich z.B. doppelt definieren....

Den vierten cmd-Zweig brauche ich eigentlich nur wegen der state-Anzeige. Funktioniert aber eh nicht, weil der fünfte cmd-Zweig erst nach der Wartezeit kommt. Gelöscht.

Bei Dir habe ich aber mal die State-Abfrage (statt des Reagierens auf Events) im DOIF gelernt:
DOELSEIF ([Dreambox] eq "absent" and [PhilipsTV] eq "absent" and [?PWRSW_TV] eq "an") (set PWRSW_TV off)

Kaum macht man es richtig, funktionert es. Danke.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

kvo1

Hallo Damian,
bevor ich mit meinem Problemchen loslege zunächst (auch wenns noch nicht läuft - liegt aber sicher noch an mir) ein grosses Dankeschön für das Modul und Deine ständige Bereitschaft hier immer wieder allen zu helfen.
Habe mir jetzt für meine Jalousiesteuerungen folgendes überlegt (mit einigen Dummy´s)
Es gibt ein dummy für den Modus (ASTRO,FHEM,HAND), d.h. entweder gelten die Werte aus sunset (zeitverzögert) oder die Timerwerte (für das das Hochfahren getrennt noch Wochentag und wochenende) oder Handsteuerung (per APP oder WEB-Frontend).

Das runterfahren klappt sowohl im ASTRO wie auch FHEM-Modus (vielleicht wegen dem "do always" ).

Leider fährt die Jalousie weder ASTRO noch im  FHEM-Modus (unabhängig vom Wochentag) hoch !

Irgendwie kann hier aber keinen Fehler finden ..... hast Du ev. ne Idee



#####################################
# Dummys fuer Modus definieren
define RolloModusTZ dummy
attr RolloModusTZ alias Wohnzimmer
attr RolloModusTZ devStateIcon FHEM:fts_shutter_automatic@green ASTRO:fts_shutter_updown@blue HAND:fts_shutter_manual@red
attr RolloModusTZ group Jalousie
attr RolloModusTZ icon status_automatic@LightSeaGreen
attr RolloModusTZ room Automation
attr RolloModusTZ setList state:FHEM,ASTRO,HAND
attr RolloModusTZ sortby 10
attr RolloModusTZ webCmd state

# Dummys fuer Zeit Hoch Woche
define du_RolloZeitTZ_hoch_WT dummy
attr du_RolloZeitTZ_hoch_WT alias Rollläden TZ - Zeit öffnen WT
attr du_RolloZeitTZ_hoch_WT devStateIcon .*:rc_BLANK
attr du_RolloZeitTZ_hoch_WT group Jalousie
attr du_RolloZeitTZ_hoch_WT icon icoUhr
attr du_RolloZeitTZ_hoch_WT room Automation
attr du_RolloZeitTZ_hoch_WT setList state:time
attr du_RolloZeitTZ_hoch_WT sortby 11
attr du_RolloZeitTZ_hoch_WT webCmd state

# Dummys fuer Zeit Hoch Wochenende
define du_RolloZeitTZ_hoch_WE dummy
attr du_RolloZeitTZ_hoch_WE alias Rollläden TZ - Zeit öffnen WE
attr du_RolloZeitTZ_hoch_WE devStateIcon .*:rc_BLANK
attr du_RolloZeitTZ_hoch_WE group Jalousie
attr du_RolloZeitTZ_hoch_WE icon icoUhr
attr du_RolloZeitTZ_hoch_WE room Automation
attr du_RolloZeitTZ_hoch_WE setList state:time
attr du_RolloZeitTZ_hoch_WE sortby 12
attr du_RolloZeitTZ_hoch_WE webCmd state

# Dummys fuer Zeit runter (Woche und Wochenende ggf. erweitern)
define du_RolloZeitTZ_runter dummy
attr du_RolloZeitTZ_runter alias Rollläden TZ - Zeit schliessen
attr du_RolloZeitTZ_runter devStateIcon *:rc_BLANK
attr du_RolloZeitTZ_runter group Jalousie
attr du_RolloZeitTZ_runter icon icoUhr
attr du_RolloZeitTZ_runter room Automation
attr du_RolloZeitTZ_runter setList state:time
attr du_RolloZeitTZ_runter sortby 13
attr du_RolloZeitTZ_runter webCmd state

#########################################################################
#####  Dummy für die Tageslicht Helligkeit (hell oder dunkel)  ##########
define Tageslicht dummy
attr Tageslicht devStateIcon hell:hell dunkel:nacht@crimson
attr Tageslicht group Timer
attr Tageslicht icon sani_solar
attr Tageslicht room Automation
attr Tageslicht sortby 20
# Das at für hell wird erst 20 Minuten nach Sonnenaufgang aktiv
define DummyHell at *{sunrise(1200)} set Tageslicht hell
attr DummyHell group Timer
attr DummyHell icon weather_sunrise
attr DummyHell room Automation
attr DummyHell sortby 21
# Das at für dunkel ist so eingestellt, das es 10 Minuten vor Sonnenuntergang aktiv wird   
define DummyDunkel at *{sunset(-600)} set Tageslicht dunkel
attr DummyDunkel group Timer
attr DummyDunkel icon weather_sunset
attr DummyDunkel room Automation
attr DummyDunkel sortby 22


############ Dummy Rollo
define DU_TZ_Rollladen dummy
attr DU_TZ_Rollladen devStateIcon auf:roll_oben zu:roll_unten halb:roll_50
attr DU_TZ_Rollladen eventMap on:auf off:zu 50\x20%:halb
attr DU_TZ_Rollladen room Automation
attr DU_TZ_Rollladen sortby 10
attr DU_TZ_Rollladen webCmd stop:auf:zu

#########################################################################
##### Steuerung Automatik (FHEM=Zeit / ASTRO=sun(set/rise) oder HAND ####
#########################################################################
define Rollo_Automatik_hoch DOIF ([RolloModusTZ] eq "FHEM" and ([[du_RolloZeitTZ_hoch_WT]|8] or [[du_RolloZeitTZ_hoch_WE]|7])) (set DU_TZ_Rollladen auf) DOELSEIF ([RolloModusTZ] eq "ASTRO" and ([Tageslicht] eq "hell")) (set DU_TZ_Rollladen auf)
attr Rollo_Automatik_hoch group Rollos

define Rollo_Automatik_runter DOIF ([RolloModusTZ] eq "FHEM" and ([[du_RolloZeitTZ_runter]|8] or [[du_RolloZeitTZ_runter]|7])) (set DU_TZ_Rollladen zu) DOELSEIF ([RolloModusTZ] eq "ASTRO" and ([Tageslicht] eq "dunkel")) (set DU_TZ_Rollladen zu)
attr Rollo_Automatik_runter do always
attr Rollo_Automatik_runter group Rollos


danke für die Hilfe
kvo1



RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

Damian

Da auf und zu sich gegenseitig ausschließen, würde ich die beiden Zustände in ein DOIF-Modul packen, hier dann so:

define Rollo_Automatik DOIF ([RolloModusTZ] eq "FHEM" and ([[du_RolloZeitTZ_hoch_WT]|8] or [[du_RolloZeitTZ_hoch_WE]|7]) or [RolloModusTZ] eq "ASTRO" and [Tageslicht] eq "hell")
  (set DU_TZ_Rollladen auf)
DOELSEIF   ([RolloModusTZ] eq "FHEM" and ([[du_RolloZeitTZ_runter]|8] or [[du_RolloZeitTZ_runter]|7]) or [RolloModusTZ] eq "ASTRO" and [Tageslicht] eq "dunkel")
  (set DU_TZ_Rollladen zu)
attr Rollo_Automatik_hoch group Rollos


do always ist hier nicht erforderlich, da es zwei Zustände gibt, die sich gegenseitig ausschließen.

Gruß

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

kvo1

#5
Super , funktioniert (wenn man es richtig nacht) , Danke !

Da die Jalousien immer zur gleichen Zeit  "runterfahren"  sollen (WE wie WT) könnte man das doch dann
noch so vereinfachen ? oder ?

define Rollo_AutomatikTZ DOIF ([RolloModusTZ] eq "FHEM" and ([[du_RolloZeitTZ_hoch_WT]|8] or [[du_RolloZeitTZ_hoch_WE]|7]) or [RolloModusTZ] eq "ASTRO" and [Tageslicht] eq "hell") (set DU_TZ_Rollladen auf) DOELSEIF ([RolloModusTZ] eq "FHEM" and [du_RolloZeitTZ_runter] or [RolloModusTZ] eq "ASTRO" and [Tageslicht] eq "dunkel") (set DU_TZ_Rollladen zu)

gruss
klaus
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

Damian

Zitat von: kvo1 am 27 April 2015, 21:14:12
Super , funktioniert (wenn man es richtig nacht) , Danke !

Da die Jalousien immer zur gleichen Zeit  "runterfahren"  sollen (WE wie WT) könnte man das doch dann
noch so vereinfachen ? oder ?

define Rollo_AutomatikTZ DOIF ([RolloModusTZ] eq "FHEM" and ([[du_RolloZeitTZ_hoch_WT]|8] or [[du_RolloZeitTZ_hoch_WE]|7]) or [RolloModusTZ] eq "ASTRO" and [Tageslicht] eq "hell") (set DU_TZ_Rollladen auf) DOELSEIF ([RolloModusTZ] eq "FHEM" and [du_RolloZeitTZ_runter] or [RolloModusTZ] eq "ASTRO" and [Tageslicht] eq "dunkel") (set DU_TZ_Rollladen zu)

gruss
klaus

fast:

... and [[du_RolloZeitTZ_runter]]...

sonst ist es ein Device-Trigger ;)

Gruß

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

rabehd

ZitatDer Taster selber ist über den Eventmonitor auch zu sehen, dass er HIGH und LOW schickt
Dann würde ich auch darauf reagieren und nicht auf on/off warten.

PS: Hast Du dich mal mit den hübschen Schaltern über dem Editierfenster beschäftigt. Es ist gern gesehen, wenn man Code auch als solchen einfügt (Button mit #).
Und das Wiederöffnen von Beträgen aus 2015 ist auch nicht gern gesehen. Besonders, wenn es ohne Bezug zum Ursprung ist.
Auch funktionierende Lösungen kann man hinterfragen.

CoolTux

Und bitte keinen Uralt Threads kapern sondern einen eigenen auf machen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net