[Gelöst] Reading innerhalb einer Zeitspanne

Begonnen von dk3572, 17 Mai 2021, 17:23:45

Vorheriges Thema - Nächstes Thema

dk3572

Zitat von: Damian 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.

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.

Damian

Zitat von: dk3572 am 28 Juli 2021, 10:24:27
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

dk3572

Zitat von: Damian am 28 Juli 2021, 22:42:32
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


Damian

Zitat von: dk3572 am 29 Juli 2021, 07:10:31
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

dk3572

Zitat von: Damian am 29 Juli 2021, 08:41:45
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.

Damian

Zitat von: dk3572 am 29 Juli 2021, 09:09:58
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

dk3572

Zitat von: Damian am 29 Juli 2021, 10:47:35
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)?

Damian

Zitat von: dk3572 am 29 Juli 2021, 12:00:06
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

dk3572

Zitat von: Damian am 29 Juli 2021, 14:34:11
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

Damian

Zitat von: dk3572 am 29 Juli 2021, 15:32:13
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

dk3572

Zitat von: Damian am 29 Juli 2021, 16:45:06
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

Damian

Zitat von: dk3572 am 30 Juli 2021, 17:16:31
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

dk3572

Zitat von: Damian am 30 Juli 2021, 19:35:13

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.

Damian

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

dk3572

Zitat von: Damian am 30 Juli 2021, 20:41:20
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.