[Gelöst] Reading innerhalb einer Zeitspanne

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

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: dk3572 am 30 Juli 2021, 20:46:51
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

dk3572

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

Damian

Zitat von: dk3572 am 30 Juli 2021, 21:10:14
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

dk3572

Zitat von: Damian am 30 Juli 2021, 21:24:41
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  :(

Damian

{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

dk3572

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

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.

Damian

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

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

dk3572

#37
Zitat von: Damian am 31 Juli 2021, 21:53:17
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.

dk3572

Hallo Damian,

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

VG Dieter

Damian

Zitat von: dk3572 am 03 August 2021, 07:44:36
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

dk3572

Zitat von: Damian am 03 August 2021, 09:05:46
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

Damian

Zitat von: dk3572 am 03 August 2021, 16:57:25


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

dk3572

Zitat von: Damian am 05 August 2021, 12:26:46
Bin gerade im Urlaub.

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

Damian

#43
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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dk3572

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

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