FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Kaspi am 29 Januar 2020, 06:37:11

Titel: Berechnungsproblem
Beitrag von: Kaspi am 29 Januar 2020, 06:37:11
Moin,

ich habe einen Stromzähler der die Leistung in Watt positiv und negativ (PV-Anlage) anzeigt.
Nun möchte ich positive Werte in einem Reading und negative Werte in einem anderen Reading haben.

Reading: E_ZAEHLER_HAUS:0_VIF_ELECTRIC_POWER_value

Wie stelle ich das an ?

Kaspi   :(
Titel: Antw:Berechnungsproblem
Beitrag von: sash.sc am 29 Januar 2020, 06:45:49
Mit einem doif kannst du prüfen, ob grösser null oder kleiner null und dann in dein entsprechendes reading schreiben.

Gesendet von meinem MI 9 mit Tapatalk

Titel: Antw:Berechnungsproblem
Beitrag von: KölnSolar am 29 Januar 2020, 06:59:09
oder userReadings.
Titel: Antw:Berechnungsproblem
Beitrag von: Kaspi am 29 Januar 2020, 07:24:46
Eine Lösung mittels userReading wäre mir am liebsten.
Aber wie??? Perl ist nicht gerade mein Ding  :o
Titel: Antw:Berechnungsproblem
Beitrag von: CoolTux am 29 Januar 2020, 07:30:10
Darf man nach dem Hintergrund fragen? Wieso möchtest Du positive nummerische Werte und negative trennen?
Titel: Antw:Berechnungsproblem
Beitrag von: Kaspi am 29 Januar 2020, 07:37:02
Berechnung des momentanen Autarkie und der Eigenverbrauchsquote.
Titel: Antw:Berechnungsproblem
Beitrag von: CoolTux am 29 Januar 2020, 07:40:16
Etwas Hilfe zur Selbsthilfe biete ich gerne an. Bei Problemen schreibe bitte die Fehlermeldung und ein List vom eigentlichen Device.
Hier mal ein Beispiel für ein Userreading auf Basis vom Reading temperature.

pos:temperature:.\d+(\.\d+)? { ReadingsVal($name,'temperature',10000) },neg:temperature:.-\d+(\.\d+)? { ReadingsVal($name,'temperature',10000) }
Titel: Antw:Berechnungsproblem
Beitrag von: DS_Starter am 29 Januar 2020, 07:49:06
Guten Morgen,

Die Eigenverbrauchsquote und Autarkiequote wird gebildet aus:

Eigenverbrauchsquote (%) = (Erzeugung - Einspeisung) / Erzeugung * 100

Autarkiequote (%) = (Erzeugung - Einspeisung) / (Erzeugung - Einspeisung + Bezug) * 100

Du brauchst also dazu auch noch die Werte des Wechselrichters dazu. Im Wiki hatte ich eine umfassende Lösung mit Hilfe einer Datenabnkauswertung mal beschrieben:

https://wiki.fhem.de/wiki/DbRep_-_Reporting_und_Management_von_DbLog-Datenbankinhalten#datenbankgest.C3.BCtzte_Erstellung_der_Energiebilanz_einer_SMA_PV-Anlage_mit_.C3.9Cberschu.C3.9Feinspeisung

Grüße,
Heiko
Titel: Antw:Berechnungsproblem
Beitrag von: Kaspi am 29 Januar 2020, 07:51:44
Jaja....
die Werte des Wechselrichters habe ich.
Aber die Werte von Einspeisung und Bezug nicht direkt.
Ich habe nur einen Wert. Positiv bzw. negativ.
Darum muss ich den Wert trennen.

PS: Der Link klappt nicht
Titel: Antw:Berechnungsproblem
Beitrag von: DS_Starter am 29 Januar 2020, 08:26:29
ZitatPS: Der Link klappt nicht
Sorry, habs korrigiert.
Titel: Antw:Berechnungsproblem
Beitrag von: Kaspi am 29 Januar 2020, 08:29:23
BEZUG:0_VIF_ELECTRIC_POWER_value:.\d+(\.\d+)? { ReadingsVal($name,'0_VIF_ELECTRIC_POWER_value',0) },
EINSPEISUNG:0_VIF_ELECTRIC_POWER_value:.-\d+(\.\d+)? { ReadingsVal($name,'0_VIF_ELECTRIC_POWER_value',0) }


es sieht gut aus  :)
Titel: Antw:Berechnungsproblem
Beitrag von: Kaspi am 29 Januar 2020, 08:53:39
nun bekomme ich natürlich ein Division by Zero wenn die Erzeugung "0" ist.
Wie umgehe ich das?

EIGENVERBRAUCH__AKTUELL {(ReadingsVal("SMA_STP_6","SPOT_PACTOT",0)-ReadingsVal("E_ZAEHLER_HAUS","EINSPEISUNG",0))/ReadingsVal("SMA_STP_6","SPOT_PACTOT",0)*100;;},
Titel: Antw:Berechnungsproblem
Beitrag von: Kaspi am 29 Januar 2020, 11:35:34
Und wenn der Wert von positiv auf negativ (oder umgekehrt) wechselt, bleibt der letzte Wert stehen, statt auf 0 zu gehen. :-\
Titel: Antw:Berechnungsproblem
Beitrag von: DS_Starter am 29 Januar 2020, 11:46:34
Frage:
Loggst du deine Evets mit Filelog oder DbLog ?
Titel: Antw:Berechnungsproblem
Beitrag von: Kaspi am 29 Januar 2020, 11:47:55
DbLog
Titel: Antw:Berechnungsproblem
Beitrag von: DS_Starter am 29 Januar 2020, 12:34:19
Dann hätte ich noch einen Lösungsvorschlag mit dem Attribut DbLogValueFn. Das setzt du in deinem Strommesser.
Etwa so als Beispiel mit Device SMA_Energymeter :

attr SMA_Energymeter DbLogValueFn
{
  if ($READING eq "0_VIF_ELECTRIC_POWER_value") {
      if $READING =~ /^\s-(\d+|\d+\.\d+)$/ {
          $READING = "ELECTRIC_POWER_value_neg";
          $VALUE = $1;
      } else  {
           $READING = "ELECTRIC_POWER_value_pos";
      }
  }
}

Das bedeutet wenn Readingwert  0_VIF_ELECTRIC_POWER_value negativ, wird dieser Wert als positiver Wert im Reading ELECTRIC_POWER_value_neg in die DB geschrieben.
Ist das Reading 0_VIF_ELECTRIC_POWER_value positiv, wird dieser Wert als ELECTRIC_POWER_value_pos in die DB geschrieben.
Neg und pos könnte man besser als Einspeisung bzw Bezug benennen.

Hat den Vorteil, du hast beide Richtungen für Lieferung und Bezug gleich getrennt in der DB und kannst nach Bedarf umfassend auswerten wie als Beispiel im Wiki erwähnt.

Edit: Hatte noch " vergessen.

Grüße,
Heiko
Titel: Antw:Berechnungsproblem
Beitrag von: Kaspi am 29 Januar 2020, 12:57:26
Das ist mir zu hoch  :-\

Im Moment sieht es so aus:

BEZUG:0_VIF_ELECTRIC_POWER_value:.\d+(\.\d+)? { ReadingsVal($name,'0_VIF_ELECTRIC_POWER_value',0) },

EINSPEISUNG:0_VIF_ELECTRIC_POWER_value:.-\d+(\.\d+)? { ReadingsVal($name,'0_VIF_ELECTRIC_POWER_value',0)*-1 },

EIGENVERBRAUCH_AKTUELL {(ReadingsVal("SMA_STP_6","SPOT_PACTOT",0)-ReadingsVal("E_ZAEHLER_HAUS","EINSPEISUNG",0))/
ReadingsVal("SMA_STP_6","SPOT_PACTOT",0)*100;;},

AUTARKIE_AKTUELL {(ReadingsVal("SMA_STP_6","SPOT_PACTOT",0)-ReadingsVal("E_ZAEHLER_HAUS","EINSPEISUNG",0))/
(ReadingsVal("SMA_STP_6","SPOT_PACTOT",0)-ReadingsVal("E_ZAEHLER_HAUS","EINSPEISUNG",0)+ReadingsVal("E_ZAEHLER_HAUS","BEZUG",0))*100;;}


Titel: Antw:Berechnungsproblem
Beitrag von: ch.eick am 29 Januar 2020, 13:28:11
Moin.
Kannst Du bei dem Zähler nicht durch eine PIN den erweiterten Infomodus aktivieren?
Bei mir werden für Bezug und Lieferung jeweils eigenen Register bereitgestellt.

Gesendet von meinem SM-G930F mit Tapatalk

Titel: Antw:Berechnungsproblem
Beitrag von: Kaspi am 29 Januar 2020, 14:24:30
No. Easymeter.
Titel: Antw:Berechnungsproblem
Beitrag von: Kaspi am 31 Januar 2020, 19:57:00
N'abend

define BEZUG_0 DOIF ([E_ZAEHLER_HAUS:EINSPEISUNG] >0) (setreading E_ZAEHLER_HAUS BEZUG 0)
define EINSPEISUNG_0 DOIF([E_ZAEHLER_HAUS:BEZUG] >0) (setreading E_ZAEHLER_HAUS EINSPEISUNG 0)

löst das Problem


bleibt noch das Division by Zero Problem bei der Berechnung des Eigenverbrauchs, wenn die Erzeugung "0" ist.
Wie umgehe ich das?

KASPI  :)
Titel: Antw:Berechnungsproblem
Beitrag von: Kaspi am 02 Februar 2020, 18:08:07
hab immer noch das "Division by Zero Problem"  :-\

EIGENVERBRAUCH_AKTUELL {(ReadingsVal("SMA_STP_6","SPOT_PACTOT",0)-ReadingsVal("EINSPEISUNG","*",0))/
ReadingsVal("SMA_STP_6","SPOT_PACTOT",0)*100;;},

AUTARKIE_AKTUELL {(ReadingsVal("SMA_STP_6","SPOT_PACTOT",0)-ReadingsVal("EINSPEISUNG","*",0))/
(ReadingsVal("SMA_STP_6","SPOT_PACTOT",0)-ReadingsVal("EINSPEISUNG","*",0)+ReadingsVal("BEZUG","*",0))*100;;}


Kaspi
Titel: Antw:Berechnungsproblem
Beitrag von: ch.eick am 04 Februar 2020, 16:11:48
Im DOIF müsstest Du vorher noch auf ungleich Null prüfen.

Gesendet von meinem SM-G930F mit Tapatalk