[vz-users] Betriebsstundenzähler über Schaltzustand Brennner

dl4huf dl4huf at t-online.de
Sun Mar 10 23:10:51 CET 2013


Hallo

nachdem ich das ganze WE leider erfolglos damit verbracht habe eine
RFM12 auf einem Pollin-Addon-Board zum laufen zu kommen brauchte ich 
noch ein Erfolgserlebnis.
Hier die Umsetzung meiner Idee für den Betriebsstundenzäher in Control6.
Es gab zwar auch hier jede Menge Probleme bis es so lief wie es soll, 
aber so gehts.
Benötigt wird :
- httplog aktiviert und richtig configuriert
         Service:"server.local"
         Path: "/middleware.php/data/"
  alles andere aus/default

- Named Pins
  den Ausgang für die LED kann man weg lassen, die Zeilen unter 
entsprechend löschen

- Clock-Support über ntp

Wichtig ! den Eingang entprellen, vor allem wenn man Relaiskontakte 
verwendet. Am einfachsten mit einem Kondensator von 100n..1uF zwischen 
Eingang und Masse.
Das Script zählt die Zeit wie lange der Eingang auf Masse gezogen wird 
mit einer Auflösung von 1s. Mindestzeit ist aber ca. 3s !
Ich musste ein paar Verzögerungen einbauen, das das ethersex nicht so 
schnell nacheinander die http-Requests absetzten kann.
Wenn man weitere http-Requests per httplog benutzt oder die middleware 
auf dem Server zu langsam ist kann es trotzdem passieren, das welche 
verloren gehen. Ein Request muss erst abgearbeitet sein bevor der 
nächste kommt.
Ich habe leider keine Ahnung wie man das verhindern kann, sprich man 
eine Warteschlange einrichten kann.
Wenn jemand eine andere Idee hat, gern ...

Gruß Ronald

p.s. die HTTPLOG-Zeilen sind bis zum ; in einer Zeile.

C6_HEADER(`/* s will be in control6.h */')

#include "protocols/httplog/httplog.h"
#include "services/clock/clock.h"

CONTROL_START

CLOCK_USED();
PIN_OUTPUT(LED);
PIN_PULLUP(INPUT);

ECMD_GLOBAL(on_time,  -1, uint32_t);
ECMD_GLOBAL(off_time, -1, uint32_t);
ECMD_GLOBAL(state, -1, uint16_t);

  THREAD(Betriebsstunden)
   ON state==1 DO
     on_time=clock_get_time();
 
HTTPLOG("11d5f620-898d-11e2-a894-43cd1a3787d5.json?ts=%lu000&value=0&operation=add",on_time);
     PIN_SET(LED);
     state=0;
   END
   ON state==2 DO
     off_time=clock_get_time();
 
HTTPLOG("11d5f620-898d-11e2-a894-43cd1a3787d5.json?ts=%lu000&value=%d&operation=add",off_time,off_time-on_time);
     WAIT(2);
     state=0;
 
HTTPLOG("11d5f620-898d-11e2-a894-43cd1a3787d5.json?ts=%lu000&value=0&operation=add",off_time+1);
     PIN_CLEAR(LED);
   END
  THREAD_END(Betriebsstunden)

  ON STARTUP DO
         state=0;
         THREAD_RESTART(Betriebsstunden);
  END

  ON PIN_FALLING(INPUT) DO state=1; END
  ON PIN_RISING(INPUT) DO state=2;  END

CONTROL_END



More information about the volkszaehler-users mailing list