Beiträge von Pizza

    Hi


    Auch wenn der Thread schon älter ist... Mir ist ein Problem im Code aufgefallen. Wenn man ein Setup mit HomeManager 2 und Powermeter hat, dann kommen 2 verschieden lange Datagramme an. d.h. man muss schon beim OBIS Auswerten selektieren, von welchem Gerät es kommt sonst stimmen die Werte nicht. Das ältere Powermeter schickt ein 600Byte Datagramm, während der neue HomeManager ein 608Byte Datagramm sendet und dadurch andere OBIS Positionen entstehen. Ich möchte z.b. nur die HM2 Daten auswerten >


    txtStatus.Text+=Environment.NewLine+"Waiting for Broadcast...";

    byte[] readobis = listener.Receive(ref groupEP);


    while (readobis.Length!= 608)

    {

    readobis = listener.Receive(ref groupEP);

    }



    Lg

    Hi


    Ich lese mit einem C# Program (basierend auf der EasyModbus Library https://github.com/stephan1827/modbusTCP) die Werte aus meinen SMA Wechselrichtern aus und sende die Daten via http request an die Homematic weiter.



    MB_SMA1 = new Master("10.0.1.227", 502, true);

    MB_SMA1.OnResponseData += new ModbusTCP.Master.ResponseData(MBmaster_OnResponseData);

    MB_SMA1.OnException += new ModbusTCP.Master.ExceptionData(MBmaster_OnException);


    ushort ID = 1;

    byte unit = 3;

    ushort StartAddress = 30513;

    UInt16 Length = 8;

    MB_SMA1.ReadHoldingRegister(ID, unit, StartAddress, Length);


    ID = 2;

    StartAddress = 30775;

    Length = 4;

    MB_SMA1.ReadHoldingRegister(ID, unit, StartAddress, Length);

    }





    case 1: //Energy SMA1

    data = new byte[8];

    for (int i = 0; i < 8; i++) { data[i] = values[7 - i]; }


    iWsol2 = BitConverter.ToInt64(data, 0);

    lSMA1EnergyProduced.Text = "Energy produced : " + iWsol2.ToString("###,###,##0 Wh");

    lSMA1EnergyProducedTd.Text = "Energy produced Td: " + ((int)(iWsol2 - iWsol2Td)).ToString("###,###,##0 Wh");

    lSMA1EnergyProducedLd.Text = "Energy produced Ld: " + ((int)(iWsol2Td - iWsol2Ld)).ToString("###,###,##0 Wh");

    break;

    case 2: //Power SMA1

    if (values[0] != 128)

    {

    data = new byte[4];

    for (int i = 0; i < 4; i++) { data[i] = values[3 - i]; }


    dPsol2 = BitConverter.ToInt32(data, 0);

    }

    else dPsol2 = 0;

    lSMA1Power.Text = "Power : " + dPsol2.ToString("###,##0 W");

    break;





    Lg

    Christian

    Hi


    Würden Dir andere Panele optisch wehtun? Wenn Du möchtest kann ich mir die Sache auch mal ansehen. Ich wohne auch im Osten von Klagenfurt.


    Lg