Autor Thema: [Gelöst] Reading innerhalb einer Zeitspanne  (Gelesen 2565 mal)

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
[Gelöst] Reading innerhalb einer Zeitspanne
« am: 17 Mai 2021, 17:23:45 »
Hallo,
ich möchte eine Pumpe überwachen.
Wenn sie innerhalb von 15 Min 3 mal läuft, soll ein Event auslösen.

Versuchte habe ich folgendes DOIF:
([Pumpe_dummy] eq "on") {
if (secondsSinceReadingChange(Pumpe_dummy, "state") <5)}
(setreading $SELF check on)
DOELSE
(setreading $SELF check off)

wait 900
do resetwait

Leider funktioniert es nicht.

Bin für Hilfestellung dankbar.
VG Deieter
« Letzte Änderung: 18 Mai 2021, 23:15:35 von dk3572 »

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:Reading innerhalb einer Zeitspanne
« Antwort #1 am: 18 Mai 2021, 09:46:55 »
Woher kommt secondsSinceReadingChange?

Die Funktion dürfte beim Trigger immer 0 liefern?

Drei mal heißt ja nicht, dass es alle 5 Minuten passiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:Reading innerhalb einer Zeitspanne
« Antwort #2 am: 18 Mai 2021, 20:22:09 »
Hallo Damian,

vielen Dank für deine Mühe.
Zur Zeit versuche ich es mit einem userReading, dass mir das Einschalten mittels monotonic bis 3 zählt.
Jetzt bräuchte ich noch die zeitliche Differenz zw. 1. und 3. Einschalten.

Oder hast du einen besseren Vorschlag?

VG Dieter

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:Reading innerhalb einer Zeitspanne
« Antwort #3 am: 18 Mai 2021, 20:25:04 »
Hallo Damian,

vielen Dank für deine Mühe.
Zur Zeit versuche ich es mit einem userReading, dass mir das Einschalten mittels monotonic bis 3 zählt.
Jetzt bräuchte ich noch die zeitliche Differenz zw. 1. und 3. Einschalten.

Oder hast du einen besseren Vorschlag?

VG Dieter

siehe: https://fhem.de/commandref_DE.html#DOIF_Anwendungsbeispiele_im_Perlmodus

dort:

Aktion auslösen, wenn innerhalb einer bestimmten Zeitspanne ein Ereignis x mal eintritt
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:Reading innerhalb einer Zeitspanne
« Antwort #4 am: 18 Mai 2021, 21:11:46 »
ok, nochmals danke für deine Hilfe.

Sieht nun so aus:

{if (["Pumpe_dummy:on"] and !get_Exec("counter")) {
    $_count=1;;
    set_Exec("counter",10,'Log (3,"count: $_count action") if ($_count > 3)');;
  } else {
    $_count++;;
  }
}

Wie löse ich nun ein Event aus? Z.B. set Pumpe_dummy off

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:Reading innerhalb einer Zeitspanne
« Antwort #5 am: 18 Mai 2021, 21:16:42 »
indem du ein Dummy Pumpe_dummy definierst und den set Befehl absetzt
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:Reading innerhalb einer Zeitspanne
« Antwort #6 am: 18 Mai 2021, 21:18:19 »
der Dummy existiert ja, nur wo ich den set Befehl in der Funktion unterbringe ist mir nicht ganz klar.

Edit
habe es hinbekommen.
Vielen Dank noch mal.
VG Dieter

Edit2
Noch eine Frage.
Mit fhem_set("Pumpe_dummy off") schlate ich die Pumpe aus.
Wie bringe ich hier einen 2. set Befehl unter?
« Letzte Änderung: 18 Mai 2021, 21:55:37 von dk3572 »

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:Reading innerhalb einer Zeitspanne
« Antwort #7 am: 18 Mai 2021, 22:39:43 »
der Dummy existiert ja, nur wo ich den set Befehl in der Funktion unterbringe ist mir nicht ganz klar.

Edit
habe es hinbekommen.
Vielen Dank noch mal.
VG Dieter

Edit2
Noch eine Frage.
Mit fhem_set("Pumpe_dummy off") schlate ich die Pumpe aus.
Wie bringe ich hier einen 2. set Befehl unter?

Indem du einen zweiten fhem_set-Befehl mit Semikolon dranhängst
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:Reading innerhalb einer Zeitspanne
« Antwort #8 am: 18 Mai 2021, 22:47:54 »
set_Exec("counter",6,'fhem_set("Pumpe_dummy off");fhem_set("Telegram message \@.....") if ($_count > 3)');;
funktioniert leider nicht.
Verrätst du mir noch die Lösung?

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:Reading innerhalb einer Zeitspanne
« Antwort #9 am: 18 Mai 2021, 22:59:23 »
set_Exec("counter",6,'if ($_count > 3) {fhem_set("Pumpe_dummy off");fhem_set("Telegram message \@.....")}');
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:Reading innerhalb einer Zeitspanne
« Antwort #10 am: 18 Mai 2021, 23:15:08 »
Super, funktioniert, vielen Dank.

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #11 am: 27 Juli 2021, 19:39:28 »
Hallo Damian,

du hattest mir hier mit deiner Lösung weitergeholfen.

{if ([Hauswasserwerk:running] eq "on" and !get_Exec("counter")) {
    $_count=1;;
    set_Exec("counter",600,'if ($_count > 4) {fhem_set("Hauswasserwerk off");fhem_set("Telegram message \@Dieter_K. Hauswasserwerk Notabschaltung")}');
  } else {
    $_count++;;
  }
}

Jetzt möchte ich, nach dem die Pumpe "Not" abgeschaltet wurde, dass sie nach 1 Min wieder eingeschaltet wird.
Dies soll aber nur ein mal geschehen.
Wenn sie erneut "Not" abgeschaltet wird, soll sie auch aus bleiben.

Kannst, bzw. würdest du mir hierbei bitte helfen?

Danke dir im Voraus.

VG Dieter

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #12 am: 27 Juli 2021, 21:22:57 »
Hallo Damian,

du hattest mir hier mit deiner Lösung weitergeholfen.

{if ([Hauswasserwerk:running] eq "on" and !get_Exec("counter")) {
    $_count=1;;
    set_Exec("counter",600,'if ($_count > 4) {fhem_set("Hauswasserwerk off");fhem_set("Telegram message \@Dieter_K. Hauswasserwerk Notabschaltung")}');
  } else {
    $_count++;;
  }
}

Jetzt möchte ich, nach dem die Pumpe "Not" abgeschaltet wurde, dass sie nach 1 Min wieder eingeschaltet wird.
Dies soll aber nur ein mal geschehen.
Wenn sie erneut "Not" abgeschaltet wird, soll sie auch aus bleiben.

Kannst, bzw. würdest du mir hierbei bitte helfen?

Danke dir im Voraus.

VG Dieter

Hast du schon einen Ansatz?

Wie man verzögert eine Befehl ausführt, weißt du ja schon und wie man eine Variable mit einem Wert vorbelegt und wieder abfragt auch.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #13 am: 28 Juli 2021, 06:22:07 »
Hast du schon einen Ansatz?

Wie man verzögert eine Befehl ausführt, weißt du ja schon und wie man eine Variable mit einem Wert vorbelegt und wieder abfragt auch.

Das verzögerte Einschalten z.B. mit einem at bekäme ich noch hin.
Für den Rest habe ich leider keinen Plan.
Bei einem "normalen" DIOF würde ich es mit repeatcmd / repeatsame versuchen.
Aber hier?

Ich denke für dich ist es ein Kinderspiel und hoffe auf deine Lösung.

Danke noch mal im Voraus.

Edit:

Und hier noch meine klägliche Rumprobiererei.
Leider bin ich kein Programmierer und komme ich ohne Hilfe nicht weiter.

{if ([GoogleAssistant_dummy] eq "on" and !get_Exec("counter")) {
    $_count=1;;
    $_count2++;;
    set_Exec("counter",10,'if ($_count > 2) {fhem_set("GoogleAssistant_dummy off");set_Reading("count2",$_count2,1);fhem_set("defmod verzEin at +00:00:10 GoogleAssistant_dummy on")}');
  } else {
    $_count++;;
  }
}
« Letzte Änderung: 28 Juli 2021, 10:08:38 von dk3572 »

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #14 am: 28 Juli 2021, 10:14:37 »
Was soll denn: "nach dem die Pumpe "Not" abgeschaltet wurde" sein? Das kann ich in deinem Code nicht erkennen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #15 am: 28 Juli 2021, 10:24:27 »
Was soll denn: "nach dem die Pumpe "Not" abgeschaltet wurde" sein? Das kann ich in deinem Code nicht erkennen.

Das letzte Beispiel ist ein DOIF zum testen.
Wenn GoogleAssistant_dummy innerhalb von 10 sec mehr als 2x eingeschaltet wurde, wird es ausgeschaltet.
Soll aber nach 10 sec wieder eingeschaltet werden.
Wird es dann erneut ausgeschaltet, weil innerhalb 10 sec mehr als 2x ein, dann soll es nicht wieder eingeschaltet werden.
Heißt, die Prozedur mit der Wiedereinschaltung soll nur einmal erfolgen.

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #16 am: 28 Juli 2021, 22:42:32 »
Das letzte Beispiel ist ein DOIF zum testen.
Wenn GoogleAssistant_dummy innerhalb von 10 sec mehr als 2x eingeschaltet wurde, wird es ausgeschaltet.
Soll aber nach 10 sec wieder eingeschaltet werden.
Wird es dann erneut ausgeschaltet, weil innerhalb 10 sec mehr als 2x ein, dann soll es nicht wieder eingeschaltet werden.
Heißt, die Prozedur mit der Wiedereinschaltung soll nur einmal erfolgen.

defmod di_off_on DOIF {if ([GoogleAssistant_dummy:state] eq "on" and !get_Exec("timer")) {\
  set_Exec("timer",10,"");;\
  del_Exec("timer2");;\
} else {\
   fhem_set("GoogleAssistant_dummy off");;\
   del_Exec("timer");;\
   if (!defined $_aus) {\
     set_Exec("timer2",10,'fhem_set("GoogleAssistant_dummy on")');;\
     $_aus=1;;\
   }\
}\
}

Jetzt muss du dir noch überlegen, wann der Mechanismus wieder aktiviert werden soll ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #17 am: 29 Juli 2021, 07:10:31 »
defmod di_off_on DOIF {if ([GoogleAssistant_dummy:state] eq "on" and !get_Exec("timer")) {\
  set_Exec("timer",10,"");;\
  del_Exec("timer2");;\
} else {\
   fhem_set("GoogleAssistant_dummy off");;\
   del_Exec("timer");;\
   if (!defined $_aus) {\
     set_Exec("timer2",10,'fhem_set("GoogleAssistant_dummy on")');;\
     $_aus=1;;\
   }\
}\
}

Jetzt muss du dir noch überlegen, wann der Mechanismus wieder aktiviert werden soll ;)

Hallo Damian,

vielen Dank für deine Hilfe.

Was verstehst du unter "wieder aktiviert werden"?
Falls du das Einschalten der Pumpe (Dummy) meinst, dass soll dann händisch geschehen.

Leider funktioniert dein DOIF nicht.
Es wird nicht ausgeschaltet.
Wo wird gezählt, dass der Dummy mehr als 2x eingeschaltet wurde?

VG Dieter


Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #18 am: 29 Juli 2021, 08:41:45 »
Hallo Damian,

vielen Dank für deine Hilfe.

Was verstehst du unter "wieder aktiviert werden"?
Falls du das Einschalten der Pumpe (Dummy) meinst, dass soll dann händisch geschehen.

Leider funktioniert dein DOIF nicht.
Es wird nicht ausgeschaltet.
Wo wird gezählt, dass der Dummy mehr als 2x eingeschaltet wurde?

VG Dieter

Er schaltet aus, allerdings bereits beim zweiten Mal.

So schaltet er erst ab dem dritten Mal:

defmod di_2 DOIF {if ([GoogleAssistant_dummy:state] eq "on" and !get_Exec("timer")) {\
  set_Exec("timer",10,"");;\
  del_Exec("timer2");;\
  $_count=1;;\
} else {\
   if (++$_count > 2) {\
     fhem_set("GoogleAssistant_dummy off");;\
     del_Exec("timer");;\
     if (!defined $_on) {\
       set_Exec("timer2",10,'fhem_set("GoogleAssistant_dummy on")');;\
       $_on=1;;\
     }\
   }\
}\
}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #19 am: 29 Juli 2021, 09:09:58 »
Er schaltet aus, allerdings bereits beim zweiten Mal.

So schaltet er erst ab dem dritten Mal:

defmod di_2 DOIF {if ([GoogleAssistant_dummy:state] eq "on" and !get_Exec("timer")) {\
  set_Exec("timer",10,"");;\
  del_Exec("timer2");;\
  $_count=1;;\
} else {\
   if (++$_count > 2) {\
     fhem_set("GoogleAssistant_dummy off");;\
     del_Exec("timer");;\
     if (!defined $_on) {\
       set_Exec("timer2",10,'fhem_set("GoogleAssistant_dummy on")');;\
       $_on=1;;\
     }\
   }\
}\
}

Nochmals Danke für deine Geduld  ;)

Leider funktioniert es so immer noch nicht.
Der dummy wird nicht ausgeschaltet.

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #20 am: 29 Juli 2021, 10:47:35 »
Nochmals Danke für deine Geduld  ;)

Leider funktioniert es so immer noch nicht.
Der dummy wird nicht ausgeschaltet.

Bei mir schon :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #21 am: 29 Juli 2021, 12:00:06 »
Bei mir schon :)

Merkwürdig  ???

Ich habe dein DOIF als Raw importiert, ist also exakt das gleiche.

Noch mal zum Verständnis:
Es soll der dummy ausgeschaltet werden, wenn er innerhalb von 10 sec mehr als 2x eingeschaltet wurde.
Wenn er durch das DOIF ausgeschaltet wurde, soll er nach 10 sec wieder durch das DOIF eingeschaltet werden.
Das soll aber nur ein mal geschehen. Wenn er erneut durch das DOIF ausgeschaltet wurde, soll er aus bleiben, bis ich ihn händisch wieder einschalte.

Seltsam ist auch, dass ich den dummy jetzt innerhalb der 10 sec 2x einschalten muss bis er auf ein geht.

Wie schaltest du den dummy das es bei dir funktioniert (Abstände, Wiederholungen)?

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #22 am: 29 Juli 2021, 14:34:11 »
Merkwürdig  ???

Ich habe dein DOIF als Raw importiert, ist also exakt das gleiche.

Noch mal zum Verständnis:
Es soll der dummy ausgeschaltet werden, wenn er innerhalb von 10 sec mehr als 2x eingeschaltet wurde.
Wenn er durch das DOIF ausgeschaltet wurde, soll er nach 10 sec wieder durch das DOIF eingeschaltet werden.
Das soll aber nur ein mal geschehen. Wenn er erneut durch das DOIF ausgeschaltet wurde, soll er aus bleiben, bis ich ihn händisch wieder einschalte.

Seltsam ist auch, dass ich den dummy jetzt innerhalb der 10 sec 2x einschalten muss bis er auf ein geht.

Wie schaltest du den dummy das es bei dir funktioniert (Abstände, Wiederholungen)?

Mach dir die Zeitspannen länger, z. B. 30 Sekunden, dann kannst du es besser testen.

Du hast noch nicht definiert, wann die automatische Einschaltsperre wieder aufgehoben werden soll und was passieren solle, wenn  innerhalb der 10 Sekunden vor dem Einschalten ein on-Befehl kommt.

Zusätzlich triggert der automatische on-Befehl das Modul selbst, danach reichen zwei weitere on zum Ausschalten.



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

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #23 am: 29 Juli 2021, 15:32:13 »
Mach dir die Zeitspannen länger, z. B. 30 Sekunden, dann kannst du es besser testen.

Du hast noch nicht definiert, wann die automatische Einschaltsperre wieder aufgehoben werden soll und was passieren solle, wenn  innerhalb der 10 Sekunden vor dem Einschalten ein on-Befehl kommt.

Zusätzlich triggert der automatische on-Befehl das Modul selbst, danach reichen zwei weitere on zum Ausschalten.

Leider kann ich nur beschreiben was mein Ziel ist.
Programmieren kann ich das nicht.
Ich weiß auch nicht wie ich dein DOIF überhaupt testen kann. Bei dir scheint es ja zu funktionieren.

Daher noch mal ganz von vorne:

Eine Pumpe läuft am Tag ca. 4 - 5 mal.
Die Pumpe hängt an einer schaltbaren Steckdose mit Strommessung.
Über den Strombezug ermittele ich ob sie läuft.
Läuft sie innerhalb von z.B. 10 Min mehr als 2 mal, soll die Steckdose abgeschaltet werden.
Nach z.B. 5 Min soll sie wieder eingeschaltet werden. (Evtl. hat sich die Ursache ja behoben)
Sollte sie dann wieder innerhalb der 10 Min mehr als 2 mal laufen, soll sie dauerhaft ausgeschaltet werden.
Eingeschaltet wird die Steckdose dann von Hand. Egal ob nach 1 Min od., 30 Min od. 2 Wochen.
Danach soll die Automatik wieder greifen.

Besser kann ich es nicht beschreiben und hoffe weiterhin auf deine Hilfe.

Danke und VG Dieter

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #24 am: 29 Juli 2021, 16:45:06 »
Leider kann ich nur beschreiben was mein Ziel ist.
Programmieren kann ich das nicht.
Ich weiß auch nicht wie ich dein DOIF überhaupt testen kann. Bei dir scheint es ja zu funktionieren.

Daher noch mal ganz von vorne:

Eine Pumpe läuft am Tag ca. 4 - 5 mal.
Die Pumpe hängt an einer schaltbaren Steckdose mit Strommessung.
Über den Strombezug ermittele ich ob sie läuft.
Läuft sie innerhalb von z.B. 10 Min mehr als 2 mal, soll die Steckdose abgeschaltet werden.
Nach z.B. 5 Min soll sie wieder eingeschaltet werden. (Evtl. hat sich die Ursache ja behoben)
Sollte sie dann wieder innerhalb der 10 Min mehr als 2 mal laufen, soll sie dauerhaft ausgeschaltet werden.
Eingeschaltet wird die Steckdose dann von Hand. Egal ob nach 1 Min od., 30 Min od. 2 Wochen.
Danach soll die Automatik wieder greifen.

Besser kann ich es nicht beschreiben und hoffe weiterhin auf deine Hilfe.

Danke und VG Dieter

Vorher hast du von 10 Sekunden gesprochen, jetzt sprichst du von 10 Minuten.

Ich habe wie folgt getestet:

set GoogleAssistant_dummy on

erster Timer läuft (das sieht man in den Readings)

set GoogleAssistant_dummy on
set GoogleAssistant_dummy on

GoogleAssistant_dummy wird auf off gesetzt

Timer2 läuft (siehe Readings im DOIF-Modul)

10 Sekunden Später wird GoogleAssistant_dummy vom Modul auf on gesetzt.

Wenn man das Ganze wiederholt, geht der GoogleAssistant_dummy auf off aber nicht mehr auf on.

Da du nicht beschrieben hast, wann er wieder automatisch auf on gehen darf, wird er erst wieder automatisch auf on gesetzt, wenn man das Modul per modify wieder neu definiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #25 am: 30 Juli 2021, 17:16:31 »
Vorher hast du von 10 Sekunden gesprochen, jetzt sprichst du von 10 Minuten.

Ich habe wie folgt getestet:

set GoogleAssistant_dummy on

erster Timer läuft (das sieht man in den Readings)

set GoogleAssistant_dummy on
set GoogleAssistant_dummy on

GoogleAssistant_dummy wird auf off gesetzt

Timer2 läuft (siehe Readings im DOIF-Modul)

10 Sekunden Später wird GoogleAssistant_dummy vom Modul auf on gesetzt.

Wenn man das Ganze wiederholt, geht der GoogleAssistant_dummy auf off aber nicht mehr auf on.

Da du nicht beschrieben hast, wann er wieder automatisch auf on gehen darf, wird er erst wieder automatisch auf on gesetzt, wenn man das Modul per modify wieder neu definiert.

Hi,

mit dem dummy hat es wie beschrieben funktioniert.

Hier jetzt mein DOIF mit dem richtigen Device:

{if ([Hauswasserwerk:running] eq "on" and !get_Exec("timer")) {
  set_Exec("timer",600,"");
  del_Exec("timer2");
  $_count=1;
} else {
   if (++$_count > 4) {
     fhem_set("Hauswasserwerk off");
     fhem_set("Telegram message \@Dieter_K. Hauswasserwerk Notabschaltung");
     del_Exec("timer");
     if (!defined $_on) {
       set_Exec("timer2",180,'fhem_set("Hauswasserwerk on")');
       $_on=1;
     }
   }
}
}

Wie du schon erwähnt hast, fehlt jetzt nur eine Art "Reset" des DOIF, wenn ich das Hauswasserwerk wieder händisch einschalte.

Vielleicht hast du ja hierzu noch eine Idee  ;)

Danke dir schon mal und schönes Wochenende.

VG Dieter

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #26 am: 30 Juli 2021, 19:35:13 »
Hi,

mit dem dummy hat es wie beschrieben funktioniert.

Hier jetzt mein DOIF mit dem richtigen Device:

{if ([Hauswasserwerk:running] eq "on" and !get_Exec("timer")) {
  set_Exec("timer",600,"");
  del_Exec("timer2");
  $_count=1;
} else {
   if (++$_count > 4) {
     fhem_set("Hauswasserwerk off");
     fhem_set("Telegram message \@Dieter_K. Hauswasserwerk Notabschaltung");
     del_Exec("timer");
     if (!defined $_on) {
       set_Exec("timer2",180,'fhem_set("Hauswasserwerk on")');
       $_on=1;
     }
   }
}
}

Wie du schon erwähnt hast, fehlt jetzt nur eine Art "Reset" des DOIF, wenn ich das Hauswasserwerk wieder händisch einschalte.

Vielleicht hast du ja hierzu noch eine Idee  ;)

Danke dir schon mal und schönes Wochenende.

VG Dieter


Reset lässt sich einfach realisieren. Wenn du deinen Trigger herausgefunden hast, dann musst du die Definition einfach um einen weiteren Block ergänzen:

{if ([Trigger für Reset] eq "on") {delete $_on}}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #27 am: 30 Juli 2021, 20:29:38 »

Reset lässt sich einfach realisieren. Wenn du deinen Trigger herausgefunden hast, dann musst du die Definition einfach um einen weiteren Block ergänzen:

{if ([Trigger für Reset] eq "on") {delete $_on}}

Ok, dann meine Idee:
Das DOIF schaltet das Hauswasserwerk 1x ein.
Danach muss ich es per Hand 1x einschalten.
Heißt, wenn es 2x eingeschaltet wurde, könnte das {delete $_on} erfolgen.

Oder sehe ich das falsch?

Und natürlich wieder mit der Bitte um Hilfe, wie ich das in das DOIF rein bekomme.

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #28 am: 30 Juli 2021, 20:41:20 »
Wenn das manuelle Einschalten auch nur [Hauswasserwerk:running] eq "on" bedeutet, dann kann man es nicht unterscheiden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #29 am: 30 Juli 2021, 20:46:51 »
Wenn das manuelle Einschalten auch nur [Hauswasserwerk:running] eq "on" bedeutet, dann kann man es nicht unterscheiden.

Nein, das manuelle Einschalten ist doch das "Hauswasserwerk on"

Das Hauswasserwerk:running on kommt nur wenn die Pumpe Strom zieht.

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #30 am: 30 Juli 2021, 20:59:05 »
Nein, das manuelle Einschalten ist doch das "Hauswasserwerk on"

Das Hauswasserwerk:running on kommt nur wenn die Pumpe Strom zieht.

Damit du auch zukünftig solche Probleme selbständig lösen kannst, ist es jetzt an der Zeit mit meiner Vorgabe es selbst zu probieren - und das sage ich jetzt als Pädagoge.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #31 am: 30 Juli 2021, 21:10:14 »
Damit du auch zukünftig solche Probleme selbständig lösen kannst, ist es jetzt an der Zeit mit meiner Vorgabe es selbst zu probieren - und das sage ich jetzt als Pädagoge.

Ja, genau das tue ich auch.
Leider weiß ich nicht wie ich nun das Hauswasserwerk on zählen kann.
Wahrscheinlich auch mit einem $_count=1 ?
Oder ein $count2=1 ?
So in etwa?

if ([Hauswasserwerk] eq "on){
$count2=1;
if (++$_count2 = 2) {delete $_on}

Wie bereits erwähnt bin ich kein Programmierer und auf deine Hilfe angewiesen.
Mit "Rumprobieren" verbringe ich wieder Stunden.  :(

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #32 am: 30 Juli 2021, 21:24:41 »
Ja, genau das tue ich auch.
Leider weiß ich nicht wie ich nun das Hauswasserwerk on zählen kann.
Wahrscheinlich auch mit einem $_count=1 ?
Oder ein $count2=1 ?
So in etwa?

if ([Hauswasserwerk] eq "on){
$count2=1;
if (++$_count2 = 2) {delete $_on}

Wie bereits erwähnt bin ich kein Programmierer und auf deine Hilfe angewiesen.
Mit "Rumprobieren" verbringe ich wieder Stunden.  :(

Aber dafür lernst du was. Ansonsten stehst beim nächsten Problem wieder hier.

Hier aber paar Tipps, damit du nicht so viele Stunde brauchst.

Alles muss in geschweifte Klammern, damit es einen eigenen Block darstellt.

-Die if-Abfrage würde ich um die Abfrage des Zustands and $_on == 1 ergänzen
-$_count2=1; musst du dort setzen, wo du $_on=1 setzt.
-Gleichheit wird mit zwei Gleichheitszeichen abgefragt, also: ++$_count2 == 2

dann sollte es schon funktionieren und du hast ein Erfolgserlebnis :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #33 am: 30 Juli 2021, 21:51:45 »
Aber dafür lernst du was. Ansonsten stehst beim nächsten Problem wieder hier.

Hier aber paar Tipps, damit du nicht so viele Stunde brauchst.

Alles muss in geschweifte Klammern, damit es einen eigenen Block darstellt.

-Die if-Abfrage würde ich um die Abfrage des Zustands and $_on == 1 ergänzen
-$_count2=1; musst du dort setzen, wo du $_on=1 setzt.
-Gleichheit wird mit zwei Gleichheitszeichen abgefragt, also: ++$_count2 == 2

dann sollte es schon funktionieren und du hast ein Erfolgserlebnis :)

Habe es jetzt so versucht, funktioniert aber nicht.

{if ([Hauswasserwerk:running] eq "on" and !get_Exec("timer")) {
  set_Exec("timer",10,"");
  del_Exec("timer2");
  $_count=1;
} else {
   if (++$_count > 2) {
     fhem_set("Hauswasserwerk off");
     del_Exec("timer");
     if (!defined $_on) {
       set_Exec("timer2",10,'fhem_set("Hauswasserwerk on")');
       $_on=1;
       $_count2=1;
      {if ([Hauswasserwerk] eq "on" and $_on == 1)
       if (++$_count2 = 2) {delete $_on}
     }
     }
   }
}
}

Es bleibt ein Stochern im Trüben  :(

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #34 am: 30 Juli 2021, 22:12:09 »
{if ([Hauswasserwerk] eq "on" and $_on == 1)
    {if (++$_count2 == 2) {delete $_on}}
}

muss komplett raus und separat als eigener Block stehen
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #35 am: 31 Juli 2021, 07:50:44 »
{if ([Hauswasserwerk] eq "on" and $_on == 1)
    {if (++$_count2 == 2) {delete $_on}}
}

muss komplett raus und separat als eigener Block stehen

Habe es jetzt hier eingefügt:

{if ([Hauswasserwerk:running] eq "on" and !get_Exec("timer")) {
  set_Exec("timer",10,"");
  del_Exec("timer2");
  $_count=1;
} else {
   if (++$_count > 2) {
     fhem_set("Hauswasserwerk off");
     del_Exec("timer");
     if (!defined $_on and ++$_count2 < 2)) {
       set_Exec("timer2",10,'fhem_set("Hauswasserwerk on")');
       $_on=1;
       $_count2=1;
     }
   }
 }
{if ([Hauswasserwerk] eq "on" and $_on == 1)
    {if (++$_count2 == 2) {delete $_on}}
}
}

Da das Hauswasserwerk jetzt aber immer wieder automatisch eingeschaltet wird, habe ich in Zeile 9 das angehängt:

and ++$_count2 < 2

Jetzt wird es wieder nur 1x automatisch eingeschaltet.

Allerdings funktioniert der "Reset" des DOIF (delete $_on) noch immer nicht.

Also weiterhin nur ein Stochern im Trüben.

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #36 am: 31 Juli 2021, 21:53:17 »
{if ([Hauswasserwerk] eq "on" and $_on == 1)
    {if (++$_count2 == 2) {delete $_on}}
}

muss komplett raus und separat als eigener Block stehen

Du hast den Code im ersten Block eingebaut und nicht einem eigenen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #37 am: 01 August 2021, 08:51:07 »
Du hast den Code im ersten Block eingebaut und nicht einem eigenen.

ok, wieder etwas rumprobiert.
Habe es jetzt so versucht:

{if ([Hauswasserwerk:running] eq "on" and !get_Exec("timer")) {
  set_Exec("timer",10,"");
  del_Exec("timer2");
  $_count=1;
} else {
   if (++$_count > 2) {
     fhem_set("Hauswasserwerk off");
     del_Exec("timer");
     if (!defined $_on and ++$_count2 < 2)) {
       set_Exec("timer2",10,'fhem_set("Hauswasserwerk on")');
       $_on=1;
       $_count2=1;
     }
   }
 }
}
{if ([Hauswasserwerk] eq "on" and $_on == 1)
    {if (++$_count2 == 2) {delete $_on}}
}

Funktioniert auch nicht.

Edit:
Kann es sein das nur das "Hauswasserwerk:running on" gezählt wird?
Es müsste ja auch das "Hauswasserwerk on" gezählt werden.
Wenn das 2x eingeschaltet wird, soll delete $_on erfolgen.
« Letzte Änderung: 01 August 2021, 11:05:59 von dk3572 »

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #38 am: 03 August 2021, 07:44:36 »
Hallo Damian,

hast du noch einen Lösungsvorschlag parat?
Liege ich mit meiner Vermutung richtig?

VG Dieter

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #39 am: 03 August 2021, 09:05:46 »
Hallo Damian,

hast du noch einen Lösungsvorschlag parat?
Liege ich mit meiner Vermutung richtig?

VG Dieter

Das könnte sein. Dann musst du die Abfrage einschränken, entweder state angeben oder nur auf Event on triggern:

https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #40 am: 03 August 2021, 16:57:25 »
Das könnte sein. Dann musst du die Abfrage einschränken, entweder state angeben oder nur auf Event on triggern:

https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events

Da ich den code teilweise nicht verstehe, kann ich so lange rumprobieren wie ich will und es funktioniert doch nicht.

Auch dieser Versuch schlug fehl:

{if ([GoogleAssistant_dummy:running] eq "on" and !get_Exec("timer")) {
  set_Exec("timer",10,"");
  del_Exec("timer2");
  $_count=1;
} else {
   if (++$_count > 2) {
     fhem_set("GoogleAssistant_dummy off");
     del_Exec("timer");
     if (!defined $_on and ++$_count2 < 2) {
       set_Exec("timer2",5,'fhem_set("GoogleAssistant_dummy on")');
       $_on=1;
       $_count2=1;
     }
   }
 }
}
{if ([GoogleAssistant_dummy:state] eq "on" and $_on == 1);
     $_on3=1;
     $_count3=1;
    {if (++$_count3 == 2) {delete $_on}}
}

Vielleicht hättest du die Güte mir auf einfache Art und Weise zu helfen oder die Funktion der einzelnen Zeilen zu erklären.
Auch dadurch könnte ich etwas lernen  ;)

Hoffe auf deine Hilfe und danke schon mal im Voraus.

VG Dieter

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #41 am: 05 August 2021, 12:26:46 »


Hoffe auf deine Hilfe und danke schon mal im Voraus.

VG Dieter

Bin gerade im Urlaub.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #42 am: 05 August 2021, 15:01:31 »
Bin gerade im Urlaub.

Ich kann warten und wünsche weiterhin einen schönen Urlaub.

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #43 am: 11 August 2021, 23:13:54 »
ich habe es damit getestet:

defmod di_2 DOIF {if ([GoogleAssistant_dummy:running] eq "on" and !get_Exec("timer")) {\
  set_Exec("timer",60,"");;\
  del_Exec("timer2");;\
  $_count=1;;\
} else {\
   if (++$_count > 2) {\
     fhem_set("GoogleAssistant_dummy off");;\
     del_Exec("timer");;\
     if (!defined $_on) {\
       set_Exec("timer2",20,'fhem_set("GoogleAssistant_dummy on")');;\
       $_on=1;;\
       $_count2=0;;\
     }\
   }\
}\
\
{if ([GoogleAssistant_dummy:"on"] and defined $_on)\
    {if (++$_count2 == 2) {delete $_on}}\
}\
}

Allerdings gehe ich davon aus, dass ein Einschalten auf on bei dir auch ein running-Event auslöst.

Ich habe es jeweils mit:

drei mal innerhalb von 60 Sekunden

setreading GoogleAssistant_dummy running on
und mit:

zwei mal
setreading GoogleAssistant_dummy state on
zum Zurücksetzen getestet.

mit

list di_2
kann man unter var die Belegung der Variablen count1, count2 und on sehen, wenn sie gesetzt sind.
« Letzte Änderung: 11 August 2021, 23:16:07 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #44 am: 12 August 2021, 07:53:31 »
ich habe es damit getestet:

defmod di_2 DOIF {if ([GoogleAssistant_dummy:running] eq "on" and !get_Exec("timer")) {\
  set_Exec("timer",60,"");;\
  del_Exec("timer2");;\
  $_count=1;;\
} else {\
   if (++$_count > 2) {\
     fhem_set("GoogleAssistant_dummy off");;\
     del_Exec("timer");;\
     if (!defined $_on) {\
       set_Exec("timer2",20,'fhem_set("GoogleAssistant_dummy on")');;\
       $_on=1;;\
       $_count2=0;;\
     }\
   }\
}\
\
{if ([GoogleAssistant_dummy:"on"] and defined $_on)\
    {if (++$_count2 == 2) {delete $_on}}\
}\
}

Allerdings gehe ich davon aus, dass ein Einschalten auf on bei dir auch ein running-Event auslöst.

Ich habe es jeweils mit:

drei mal innerhalb von 60 Sekunden

setreading GoogleAssistant_dummy running on
und mit:

zwei mal
setreading GoogleAssistant_dummy state on
zum Zurücksetzen getestet.

mit

list di_2
kann man unter var die Belegung der Variablen count1, count2 und on sehen, wenn sie gesetzt sind.

Hallo Damian,

ich habe dein DOIF wieder importiert.

funktioniert leider immer noch nicht wie gewünscht.
Es wird immer wieder on geschaltet.

Noch mal die Anforderung:

Wenn innerhalb 60 sec. 3 x running on kommt, dann state off
Nach 20 sec. soll automatisch state on
Wenn jetzt wieder innerhalb 60 sec. 3 x running on kommt, dann state off aber nicht wieder automatisch on
Das state on möchte ich dann händisch ausführen.

Und ja, das Einschalten löst ein running on Event aus, macht aber nichts, soll ja erst beim 3. mal innerhalb 60 sec. wieder abschalten.

Ich verstehe den code nicht zu 100%, vermute aber, dass sich das {delete $_on} auf das on von running bezieht.
Müsste hier nicht das on von state gezählt und entsprechen darauf reagiert werden?

Wie immer danke ich dir für deine Mühe und hoffe weiterhin auf deine Hilfe  ;)
VG Dieter

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #45 am: 12 August 2021, 08:43:17 »
Hallo Damian,

ich habe dein DOIF wieder importiert.

funktioniert leider immer noch nicht wie gewünscht.
Es wird immer wieder on geschaltet.

Noch mal die Anforderung:

Wenn innerhalb 60 sec. 3 x running on kommt, dann state off
Nach 20 sec. soll automatisch state on
Wenn jetzt wieder innerhalb 60 sec. 3 x running on kommt, dann state off aber nicht wieder automatisch on
Das state on möchte ich dann händisch ausführen.

Und ja, das Einschalten löst ein running on Event aus, macht aber nichts, soll ja erst beim 3. mal innerhalb 60 sec. wieder abschalten.

Ich verstehe den code nicht zu 100%, vermute aber, dass sich das {delete $_on} auf das on von running bezieht.
Müsste hier nicht das on von state gezählt und entsprechen darauf reagiert werden?

Wie immer danke ich dir für deine Mühe und hoffe weiterhin auf deine Hilfe  ;)
VG Dieter

Ich habe es mit Dummys wie beschrieben getestet. Warum es mit deinem Device nicht funktioniert, kann ich nicht sagen, da ich es bei mir nicht nachbilden kann.

$_on ist eine Variable, die auf 1 gesetzt wird, wenn der zweite Timer gestartet wird - sie ist dann definiert (Abfrage: defined $_on)

Du kannst nach jeder Aktion list di_2 aufrufen und die Zustände der Variablen überprüfen. Z. B.:

...
   var:
     count      1
     count2     2

...

$_on ist hier nicht definiert, sonst steht da on 1

Damit kannst du dich an das Problem herantasten.

if (++$_count2 == 2)  bedeutet: erhöhe zuerst die Variable $_count2 um eins und vergleiche danach.

if (!defined $_on) bedeutet: wenn $_on nicht definiert.

Alles andere im Code sollte selbsterklärend sein bzw. in der Commandref zu DOIF stehen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #46 am: 16 August 2021, 17:08:04 »
Ich habe es mit Dummys wie beschrieben getestet. Warum es mit deinem Device nicht funktioniert, kann ich nicht sagen, da ich es bei mir nicht nachbilden kann.

$_on ist eine Variable, die auf 1 gesetzt wird, wenn der zweite Timer gestartet wird - sie ist dann definiert (Abfrage: defined $_on)

Du kannst nach jeder Aktion list di_2 aufrufen und die Zustände der Variablen überprüfen. Z. B.:

...
   var:
     count      1
     count2     2

...

$_on ist hier nicht definiert, sonst steht da on 1

Damit kannst du dich an das Problem herantasten.

if (++$_count2 == 2)  bedeutet: erhöhe zuerst die Variable $_count2 um eins und vergleiche danach.

if (!defined $_on) bedeutet: wenn $_on nicht definiert.

Alles andere im Code sollte selbsterklärend sein bzw. in der Commandref zu DOIF stehen.

Das gibt´s doch nicht, dass das gleiche DOIF bei dir funktioniert und bei mir nicht.

Internals:
   CFGFN     
   DEF        {if ([GoogleAssistant_dummy:running] eq "on" and !get_Exec("timer")) {
  set_Exec("timer",60,"");
  del_Exec("timer2");
  $_count=1;
} else {
   if (++$_count > 2) {
     fhem_set("GoogleAssistant_dummy off");
     del_Exec("timer");
     if (!defined $_on) {
       set_Exec("timer2",20,'fhem_set("GoogleAssistant_dummy on")');
       $_on=1;
       $_count2=0;
     }
   }
}

{if ([GoogleAssistant_dummy:"on"] and defined $_on)
    {if (++$_count2 == 2) {delete $_on}}
}
}
   FUUID      611a7807-f33f-cd72-c76b-6afa4309f97ae4ae
   MODEL      Perl
   NAME       di_2
   NOTIFYDEV  GoogleAssistant_dummy,global
   NR         215158
   NTFY_ORDER 50-di_2
   STATE      initialized
   TYPE       DOIF
   VERSION    24755 2021-07-15 16:40:59
   Helper:
     DBLOG:
       mode:
         logdb:
           TIME       1629124615.78793
           VALUE      enabled
   READINGS:
     2021-08-16 16:41:00   Device          GoogleAssistant_dummy
     2021-08-16 16:41:00   block_01        executed
     2021-08-16 16:41:00   e_GoogleAssistant_dummy_events on
     2021-08-16 16:40:40   e_GoogleAssistant_dummy_running on
     2021-08-16 16:36:55   mode            enabled
     2021-08-16 16:36:55   state           initialized
   Regex:
     accu:
     collect:
     cond:
       GoogleAssistant_dummy:
         0:
           &STATE     ^GoogleAssistant_dummy$
           running    ^GoogleAssistant_dummy$:^running:
   condition:
     0          if (::ReadingValDoIf($hash,'GoogleAssistant_dummy','running') eq "on" and !get_Exec("timer")) {
  set_Exec("timer",60,"");
  del_Exec("timer2");
  $hash->{var}{count}=1;
} else {
   if (++$hash->{var}{count} > 2) {
     fhem_set("GoogleAssistant_dummy off");
     del_Exec("timer");
     if (!defined $hash->{var}{on}) {
       set_Exec("timer2",20,'fhem_set("GoogleAssistant_dummy on")');
       $hash->{var}{on}=1;
       $hash->{var}{count2}=0;
     }
   }
}

{if (::EventDoIf('GoogleAssistant_dummy',$hash,'on',1) and defined $hash->{var}{on})
    {if (++$hash->{var}{count2} == 2) {delete $hash->{var}{on}}}
}

   helper:
     DEVFILTER  ^global$|^GoogleAssistant_dummy$
     NOTIFYDEV  global|GoogleAssistant_dummy
     event      on
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev GoogleAssistant_dummy
     triggerEvents:
       on
     triggerEventsState:
       state: on
   internals:
   perlblock:
     0          block_01
   ptimer:
     timer:
       count      0
       name       timer
       sec        60
       subname   
       time       1629124920.45668
       hash:
   readings:
     all         GoogleAssistant_dummy:running
   trigger:
     all         GoogleAssistant_dummy
   uiState:
   uiTable:
   var:
     count      1
     count2     2
Attributes:
   DbLogExclude .*

Internals:
   FUUID      5ff9f0b6-f33f-cd72-1fbc-2697b25823d55d15
   FVERSION   98_dummy.pm:0.206650/2019-12-06
   NAME       GoogleAssistant_dummy
   NR         455
   STATE      on
   TYPE       dummy
   READINGS:
     2021-08-16 16:40:40   running         on
     2021-08-16 16:41:00   state           on
Attributes:
   DbLogExclude .*
   alias      Testlight
   appOptions {"template": "switch"}
   genericDeviceType audio_video_receiver
   readingList state running
   room       Google
   setList    on off running

Reden wir evtl. aneinander vorbei? ???

Ich führe 3 x innerhalb 60 Sec. "set running on" aus.
Der Dummy wird ausgeschalten und nach 20 Sec. wieder an.
Das kann ich aber beliebig oft wiederholen, er wird immer wieder angeschaltet.
Er sollte aber nach dem 2 x aus bleiben, bis ich ihn selbst wieder einschalte.

Es ist auch egal ob ich "set running on" od. "set state on" ausführe.
Es wird immer das count hoch gezählt.
Bei "set state on" sollte doch aber nur das count2 hoch zählen.

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #47 am: 16 August 2021, 19:35:43 »
Ja, ich konnte das Problem bei der Wiederholung nachstellen.

Hier die Korrektur:

defmod di_2 DOIF {if ([GoogleAssistant_dummy:running] eq "on" and \
  !get_Exec("timer")) {\
  set_Exec("timer",60,"");;\
  del_Exec("timer2");;\
  $_count=1;;\
} else {\
  if (++$_count > 2) {\
     fhem_set("GoogleAssistant_dummy off");;\
     del_Exec("timer");;\
     if (!defined $_on) {\
       set_Exec("timer2",20,'fhem_set("GoogleAssistant_dummy on")');;\
       $_on=1;;\
       $_count2=0;;\
     }\
   }\
}\
}\
{if ([GoogleAssistant_dummy:"^on$"] and defined $_on)\
    {if (++$_count2 == 2) {delete $_on}}\
}

Es war eine Klammer } falsch - es sollten zwei unabhängige Blöcke sein. Was aber gravierender war, war die Abfrage auf Status on. Mit [GoogleAssistant_dummy:"on"] wurde auch auf running on getriggert.

Man braucht ja nur einmal set GoogleAssistant_dummy on zum Wiederaktivieren ausführen, da das erste ja schon bereits vom Modul gesetzt wurde.

Willst du auf zwei Mal manuell schalten wieder aktivieren, dann musst du ++$_count2 == 3 schreiben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #48 am: 16 August 2021, 20:25:59 »
Ja, ich konnte das Problem bei der Wiederholung nachstellen.

Hier die Korrektur:

defmod di_2 DOIF {if ([GoogleAssistant_dummy:running] eq "on" and \
  !get_Exec("timer")) {\
  set_Exec("timer",60,"");;\
  del_Exec("timer2");;\
  $_count=1;;\
} else {\
  if (++$_count > 2) {\
     fhem_set("GoogleAssistant_dummy off");;\
     del_Exec("timer");;\
     if (!defined $_on) {\
       set_Exec("timer2",20,'fhem_set("GoogleAssistant_dummy on")');;\
       $_on=1;;\
       $_count2=0;;\
     }\
   }\
}\
}\
{if ([GoogleAssistant_dummy:"^on$"] and defined $_on)\
    {if (++$_count2 == 2) {delete $_on}}\
}

Es war eine Klammer } falsch - es sollten zwei unabhängige Blöcke sein. Was aber gravierender war, war die Abfrage auf Status on. Mit [GoogleAssistant_dummy:"on"] wurde auch auf running on getriggert.

Man braucht ja nur einmal set GoogleAssistant_dummy on zum Wiederaktivieren ausführen, da das erste ja schon bereits vom Modul gesetzt wurde.

Willst du auf zwei Mal manuell schalten wieder aktivieren, dann musst du ++$_count2 == 3 schreiben.

Super, scheint erst mal zu funktionieren wie gewünscht.
Das nur 1 Block vorhanden war hatte ich auch bemerkt, aber keine Beachtung geschenkt.
Und mit der Abfrage des Status hatte ich heute auch rumexperimentiert.
Also war ich auf der richtigen Fährte.  ;)

Vielen Dank für deine Geduld und Hilfe.

Schönen Abend noch.
VG Dieter

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #49 am: 16 August 2021, 20:30:03 »
Super, scheint erst mal zu funktionieren wie gewünscht.
Das nur 1 Block vorhanden war hatte ich auch bemerkt, aber keine Beachtung geschenkt.
Und mit der Abfrage des Status hatte ich heute auch rumexperimentiert.
Also war ich auf der richtigen Fährte.  ;)

Vielen Dank für deine Geduld und Hilfe.

Schönen Abend noch.
VG Dieter

Wenn du diesen Lösungsansatz für ein durchaus komplexeres Problem verinnerlicht hast, dann bist du für die Zukunft gut gerüstet.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #50 am: 18 August 2021, 10:40:43 »
Wenn du diesen Lösungsansatz für ein durchaus komplexeres Problem verinnerlicht hast, dann bist du für die Zukunft gut gerüstet.

Tja, so gut gerüstet bin ich dann wohl doch nicht.  :-[

Muss leider noch mal deine Hilfe in Anspruch nehmen.

Ich möchte nun noch eine Meldung wenn das DOIF die Anlage das 2. mal abschaltet.
Habe schon zig Versuche hinter mir aber es will nicht funktionieren.

Hier mein letzter Ansatz, in dem ich die Meldung einfach verzögert ausgeben wollte und den Timer beim Einschalten wieder lösche.

Wärst du so nett und zeigst mir erneut die Lösung?

Vielen Dank im Voraus.

{if ([GoogleAssistant_dummy:running] eq "on" and
  !get_Exec("timer")) {
  set_Exec("timer",30,"");
  del_Exec("timer2");
  $_count=1;
} else {
  if (++$_count > 4) {
     fhem_set("GoogleAssistant_dummy off");
     del_Exec("timer");
       if (!defined $_on) {
       set_Exec("timer2",10,'fhem_set("GoogleAssistant_dummy on")');
       del_Exec("timer3");
       $_on=1;
       $_count2=0;
     }
   }
}
}
{if ([GoogleAssistant_dummy:"^on$"] and defined $_on)
    {if (++$_count2 == 2) {delete $_on}}
}
{if ([GoogleAssistant_dummy:"^off$"] and defined $_on)
    {set_Exec("timer3",20,'fhem_set("Telegram message \@Dieter_K. Hauswasserwerk Notabschaltung")')}
}

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #51 am: 18 August 2021, 18:25:01 »
Ausgehend von meinem ursprünglichen Code:

defmod di_2 DOIF {if ([GoogleAssistant_dummy:running] eq "on" and \
  !get_Exec("timer")) {\
  set_Exec("timer",60,"");;\
  del_Exec("timer2");;\
  $_count=1;;\
} else {\
  if (++$_count > 2) {\
     fhem_set("GoogleAssistant_dummy off");;\
     if (++$_count_off > 1) {
        fhem_set("Telegram message \@Dieter_K. Hauswasserwerk Notabschaltung");
        $_count_off=0;
     }
     del_Exec("timer");;\
     if (!defined $_on) {\
       set_Exec("timer2",20,'fhem_set("GoogleAssistant_dummy on")');;\
       $_on=1;;\
       $_count2=0;;\
     }\
   }\
}\
}\
{if ([GoogleAssistant_dummy:"^on$"] and defined $_on)\
    {if (++$_count2 == 2) {delete $_on}}\
}
init {$_count_off=0}

Mit einem neuen Counter $_count_off, der nach der Definition zunächst mit Null initialisiert wird init {$_count_off=0}, wird bei jedem off-Befehl dieser erhöht und abgefragt if (++$_count_off > 1 ) {... Ab der zweiten Abschaltung gibt es eine Meldung.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #52 am: 18 August 2021, 19:17:47 »
Ausgehend von meinem ursprünglichen Code:

defmod di_2 DOIF {if ([GoogleAssistant_dummy:running] eq "on" and \
  !get_Exec("timer")) {\
  set_Exec("timer",60,"");;\
  del_Exec("timer2");;\
  $_count=1;;\
} else {\
  if (++$_count > 2) {\
     fhem_set("GoogleAssistant_dummy off");;\
     if (++$_count_off > 1) {
        fhem_set("Telegram message \@Dieter_K. Hauswasserwerk Notabschaltung");
        $_count_off=0;
     }
     del_Exec("timer");;\
     if (!defined $_on) {\
       set_Exec("timer2",20,'fhem_set("GoogleAssistant_dummy on")');;\
       $_on=1;;\
       $_count2=0;;\
     }\
   }\
}\
}\
{if ([GoogleAssistant_dummy:"^on$"] and defined $_on)\
    {if (++$_count2 == 2) {delete $_on}}\
}
init {$_count_off=0}

Mit einem neuen Counter $_count_off, der nach der Definition zunächst mit Null initialisiert wird init {$_count_off=0}, wird bei jedem off-Befehl dieser erhöht und abgefragt if (++$_count_off > 1 ) {... Ab der zweiten Abschaltung gibt es eine Meldung.

Erneut vielen Dank.

Leider fehlt irgendwo eine Klammer.
Leider finde ich nicht wo.

di_2 DOIF: Perlblck: no right bracket: {if ([GoogleAssistant_dummy:running] eq "on" and
  !get_Exec("timer")) {
  set_Exec("timer",60,"");
  del_Exec("timer2");
  $hash->{var}{count}=1;
} else {
  if (++$hash->{var}{count} > 2) {
     fhem_set("GoogleAssistant_dummy off");
     if (++$hash->{var}{count_off} > 1) {

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #53 am: 18 August 2021, 19:28:07 »
ok, sieht nun so aus

{if ([GoogleAssistant_dummy:running] eq "on" and
  !get_Exec("timer")) {
  set_Exec("timer",60,"");
  del_Exec("timer2");
  $_count=1;
} else {
  if (++$_count > 2) {
     fhem_set("GoogleAssistant_dummy off");
     if (++$_count_off > 1) {
        fhem_set("Telegram message \@Dieter_K. Hauswasserwerk Notabschaltung");
        $_count_off=0;
     }
     del_Exec("timer");
     if (!defined $_on) {
       set_Exec("timer2",20,'fhem_set("GoogleAssistant_dummy on")');
       $_on=1;
       $_count2=0;
     }
   }
}
}
{if ([GoogleAssistant_dummy:"^on$"] and defined $_on)
    {if (++$_count2 == 2) {delete $_on}}
}
init {$_count_off=0}

Meldung kommt aber beim Ersten Abschalten.

Edit: Es wird wohl auch wieder das off von running mitgezählt.

Edit2: Es funktioniert nach dem modify des DOIF genau 1 mal.
          Bei einem weiteren Durchlauf wird nach dem 1. automatischen Abschalten auch eine Meldung versendet, wenn running auf off geht.
« Letzte Änderung: 18 August 2021, 19:57:21 von dk3572 »

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #54 am: 18 August 2021, 21:14:59 »
ok, sieht nun so aus

{if ([GoogleAssistant_dummy:running] eq "on" and
  !get_Exec("timer")) {
  set_Exec("timer",60,"");
  del_Exec("timer2");
  $_count=1;
} else {
  if (++$_count > 2) {
     fhem_set("GoogleAssistant_dummy off");
     if (++$_count_off > 1) {
        fhem_set("Telegram message \@Dieter_K. Hauswasserwerk Notabschaltung");
        $_count_off=0;
     }
     del_Exec("timer");
     if (!defined $_on) {
       set_Exec("timer2",20,'fhem_set("GoogleAssistant_dummy on")');
       $_on=1;
       $_count2=0;
     }
   }
}
}
{if ([GoogleAssistant_dummy:"^on$"] and defined $_on)
    {if (++$_count2 == 2) {delete $_on}}
}
init {$_count_off=0}

Meldung kommt aber beim Ersten Abschalten.

Edit: Es wird wohl auch wieder das off von running mitgezählt.

Edit2: Es funktioniert nach dem modify des DOIF genau 1 mal.
          Bei einem weiteren Durchlauf wird nach dem 1. automatischen Abschalten auch eine Meldung versendet, wenn running auf off geht.

Es wird genau dann gezählt, wenn fhem_set("GoogleAssistant_dummy off"); ausgeführt wird. Was das für running oder state bei deinem Device bedeutet, weiß ich nicht - es werden aber für das Hochzählen keine Trigger ausgewertet, nach der Meldung wird der Counter auf Null gesetzt, siehe code.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline dk3572

  • Hero Member
  • *****
  • Beiträge: 1033
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #55 am: 19 August 2021, 15:15:52 »
Es wird genau dann gezählt, wenn fhem_set("GoogleAssistant_dummy off"); ausgeführt wird. Was das für running oder state bei deinem Device bedeutet, weiß ich nicht - es werden aber für das Hochzählen keine Trigger ausgewertet, nach der Meldung wird der Counter auf Null gesetzt, siehe code.

Wie die Anforderungen sind habe ich ja jetzt schon beschrieben.
Es ist eine Schaltsteckdose mit Leistungsmessung.
Der habe ich ein Reading "running" verpasst das on ist, wenn Leistung bezogen wird und off, wenn keine Leistung mehr bezogen wird.
Diese Steckdose soll ausgeschaltet werden, wenn das running innerhalb der 60 sec 2 mal on ist.
Nach 20 sec soll sie automatisch eingeschaltet werden und wieder die 60 sec überwachen.
Wenn jetzt wieder ausgeschaltet wird, soll sie aus bleiben und die Meldung abgesetzt werden.

Zum Testen verwende ich den besagten Dummy.

Tatsächlich reagiert das DOIF aber wie folgt:
2 x Dummy running set on - Dummy state wird ausgeschaltet.
Schalte ich jetzt running auf off, was ja bei der Steckdose der Fall wäre, kommt bereits die Meldung.

Ich hoffe es ist verständlich genug erklärt und du kannst helfen.

Danke dir schon mal.

Internals:
   FUUID      5ff9f0b6-f33f-cd72-1fbc-2697b25823d55d15
   FVERSION   98_dummy.pm:0.206650/2019-12-06
   NAME       GoogleAssistant_dummy
   NR         455
   STATE      off
   TYPE       dummy
   READINGS:
     2021-08-19 14:58:58   running         off
     2021-08-19 14:58:58   state           off
Attributes:
   DbLogExclude .*
   alias      Testlight
   appOptions {"template": "switch"}
   genericDeviceType audio_video_receiver
   readingList state running
   room       Google
   setList    state:on,off running:on,off
   webCmd     state:running
   webCmdLabel state:running

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8698
Antw:[Gelöst] Reading innerhalb einer Zeitspanne
« Antwort #56 am: 19 August 2021, 16:39:12 »
Ich habe mich an dieser zusätzlichen Anforderung orientiert:
Zitat
Ich möchte nun noch eine Meldung wenn das DOIF die Anlage das 2. mal abschaltet.

Und genau das passiert bei mir.

Wenn DOIF das zweite Mal fhem_set("GoogleAssistant_dummy off") absetzt, wird fhem_set("Telegram message \@Dieter_K. Hauswasserwerk Notabschaltung"); ausgeführt.

Alles andere hat sich nicht verändert.

Da du nicht spezifiziert hast, was danach passieren soll, habe ich den $_counter_off auf Null gesetzt, sodass wieder nach dem zweiten Abschalten die Meldung kommt.

Da die bisherige Programmierung funktionierte, habe daran nichts geändert, es kommt wie beschrieben zustäzlich die Meldung, wenn DOIF das zweite Mal abschaltet und es ist egal ob irgend jemand etwas auf on oder off schaltet, weil die Meldung nicht von Events beeinflusst wird.

Mit dem Code habe ich getestet:

statt fhem_set("Telegram message \@Dieter_K. Hauswasserwerk Notabschaltung") wird hier ein Reading im DOIF-Modul gesetzt set_Reading("Abschaltung","Hauswasserwerk Notabschaltung")

defmod di_2 DOIF {if ([GoogleAssistant_dummy:running] eq "on" and \
  !get_Exec("timer")) {\
  set_Exec("timer",60,"");;\
  del_Exec("timer2");;\
  $_count=1;;\
} else {\
  if (++$_count > 2) {\
     fhem_set("GoogleAssistant_dummy off");;\
     if (++$_count_off > 1) {\
        set_Reading("Abschaltung","Hauswasserwerk Notabschaltung");;\
        $_count_off=0;;\
     }\
     del_Exec("timer");;\
     if (!defined $_on) {\
       set_Exec("timer2",20,'fhem_set("GoogleAssistant_dummy on")');;\
       $_on=1;;\
       $_count2=0;;\
     }\
   }\
}\
}\
{if ([GoogleAssistant_dummy:"^on$"] and defined $_on)\
    {if (++$_count2 == 2) {delete $_on}}\
}\
\
init {$_count_off=0}
attr di_2 room test

setstate di_2 initialized
setstate di_2 2021-08-19 16:26:16 Abschaltung Hauswasserwerk Notabschaltung
setstate di_2 2021-08-19 16:26:16 Device GoogleAssistant_dummy
setstate di_2 2021-08-19 16:26:16 block_01 executed
setstate di_2 2021-08-19 16:26:16 block_02 executed
setstate di_2 2021-08-19 16:11:42 block_init executed
setstate di_2 2021-08-19 16:26:16 e_GoogleAssistant_dummy_events running: on
setstate di_2 2021-08-19 16:26:16 e_GoogleAssistant_dummy_running on
setstate di_2 2021-08-19 16:11:42 mode enabled
setstate di_2 2021-08-19 16:11:42 state initialized

Man kann sehen, dass das Reading beim zweiten off-Schalten gesetzt wird: setstate di_2 2021-08-19 16:26:16 Abschaltung Hauswasserwerk Notabschaltung


Edit: Zum Testen habe ich immer nur mehrfach setreading GoogleAssistant_dummy running on ausgeführt, damit fhem_set("GoogleAssistant_dummy off") ausgeführt wurde.


 
« Letzte Änderung: 19 August 2021, 16:50:28 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF