[gelöst] OWCOUNT Anzeige des Zählerstand vom Energieversorger im Reading

Begonnen von AHA1805, 08 März 2014, 21:49:38

Vorheriges Thema - Nächstes Thema

AHA1805

Hallo pah,

sorry aber jetzt muss ich nochmals stören, aber jetzt weiß ich zu mindestens warum ich soviele Events bekomme  :o



  • Ich habe ein nofify erstellt:
    modify evt_ow_Counter ow_Counter.E-Energy:.* {evt_ow_Counter("@")}
  • Dieses ruft die Funktion evt_ow_Counter auf welche im Moment noch "nicht" macht.
  • In inform timer kommt bei jedem "Leseevent" ein Satz von Meldungen also noch i.O.
  • Jetzt ergänze ich die Funktion um die Anweisung,
        my ($vDummy) = fhem("get ow_Counter midnight B") ;
  • Jetzt kommt bei jedem Leseevent der Satz Meldunge gleich 4 mal  :'(

Ich denke, dass dies der Fall ist, weil ich durch den fhem Befehl ebenfalls einen Event generiere und dieses mehrfachen Events durch Rekursion entstehen?  :-\

Nun die Entscheidende Frage:
Gibt es eine Möglichkeit eine fhem Fuktion in meinem 99_myUtils Script zu verwenden ohne einen Event auszulösen?

Gruß und schöne Grüße
Hannes
AHA 1805 RIP 29.08.2016 --> RUHE IN FRIEDEN
In Gedanken Bei dir HANNES
Dein Bruder Gerd (Inputsammler) Vermisst dich Hannes (AHA1805)

Prof. Dr. Peter Henning

Warum denn einen FHEM-Befehl ?

Mit jeden Get-Befehl wird die Funktion "FormatValues" aufgerufen - und die macht nun einmal auch die Events. Der Get-Befehl ist eben nicht dafür gedacht, periodisch aufgerufen zu werden - dazu sollte man besser direkt auf die Readings zugreifen.

LG

pah

AHA1805

Guten Morgen pah,

und danke für Deine Gedult :D somit ist  ein Knoten schon mal gelöst  ;)

Leider bin ich nun wieder beim Grundproblem :'( angekommen.

Ich möchte gerne den tatsächlichen Wert des EVU Zählers angezeigt bekommen.

Um diesen berechnen zu können benötige ich den midnight Wert vom Kanal B
Diesen kann ich meines Wissens nur mit diesem fhem Befehl auslesenget ow_Counter midnight B
Dieser Wert steht zwar auch in den Reading komme aber nicht auf den Wert habe schon diverse versuche gemacht wie z.B.
ReadingsVal("ow_Counter","midnight","0");
ReadingsVal("ow_Counter","midnight[15]","0");
ReadingsVal("ow_Counter","ow_Counter.midnight","0");
ReadingsVal("ow_Counter","midnight:","0");

Hab auch sonst nichts in der Doku gefunden wie ich auf diesen Wert kommen würde :(
Und am liebsten würde ich dann den Berechneten Wert (midnight + E-Energy )im Reading des ow_Counters mit B anzeigen, da dieser sowieso nicht verwendet wird.
(Zur not würde auch ein dummy gehen)

   Readings:
     2014-03-11 04:47:18   A               26624
     2014-03-11 04:47:18   A_rate          0
===> 2014-03-10 19:47:01   B               0  <========================== Wird nicht benutzt würde ich gerne zur Anzeige des Zählerwertes verwenden, indem ich mit "setreading ow_Counter B Zählerwert" diesen aus der der notifiy Funktion beschreibe.
     2014-02-16 09:32:54   B_rate          298.0132
     2014-03-11 04:47:18   E-Energy        1.1663
     2014-03-11 04:47:18   E-Power         0.7605
     2014-03-10 23:56:37   day             D10  A: 26624.0 cts AM:   0.0 cts  E-Energy:   9.7 kWh E-EnergyM:   0.0 kWh
     2014-02-28 23:55:37   month           M02  A:   0.0M cts AY:   0.0 cts E-Energy:   0.0M kWh E-EnergyY:   0.0 kWh
     2014-03-11 04:47:18   state           A: 26624.0 cts A_rate:  0.00 cts/h E-Energy: 1.166 kWh E-Power: 0.7605 kW
   owg_midnight:
     26624
     15616.54
   owg_str:


   owg_val:
     26624
     231314
Attributes:
   BFactor    0.00125
   BMode      daily
   BName      E-Energy|energy
   BOffset    12262851
   BRate      E-Power|power
   BUnit      kWh|kWh
   IODev      OWio1
   model      DS2423emu
   nomemory   1
   room       OWX


Aktualisieren würde ich diesen dann mit setreading ow_Counter B Zählerwert aus der Funktion welche durch den notify aufgerufen wird.

Oder bin ich mit meiner Vorstellung komplett auf dem Holzweg unterwegs  ???

Schöne Grüße
Hannes
AHA 1805 RIP 29.08.2016 --> RUHE IN FRIEDEN
In Gedanken Bei dir HANNES
Dein Bruder Gerd (Inputsammler) Vermisst dich Hannes (AHA1805)

Prof. Dr. Peter Henning

Der midnight-Wert von Kanal B ist enthalten in

$defs{'ow_Counter'}->{owg_midnight}->[1]

Der rohe Wert steht in

$defs{'ow_Counter'}->{owg_val}->[1]

Um irgendetwas in den angezeigten Wert für den B-Kanal zu setzen, muss die Variable

$defs{'ow_Counter'}{READINGS}{<channel-name>}{VAL}

überschrieben werden, sie wird berechnet als (roher wert + offset)*factor - mdnight.

Ähnlich könnte man auch die B-Rate überschreiben, sie steht in

$defs{'ow_Counter'}{READINGS}{<channel-name>}{VAL}

Diese Hinweise stehen ab sofort auch im Wiki, http://www.fhemwiki.de/wiki/OWCOUNT

LG

pah

AHA1805

Hallo pah

Danke schon mal, werde mir das ganze mal Zuhause anschauen und hoffe das ich es verstehe.

Schöne grüße
Hannes

Gesendet von Unterwegs mit Tapatalk 4

AHA 1805 RIP 29.08.2016 --> RUHE IN FRIEDEN
In Gedanken Bei dir HANNES
Dein Bruder Gerd (Inputsammler) Vermisst dich Hannes (AHA1805)

AHA1805

#20
Hallo pah

danke nachmals, Du bist der beste  ;).

Nun habe ich meine OWCOUNT so angepaßt das in dem Reading der tatsächliche Zählerwert wie am EVU Zähler steht.

Mit der Notation direkt auf die internen Readings ohne Event's zuzugreifen war der entscheidente Hinweis :-).

Mit der notify
define ntf_ow_Counter notify ow_Counter.E-Energy:.* {evt_ow_Counter("@")}
und der Funktion klappt das jetzt prima.
####### ##############################################
# Ersteller AHA
# Typ Event ow_Counter
#
# Aufgabe   Den Absoluten Wert des Zählers im Reading B abspeichern
#           da dieses Reading nicht benutzt wird.
#
# Hintergrund: Dadurch ist am Anhieb zu sehen, welchen absoluten
#              Wert der Zähler gerade hat.
#
# 2014-03.09   AHA Erstellung
# 2014-03-11   AHA  Anpassung nach der Info von pah für direkten Zugriff auf interne Variablen
#
#
sub evt_ow_Counter($)
{
   # Objektname z.B. ow_Counter muss aus dem notify mit "@" übergeben werden
   my ($objname) = shift;
   #midnight Wert von Kanal B auslesen
   my ($rmidnight) = $defs{$objname}->{owg_midnight}->[1] ;
   # Dies wäre der Rohwert muss aber noch mit Faktor berechnet werden
   # $rmidnight   = $defs{$objname}->{owg_val}->[1] ;
   
   #aktuellen Tagesverbrauch seit Mitternacht auslesen
   my ($objBdaily)    = ReadingsVal($objname,"E-Energy","0");
   
   # Berechnung des aktuellen Zählerstandes
   $rmidnight = $rmidnight + $objBdaily;
   
   # Schreiben des aktuellen Zählerstandes auf das Reading B ohne einen Event zu erzeugen
   # $defs{$objname}{READINGS}{B}{VAL}=$rmidnight;
   # Schreiben des aktuellen Zählerstandes auf das Reading B mit einem Event,
   # außerdem wird dadurch die Reading Zeit aktualisiert
   fhem("setreading " . $objname . " B " . $rmidnight );

   # Für Debug Zwecke
   # Log 1, "evtow_Counter  Objektname ". $objname . " Zählerwert:" . $rmidnight . " daily:" . $objBdaily;
   
   return 0;

}


Wenn jetzt noch Deine Erweiterung "set <name> counter <val>" kommt, fehlt es mir an nichts mehr  ;)

Danke nochmals und einen schönen Abend
Hannes
AHA 1805 RIP 29.08.2016 --> RUHE IN FRIEDEN
In Gedanken Bei dir HANNES
Dein Bruder Gerd (Inputsammler) Vermisst dich Hannes (AHA1805)

Martin

Hallo ich möchte gerne mit Owcount einen Monats Plot Anzeigen aber komme nicht weiter mein Log sieht so aus.


2014-03-12_23:53:20 Gas_B1 day: D12  Gas:   9.0 m3 GasM:  9.0 m3  B:     0.0 cts BM:   0.0 cts
2014-03-13_23:52:18 Gas_B1 day: D13  Gas:   8.0 m3 GasM: 17.0 m3  B:   0.0 cts BM:   0.0 cts
2014-03-14_23:56:54 Gas_B1 day: D14  Gas:   8.4 m3 GasM: 25.4 m3  B:   0.0 cts BM:   0.0 cts
2014-03-15_23:53:05 Gas_B1 day: D15  Gas:   9.4 m3 GasM: 34.8 m3  B:   0.0 cts BM:   0.0 cts

Und die config so
define Gas.tag.M FileLog ./log/Gas-Monat/Gas.tag-%m-%Y.log Gas_B1:day.*
define weblink_Gas.tag.M SVG FileLog_Gas.tag.M:power6:CURRENT
attr weblink_Gas.tag.M fixedrange month
attr weblink_Gas.tag.M label "Gas_Monat Min $data{min1}, Max $data{max1}, Last $data{currval1}"


aber leider kommt da nichts bei raus kann mir da einer helfen bitte.
Gruß
Martin