Shelly Modbus zu Growatt Modbus ( SDM630 Emulation ) mit eine ESP aber ohne Umwege ( MQTT, Home Assistant e.t.c.)

Ein ähnliches Projekt habe ich bereits realisiert, jedoch Steuer ich damit einen Soyosource inverter ( RS485 ) an und keinen Modbus wie den Growatt, verstehe noch nicht ganz den unterschied.

Der Soyosource habe ich einfach mit einen Codesnipsel füttern können:
( Ich verstehe diesen Code jedoch nur Teilweise, was bewirkt z.b. “power >> 0x08” oder “power & 0xFF” )

int soyo_power_data[8] = {0x24, 0x56, 0x00, 0x21, 0x00, 0x00, 0x80, 0x08}; // 0 Watt



void setSoyoPowerData(int power){
  soyo_power_data[0] = 0x24;
  soyo_power_data[1] = 0x56;
  soyo_power_data[2] = 0x00;
  soyo_power_data[3] = 0x21;
  soyo_power_data[4] = power >> 0x08;
  soyo_power_data[5] = power & 0xFF;
  soyo_power_data[6] = 0x80;
  soyo_power_data[7] = calc_checksumme(soyo_power_data[1], soyo_power_data[2], soyo_power_data[3], soyo_power_data[4], soyo_power_data[5], soyo_power_data[6]);
}


int calc_checksumme(int b1, int b2, int b3, int b4, int b5, int b6 ){
  int calc = (0xFF - b1 - b2 - b3 - b4 - b5 -b6) % 256;
  return calc & 0xFF;
}



//LOOP
 if ((millis() - lastTime1) > timerDelay1) {
    
    if(value_power >=0){
      setSoyoPowerData(value_power);
      //events.send(String(value_power).c_str(),"staticpower", millis()); // nur an Website senden wenn es ein update vom Power_value gibt! neu 23.04.2023
      newData = false;
    }
    
    //send data to RS485 
    for(int i=0; i<8; i++){
      RS485Serial.write(soyo_power_data[i]);
      DEBUG_SERIAL.print(soyo_power_data[i], HEX);
      DEBUG_SERIAL.print(" ");
    }
}

Das Projekt habe ich euch soeben auch zur Verfügung gestellt falls Interesse besteht:
https://akkudoktor.net/t/soyosource-ueber-shelly-pro-3em-modbus-limitieren-abgeschlossen/

Falls jemand einen Codesnipsel hat um den Growatt einen SDM vorzugaukeln würde dies mir einiges an Lebenszeit ersparen.