Thomas Chef пре 3 година
родитељ
комит
25a9e80d65
3 измењених фајлова са 24 додато и 10 уклоњено
  1. 6 4
      main/displayAndSend.c
  2. 16 4
      main/pcnt_functions.c
  3. 2 2
      main/serial.c

+ 6 - 4
main/displayAndSend.c

@@ -69,7 +69,7 @@ void displayAndSendTask(void *pvParameters) {
                           SSD1306_Puts(txt, &Font_7x10,SSD1306_COLOR_WHITE);
                           SSD1306_UpdateScreen();
                           sprintf(txt,"%d",data.iData);
-                          sendMQTTMessage("house/basement/homeEnergyMeter/waterHeaterTotalEnergy", txt);
+                          sendMQTTMessage("homeEnergyMeter/waterHeater/totalEnergy", txt);
                           aliveCnt++;
                           break;
                 case type_TempA:
@@ -78,7 +78,7 @@ void displayAndSendTask(void *pvParameters) {
                           SSD1306_Puts(txt, &Font_7x10,SSD1306_COLOR_WHITE);
                           SSD1306_UpdateScreen();
                           sprintf(txt,"%.2f",data.dData);
-                          sendMQTTMessage("house/basement/homeEnergyMeter/moduleInternalTemp", txt);
+                          sendMQTTMessage("homeEnergyMeter/internal/temp", txt);
                           break;
                 case type_TempB:
                           sprintf(txt,"   %.1f\044C",data.dData);
@@ -86,7 +86,7 @@ void displayAndSendTask(void *pvParameters) {
                           SSD1306_Puts(txt, &Font_7x10,SSD1306_COLOR_WHITE);
                           SSD1306_UpdateScreen();
                           sprintf(txt,"%.2f",data.dData);
-                          sendMQTTMessage("house/basement/homeEnergyMeter/waterHeaterTemp", txt);
+                          sendMQTTMessage("homeEnergyMeter/waterHeater/temp", txt);
                           break;
                 case type_kWh:
                           sprintf(txt,"   %.2f",data.dData);
@@ -94,7 +94,9 @@ void displayAndSendTask(void *pvParameters) {
                           SSD1306_Puts(txt, &Font_7x10,SSD1306_COLOR_WHITE);
                           SSD1306_UpdateScreen();
                           sprintf(txt,"%.5f",data.dData);
-                          sendMQTTMessage("house/basement/homeEnergyMeter/homeTotalEnergy", txt);
+                          sendMQTTMessage("homeEnergyMeter/electricityMeter/kWh", txt);
+                          sprintf(txt,"%d",data.iData);
+                          sendMQTTMessage("homeEnergyMeter/electricityMeter/pulses", txt);
                           break;
                 default:
                           break;

+ 16 - 4
main/pcnt_functions.c

@@ -25,6 +25,12 @@
 
 // Example-code: https://github.com/espressif/esp-idf/blob/master/examples/peripherals/pcnt/pulse_count_event/main/pcnt_event_example_main.c
 
+typedef struct {
+    double kWh;
+    uint32_t pulses32K;
+    uint32_t pulses;
+} pulseData_t;
+
 // Counts interrupts that occus every 32K Pulses
 // The counter register is 16 bit signed so we count to 32K before doing an interrupt
 // This equals to 32kWH consumed energy (at 1000 pulses per kWh)
@@ -34,16 +40,20 @@ static const int pcntUnit = PCNT_UNIT_0;
 
 static void pCntMonitorTask(void *pvParameters);
 
-static double getkWh() {
+static pulseData_t getkWh() {
+
+    pulseData_t pd = {0.0,0,0};
 
     pcnt_intr_disable(pcntUnit);
     volatile int32_t count = DPORT_REG_READ(0x3FF57060);
     volatile uint32_t bigCounter = Counter_32K_Pulses;
     pcnt_intr_enable(pcntUnit);
 
-    const double retVal = ((double)bigCounter*32)+((double)count / PULSES_PER_KWH);
+    pd.kWh = ((double)bigCounter*32)+((double)count / PULSES_PER_KWH);
+    pd.pulses32K = bigCounter;
+    pd.pulses = (uint32_t)count;
 
-    return retVal;
+    return pd;
 }
 
 static void IRAM_ATTR pcnt_example_intr_handler(void *arg)
@@ -110,7 +120,9 @@ static void pCntMonitorTask(void *pvParameters) {
 
     while( 1 ) {
 
-        addDataToQueue(type_kWh, getkWh(), 0 );
+        pulseData_t pd = getkWh();
+
+        addDataToQueue(type_kWh, pd.kWh, pd.pulses );
         vTaskDelay(60000 / portTICK_PERIOD_MS);
     }
 

+ 2 - 2
main/serial.c

@@ -60,7 +60,7 @@ void serialRxTask(void *pvParameters)
 							int vpp = 0;
 							const int no = sscanf(data,"%d",&vpp);
 							if( no == 1 ) {
-								ESP_LOGI("SERIAL", "VPP: %d",vpp);
+								ESP_LOGI("SERIAL", "VPP: %d   %.4fmV",vpp,vpp*(3300.0f / 4095.0f));
 								addDataToQueue(type_VPP,0.0,vpp);
 							}
 						}
@@ -78,7 +78,7 @@ void serialRxTask(void *pvParameters)
 								else {
 									ESP_LOGE("SERIAL","Unknown OW-ID:%s",id);
 								}
-								char js[50];
+								//char js[50];
 								//sprintf(js,"{\"id\":\"%s\",\"temp\":%s}",id,data);
 								//ESP_LOGI("SERIAL", "%s",js);
 							}