Momentanleistung aus Impulsgeber (on/off) berechnen

Begonnen von sweetie-pie, 12 Januar 2014, 18:18:22

Vorheriges Thema - Nächstes Thema

sweetie-pie

Hallo,

ich hab schon fleißig gesucht, aber entweder nicht die richtigen Suchbegriffe verwendet oder die Problemstellung wurde noch nicht aufgegriffen:

Ich habe einen Stromzähler mit S0-Schnittstelle (500 Pulse/kWh). Daran habe ich ein selbst gebautes CAN-Modul, das aber die Daten wie ein FS20-Gerät anliefert, d.h. es kommen bei einem Puls ON und kurze Zeit später wieder ein OFF.

Mit einem notify addiere ich die Pulse auf und berechne den Zählerstand und Kosten:
FS20_611601:on {
  readingsBeginUpdate($main::defs{FS20_611601});
  readingsBulkUpdate($main::defs{FS20_611601}, "count", ReadingsVal("FS20_611601","count",0)+0.002);
  readingsBulkUpdate($main::defs{FS20_611601}, "cost", ReadingsVal("FS20_611601","count",0)*0.265);
  readingsEndUpdate($main::defs{FS20_611601}, 1);
}


Jetzt würde ich noch gerne die momentane Leistung berechnen und zwar anhand der Zeit zwischen zwei Impulsen.
Dazu müsste ich aber wissen wie lange der letzte Puls her ist. Irgendwie will finde ich da keinen Ansatz...

Alternativ hab ich schon daran gedacht einen at-Job anzulegen, der jede Minute den aktuellen Wert in ein zusätzliches Reading schreibt und dann vor jedem Schreiben aus dem alten und dem neuen Wert den Momentanverbrauch für die letzte Minute berechnet. Das finde ich aber nicht so schön... ich würde gerne stets den aktuellen Leistungswert vom letzten Puls haben.

Hat dazu jemand eine Idee oder einen Vorschlag?
Vermutlich ist es wieder so trivial, dass ich zu kompliziert gedacht habe...  ::) :-\

Gruß
Holger

Garry_FHEM

Ich würde den Pulsabstand schon gleich am S0 messen und eventuell auch die Momentanleistung berechnen (Habe ich hier auf einem ATmega gemacht).
So bist Du sicher dass Du keine Messfehler durch die Übertragung zu FHEM bekommst. Kann mir vorstellen dass die Übertragungszeiten zwischen den Pulsen deutlich schwankt, je nach dem was gerade auf dem Funkkanal los ist und wie beschäftigt fhem ist.

Garry

sweetie-pie

Hallo,

dank zunächst für die Antwort. Irgendwann löse ich das mal so, aber momentan muss das "quick'n dirty" gehen.
Hab jetzt doch noch die Erleuchtung gehabt. Habe es wie folgt gelöst:

FS20_611601:on {
  readingsBeginUpdate($main::defs{FS20_611601});
  readingsBulkUpdate($main::defs{FS20_611601}, "count", ReadingsVal("FS20_611601","count",0)+0.002);
  readingsBulkUpdate($main::defs{FS20_611601}, "cost", ReadingsVal("FS20_611601","count",0)*0.265);
  readingsBulkUpdate($main::defs{FS20_611601}, "interval", gettimeofday()-ReadingsVal("FS20_611601","lastpulse",0));
  readingsBulkUpdate($main::defs{FS20_611601}, "power", 3600/ReadingsVal("FS20_611601","interval",0)*2);
  readingsBulkUpdate($main::defs{FS20_611601}, "lastpulse", gettimeofday());
  readingsEndUpdate($main::defs{FS20_611601}, 1);
}


Mit der Ungenauigkeit kann ich leben, soll ja nur ein Indiz sein.

Gruß
Holger

justme1968

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

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

sweetie-pie

Danke für den Hinweis... habs mal probiert.

Internals:
   CFGFN     
   DEF        FS20_611601.on
   NAME       TESTzaehler
   NR         65487
   NTFY_ORDER 50-TESTzaehler
   STATE      314
   TYPE       HourCounter
   Readings:
     2014-01-15 13:10:01   clearDate       2014-01-15 13:10:01
     2014-01-15 14:59:45   countsOverall   314
     2014-01-15 14:59:45   countsPerDay    314
     2014-01-15 13:10:01   pauseTimeIncrement 0
     2014-01-15 13:10:01   pauseTimeOverall 0
     2014-01-15 13:10:01   pauseTimePerDay 0
     2014-01-15 13:10:01   pulseTimeIncrement 0
     2014-01-15 13:10:01   pulseTimeOverall 0
     2014-01-15 13:10:01   pulseTimePerDay 0
     2014-01-15 14:59:45   state           314
     2014-01-15 14:00:00   tickHour        1
     2014-01-15 14:59:45   value           1
   Helper:
     OFF_Regexp
     ON_Regexp  FS20_611601.on
     calledByEvent
     changedTimestamp 2014-01-15 14:59:45
     forceClear
     forceDayChange
     isFirstRun
     sdRoundHourLast 1389790800
     value      1
Attributes:
   room       VerbrauchsZ


Ganz nett, zählt schon mal, aber die Anzahl der Pulse muss ich immer ja auch noch
umrechnen in von Pulse in Arbeit [kWh] und von der Zeit zwischen den Pulsen noch in Leistung [W].

Und die Impulslänge zwischen ON und ON bekomme ich irgendwie nicht angezeigt?

Trotzdem Danke für den Tipp... wieder mal was ausprobiert.

Gruß
Holger

justme1968

schau dir mal den zugehörige thread im forum an.

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

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