Anzeige und Berechnung der Leistungen

Begonnen von _fhemuser_, 14 März 2024, 11:56:29

Vorheriges Thema - Nächstes Thema

_fhemuser_

Hallo,

entweder stehe ich auf dem Schlauch, oder die angezeigten Werte passen nicht.

Ich habe einen SGM-Cx-xxx2xx Stromzähler, den ich mit einem IR Sensor auslese und erhalte aktuell die Werte:

Spannung: 238V
Strom L1: 0,59A
Strom L2: 0,22A
Strom L3: 0,16A
Leistung: 93 Watt

Wenn ich mal die Phasenverschiebungen und Blindleistungen außer Acht lasse, erhalte ich die Einzelleistungen
P1 140.42W
P2 52,36W
P3 38,08W
Gesamt 230,86W.

Es gibt keine Geräte zur Stromerzeugung und wie an der Gesamtleistung ersichtlich auch keine leistungsstarken Verbraucher.

Auch die Einzelleistung P1 ist schon deutlich über der gemessenen Leistung vom Stromzähler.

Zeigt der Stromzähler falsche Stromwerte an oder stimmt die Leistungsanzeige nicht oder habe ich massive Rechenfehler?

Wenn ich die berechneten Werte bearbeite zB ((P1 - 100) + P2 + P3) / 1.4  rechne, komme ich annähernd auf die angezeigte Leistung.

Warum P1 -100 ? Ich vermute, dass der Stromzähler einen falschen Wert anzeigt, der 100W bzw 0,42A zu hoch ist. Damit wären alle 3 Phasen ungefähr gleich belastet.

Es geht mir nicht um die Zahlung an den Energieversorger zu verändern, sondern um die grafische Darstellung in FHEM. Dort möchte ich alle Einzelleistungen darstellen, erhalte die Werte aber nicht aus dem Zähler.

Einen Zangenamperemeter habe ich leider nicht um die Ströme direkt am Zähler zu messen.

Gruß
_fhemuser_
fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | alexa | Solar
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye

Otto123

Hi,
Zitat von: _fhemuser_ am 14 März 2024, 11:56:29Einen Zangenamperemeter habe ich leider nicht um die Ströme direkt am Zähler zu messen.
schließ doch einfach an jede Phase nacheinander mal einen ohmschen Widerstand ( Heizkörper, alte Glühlampe o.ä. - alles ohne Regelung ) an und schau Dir an ob der Unterschied "richtig" angezeigt wird.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

_fhemuser_

@Otto123
Ich habe mal mit einer 100W Glühlampe den Stromverbrauch auf allen 3 Phasen gemessen. Der Stromverbrauch steigt jeweils um ca 0,32A und die Leistung steigt um 100W an.

Damit sind die Messwerte und Anzeigen des Zählers korrekt.

Aber wie berechnet man dann den Stromverbrauch pro Phase bei 3 Phasen?
Normalerweise ist ja Leistung = Spannung x Strom. Was ja mit der Glühlampe auch funktioniert hat.

Alle Einzelleistungen zusammen addieren scheidet auch aus. Auch die Summe geteilt durch 3 gibt ein anderes Ergebnis.

Gruß
_fhemuser_
fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | alexa | Solar
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye

Otto123

#3
Hi,

Zitat von: _fhemuser_ am 19 März 2024, 15:07:22Normalerweise ist ja Leistung = Spannung x Strom. Was ja mit der Glühlampe auch funktioniert hat.
naja das gilt bei Wirkleistung, bei einer Glühlampe wird nur Wirkleistung gemessen.
Jedes andere elektronische Gerät, jeder Motor, jede induktive oder kapazitive Last erzeugt eine Phasenverschiebung und damit wird eine Scheinleistung gemessen.
Der Stromzähler misst in Summe normal die Wirkleistung. Die Spannung und Ströme die angezeigt werden sind Effektivwerte ohne Berücksichtigung der Phasenlage. Um die Wirkleistung aus Spannung und Strom zu ermitteln, müsstest Du die Werte entsprechend ihrer Phasenlage berechnen.

Ich denke Du musst einfach andere Werte abgreifen (Leistung der einzelnen Phasen). Dein berechnetes P1 usw. sind die Scheinleistungen der einzelnen Phasen.

Zitat von: _fhemuser_ am 14 März 2024, 11:56:29Wenn ich mal die Phasenverschiebungen und Blindleistungen außer Acht lasse,
Das ist ein grober Fehler  ;D

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

_fhemuser_

#4
Zitat von: Otto123 am 19 März 2024, 16:42:00Ich denke Du musst einfach andere Werte abgreifen (Leistung der einzelnen Phasen). Dein berechnetes P1 usw. sind die Scheinleistungen der einzelnen Phasen.

ZitatWenn ich mal die Phasenverschiebungen und Blindleistungen außer Acht lasse,
Das ist ein grober Fehler  ;D
Ich bin bislang davon ausgegangen, dass keine Scheinwerte oder Blindwerte angezeigt werden bei dem Zähler, da sie nicht für die Abrechnung relevant sind.

Wenn es P1 Wirkleistung im Zähler geben würde, müsste ich nicht lange rechnen.

Der Zähler übermittelt:
Comsumption,kWh,Total,4
Actual Power,W,Power,0
Voltage L1,V,Voltage,1
Voltage L2,V,Voltage_L2,1
Voltage L3,V,Voltage_L3,1
;
Current L1,A,Current,2
Current L2,A,Current_L2,2
Current L3,A,Current_L3,2
;
Phaseangle L2-L1,deg,phase_angle_L2_L1,0
Phaseangle L3-L1,deg,phase_angle_L3_L1,0
;
Phaseangle I/U L1,deg,phase_angle_L1,0
Phaseangle I/U L2,deg,phase_angle_L2,0 
Phaseangle I/U L3,deg,phase_angle_L3,0

Wenn ich mit den Phasenwinkeln noch arbeiten muss, verzichte ich auf die Anzeige und Auswertung.

Gruß
_fhemuser_
fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | alexa | Solar
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye

Otto123

Zitat von: _fhemuser_ am 21 März 2024, 16:31:07Ich bin bislang davon ausgegangen, dass keine Scheinwerte oder Blindwerte angezeigt
Naja der Strom ist ein absoluter Strom - der fließt ja wirklich. Das ist auch ein großes Problem für die Netze. Das es Blindleistung ist ergibt sich ja erst im Bezug auf die Spannungswerte und Zeitwerte.

Für die Abrechnung ist ja nur die Summe relevant, scheinbar zeigt er nur die an. Ich habe im Web aber ähnliche Auswertungen mit einzelnen Leistungen gesehen. Das können aber andere Zähler gewesen sein. Oder muss / kann man dem Zähler sagen was er alles ausgeben soll?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

_fhemuser_

Alle Werte, die der Zähler anzeigt, bzw übermittelt, habe ich oben aufgeführt.

Gesamtleistung, Einzelströme und Phasenwinkel.
fhem in der aktuellsten Version auf:
Raspberry 4 mit SSD | fhem2fhem | NanoCul433 Selbstbau | NanoCul868 Selbstbau | DbLog | MAX! | zigbee2MQTT | alexa | Solar
inkl zigbee2MQTT Server, Unifi-Server

Raspberry 4 mit SD Karte | fhem2fhem | motioneye

Prof. Dr. Peter Henning

Zitat von: _fhemuser_ am 21 März 2024, 16:42:17Gesamtleistung, Einzelströme und Phasenwinkel.
Natürlich. Und für die Abrechnung ist nur die Gesamtleistung relevant. Also was ist das Problem? Der Zähler misst eben nicht die Wirkleistungen in den den einzelnen Phasen.

LG

pah

Otto123

#8
Ich habe seit kurzem auch einen SGM C8 Zähler und die Pin zum auslesen der Detailwerte. Angeschlossen ist er mit einem bitshake Tasmota und MQTT2.
Die einzelnen Wirkleistungen zu ermitteln ist nicht schwer. Ich habe ein paar Subroutinen in eine myUtils gepackt:
  • decode_j - decodiert den JSON String in einer fehlertoleranten Form.
  • deg2rad  - da cosinus in Perl mit Radianten rechnet muss man die Grad in Rad umwandeln.
  • active_power - rechnet die übliche Formel für Wirkleistung P = U * I * cos(phi)
sub decode_j {
# decode_json() croaks on error, this function should prevent fhem crashes
# https://metacpan.org/pod/Perl::Critic::Policy::ErrorHandling::RequireCheckingReturnValueOfEval
  use JSON qw(decode_json);
  my $maybe_json = shift;
  my $data;
  if ( eval { $data = decode_json($maybe_json); 1 } ) { return $data }
  Log3(undef, 1, "JSON decoding error, >$maybe_json< seems not to be valid JSON data: $@");
  return q{}
}

sub deg2rad {
  # degree nach radiant
  # https://www.perlmonks.org/?node_id=221674
  my $pi = 3.1415926535897932384626433832795;
  ($_[0]/180) * $pi
  }

sub active_power {
  # active_power (Spannung, Strom, Phasenwinkel)
   $_[0] * $_[1] * cos(deg2rad($_[2]))
  }
Anstatt json2nameValue($EVENT) rufe ich sgm_r($EVENT) auf. Die Readings kommen damit gleich ohne Vorsilbe zurück:
sub sgm_r {
    my $EVENT = shift;
    my $hashref = decode_j ($EVENT);
    my $key;
    # nimm die referenz mit Hash
    for (sort keys %$hashref){
        if ( ref $hashref->{$_} eq 'HASH'){$key=$hashref->{$_}}
    }
    $key->{"power_sum"} = 0;
   
    for (1..3) {
          $key->{"power_L$_"} = ($_ == 1) ? active_power ( $key->{'Voltage'},$key->{'Current'},$key->{'phase_angle_L1'} ) :
                        active_power ( $key->{"Voltage_L$_"},$key->{"Current_L$_"},$key->{"phase_angle_L$_"} );
          $key->{"power_sum"} = $key->{"power_sum"} + $key->{"power_L$_"};
    }
  return \%{$key};
}
Man kann das auch "außerhalb" verwenden; Beispiel in der FHEM Kommandozeile:
{
  my $r;;
  my $dev = 'MQTT2_tasmota_8DC170';;
  for (1..3) {
     $r="$r power_L$_ = " . active_power (ReadingsVal($dev,"SGM_Voltage_L$_",ReadingsVal($dev,"SGM_Voltage","")),ReadingsVal($dev,"SGM_Current_L$_",ReadingsVal($dev,"SGM_Current","")),ReadingsVal($dev,"SGM_phase_angle_L$_","") )."\n"
  }
  return $r
}
Die Summe weicht allerdings immer etwas von der Summe ab die der Zähler direkt liefert. Sicher lassen sich diese Differenzen irgendwie erklären.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Prof. Dr. Peter Henning

Zitat von: Otto123 am 30 Mai 2024, 21:08:28Die Summe weicht allerdings immer etwas von der Summe ab die Zähler direkt liefert
. Klar. Ich tippe darauf, dass die Werte für I, U und cos(phi) zu minimal unterschiedlichen Zeiten erfasst werden.

LG

pah

Otto123

oder es liegt am median Filter welches im Tasmota Script per default aktiviert ist
Zitat<flag>   Options flag:
- 0 - counter without pullup
- 1 - counter with pullup
- 16 - enable median filter for that meter. Can help with sporadic dropouts, reading errors (not available for counters). this option is enabled by default #define USE_SML_MEDIAN_FILTER, if you are low on memory and dont use this feature you may outcomment this define in the driver
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz