used index for PZEM measurements
This commit is contained in:
parent
89f7df59d4
commit
d7168937af
36
main.c
36
main.c
@ -304,16 +304,15 @@ void main(void)
|
||||
|
||||
// start getting all PZEM-004T measurements from all meters
|
||||
struct sensor_pzem_measurement_t pzem_measurements[2][SENSOR_PZEM_MAX]; // PZEM-004T measurements (2 meters, all measurements)
|
||||
uint8_t pzem_id = 0; // PZEM-004T meter index (add to prefix)
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_id, 0); // request first measurement
|
||||
(void)pzem_measurements[pzem_id][0];
|
||||
uint8_t pzem_meter = 0; // PZEM-004T meter index (add to prefix)
|
||||
uint8_t pzem_measurement = 0; // PZEM-004T measurement index (matches the type)
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request first measurement
|
||||
|
||||
// start getting all SDM120 measurements from all meters
|
||||
float sdm120_measurements[2][SENSOR_SDM120_MEASUREMENT_MAX]; // SDM120 measurements (2 meters, all measurements)
|
||||
uint8_t sdm120_meter = 0; // SDM120 meter index (add to 1 to get ID)
|
||||
uint8_t sdm120_measurement = 0; // SDM120 measurement index
|
||||
sensor_sdm120_measurement_request(1+sdm120_meter, sdm120_measurement); // request first measurement
|
||||
(void)sdm120_measurements[sdm120_meter][sdm120_measurement];
|
||||
|
||||
while (true) { // infinite loop
|
||||
iwdg_reset(); // kick the dog
|
||||
@ -354,20 +353,19 @@ void main(void)
|
||||
fprintf(stderr,"unknown measurement type: %u\n", measurement.type);
|
||||
while (true); // unhandled error
|
||||
}
|
||||
pzem_measurements[pzem_id][measurement.type] = measurement; // save measurement (the type matches the index)
|
||||
if (measurement.valid) { // only show valid measurement
|
||||
switch (measurement.type) {
|
||||
case SENSOR_PZEM_VOLTAGE:
|
||||
printf("PZEM-004T meter %u voltage: %.01f V\n", pzem_id, measurement.value.voltage); // display measurement
|
||||
printf("PZEM-004T meter %u voltage: %.01f V\n", pzem_meter, measurement.value.voltage); // display measurement
|
||||
break;
|
||||
case SENSOR_PZEM_CURRENT:
|
||||
printf("PZEM-004T meter %u current: %.02f A\n", pzem_id, measurement.value.current);
|
||||
printf("PZEM-004T meter %u current: %.02f A\n", pzem_meter, measurement.value.current);
|
||||
break;
|
||||
case SENSOR_PZEM_POWER:
|
||||
printf("PZEM-004T meter %u power: %.00f W\n", pzem_id, measurement.value.power);
|
||||
printf("PZEM-004T meter %u power: %.00f W\n", pzem_meter, measurement.value.power);
|
||||
break;
|
||||
case SENSOR_PZEM_ENERGY:
|
||||
printf("PZEM-004T meter %u energy: %lu Wh\n", pzem_id, measurement.value.energy);
|
||||
printf("PZEM-004T meter %u energy: %lu Wh\n", pzem_meter, measurement.value.energy);
|
||||
break;
|
||||
/* not used for this application
|
||||
case SENSOR_PZEM_ADDRESS:
|
||||
@ -380,16 +378,24 @@ void main(void)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (measurement.type<SENSOR_PZEM_MAX-1) { // not all measurement types requested
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_id, measurement.type+1); // request next measurement
|
||||
if (measurement.type!=pzem_measurement) {
|
||||
fprintf(stderr, "PZEM-004T measurement mismatch: expected %u, got %u\n", pzem_measurement, measurement.type);
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request same measurement
|
||||
} else if (pzem_measurement<SENSOR_PZEM_MAX-1) { // not all measurement types requested
|
||||
pzem_measurements[pzem_meter][pzem_measurement] = measurement; // save measurement (the type matches the index)
|
||||
pzem_measurement++; // go to next measurement
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request next measurement
|
||||
} else { // all measurement types requested
|
||||
pzem_id++; // got to next meter
|
||||
if (pzem_id<LENGTH(pzem_measurements)) { // ensure next meter exists
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_id, 0); // request measurement for next meter
|
||||
pzem_measurements[pzem_meter][pzem_measurement] = measurement; // save measurement (the type matches the index)
|
||||
pzem_meter++; // got to next meter
|
||||
pzem_measurement = 0; // restart measurements
|
||||
if (pzem_meter<LENGTH(pzem_measurements)) { // ensure next meter exists
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request measurement for next meter
|
||||
}
|
||||
}
|
||||
} else { // measurement not valid
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_id, measurement.type+1); // request same measurement
|
||||
fprintf(stderr, "PZEM-004T measurement invalid\n");
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request same measurement
|
||||
}
|
||||
}
|
||||
while (sensor_sdm120_measurement_received) { // measurement from electricity meter received
|
||||
|
Loading…
Reference in New Issue
Block a user