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

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

Vorheriges Thema - Nächstes Thema

justme1968

ist dein fhem aktuell ?

was sagt das version kommando?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

jorge

Zitat von: justme1968 am 09 Juni 2016, 10:04:34
ist dein fhem aktuell ?

was sagt das version kommando?

gruss
  andre

Hab sicherheitshalber noch ein update gemacht: Gleiches Verhalten.
Latest Revision: 11634
LG Jorge
FHEM.RaspberryPi 2 (HM, 1Wire, Callmonitor.FB 7490, GPIO, I2C, MQTT-Server, MCP23018)
FHEM.RaspberryPi  (FHEM2FHEM, CUL, FS20)
FHEM.RPiZeroW (I2C, 1Wire, python.api, XiaomiBTLESens.MQTT)
FHEM.Win7 (FHEM2FHEM,DBLOG.MySql)
ESPEasy (WEMOSD1, I2C, Analog, 1Wire), Sonoff_T1_3ch, Mobotix QM25, robonect

justme1968

sorry. mein fehler.

die von rudi eingecheckte version verwendet nicht helper wie ursprünglich vorgeschlagen sondern TIMED_OnOff direkt.

der code muss also so aussehen:if( my $TIMED_OnOff = InternalVal($dev, 'TIMED_OnOff', undef) ) {
  $ctTime = $TIMED_OnOff->{DURATION}
}



gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

jorge

Zitat von: justme1968 am 09 Juni 2016, 12:01:57

der code muss also so aussehen:if( my $TIMED_OnOff = InternalVal($dev, 'TIMED_OnOff', undef) ) {
  $ctTime = $TIMED_OnOff->{DURATION}
}



Danke, andre, so geht´s.

Habe mir dann Gedanken gemacht, wie man das Runterzählen eleganter mit DOIF lösen kann:

sub CountDownDOIF($$)
{
   my ($dev,$devState) = @_;
   my ($dummy,$ctTime) = split(/ /,$devState);
        if( my $TIMED_OnOff = InternalVal($dev, 'TIMED_OnOff', undef) )
        {
        $ctTime = $TIMED_OnOff->{DURATION}
        }
        my count = $ctTime;
        fhem
        (
        'define -temporary '.$dev.'_CountDown DOIF
        ({$ctTime >0})
        ({$count -= 1;fhem(setreading '.$dev.' usrCountDown $count');if($count == 0){fhem("delete ".$dev."_CountDown")}})'
        );
        fhem('attr '.$dev.'_CountDown repeatcmd 1');
        fhem('attr '.$dev.'_CountDown repeatsame'.$ctTime);
}


... krieg das aber mit meinen rudimentären syntaktischen Fähigkeiten nicht hin...

LG

Jorge
FHEM.RaspberryPi 2 (HM, 1Wire, Callmonitor.FB 7490, GPIO, I2C, MQTT-Server, MCP23018)
FHEM.RaspberryPi  (FHEM2FHEM, CUL, FS20)
FHEM.RPiZeroW (I2C, 1Wire, python.api, XiaomiBTLESens.MQTT)
FHEM.Win7 (FHEM2FHEM,DBLOG.MySql)
ESPEasy (WEMOSD1, I2C, Analog, 1Wire), Sonoff_T1_3ch, Mobotix QM25, robonect

justme1968

zu DOIF kann ich dir nichts sagen.

was daran eleganter sein soll weiss ich auch nicht.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

mani

Hallo,


würde gerne diesen Code
if( my $TIMED_OnOff = InternalVal($dev, 'TIMED_OnOff', undef) ) {
  $ctTime = $TIMED_OnOff->{DURATION}
}

anwenden nur wie..... :o

Habe einen Dummy Timer eingerichtet


setList on off
deleteattr useSetExtensions 1
deleteattr userReadings ctTime --> würde dieses Reading befüllt werden?


Bitte um Hilfe Mfg Mani
RasPi B+,Onkyo_AVR,Luxtronik2,Logo7,Mpd,Arduino Uno mit Ethernet,KNX,Jablotron

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

mani

Möchte die restliche Zeit aus meinem Dummy im Progress Widget angezeigt bekommen, dazu brauch ich ein Reading welche diese anzeigt.

Das Dummy wird per notify für 30 Sekunden (on-for-timer 30) gestartet(Ausgangszeit nach Scharfschalten der Alarmanlage).
wie muss ich nun dein Codeschnipsel einbauen?mmh


Mfg Mani
RasPi B+,Onkyo_AVR,Luxtronik2,Logo7,Mpd,Arduino Uno mit Ethernet,KNX,Jablotron

mani

Hallo,

hab den Code nun in der 99_myUtils.pm....aber ich schaff es nicht in das userReadings zu schreiben. Es kommt immer der

Fehler:  usrCountDown Unknown command }, try help.

ich verwende diesen Code der Zeitwert aus dem Dummy wird übergeben aber das ist ein fixer oder? bitte um Hilfe.

Mfg Mani



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

   if( my $TIMED_OnOff = InternalVal($dev, 'TIMED_OnOff', undef) ) {
  $ctTime = $TIMED_OnOff->{DURATION}
  }

     if ($ctTime < 1){
        fhem ("delete ".$dev."_CountDown");
        }

     elsif ($ctTime >= 1)
                     
                        {   
        fhem ("define -temporary ".$dev."_CountDown at +*00:00:01 {
              fhem ('setreading ".$dev." usrCountDown $ctTime'); } ");
         }
      }

-------------------------------------------------------
DEF   
+*00:00:01 {
              fhem ('setreading Timer usrCountDown 44')

RasPi B+,Onkyo_AVR,Luxtronik2,Logo7,Mpd,Arduino Uno mit Ethernet,KNX,Jablotron

rhoffm34

Ok. Nach langem hin und her lesen.....ich kapier es nicht...

Zitat aus den Anleitung:

99_MyUtils.pm neu laden und der Countdown-Zähler sollte zur Verfügung stehen

Wo? Wie rufe ich den auf? wo ist das userreading?

- In 99_MyUtils.pm hab ich den code gespeichert
- shutdown restart

und weiter?

wkarl

Hallo,

ZitatFü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"));; }

auch das umgesetzt?

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

wkarl

Hallo Mani,

wenn Du das so in 99_myUtils.pm stehen hast, dann fehlen die '\'. Sieh Dir den code aus dem ersten post an.

Zitat von: mani am 25 Juni 2017, 21:22:46
Hallo,

hab den Code nun in der 99_myUtils.pm....aber ich schaff es nicht in das userReadings zu schreiben. Es kommt immer der

Fehler:  usrCountDown Unknown command }, try help.

ich verwende diesen Code der Zeitwert aus dem Dummy wird übergeben aber das ist ein fixer oder? bitte um Hilfe.

Mfg Mani



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

   if( my $TIMED_OnOff = InternalVal($dev, 'TIMED_OnOff', undef) ) {
  $ctTime = $TIMED_OnOff->{DURATION}
  }

     if ($ctTime < 1){
        fhem ("delete ".$dev."_CountDown");
        }

     elsif ($ctTime >= 1)
                     
                        {   
        fhem ("define -temporary ".$dev."_CountDown at +*00:00:01 {
              fhem ('setreading ".$dev." usrCountDown $ctTime'); } ");
         }
      }

-------------------------------------------------------
DEF   
+*00:00:01 {
              fhem ('setreading Timer usrCountDown 44')
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

Wasserwerk33

Hallo

Kann mir vielleicht einer helfen??

Und zwar habe ich den Code eingefügt.
Internals:
   DEF        0F0F00FFFF 0F F0
   IODev      nanoCUL
   NAME       Brennstuhl_A
   NR         71
   STATE      off
   STILLDONETIME 0
   TYPE       IT
   XMIT       0f0f00ffff
   XMITdimdown 00
   XMITdimup  00
   XMIToff    f0
   XMITon     0f
   CODE:
     1          0f0f00ffff
   READINGS:
     2017-07-24 17:02:39   protocol        V1
     2017-08-06 13:31:23   state           off
Attributes:
   IODev      nanoCUL
   room       steckdose
   userReadings usrCountDown:set_on-for-timer.* { CountDown($name, ReadingsVal($name,"state","off")); }


Wie bekomme ich es nun hin das mir der Countdown in Tablet ui angezeigt wird.
Danke
schönes Wochenende noch

Grafkox

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
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

Zitat von: Wasserwerk33 am 06 August 2017, 13:36:04
Hallo

Kann mir vielleicht einer helfen??

Und zwar habe ich den Code eingefügt.

Wie bekomme ich es nun hin das mir der Countdown in Tablet ui angezeigt wird.
Danke
schönes Wochenende noch

ich hab es so eingebunden:
<div class="cell inline big blue" data-type="label"
data-device="Bewaesserung_Vorgarten"
data-get="usrCountDown"
data-unit="min">
</div>
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