Countdown-Zähler z.B. für on-for-timer

Begonnen von wkarl, 13 Juli 2015, 13:15:47

Vorheriges Thema - Nächstes Thema

wkarl

Hallo Thorsten,

Zitat von: Grafkox am 13 August 2017, 16:34:49
Hallo Walter,

zunächst einmal Danke für Deinen Countdownzähler und Deine Anzeige im Tablet UI zur Bewässerungssteuerung.

Dieser funktionieren beide auch sehr gut.

Allerdings habe ich einen kleinen "Schönheitsfehler" in der Anzeige wenn kein Countdown läuft und in der ersten Minute des Countdowns, hier werden die Minuten mit 00:00 bzw. z.B. 30:00 im Reading und somit im Tablet UI angezeigt.

Gibt es ggf. eine Lösung, dass auch diese Werte ohne :00 angezeigt werden?

Danke und Gruß

Thorsten

Hm, bei mir ist im usrCountDown immer die Zeit ein- oder zweistellig. Setz mal in Tablet-UI für das device 'data-part = "^(\d\d?)"' - bin zwar kein RegEx Guru, aber der online RegEx Tester sagt dass das richtig ist.

Ciao Walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

Grafkox

#46
Hallo Walter,

danke für Deine Antwort.

leider führt Dein Vorschlag nicht zum gewünschten Ergebnis, da es in der ersten Minute nun gar keinen Wert im TabletUI ausgibt (s. Bild 1)  :(.

Das Problem, wenn kein Timer läuft habe ich heute mit einer Anpassung in der 99_MyUtils.pm gelöst, indem ich die stellen an denen usrCountDown 00:00 stand, auf usrCountDown 00 geändert habe.

sub CountDown($$)
{
my ($dev,$devState) = @_;
my ($dummy,$ctTime) = split(/ /,$devState);
$ctTime = sprintf("%.0f",$ctTime/60);

if ($ctTime >= 1) {
fhem ("define -temporary ".$dev."_CountDown at +*00:01:00 { \\
my \$count = ReadingsVal(\"$dev\",\"usrCountDown\",\"0\");; \\
my \$status = ReadingsVal(\"$dev\",\"state\",\"off\");; \\
if ( \$status eq \"off\" ) \{ \\
fhem (\"setreading ".$dev." usrCountDown 00\");; \\
fhem (\"delete ".$dev."_CountDown\") \\
\} \\
elsif ( \$count > 0 ) \{ \\
\$count -= 1;; \\
fhem (\"setreading ".$dev." usrCountDown \$count\") \\
\} \\
else \{ \\
fhem (\"setreading ".$dev." usrCountDown 00\");; \\
fhem (\"delete ".$dev."_CountDown\") \} \\
}");
return sprintf("%02d:%02d",$ctTime,"00");
}
else {
return "Error: Wert muss größer als 60s sein!";
}
}


Wie wird denn Deine erste Minute im Reading in FHEM ausgegeben? Ich denke hier ist eine Anpassung erforderlich, finde aber im Forum keinen Ansatz um das entsprechend anzupassen.

Vielen Dank für Deine Unterstützung.

Viele Grüße

Thorsten
Raspberry Pi 3 mit Fhem 5.9, Tablet UI 2.6, SIGNALduino, Somfy RTS, Fritzbox 7490, IT-Steckdosen, Hikvision Kameras, Xiaomi Sensoren, Tecalor THZ, E3/DC

Grafkox

#47
kleine Ergänzung: im Log kommt auch immer bei Ausführen eines Countdown das nachfolgende Warning:

PERL WARNING: Argument "02:00" isn't numeric in numeric gt (>) at
Raspberry Pi 3 mit Fhem 5.9, Tablet UI 2.6, SIGNALduino, Somfy RTS, Fritzbox 7490, IT-Steckdosen, Hikvision Kameras, Xiaomi Sensoren, Tecalor THZ, E3/DC

neo_28

Hallo,

und vielen Dank für den Countdown.

Leider funktioniert der Countdown bei mir nur in den HM-Devices und nicht bei FBDECT.

Ist das so korrekt oder habe ich etwas falsch verstanden oder falsch konfiguriert?

Viele Grüße

neo_28

Rudibarani

Lieber Walter,
ich bin neu mit FHEM unterwegs und würde gerne Deinen Countdown-Timer bei mir einbauen.
Dabei habe ich vermutlich einen Typo in Deiner Anleitung entdeckt:

Zitat von: wkarl am 13 Juli 2015, 13:15:47
  • Für das device für das der Countdown gelten soll wird ein userReading angelegt
    attr <device> userReading usrCountDown:set_on-for-timer.* { CountDown($name, ReadingsVal($name,"state","off"));; }

Ich denke, es müsste "userReadings" heißen, oder?

Wenn ich das "s" hinzufüge, erscheint bei meinem FBDECT-Schalter auch das Attribut
userReadings
usrCountDown set_on-for-timer.* { CountDown($name, ReadingsVal($name,"state","off")); }
deleteattr
.
Ein Reading wird aber nicht angezeigt - auch nicht, wenn ich (nach einem Neustart von FHEM) die Steckdose mit
set FBDECT_FritzBox_SmartHome_08761_0507248 on-for-timer 180
einschalte. Hast Du einen Rat für mich, was ich falsch mache?

Vielen Dank!
Phillip

tarum

Hallo,

das Reading wird nur bei Homematic erzeugt, also es geht mit FBDECT nicht.
Linux Server 20.04 CUL 868+433, CCU3, Homematic, Intertechno, FritzDect 200, JeeLink+LaCrosse, Duofern Stick+Rollotron Gurtwickler,smartVISU-3.0.0

Rudibarani

Danke für den Hinweis. Das war mir garnicht klar, denn ich hatte durch diesen Post den Eindruck, dass es geht:

Zitat von: christian-ruh am 12 März 2016, 18:23:24
Hallo,
das mit der Restzeitanzeige ist genial.
Hab alles wie beschrieben eingerichtet, stell mich nun aber ziemlich dumm an.
Wie kann ich die Restzeit im Tablet UI anzeigen lassen?
Es geht um eine Steckdose von AVM / Fritz (FBDECT_18).
So hab ich das eingebunden:
attr FBDECT_18 userReadings usrCountDown:set_on-for-timer.* { CountDown($name, ReadingsVal($name,"state","off"));; }
Danke für Infos.
Gruß
Christian

Wie kann man denn den Countdown-Timer so abwandeln, dass er auch für FBDECT-Steckdosenschalter funktioniert?

TiPpFeHlEr

Hi,

ich bin auf der Suche nach einem Countdown Timer für GPIO.

geht der code auch dafür?
GPIO hat ja ein eigenen on-for-timer, 99_myUtils ist angepasst
############################# timer ################################
sub CountDown($$)
{
my ($dev,$devState) = @_;
my ($dummy,$ctTime) = split(/ /,$devState);
$ctTime = sprintf("%.0f",$ctTime/60);

if ($ctTime >= 1) {
fhem ("define -temporary ".$dev."_CountDown at +*00:01:00 { \\
my \$count = ReadingsVal(\"$dev\",\"usrCountDown\",\"0\");; \\
my \$status = ReadingsVal(\"$dev\",\"state\",\"off\");; \\
if ( \$status eq \"off\" ) \{ \\
fhem (\"setreading ".$dev." usrCountDown 00:00\");; \\
fhem (\"delete ".$dev."_CountDown\") \\
\} \\
elsif ( \$count > 0 ) \{ \\
\$count -= 1;; \\
fhem (\"setreading ".$dev." usrCountDown \$count\") \\
\} \\
else \{ \\
fhem (\"setreading ".$dev." usrCountDown 00:00\");; \\
fhem (\"delete ".$dev."_CountDown\") \} \\
}");
return sprintf("%02d:%02d",$ctTime,"00");
}
else {
return "Error: value has to be greater than 60s!";
}
}


userreadings ist hinzugefügt
attr SSR7 userReadings usrCountDown:set_on-for-timer.* { CountDown($name, ReadingsVal($name,"state","off"));;;; }


es gibt aber kein reading, und das absetzen des Befehls
set SSR7 set_on-for-timer 60
gibt folgenden Fehler
Unknown argument set_on-for-timer, choose one of off on toggle intervals on-till blink on-for-timer off-till off-for-timer off-till-overnight on-till-overnight

mache ich etwas falsch oder geht GPIO nicht?

MfG Maik