ESPEasy Rules, Restlaufzeit Timer in Reading

Begonnen von hanswerner1, 10 Juli 2020, 09:47:10

Vorheriges Thema - Nächstes Thema

hanswerner1

Hallo,

ich lasse die Rasenbewässerung über ESPEASY steuern. Ich setzte einen Timer über 15, 30,45 oder 60 Min über Fhem. Nach ablauf des Timer wird die Bewässerung abgeschaltet. Ich möchte nun die Restlaufzeit des Timers an Fhem senden. Das bekomme ich leider nicht hin und brauche etwas Hilfe.

Wie kann ich die Restlaufzeit von Timer2 in ein Values bekommen ?

Rules:

// Relais bei Tastendruck
on Ventil#Taste do
if [Ventil#Relay]=1
   gpio,12,0
else
   gpio,12,1
endif
endon

// Sicherheitstimer setzten
on Ventil#Relay do
if [Ventil#Relay]=1
   timerSet,1,3600
else
   timerSet,1,0
endif
endon


// LED bei Relais on, Timer4 0 bei Relais off
on Ventil#Relay do
if [Ventil#Relay]=1
   gpio,13,0
else
   gpio,13,1
   TaskValueSet 4,1,0
endif
endon

// Relais schalten toggle
on toggle do
if [Ventil#Relay] =1
   gpio,12,0
else
   gpio,12,1
endif
endon

// Relais schalten 15min
on timer15 do
if [Ventil#Relay] =1
   gpio,12,0
   timerSet,2,0
   TaskValueSet 4,1,0
else
   gpio,12,1
   timerSet,2,900
   TaskValueSet 4,1,15
endif
endon

// Relais schalten 30min
on timer30 do
if [Ventil#Relay] =1
   gpio,12,0
   timerSet,2,0
else
   gpio,12,1
   timerSet,2,1800
   TaskValueSet 4,1,30
endif
endon

// Relais schalten 45min
on timer45 do
if [Ventil#Relay] =1
   gpio,12,0
   timerSet,2,0
else
   gpio,12,1
   timerSet,2,2700
   TaskValueSet 4,1,45
endif
endon

// Relais schalten 60min
on timer60 do
if [Ventil#Relay] =1
   gpio,12,0
   timerSet,2,0
else
   gpio,12,1
   timerSet,2,3600
   TaskValueSet 4,1,60
endif
endon


// Timer Ende Ralais off
on Rules#Timer=1 do 
   gpio,12,0
endon

on Rules#Timer=2 do 
   gpio,12,0
endon




sidi

Hallo hanswerner1,

ich habe einen zusätzlichen 60 Sekunden Timer, der die Zeit runter zählt und in einen Dummy und in eine interne Variable reinschreibt. Solange der "äußere" Timer noch läuft, wird der 60 Sekunden Timer neu gestellt. Der Dummy wird an FHEM mit MQTT übertragen.
Hier mein 60 Sekunden Timer. Vielleicht hilft dir das.

On Rules#Timer=8 Do
  Let,1,[VAR#1]-60
  if [VAR#1]<=0
    gpio, 16,0
    gpio, 12,0
    gpio, 2,1
  else
    TaskValueSet,9,1,[VAR#1]
    TimerSet,8,60
  endif
EndOn


Gruß,
sidi

hanswerner1

Hallo sidi,

interessant, Ich würde den Timer8 für 60 sec starten wenn GPIO 12 auf 1 geht. Nach Ablauf der 60sec eine Variable um 1 erhöhen und den Timer8 wieder für 60 sec starten, solange gpio 12 auf 1 ist. Ist gpio 12 auf 0 setzte ich den timer8 nicht neu. Somit würde in der Variable die Minuten gezählt solange gpio 12 auf 1 ist.

Meinst Du das so ?

Gruß HW1

sidi

Hallo hanswerner1,

nur dass ich die Sekunden runterzähle, da ich die verbeibende Zeit in TableUI anzeige.
Hier mal die Rule für meinen Bewässerungskreis 1. Dort wird ein Magnetventil und die Brunnenpumpe gesteuert.
Es wird wird der Timer 2 für den Bewässerungskreis und der Timer 8 für den Countdown gestartet.
Im Timer 8 wird die Zeit vom Bewässerungskreis bei jedem Durchlauf um 60 Sekunden reduziert und der Timer 8 wieder neu gestartet, bis die Zeit vom Bewässerungskreis abgelaufen ist


on Bewaesserung#Hunter1_mqtt=1 do
    gpio, 16,1
    gpio, 2,0
    timerset,2,2700
    timerset, 8,60
    Let,1,2700
    TaskValueSet,9,1,[VAR#1]
endon

on Bewaesserung#Hunter1_mqtt=0 do
  if  [Bewaesserung#Pumpe_mqtt]=0
    gpio, 16,0
  endif
    gpio, 2,1
    timerset, 8,0
    Let,1,0
    TaskValueSet,9,1,[VAR#1]
endon


On Rules#Timer=8 Do
  Let,1,[VAR#1]-60
  if [VAR#1]<=0
    gpio, 16,0
    gpio, 12,0
    gpio, 2,1
  else
    TaskValueSet,9,1,[VAR#1]
    TimerSet,8,60
  endif
EndOn


Gruß,
sidi

hanswerner1

#4
Hallo Sidi,

habe es jetzt folgendermaßen hinbekommen:

Beispiel für 15 min, habe das auch noch für 30,45 und 60 min

// Relais schalten 15min
on timer15 do
if [Ventil#Relay] =1
   gpio,12,0
   timerSet,2,0
   timerSet,8,0
   TaskValueSet,4,1,0
else
   gpio,12,1
   timerSet,2,900
   TaskValueSet,4,1,15
   Let,1,15
   TaskValueSet,4,2,[VAR#1]
   timerSet,8,60
endif
endon


hier wird dann runtergezählt.


// Timer8 Var1 Restzeit runter zaehlen
on Rules#Timer=8 do
  if [Ventil#Relay] =1
    Let,1,[VAR#1]-1
    TaskValueSet,4,2,[VAR#1]   
    TimerSet,8,60
  else
    Let,1,0
    TaskValueSet,4,2,[VAR#1]
  endif
EndOn


Klappt soweit, vielen Dank für deine Hilfe.