Compare commits
	
		
			3 Commits
		
	
	
		
			8bcb5d847f
			...
			6930494e0c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6930494e0c | |||
| ad70fdccea | |||
| 11ed8dfb37 | 
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -35,5 +35,3 @@
 | 
				
			|||||||
# Custom
 | 
					# Custom
 | 
				
			||||||
*.bin
 | 
					*.bin
 | 
				
			||||||
credentials.h
 | 
					credentials.h
 | 
				
			||||||
src/app/*
 | 
					 | 
				
			||||||
!src/app/*.ino
 | 
					 | 
				
			||||||
@ -22,6 +22,7 @@
 | 
				
			|||||||
#define CHAN 108   //0-125
 | 
					#define CHAN 108   //0-125
 | 
				
			||||||
#define RECV_CHECK 5000 //We test every 5s if we received something
 | 
					#define RECV_CHECK 5000 //We test every 5s if we received something
 | 
				
			||||||
#define WIFI_CHECK_TIMEOUT 20000
 | 
					#define WIFI_CHECK_TIMEOUT 20000
 | 
				
			||||||
 | 
					#define PREVENTIVE_RESET_DELAY 18000000 //Every 5 hours
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t payload[32] = {0};
 | 
					uint8_t payload[32] = {0};
 | 
				
			||||||
DataPacket dp;
 | 
					DataPacket dp;
 | 
				
			||||||
@ -39,11 +40,13 @@ HttpClient DBHost(DB_SERVER, PATH);
 | 
				
			|||||||
Dictionary<DictionaryHelper::StringEntity> weatherStationPostData, mailboxPostData;
 | 
					Dictionary<DictionaryHelper::StringEntity> weatherStationPostData, mailboxPostData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const uint8_t ADDR[] = "WEST1", ADDR2[] = "ABCDE";
 | 
					const uint8_t ADDR[] = "WEST1", ADDR2[] = "ABCDE";
 | 
				
			||||||
uint64_t timeStamp(0), irqSaver(0);
 | 
					uint32_t timeStamp(0), irqSaver(0), resetTimeStamp(0);
 | 
				
			||||||
uint32_t freeMem(0);
 | 
					uint32_t freeMem(0);
 | 
				
			||||||
uint16_t biggestContigMemBlock(0);
 | 
					uint16_t biggestContigMemBlock(0);
 | 
				
			||||||
uint8_t frag(0);
 | 
					uint8_t frag(0);
 | 
				
			||||||
 | 
					int insertIntoDBError(0);
 | 
				
			||||||
volatile boolean IRQFlag(false);
 | 
					volatile boolean IRQFlag(false);
 | 
				
			||||||
 | 
					boolean waitingForResetSignal(false), resetNow(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IRAM_ATTR void NRFIRQsHandler(void *p)
 | 
					IRAM_ATTR void NRFIRQsHandler(void *p)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -158,19 +161,21 @@ void loop()
 | 
				
			|||||||
          {
 | 
					          {
 | 
				
			||||||
            memcpy(&wsdp, payload, sizeof(wsdp));
 | 
					            memcpy(&wsdp, payload, sizeof(wsdp));
 | 
				
			||||||
            debugStruct(&wsdp);
 | 
					            debugStruct(&wsdp);
 | 
				
			||||||
            insertIntoDB(&wsdp);
 | 
					            insertIntoDBError = insertIntoDB(&wsdp);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
          case CONNECTED_MAILBOX:
 | 
					          case CONNECTED_MAILBOX:
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            memcpy(&mdp, payload, sizeof(mdp));
 | 
					            memcpy(&mdp, payload, sizeof(mdp));
 | 
				
			||||||
            debugStruct(&mdp);
 | 
					            debugStruct(&mdp);
 | 
				
			||||||
            insertIntoDB(&mdp);
 | 
					            insertIntoDBError = insertIntoDB(&mdp);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
          default:
 | 
					          default:
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(waitingForResetSignal)resetNow = true;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@ -201,19 +206,21 @@ void loop()
 | 
				
			|||||||
          {
 | 
					          {
 | 
				
			||||||
            memcpy(&wsdp, payload, sizeof(wsdp));
 | 
					            memcpy(&wsdp, payload, sizeof(wsdp));
 | 
				
			||||||
            debugStruct(&wsdp);
 | 
					            debugStruct(&wsdp);
 | 
				
			||||||
            insertIntoDB(&wsdp);
 | 
					            insertIntoDBError = insertIntoDB(&wsdp);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
          case CONNECTED_MAILBOX:
 | 
					          case CONNECTED_MAILBOX:
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            memcpy(&mdp, payload, sizeof(mdp));
 | 
					            memcpy(&mdp, payload, sizeof(mdp));
 | 
				
			||||||
            debugStruct(&mdp);
 | 
					            debugStruct(&mdp);
 | 
				
			||||||
            insertIntoDB(&mdp);
 | 
					            insertIntoDBError = insertIntoDB(&mdp);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
          default:
 | 
					          default:
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(waitingForResetSignal)resetNow = true;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -254,6 +261,19 @@ void loop()
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    timeStamp = millis();
 | 
					    timeStamp = millis();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //Here we handle the reset
 | 
				
			||||||
 | 
					  if(millis() - resetTimeStamp > PREVENTIVE_RESET_DELAY)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    Serial.println("Waiting next payload before resetting MCU :( !");
 | 
				
			||||||
 | 
					    waitingForResetSignal = true;
 | 
				
			||||||
 | 
					    resetTimeStamp = millis();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if((waitingForResetSignal && resetNow) || insertIntoDBError == -125)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    ESP.reset();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -271,7 +291,7 @@ void lostConnectionFunc(const WiFiEventStationModeDisconnected &event)
 | 
				
			|||||||
  Serial.println("Lost connection, will try to reconnect ...");
 | 
					  Serial.println("Lost connection, will try to reconnect ...");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void insertIntoDB(WeatherStationDataPacket *p)
 | 
					int insertIntoDB(WeatherStationDataPacket *p)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  char buffer[100] = "";
 | 
					  char buffer[100] = "";
 | 
				
			||||||
  int result(0);
 | 
					  int result(0);
 | 
				
			||||||
@ -309,27 +329,10 @@ void insertIntoDB(WeatherStationDataPacket *p)
 | 
				
			|||||||
   else
 | 
					   else
 | 
				
			||||||
   {
 | 
					   {
 | 
				
			||||||
    Serial.printf("Failed to post data : error(%d)\n", result);
 | 
					    Serial.printf("Failed to post data : error(%d)\n", result);
 | 
				
			||||||
    if(result == -125)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      WiFi.disconnect();
 | 
					 | 
				
			||||||
      WiFi.begin(SSID, PWD);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      while(!WiFi.isConnected())
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        Serial.println("Reconnecting !");
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      if((result = DBHost.sendHttpQuery(HttpClient::HttpRequestMethod::POST, NULL, &weatherStationPostData)) == 0)
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        HttpClient::HTTP_CODE response = DBHost.isReplyAvailable(2000);
 | 
					 | 
				
			||||||
        Serial.printf("Second send got response code : %u\n", response);
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      else
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        Serial.printf("Second send failed to post data : error(%d)\n", result);
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   DBHost.stop();
 | 
					   DBHost.stop();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void debugStruct(WeatherStationDataPacket *p)
 | 
					void debugStruct(WeatherStationDataPacket *p)
 | 
				
			||||||
@ -367,7 +370,7 @@ void debugStruct(WeatherStationDataPacket *p)
 | 
				
			|||||||
  Serial.println(" *C");
 | 
					  Serial.println(" *C");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void insertIntoDB(MailboxDataPacket *p)
 | 
					int insertIntoDB(MailboxDataPacket *p)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  char buffer[100] = "";
 | 
					  char buffer[100] = "";
 | 
				
			||||||
  int result(0);
 | 
					  int result(0);
 | 
				
			||||||
@ -404,6 +407,8 @@ void insertIntoDB(MailboxDataPacket *p)
 | 
				
			|||||||
    Serial.printf("Failed to post data : error(%d)\n", result);
 | 
					    Serial.printf("Failed to post data : error(%d)\n", result);
 | 
				
			||||||
   }
 | 
					   }
 | 
				
			||||||
   DBHost.stop();
 | 
					   DBHost.stop();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void debugStruct(MailboxDataPacket *p)
 | 
					void debugStruct(MailboxDataPacket *p)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										42
									
								
								src/app/definition.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/app/definition.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					#ifndef DEFINITION_H
 | 
				
			||||||
 | 
					#define DEFINITION_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "packet_format.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Payload structure
 | 
				
			||||||
 | 
					typedef struct
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  uint16_t id;
 | 
				
			||||||
 | 
					  HEADER_e header : 6;
 | 
				
			||||||
 | 
					} __attribute__((__packed__)) DataPacket;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  uint16_t id;
 | 
				
			||||||
 | 
					  HEADER_e header : 6;
 | 
				
			||||||
 | 
					  unsigned int ldr : 10;
 | 
				
			||||||
 | 
					  float battery;
 | 
				
			||||||
 | 
					  float bmpTemp;
 | 
				
			||||||
 | 
					  float bmpPress;
 | 
				
			||||||
 | 
					  float humidity;
 | 
				
			||||||
 | 
					  float compensatedHumidity;
 | 
				
			||||||
 | 
					  float htuTemp;
 | 
				
			||||||
 | 
					} __attribute__((__packed__)) WeatherStationDataPacket;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef enum
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  MAILBOX_LETTER = 0,
 | 
				
			||||||
 | 
					  MAILBOX_PACKAGE,
 | 
				
			||||||
 | 
					  MAILBOX_COLLECTED,
 | 
				
			||||||
 | 
					  MAILBOX_UNKNOWN,
 | 
				
			||||||
 | 
					} MAILBOX_EVENT_e;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  uint16_t id;
 | 
				
			||||||
 | 
					  HEADER_e header : 6;
 | 
				
			||||||
 | 
					  float battery;
 | 
				
			||||||
 | 
					  MAILBOX_EVENT_e mailbox_event;
 | 
				
			||||||
 | 
					} __attribute__((__packed__)) MailboxDataPacket;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif //DEFINITION_H
 | 
				
			||||||
							
								
								
									
										6
									
								
								src/app/packet_format.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/app/packet_format.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					#ifndef PACKET_FORMAT_H
 | 
				
			||||||
 | 
					#define PACKET_FORMAT_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum HEADER_e {WEATHER_STATION = 0, CONNECTED_MAILBOX};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif //PACKET_FORMAT_H
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user