Frage zum Countdown-Skript

Begonnen von Civicoid, 01 September 2016, 22:11:39

Vorheriges Thema - Nächstes Thema

Civicoid

So, nun endlich läuft offensichtlich mein Skript so wie gewollt.
Mein Ziel war es, einen Timer zu entwerfen, welcher wie die
Waschmaschine im Keller zur gleichen Zeit abläuft.

Ich habe zwei "volume"-Regler welche Stunden und Minuten setzen,
sowie einen "Start" und "Reset" Button.


define WaMaTimer dummy
attr WaMaTimer event-on-change-reading state
attr WaMaTimer event-on-update-reading timemm,timehh,state,zeitende,timehhmm
attr WaMaTimer group WaMa
attr WaMaTimer room 7.Keller
attr WaMaTimer setList on off running finish error reset

# Zeitumrechnung
define WaMaConv notify (WaMaTimer:timehh.*|WaMaTimer:timemm.*) {\
  my $timehh=ReadingsVal("WaMaTimer", "timehh","");;\
  my $timemm=ReadingsVal("WaMaTimer", "timemm","");;\
  my $dauer= sprintf("%02d:%02d", $timehh, $timemm);;\
  my $zeitende = (( $timehh * 60 )+ $timemm) ;;\ 
  my $WaMaState=ReadingsVal("WaMaTimer", "state","");;\
  if ($WaMaState ne "running") { \ 
    fhem ("setreading WaMaTimer timehhmm $dauer");; \
    fhem ("setreading WaMaTimer zeitende $zeitende");; \
  } \ 
}

# alles auf 0 setzen
define WaMaReset notify (WaMaTimer:reset) { \
  fhem ("set WaMaTimer off") ;;\
  fhem ("setreading WaMaTimer zeitende 0");; \
  fhem ("setreading WaMaTimer timehh 0");; \
  fhem ("setreading WaMaTimer timemm 0");; \
}

# TIMER wird bei "running" gesetzt
define WaMaTimerAT at +*00:01:00 { \
  my $timehh=ReadingsVal("WaMaTimer", "timehh","");;\
  my $timemm=ReadingsVal("WaMaTimer", "timemm","");;\
  my $WaMaState=ReadingsVal("WaMaTimer", "state","");;\
  my $WaMaDura=ReadingsVal("WaMaTimer", "zeitende","");;\
  if ($WaMaState eq "running") { \
    $WaMaDura = $WaMaDura - 1;;\
    $timehh = (int($WaMaDura / 60)) ;; \
    $timemm = ($WaMaDura - (60 *(int($WaMaDura / 60)))) ;; \
    fhem ("setreading WaMaTimer zeitende $WaMaDura");; \
    fhem ("setreading WaMaTimer timehh $timehh");; \
    fhem ("setreading WaMaTimer timemm $timemm");; \
    if ($WaMaDura <= "0") { \
      fhem ("setreading WaMaTimer zeitende 0");; \
      fhem ("setreading WaMaTimer timehh 0");; \
      fhem ("setreading WaMaTimer timemm 0");; \     
      fhem ("set WaMaTimer finish");;\
    } \
  }}


Könnte einer von den Fhem-Code-Profis mal drüberschauen, ob sich hier
große Fehltritte eingeschlichen haben. An sich läuft der Code ...

Danke schon einmal im Voraus
Fhem v5.9 @ MS-7877 Board mit J1900 als Server
mit Ubuntu 18.04.1 LTS, Nginx, Php7, TabletUI, Framework7, MQTT, JeelinkClone, Sduino, nanoCUL, maxCube, Synology-NAS
---
Sensoren/Aktoren:
EdiPlug, LaCrosse-Sensoren, MAX! Thermostate und Fensterkonakte, Alexa

hartenthaler

Ich bin sicher kein Code-Profi, habe mir Deinen Countdown aber mal angesehen. Verstehe aber noch nicht ganz was Du bezwecken willst. Gibt es irgendeine Kopplung zur Waschmaschine? Oder ist es gerade der Zweck eine nicht vernetzte Waschmaschine in ihrer Laufzeit zu simulieren? Was soll passieren wenn der Countdown abgelaufen ist? Ich habe on und off gefunden, aber weder "volume"-Regler für die Zeiteinstellung noch Start oder Reset-Buttons. Aber wenn Dein Code so läuft wie Du es Dir vorstellst, dann würde ich mir keine Gedanken über Fehltritte machen.

Meine eigene Waschmaschine hängt an einer Homematic-Steckdose und meldet wenn sie fertig ist, aber wir nutzen einen Wäschetrockner in einer Gemeinschaftswaschküche und der ist nicht vernetzt, läuft aber per Zeitschaltuhr exakt 20, 40 oder 60 Minuten. Da wäre ein Timer ganz gut, den ich starte wenn ich von der Waschküche zurück komme und der mir sagt, wann die Wäsche trocken ist und abgeholt werden muss, damit der Trockner für den nächsten Nutzer wider frei ist.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Civicoid

Entschuldigung, dass habe ich vergessen zu erwähnen.
Meine Waschmaschine steht im Kellergeschoss und bei zwei
Etagen dazwischen, habe ich mich bis jetzt noch nicht an die
Homematic-Steckdosen getraut. So würde das ganze natürlich
deutlich realistischer werden.
So habe ich jetzt mit meinem Countdown eine Lösung versucht,
welche einen Timer zeitgleich startet und man manuell die Dauer
einstellt. Beim Abschluss (finish) wird ein Logo auf meinem
TabletUi-Desktop gesetzt.
Fhem v5.9 @ MS-7877 Board mit J1900 als Server
mit Ubuntu 18.04.1 LTS, Nginx, Php7, TabletUI, Framework7, MQTT, JeelinkClone, Sduino, nanoCUL, maxCube, Synology-NAS
---
Sensoren/Aktoren:
EdiPlug, LaCrosse-Sensoren, MAX! Thermostate und Fensterkonakte, Alexa

Chaos

Hi,

sowas in der Richtung such ich noch.

Würde es dir was ausmachen noch die FTUI (HTML) Parts zu posten?

MfG
Manuel

Civicoid

#4
Aber gerne doch! Am Ende lebt der Code ja davon. Was ich jetzt mitbekommen habe, dass die
Uhr die erste Minute "verschläft" und so eine Minute später anfängt. Ich kümmere mich zeitnah darum.
Wenn es Fragen zu meinen Code-Schnippseln gibt, meldet euch einfach.

Zuerst die zwei Volume-Regler

<table width="100%">
  <tr>
    <div data-type="label" style="font-size:230%;color:rgb(170, 105, 0)">Waschmaschine</div>
    <br>
  </tr>
  <tr>
    <div data-type="volume"
        data-device="WaMaTimer"
        data-set-valve="timehh"
        data-cmd="setreading"
        data-min="0"
        data-max="23"
        data-get="timehh"
        data-set="timehh"
        class="big">
    </div>
  </tr>
  <tr>
    <div data-type="volume"
        data-device="WaMaTimer"
        data-set-valve="timemm"
        data-cmd="setreading"
        data-min="0"
        data-max="59"
        data-get="timemm"
        data-set="timemm"
        class="big">
    </div>
  </tr>
</table>


und noch die Buttons

<table width="100%">
<td>
        <div data-type="push" data-device="WaMaTimer" data-set-on="running" data-icon="fa-play"></div>
        <div data-type="label" style="font-size:100%;color:rgb(170, 105, 0)">Start</div>
</td>
<td>
        <div data-type="symbol" data-device="WaMaTimer"
          data-icons='["fa-exclamation-triangle fa-blink","fa-stop-circle","fa-cog fa-spin","fa-spinner fa-spin","fa-tint fa-blink"]'
          data-on-colors='["Crimson","Gray","SeaGreen","Blue","SeaGreen"]'
          data-get-on='["error","off","on","running","finish"]'
          ></div>
          <div data-type="label" style="font-size:100%;color:rgb(170, 105, 0)">Status</div>     
</td>

<td>
        <div data-type="push" data-device="WaMaTimer" data-set-on="reset" data-icon="fa-refresh"></div>
        <div data-type="label" style="font-size:100%;color:rgb(170, 105, 0)">Reset</div>           
</td>
Fhem v5.9 @ MS-7877 Board mit J1900 als Server
mit Ubuntu 18.04.1 LTS, Nginx, Php7, TabletUI, Framework7, MQTT, JeelinkClone, Sduino, nanoCUL, maxCube, Synology-NAS
---
Sensoren/Aktoren:
EdiPlug, LaCrosse-Sensoren, MAX! Thermostate und Fensterkonakte, Alexa