[Gelöst] Doif schaltet meine Pumpe nicht bei Anwesenheit

Begonnen von Beagel, 10 März 2017, 19:45:30

Vorheriges Thema - Nächstes Thema

Beagel

Hallo zusammen,
hab mal wieder ein Problem, nach Neu installieren von Raspberry Jessy und Fhem 5.8 wird die Pumpe (IT-Steckdose) nicht mehr geschaltet, im alten System hat es funktioniert. Hab die alten Einstellungen gleich übernommen. Was will ich:
Die Pumpe soll nur bei Anwesenheit einer Person (iPhone) über einen bestimmten Zeitraum eingeschaltet sein, so sind meine Einstellungen.

1. Anwesenheit:
define D_iPhone PRESENCE
Internals:
   CHANGED
   DEF        function {NetDevDa("xx:xx:xx:xx:xx:xx")}  10 10
   MODE       function
   NAME       D_iPhone
   NOTIFYDEV  global
   NR         140
   NTFY_ORDER 50-Dieters_iPhone
   STATE      present
   TIMEOUT_NORMAL 10
   TIMEOUT_PRESENT 10
   TYPE       PRESENCE
   Readings:
     2017-03-10 19:14:53   presence        present
     2017-03-10 19:14:53   state           present
   Helper:
     CURRENT_STATE present
     PRESENT_COUNT 0
     call       {NetDevDa("54:E4:3A:67:0A:6A")}
Attributes:
   event-on-change-reading .*
   icon       it_smartphone
   room       Funksteckdosen


2. Doif
define Zirku_an DOIF


Internals:
   DEF        (([?18:25-18:35] or [?18:45-18:55] or [?19:33-19:42]) and ([D_iPhone:presence] eq "present" or [G_iPhone:presence] eq "present" )) (set IT_V3_xxxx on) DOELSE (set IT_V3_xxxx off)
   NAME       Zirku_an
   NR         202
   NTFY_ORDER 50-Zirku_an
   STATE      initialized
   TYPE       DOIF
   Readings:
     2017-03-10 18:15:54   cmd             0
     2017-03-10 18:15:54   state           initialized
     2017-03-10 18:35:00   timer_01_c01    11.03.2017 18:25:00
     2017-03-10 18:35:00   timer_02_c01    11.03.2017 18:35:00
     2017-03-10 18:15:54   timer_03_c01    10.03.2017 18:45:00
     2017-03-10 18:15:54   timer_04_c01    10.03.2017 18:55:00
     2017-03-10 18:15:54   timer_05_c01    10.03.2017 19:33:00
     2017-03-10 18:15:54   timer_06_c01    10.03.2017 19:42:00
   Condition:
     0          (DOIF_time($hash,0,1,$wday,$hms) or DOIF_time($hash,2,3,$wday,$hms) or DOIF_time($hash,4,5,$wday,$hms)) and (ReadingValDoIf($hash,'D_iPhone','presence') eq "present" or ReadingValDoIf($hash,'G_iPhone','presence') eq "present" )
   Days:
   Devices:
     0           D_iPhone G_iPhone
     all         D_iPhone G_iPhone
   Do:
     0:
       0          set Zirku on
     1:
       0          set Zirku off
   Helper:
     globalinit 1
     last_timer 6
     sleeptimer -1
   Interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
   Itimer:
   Localtime:
     0          1489253100
     1          1489253700
     2          1489167900
     3          1489168500
     4          1489170780
     5          1489171320
   Readings:
     0           D_iPhone:presence G_iPhone:presence
     all         D_iPhone:presence G_iPhone:presence
   Realtime:
     0          18:25:00
     1          18:35:00
     2          18:45:00
     3          18:55:00
     4          19:33:00
     5          19:42:00
   Regexp:
     All:
   State:
   Time:
     0          18:25:00
     1          18:35:00
     2          18:45:00
     3          18:55:00
     4          19:33:00
     5          19:42:00
   Timecond:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timers:
   Triggertime:
     1489168500:
       localtime  1489168500
       Hash:
     1489170780:
       localtime  1489170780
       Hash:
     1489171320:
       localtime  1489171320
       Hash:
     1489253100:
       localtime  1489253100
       Hash:
     1489253700:
       localtime  1489253700
       Hash:
Attributes:
   room       A


3. myUtils
99_myUtils.pm


######## Netzwerk Gerät über Fritzbox abfragen ############
sub
NetDevDa($)
{
    my $n = 0;
    my ($Reading) = @_;
    $Reading =~ tr/:/_/;
    my @fbs = devspec2array("TYPE=FRITZBOX");
       foreach( @fbs ) {
          my $Name = ReadingsVal($_,"mac_" . $Reading,"");
          if( ($Name ne "") && ($Name ne "inactive") ) {
              $n++;
          }
       }
    if( $n == 0) {
        return 0;
    } else {
        return 1;
    }
}

leider wird nichts geschaltet.
Wenn ich in der D_iPhone: "set  D_iPhone statusRequest" ausführe, wird die Pumpe eingeschaltet und in der Doif erscheint :
nternals:
   DEF        (([?18:25-18:35] or [?19:55-19:05] or [?19:33-19:42]) and ([Dieters_iPhone:presence] eq "present" or [Gittas_iPhone:presence] eq "present" )) (set IT_V3_155b33c5 on) DOELSE (set IT_V3_155b33c5 off)
   NAME       Zirku_an
   NR         202
   NTFY_ORDER 50-Zirku_an
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-03-10 19:36:44   Device          Dieters_iPhone
     2017-03-10 19:36:36   cmd             1
     2017-03-10 19:36:36   cmd_event       Dieters_iPhone
     2017-03-10 19:36:36   cmd_nr          1
     2017-03-10 19:36:44   e_Dieters_iPhone_presence present
     2017-03-10 19:37:16   mode            enable
     2017-03-10 19:36:36   state           cmd_1
     2017-03-10 18:53:00   timer_01_c01    11.03.2017 18:25:00
     2017-03-10 18:53:00   timer_02_c01    11.03.2017 18:35:00
     2017-03-10 19:05:00   timer_03_c01    10.03.2017 19:55:00
     2017-03-10 19:05:00   timer_04_c01    11.03.2017 19:05:00
     2017-03-10 18:53:00   timer_05_c01    10.03.2017 19:33:00
     2017-03-10 18:53:00   timer_06_c01    10.03.2017 19:42:00
   Condition:
     0   ................
einfach nicht weiter.

Hoffe auf  Ideen von euch,

Gruß Dieter

KernSani

Das einzige triggernde Event kommt vom Presence device, dort hast du event-on-change request gesetzt. D. H dein DOIF wird nur getriggert, wenn sich der Status des PRESENCE devices ändert.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

automatisierer

Könntest vielleicht mal sagen, was genau nicht funktioniert.

Ich tippe mal auf:
Du bist 'present' und die Pumpe geht zu den gewünschten Zeiten nicht an.

Deine Zeiten triggern wegen dem ? davor nicht. Deine Presence Funktion triggert auch nur bei Änderungen, wegen dem event-on-change-reading. Daher wird dein DOIF nur cmd_1 ausführen, wenn eine deiner Presence Definitionen während einer der Zeitbereiche wahr ist, auf 'presence' wechselt.

Beagel

 @automatisierer
ZitatDu bist 'present' und die Pumpe geht zu den gewünschten Zeiten nicht an
genau hab ich total vergessen, nach dem ich den ganzen Nachmittag probiert habe war mir das schon klar, euch natürlich nicht, sorry

Das wars, jetzt schaltet alles so wie ich es möchte.
Hier wird einem wirklich geholfen.

Vielen Dank

Gruß Dieter