[Gelöst] Reading innerhalb einer Zeitspanne

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

Vorheriges Thema - Nächstes Thema

dk3572

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

Damian

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

dk3572

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

Damian

Zitat von: dk3572 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

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

dk3572

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

Damian

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

dk3572

#6
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?

Damian

Zitat von: dk3572 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?

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

dk3572

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?

Damian

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

dk3572

Super, funktioniert, vielen Dank.

dk3572

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

Damian

Zitat von: dk3572 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

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

dk3572

#13
Zitat von: Damian am 27 Juli 2021, 21:22:57
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++;;
  }
}

Damian

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