Closed jayvdw13 closed 2 years ago
01 04 00 0E 00 02 10 08 01 04 00 7F F8 84
here is an example of a request and answer from the meter
03 04 00 0C 00 02 B0 2A 03 04 04 41 1C 96 E9 A3 90 another example
01 04 00 04 00 02 30 0A 01 04 04 00 00 00 00 FB 84
i noticed i had two meters with the same id this is a request and answer after i fixed it
whenever i connect multiple meters i get a timeout or a CRC error and a timeout error. here is my code `#include
include
float voltage1L1; float voltage1L2; float voltage1L3; float current1L1; float current1L2; float current1L3; float power1L1; float power1L2; float power1L3; float kwh1L1; float kwh1L2; float kwh1L3; float kwh1;
float voltage2L1; float voltage2L2; float voltage2L3; float current2L1; float current2L2; float current2L3; float power2L1; float power2L2; float power2L3; float kwh2L1; float kwh2L2; float kwh2L3; float kwh2;
float voltage3L1; float voltage3L2; float voltage3L3; float current3L1; float current3L2; float current3L3; float power3L1; float power3L2; float power3L3; float kwh3L1; float kwh3L2; float kwh3L3; float kwh3;
if defined ( USE_HARDWARESERIAL ) //for HWSERIAL
if defined ( ESP8266 ) //for ESP8266
SDM sdm(Serial1, 2400, 22, SERIAL_8N1); //config SDM
elif defined ( ESP32 ) //for ESP32
SDM sdm(Serial1, 2400, 22, SERIAL_8N1, SDM_RX_PIN, SDM_TX_PIN); //config SDM
else //for AVR
SDM sdm(Serial1, 2400, 22); //config SDM on Serial1 (if available!)
endif
else //for SWSERIAL
include //import SoftwareSerial library
if defined ( ESP8266 ) || defined ( ESP32 ) //for ESP
SoftwareSerial swSerSDM; //config SoftwareSerial SDM sdm(swSerSDM, 2400, 22, SWSERIAL_8N1, SDM_RX_PIN, SDM_TX_PIN); //config SDM
else //for AVR
SoftwareSerial swSerSDM(SDM_RX_PIN, SDM_TX_PIN); //config SoftwareSerial SDM sdm(swSerSDM, 2400, 22); //config SDM
endif
endif
void setup(){ //!
Serial.begin(115200); SPIFFS.begin(true); sdm.begin(); }
//-------------------------------------------------------------------- void loop() { char bufout[10]; sprintf(bufout, "%c[1;0H", 27); Serial.print(bufout); //meter1 float voltage1l1 = sdm.readVal(SDM_PHASE_1_VOLTAGE, 0x01); Serial.print("Last ERROR: "); Serial.println(sdm.getErrCode(true)); delay(100); float voltage1l2 = sdm.readVal(SDM_PHASE_2_VOLTAGE, 0x01); Serial.print("Last ERROR: "); Serial.println(sdm.getErrCode(true)); delay(100); float voltage1l3 = sdm.readVal(SDM_PHASE_3_VOLTAGE, 0x01);
delay(100); voltage1L1 = voltage1l1; voltage1L2 = voltage1l2; voltage1L3 = voltage1l3; Serial.println(voltage1L1); Serial.println(voltage1L2); Serial.println(voltage1L3);
float current1l1 = sdm.readVal(SDM_PHASE_1_CURRENT, 0x01); Serial.print("Last ERROR: "); Serial.println(sdm.getErrCode(true)); delay(100); float current1l2 = sdm.readVal(SDM_PHASE_2_CURRENT, 0x01); Serial.print("Last ERROR: "); Serial.println(sdm.getErrCode(true)); delay(100); float current1l3 = sdm.readVal(SDM_PHASE_3_CURRENT, 0x01);
delay(100); current1L1 = current1l1; current1L2 = current1l2; current1L3 = current1l3; Serial.println(current1L1);
Serial.println(current1L2); Serial.println(current1L3);
float power1l1 = sdm.readVal(SDM_PHASE_1_POWER, 0x01); Serial.print("Last ERROR: "); Serial.println(sdm.getErrCode(true)); delay(100); float power1l2 = sdm.readVal(SDM_PHASE_2_POWER, 0x01); Serial.print("Last ERROR: "); Serial.println(sdm.getErrCode(true)); delay(100); float power1l3 = sdm.readVal(SDM_PHASE_3_POWER, 0x01); delay(100); power1L1 = power1l1; power1L2 = power1l2; power1L3 = power1l3;
Serial.println(power1L1); Serial.println(power1L2); Serial.println(power1L3);
float kwh01 = sdm.readVal(SDM_TOTAL_ACTIVE_ENERGY, 0x01); delay(100); float kwh1l1 = sdm.readVal(SDM_L1_IMPORT_ACTIVE_ENERGY, 0x01); delay(100); float kwh1l2 = sdm.readVal(SDM_L2_IMPORT_ACTIVE_ENERGY, 0x01); delay(100); float kwh1l3 = sdm.readVal(SDM_L3_IMPORT_ACTIVE_ENERGY, 0x01); delay(100); kwh1 = kwh01; kwh1L1 = kwh1l1; kwh1L2 = kwh1l2; kwh1L3 = kwh1l3; Serial.println(kwh1); Serial.println(kwh1l1); Serial.println(kwh1l2); Serial.println(kwh1l3);
//meter2 float voltage2l1 = sdm.readVal(SDM_PHASE_1_VOLTAGE, 0x02); delay(100); float voltage2l2 = sdm.readVal(SDM_PHASE_2_VOLTAGE, 0x02); delay(100); float voltage2l3 = sdm.readVal(SDM_PHASE_3_VOLTAGE, 0x02); delay(100); voltage1L1 = voltage2l1; voltage1L2 = voltage2l2; voltage1L3 = voltage2l3; Serial.println(voltage2L1);
float current2l1 = sdm.readVal(SDM_PHASE_1_CURRENT, 0x02); delay(100); float current2l2 = sdm.readVal(SDM_PHASE_2_CURRENT, 0x02); delay(100); float current2l3 = sdm.readVal(SDM_PHASE_3_CURRENT, 0x02); delay(100); current2L1 = current2l1; current2L2 = current2l2; current2L3 = current2l3; Serial.println(current2L1);
float power2l1 = sdm.readVal(SDM_PHASE_1_POWER, 0x02); delay(100); float power2l2 = sdm.readVal(SDM_PHASE_2_POWER, 0x02); delay(100); float power2l3 = sdm.readVal(SDM_PHASE_3_POWER, 0x02); delay(100); power2L1 = power2l1; power2L2 = power2l2; power2L3 = power2l3; Serial.println(power2L1);
float kwh02 = sdm.readVal(SDM_TOTAL_ACTIVE_ENERGY, 0x02); delay(100); float kwh2l1 = sdm.readVal(SDM_L1_IMPORT_ACTIVE_ENERGY, 0x02); delay(100); float kwh2l2 = sdm.readVal(SDM_L2_IMPORT_ACTIVE_ENERGY, 0x02); delay(100); float kwh2l3 = sdm.readVal(SDM_L3_IMPORT_ACTIVE_ENERGY, 0x02); delay(100); kwh2 = kwh02; kwh2L1 = kwh2l1; kwh2L2 = kwh2l2; kwh2L3 = kwh2l3; Serial.println(kwh2L1);
//meter3 float voltage3l1 = sdm.readVal(SDM_PHASE_1_VOLTAGE, 0x03); float voltage3l2 = sdm.readVal(SDM_PHASE_2_VOLTAGE, 0x03); float voltage3l3 = sdm.readVal(SDM_PHASE_3_VOLTAGE, 0x03);
voltage3L1 = voltage3l1; voltage3L2 = voltage3l2; voltage3L3 = voltage3l3; Serial.println(voltage3L1);
float current3l1 = sdm.readVal(SDM_PHASE_1_CURRENT, 0x03); float current3l2 = sdm.readVal(SDM_PHASE_2_CURRENT, 0x03); float current3l3 = sdm.readVal(SDM_PHASE_3_CURRENT, 0x03); current3L1 = current3l1; current3L2 = current3l2; current3L3 = current3l3; Serial.println(current3L1);
float power3l1 = sdm.readVal(SDM_PHASE_1_POWER, 0x03); float power3l2 = sdm.readVal(SDM_PHASE_2_POWER, 0x03); float power3l3 = sdm.readVal(SDM_PHASE_3_POWER, 0x03); power3L1 = power3l1; power3L2 = power3l2; power3L3 = power3l3; Serial.println(power3L1);
float kwh03 = sdm.readVal(SDM_TOTAL_ACTIVE_ENERGY, 0x03); float kwh3l1 = sdm.readVal(SDM_L1_IMPORT_ACTIVE_ENERGY, 0x03); float kwh3l2 = sdm.readVal(SDM_L2_IMPORT_ACTIVE_ENERGY, 0x03); float kwh3l3 = sdm.readVal(SDM_L3_IMPORT_ACTIVE_ENERGY, 0x03); kwh3 = kwh03; kwh3L1 = kwh3l1; kwh3L2 = kwh3l2; kwh3L3 = kwh3l3; Serial.println(kwh3L1);
}`
` //define user baudrate
define SDM_UART_BAUD 2400
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
define USE_HARDWARESERIAL
//------------------------------------------------------------------------------
if defined ( ESP8266 ) || defined ( ESP32 )
define SDM_RX_PIN 13
define SDM_TX_PIN 15
endif
//------------------------------------------------------------------------------
define DERE_PIN 22
//------------------------------------------------------------------------------
define SDM_UART_CONFIG SERIAL_8N1
//#define SDM_UART_CONFIG SWSERIAL_8N1
//------------------------------------------------------------------------------
define WAITING_TURNAROUND_DELAY 800
//------------------------------------------------------------------------------
define RESPONSE_TIMEOUT 600
//------------------------------------------------------------------------------ `
no changes where made to SDM.h or SDM.cpp