+ Antworten
Ergebnis 1 bis 5 von 5
  1. #1
    Registriert seit
    Jun 2015
    Ort
    Niederbayern
    Beiträge
    93

    Standard SML Stromzähler - falsche Werte Wirkleistung wenn PV Einspeisung - 4er HEX Gruppe

    Moin zusammen!
    Ich bräuchte mal Hilfe von den PHP Spezis unter euch. Meinen Stromzähler lese ich mit folgendem Skript aus.
    PHP-Code:
    <?

    if($_IPS['SENDER'] == "RegisterVariable")
    {
    // Wirkleistung (Wirk-Leistung Total) Obiskennung:1-0.16.7.0*255 Hex:01 00 10 07 00 FF
     
    if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x10).chr(0x07).chr(0x00).chr(0xFF)) !== false)
     {
        
    $wirkleistung explode(chr(0x01).chr(0x00).chr(0x10).chr(0x07).chr(0x00).chr(0xFF), $_IPS['VALUE']);
        
    SetValue(38307 hexdec(Str2Hex(substr($wirkleistung[1], 72))));
     }
     }
     
    Cutter_ClearBuffer(17638); 

    function 
    Str2Hex($daten)
    {
     
    $hex "";
      for(
    $i=0$i<strlen($daten); $i++)
       
    $hex .= sprintf("%02X "ord($daten[$i]));
      return 
    $hex;
    }
    function 
    hex2str($hex)
    {
     
    $str "";
       for(
    $i=0;$i<strlen($hex);$i+=2)
     
    $str .= chr(hexdec(substr($hex,$i,2)));
       return 
    $str;
    }
    ?>
    Solange die PV Anlage nichts einspeist wird der korrekte Werte der Wirkleistung ausgelesen. Beginnt nun aber die Anlage Strom einzuspeisen, wird aus der 2er HEX Gruppe eine 4er HEX Gruppe. Der ausgelesen Wert liefert dann nur unplausible Zahlen. Am Stromzähler selbst abzulesen ist in diesem Moment die Wirkleistung aus Einspeisung PV abzüglich der Wirkleistung des Momentanverbrauchs. Ergebnis also keine negative Zahl.

    Keine Einspeisung:
    Code:
    00 10 07 00 FF 01 01 62 1B 52 00 53 03 52
    Mit Einspeisung:
    Code:
    00 10 07 00 FF 01 01 62 1B 52 00 53 0408
    Hat jemand eine Idee/Lösung wie ich das Problem in den Griff bekomme???

  2. #2
    Registriert seit
    Feb 2013
    Ort
    Rems-Murr-Kreis
    Beiträge
    168

    Moin,

    was ist denn das genau für ein SML Modell?
    Frage nur zur Sicherheit: ist das denn ein Zähler mit dem man überhaupt Einspeisung messen kann?
    Ob die Zahlen da nun mit oder ohne Leerstelle stehen ist m.A. nach egal.

    Ich nutze quasi das gleiche Script wie du.
    0352 würde bei mir bedeuten dass ich 850W beziehe, mit Einspeisung dann 1032W (0408)

    Das mag durchaus plausibel sein, da das ja immer nur eine Momentaufnahme ist, hängt ja dann von deinem tatsächlichem Stromverbrauch und Erzeugung ab.

    Ob die Werte valide sind oder nicht kann man m.M. nach nur feststellen wenn du zu einem definierten Zeitpunkt abliest was dein Bezug ist und was die PV gerade erzeugt. Dabei sollte möglichst keine oder nur ein definierter Verbraucher laufen (z.B. Fön oder Heizlüfter).

    Update: ich entferne aus dem String immer noch die Leerzeichen bevor ich das aus Hex konvertiere:

    Code:
        // Wirkleistung (Wirk-Leistung Total) Obiskennung:1-0.15.7.0*255 Hex:01 00 0F 07 00 FF
        if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x10).chr(0x07).chr(0x00).chr(0xFF)) !== false)
        {
           $wirkleistung = explode(chr(0x01).chr(0x00).chr(0x10).chr(0x07).chr(0x00).chr(0xFF), $_IPS['VALUE'],2);
           $tmp= substr($wirkleistung[1], 7, 2);
           $tmp=Str2Hex($tmp);
           $tmp=str_replace(" ", "", $tmp);
           $tmp_wirk = hexdec($tmp);
          
           SetValue(37397, $tmp_wirk);
          
            }
    VG, Lutz
    Geändert von funkmaster (29.07.20 um 09:52 Uhr)
    IP-Symcon 5.5 Ninja unlimited -- Ubuntu 18.04 / ESXi 6.5 / HP Gen8
    IPSView auf POE Tablet Android / iPhone -- >100x Homematic / HmIP -- piVCCU 3 / Pi3B+ -- GeCos -- Viessmann -- SMA -- EHZ -- WifiRGB -- Sharp TV -- Unifi -- HIKVision -- Alexa -- Daikin

  3. #3
    Registriert seit
    Jun 2015
    Ort
    Niederbayern
    Beiträge
    93

    SML Version ist 1.04. Wenn ich am Zählerdisplay die aktuelle Wirkleistung ablese ist das der Wert aus Einspeisung minus Verbrauch. Am Display passt der Wert also.
    Ich hab mein Skript mal nach deiner Variante angepasst. Das Ergebnis ist leider das selbe
    Aktuell gibt mir das Skript Werte um die 54000W aus. Die PV produziert im Moment ca 13500W und der Verbrauch liegt bei ugf 2500W. Müsste also bei 11000W liegen und das zeigt der Zähler auf dem Display auch korrekt an.

    Any ideas?

  4. #4
    Registriert seit
    Jun 2015
    Ort
    Niederbayern
    Beiträge
    93

    Moin zusammen,

    mittlerweile habe ich 3 Stromzähler von 2 verschiedenen Herstellern verbaut. Alle 3 Zähler zeigen bei Einspeisung durch die PV Anlage diese falschen Werte für die momentane Wirkleistung an. Ich denke dass die Zähler Bezug - Einspeisung rechnen und somit ein negativer Wert das Ergebnis sein müsste.
    Wie bekomme ich das in meinem Skript korrekt umgesetzt? Hat hier jemand eine Idee?

  5. #5
    Registriert seit
    Jun 2015
    Ort
    Niederbayern
    Beiträge
    93

    Ich führe hier mal mein Selbstgespräch fort...

    Hab heute den SML Stream vom neuen Zähler (Typ EFR SGM-C4) bei Einspeisung und Bezug verglichen. Das Ergebnis sieht wie folgt aus:

    SML wenn Wirkleistung Einspeisung höher als Bezug -> ausgegebener Wert unplausibel ~ 61000 Watt
    Code:
    77 07 01 00 10 07 00 FF 01 01 62 1B 52 00 53 E4 50
    77 07 01 00 10 07 00 FF 01 01 62 1B 52 00 53 E3 6B
    77 07 01 00 10 07 00 FF 01 01 62 1B 52 00 53 E4 3F
    77 07 01 00 10 07 00 FF 01 01 62 1B 52 00 53 E3 12
    SML wenn Wirkleistung Bezug höher als Einspeisung -> ausgegebener Wert ist korrekt und deckt sich mit Wert auf dem Zählerdisplay
    Code:
    77 07 01 00 10 07 00 FF 01 01 62 1B 52 00 53 09 FE
    77 07 01 00 10 07 00 FF 01 01 62 1B 52 00 53 09 F8
    77 07 01 00 10 07 00 FF 01 01 62 1B 52 00 53 09 F7
    77 07 01 00 10 07 00 FF 01 01 62 1B 52 00 53 0A 0C
    Ich denke dass diese Funktion die Ursache für die falsche Berechnung der Wirkleistung ist wenn die Eispeisung höher als der Bezug ist
    PHP-Code:
    function Str2Hex($daten)
    {
     
    $hex "";
      for(
    $i=0$i<strlen($daten); $i++)
       
    $hex .= sprintf("%02X "ord($daten[$i]));
      return 
    $hex;

    Da ich aber leider kein ITler bin hab ich 0,0 Ansatz wie ich das Thema lösen kann.

    Im FHEM Forum hatte jemand den exakt gleichen Fall welcher vom Modulentwickler gelöst werden konnte.
    Das hier war anscheinend das ausschlaggebende Problem
    64841 Watt klingt verdächtig nach 216 - 695 , also 695 Watt Einspeisung. Läuft da ne Variable über?

    Oder signed / unsigned ? -695W
    Hier der Link zur Diskussion im FHEM Forum https://forum.fhem.de/index.php/topi...html#msg440114

    Vielleicht findet sich ja noch jemand der mir weiterhelfen kann...

    Schönen Abend einstweilen!

Ähnliche Themen

  1. HowTo - SML-Stromzähler mit IPS Auslesen
    Von mr_cg im Forum Haustechnik
    Antworten: 76
    Letzter Beitrag: 05.10.20, 11:38
  2. Registervariable und Hex-Werte
    Von SpeedyGhost im Forum Skripte, PHP, SQL
    Antworten: 2
    Letzter Beitrag: 08.03.20, 20:59
  3. Hex-Werte an Child weiterleiten
    Von LOG-IN im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 3
    Letzter Beitrag: 14.12.17, 12:05
  4. Werte richtig anzeigen? Aber wie ? Mod bus Hex werte.
    Von Dicktaracy im Forum 1-Wire, M-BUS
    Antworten: 4
    Letzter Beitrag: 29.11.15, 20:37
  5. Antworten: 2
    Letzter Beitrag: 19.04.13, 22:16