NEWS
Strommessung E-Herd
-
@mcm57 Tatsächlich kenne ich die EM gar nicht und habe meine Erläuterungen ganz "allgemein" auf ein-/mehrphasige Messungen bezogen.
Wenn die EM aber sogar den Phasenwinkel zwischen Strom und Spannung "ignorieren", sind das ja gar keine Wirkleistungsmeßgeräte. Dann kommt noch genau das Problem hinzu, das Du beschreibst:
Die korrekte (Wirk)leistung kann nur ermittelt werden, wenn (zufällig oder weil es eben "normale" Heizplatten und z. B. kein Induktionsherd ist) der Phasenwinkel 0, der cos(phi) also 1 ist. Und das ganze auch nur dann, wenn nur eine Phase durch den Wandler geführt wird oder die beiden anderen Null sind!Ich bin jetzt zu faul zu überlegen ob dieser "Fehler" des EM hier von Nutzen ist.
Ist er nicht.
Dass das Messverfahren prinzipiell geeignet wäre bezweifle ich aber seeeeehr stark. Sonst würden EVUs wohl kaum 3 Wandler einbauenw enn einer auch genügt :-).
Genau! Denn eine etwaige Phasenverschiebung zwischen Strom und Spannung in einer Phase ist erst einmal vollkommen unabhängig von der Phasenverschiebung der drei Spannungen im Drehstromsystem.
Ersteres kann "zufällig" ein korrektes Meßergebnis bringen, nämlich wenn rein ohmsche Last vorliegt und damit die Phasenverschiebung 0 ist.
Die 3 Phasenspannungen des Drehstromsystems haben hingegen immer 120° Verschiebung und die daraus resultierende Ströme werden, wenn ich sie zusammen durch einen Wandler führe, daher keinen Meßwert ergeben, aus dem die Gesamtleistung ermittelt werden kann. Ausnahme: Nur einer dieser Ströme ist größer als 0 (siehe meinen 2. Post). -
KORREKTUR:
Ich muss ein Korrektur zum EM anbringen.
Der Shelly EM misst den Phasenwinkel und zeigt ihn auch an.
Ich habe das mit der Messung der PM verwechselt. Dieser misst nur Spannung und Strom (lt. Diskussion im shelly Forum)
Der Shelly 3EM misst ebenfalls den Phasenwinkel.Ob die Plugs den Phasenwinkel messen weiß ich nicht. Ebenso weiß ich nicht ob es mit der 2er Serie da Änderungen gab.
-
Alternative wäre auch 3 PZEM004 Module funktoniert bei mir prima zusammen.
-
Ich dachte es gebe hier eine einfache Möglichkeit, einfach den tatsächlichen Stromverbrauch des E-Herdes zu messen.
-
@manfredhi sagte in Strommessung E-Herd:
Ich dachte es gebe hier eine einfache Möglichkeit, einfach den tatsächlichen Stromverbrauch des E-Herdes zu messen.
was willst du uns damit sagen?
-
@homoran sagte in Strommessung E-Herd:
was willst du uns damit sagen?
naja das hört sich alles ziemlich kompliziert an, was hier so geschrieben wird. Dachte es gibt etwas, was in den Zählerkasten eingebaut wird und einfach den Strom misst, der vom E-Herd (über die 3 Phasen) verbraucht wird.
-
@manfredhi sagte in Strommessung E-Herd:
Dachte es gibt etwas, was in den Zählerkasten eingebaut wird und einfach den Strom misst, der vom E-Herd (über die 3 Phasen) verbraucht wird.
@homoran sagte in Strommessung E-Herd:
Da kannst du dir vom Elektriker einen SDM72 einbauen lassen und per modbus auslesen.
-
@manfredhi
Ok ja gibt es natürlich.
Shelly 3EM tut das z.B. Detto 3EM pro.
Ebenso jeder 3 Phasenzähler mit Schnittstelle.
Da ich hier keine Erfahrung habe will ich keine Typen nennen.Einbau im Verteilerkasten sollte durch Elektriker erfolgen.
Nachtrag Shrllies haben wlan. Aber wo wlan ist gibts im Bedarfsfall auch kabel via repeater.
-
@manfredhi Ich bin davon ausgegangen, daß Du mit Stromverbrauch (eher ein umgangssprachlicher Ausdruck) eigentlich (Wirk)energieverbauch (eher der Fachbegriff) gemeint hast, also das, was der Zähler auch mißt und anzeigt. Tut mir leid, wenn ich da ´was "losgetreten habe", was Dich nun "frustriert", aber es ist ja auch nicht hilfreich, etwas zu messen, was eigentlich nicht das ist, was man will. Darauf wollte ich nur hinweisen. Was Du willst, ist nicht kompliziert zu messen (siehe @Homoran ´s SDM72-Vorschlag), aber Du brauchst dazu eben ein Meßgerät, das dazu auch in der Lage ist. Für Wirkleistung/-energie muß im allgemeinen Fall da leider Strom und Spannung inkl. des Phasenwinkels der beiden zueinander und dann im Drehstromnetz das ganze auch noch dreiphasig gemessen werden. Einfacher ginge das eben leider nur, wenn man sicher wüßte, daß es sich nur um rein ohmsche Last handelt (dann braucht man den Phasenwinkel nicht messen, weil der dann immer 0 wäre) oder wenn der Verbraucher symmetrisch ist (dann braucht man nur eine Phase messen und mit 3 multiplizieren).
-
Kann man ohne großen Aufwand in der Tasmota Seite für den 630 die Anzeige Voltage in Spannung( Current in Strom usw ändern. Ich habe es bereits probiert das ganze zu ersetzen aber da bekomme ich immer beil kompilieren einen Fehler.
/* xnrg_10_sdm630.ino - Eastron SDM630-Modbus energy meter support for Tasmota Copyright (C) 2021 Gennaro Tortone and Theo Arends This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifdef USE_ENERGY_SENSOR #ifdef USE_SDM630 /*********************************************************************************************\ * Eastron SDM630-Modbus energy meter * * Based on: https://github.com/reaper7/SDM_Energy_Meter \*********************************************************************************************/ #define XNRG_10 10 // can be user defined in my_user_config.h #ifndef SDM630_SPEED #define SDM630_SPEED 9600 // default SDM630 Modbus address #endif // can be user defined in my_user_config.h #ifndef SDM630_ADDR #define SDM630_ADDR 1 // default SDM630 Modbus address #endif #include <TasmotaModbus.h> TasmotaModbus *Sdm630Modbus; const uint16_t sdm630_start_addresses[] { // 3P4 3P3 1P2 Unit Description 0x0000, // + - + V Phase 1 line to neutral volts 0x0002, // + - - V Phase 2 line to neutral volts 0x0004, // + - - V Phase 3 line to neutral volts 0x0006, // + + + A Phase 1 current 0x0008, // + + - A Phase 2 current 0x000A, // + + - A Phase 3 current 0x000C, // + - + W Phase 1 power 0x000E, // + - + W Phase 2 power 0x0010, // + - - W Phase 3 power 0x0018, // + - + VAr Phase 1 volt amps reactive 0x001A, // + - - VAr Phase 2 volt amps reactive 0x001C, // + - - VAr Phase 3 volt amps reactive 0x001E, // + - + Phase 1 power factor 0x0020, // + - - Phase 2 power factor 0x0022, // + - - Phase 3 power factor 0x0046, // + + + Hz Frequency of supply voltages 0x0160, // + + + kWh Phase 1 export active energy 0x0162, // + + + kWh Phase 2 export active energy 0x0164, // + + + kWh Phase 3 export active energy //#ifdef SDM630_IMPORT 0x015A, // + + + kWh Phase 1 import active energy 0x015C, // + + + kWh Phase 2 import active energy 0x015E, // + + + kWh Phase 3 import active energy //#endif // SDM630_IMPORT 0x0156 // + + + kWh Total active energy }; struct SDM630 { uint8_t read_state = 0; uint8_t send_retry = 0; } Sdm630; /*********************************************************************************************/ void SDM630Every250ms(void) { bool data_ready = Sdm630Modbus->ReceiveReady(); if (data_ready) { uint8_t buffer[14]; // At least 5 + (2 * 2) = 9 uint32_t error = Sdm630Modbus->ReceiveBuffer(buffer, 2); AddLogBuffer(LOG_LEVEL_DEBUG_MORE, buffer, Sdm630Modbus->ReceiveCount()); if (error) { AddLog(LOG_LEVEL_DEBUG, PSTR("SDM: SDM630 error %d"), error); } else { Energy->data_valid[0] = 0; Energy->data_valid[1] = 0; Energy->data_valid[2] = 0; // 0 1 2 3 4 5 6 7 8 // SA FC BC Fh Fl Sh Sl Cl Ch // 01 04 04 43 66 33 34 1B 38 = 230.2 Volt float value; ((uint8_t*)&value)[3] = buffer[3]; // Get float values ((uint8_t*)&value)[2] = buffer[4]; ((uint8_t*)&value)[1] = buffer[5]; ((uint8_t*)&value)[0] = buffer[6]; switch(Sdm630.read_state) { case 0: Energy->voltage[0] = value; break; case 1: Energy->voltage[1] = value; break; case 2: Energy->voltage[2] = value; break; case 3: Energy->current[0] = value; break; case 4: Energy->current[1] = value; break; case 5: Energy->current[2] = value; break; case 6: Energy->active_power[0] = value; break; case 7: Energy->active_power[1] = value; break; case 8: Energy->active_power[2] = value; break; case 9: Energy->reactive_power[0] = value; break; case 10: Energy->reactive_power[1] = value; break; case 11: Energy->reactive_power[2] = value; break; case 12: Energy->power_factor[0] = value; break; case 13: Energy->power_factor[1] = value; break; case 14: Energy->power_factor[2] = value; break; case 15: Energy->frequency[0] = value; break; case 16: Energy->export_active[0] = value; break; case 17: Energy->export_active[1] = value; break; case 18: Energy->export_active[2] = value; break; case 19: Energy->import_active[0] = value; break; case 20: Energy->import_active[1] = value; break; case 21: Energy->import_active[2] = value; break; case 22: // Energy->import_active[0] = value; EnergyUpdateTotal(); break; } Sdm630.read_state++; if (sizeof(sdm630_start_addresses)/2 == Sdm630.read_state) { Sdm630.read_state = 0; } } } // end data ready if (0 == Sdm630.send_retry || data_ready) { Sdm630.send_retry = 5; Sdm630Modbus->Send(SDM630_ADDR, 0x04, sdm630_start_addresses[Sdm630.read_state], 2); } else { Sdm630.send_retry--; } } void Sdm630SnsInit(void) { Sdm630Modbus = new TasmotaModbus(Pin(GPIO_SDM630_RX), Pin(GPIO_SDM630_TX), Pin(GPIO_NRG_MBS_TX_ENA)); uint8_t result = Sdm630Modbus->Begin(SDM630_SPEED); if (result) { if (2 == result) { ClaimSerial(); } Energy->phase_count = 3; Energy->frequency_common = true; // Use common frequency } else { TasmotaGlobal.energy_driver = ENERGY_NONE; } } void Sdm630DrvInit(void) { if (PinUsed(GPIO_SDM630_RX) && PinUsed(GPIO_SDM630_TX)) { TasmotaGlobal.energy_driver = XNRG_10; } } /*********************************************************************************************\ * Interface \*********************************************************************************************/ bool Xnrg10(uint32_t function) { bool result = false; switch (function) { case FUNC_EVERY_250_MSECOND: SDM630Every250ms(); break; case FUNC_INIT: Sdm630SnsInit(); break; case FUNC_PRE_INIT: Sdm630DrvInit(); break; } return result; } #endif // USE_SDM630 #endif // USE_ENERGY_SENSOR