This commit is contained in:
livello
2018-06-29 00:31:20 +03:00
parent 973919dc84
commit 0f670ca506
4 changed files with 59 additions and 34 deletions

View File

@@ -24,7 +24,7 @@
export FLAGS="$FLAGS -DESP_WIFI_AP=MYAP" export FLAGS="$FLAGS -DESP_WIFI_AP=MYAP"
export FLAGS="$FLAGS -DESP_WIFI_PWD=MYPWD" export FLAGS="$FLAGS -DESP_WIFI_PWD=MYPWD"
export FLAGS="$FLAGS -DDHT_DISABLE" export FLAGS="$FLAGS -DDHT_DISABLE"
export FLAGS="$FLAGS -DW5100_RESET_PIN=5" export FLAGS="$FLAGS -DRESET_PIN=5"
export FLAGS="$FLAGS -DDHCP_RETRY_INTERVAL=60000" export FLAGS="$FLAGS -DDHCP_RETRY_INTERVAL=60000"
export PLATFORMIO_BUILD_FLAGS="$FLAGS" export PLATFORMIO_BUILD_FLAGS="$FLAGS"
echo PLATFORMIO_BUILD_FLAGS=$PLATFORMIO_BUILD_FLAGS echo PLATFORMIO_BUILD_FLAGS=$PLATFORMIO_BUILD_FLAGS

View File

@@ -215,10 +215,9 @@ lan_status lanLoop() {
#endif #endif
switch (lanStatus) { switch (lanStatus) {
case INITIAL_STATE: { case INITIAL_STATE:
onInitialStateInitLAN(); onInitialStateInitLAN();
break; break;
}
case HAVE_IP_ADDRESS: case HAVE_IP_ADDRESS:
if (!configOk) if (!configOk)
@@ -382,12 +381,12 @@ void ip_ready_config_loaded_connecting_to_broker() {
Serial.print(mqttClient.state()); Serial.print(mqttClient.state());
Serial.println(F(" try again in 5 seconds")); Serial.println(F(" try again in 5 seconds"));
nextLanCheckTime = millis() + 5000; nextLanCheckTime = millis() + 5000;
#ifdef W5100_RESET_PIN #ifdef RESET_PIN
mqttErrorRate++; mqttErrorRate++;
if(mqttErrorRate>50){ if(mqttErrorRate>50){
Serial.print(F("Too many MQTT connection errors. Restart LAN")); Serial.print(F("Too many MQTT connection errors. Restart LAN"));
mqttErrorRate=0; mqttErrorRate=0;
resetW5100(); resetHard();
lanStatus=INITIAL_STATE; lanStatus=INITIAL_STATE;
return; return;
} }
@@ -422,16 +421,16 @@ void onInitialStateInitLAN() {
IPAddress ip, dns, gw, mask; IPAddress ip, dns, gw, mask;
int res = 1; int res = 1;
Serial.println(F("Starting lan")); Serial.println(F("Starting lan"));
if (loadFlash(OFFSET_IP, ip)) { if (ipLoadFromFlash(OFFSET_IP, ip)) {
Serial.print("Loaded from flash IP:"); Serial.print("Loaded from flash IP:");
printIPAddress(ip); printIPAddress(ip);
if (loadFlash(OFFSET_DNS, dns)) { if (ipLoadFromFlash(OFFSET_DNS, dns)) {
Serial.print(" DNS:"); Serial.print(" DNS:");
printIPAddress(dns); printIPAddress(dns);
if (loadFlash(OFFSET_GW, gw)) { if (ipLoadFromFlash(OFFSET_GW, gw)) {
Serial.print(" GW:"); Serial.print(" GW:");
printIPAddress(gw); printIPAddress(gw);
if (loadFlash(OFFSET_MASK, mask)) { if (ipLoadFromFlash(OFFSET_MASK, mask)) {
Serial.print(" MASK:"); Serial.print(" MASK:");
printIPAddress(mask); printIPAddress(mask);
Ethernet.begin(mac, ip, dns, gw, mask); Ethernet.begin(mac, ip, dns, gw, mask);
@@ -440,7 +439,7 @@ void onInitialStateInitLAN() {
} else Ethernet.begin(mac, ip); } else Ethernet.begin(mac, ip);
} }
else { else {
Serial.print("No IP data found in flash"); Serial.println("No IP data found in flash");
wdt_dis(); wdt_dis();
res = Ethernet.begin(mac, 12000); res = Ethernet.begin(mac, 12000);
wdt_en(); wdt_en();
@@ -452,8 +451,8 @@ void onInitialStateInitLAN() {
Serial.print(F("'ip [ip[,dns[,gw[,subnet]]]]' - set static IP\n")); Serial.print(F("'ip [ip[,dns[,gw[,subnet]]]]' - set static IP\n"));
lanStatus = AWAITING_ADDRESS;//-10; lanStatus = AWAITING_ADDRESS;//-10;
nextLanCheckTime = millis() + DHCP_RETRY_INTERVAL; nextLanCheckTime = millis() + DHCP_RETRY_INTERVAL;
#ifdef W5100_RESET_PIN #ifdef RESET_PIN
resetW5100(); resetHard();
#endif #endif
} else { } else {
Serial.print(F("Got IP address:")); Serial.print(F("Got IP address:"));
@@ -467,10 +466,10 @@ void onInitialStateInitLAN() {
void (*softRebootFunc)(void) = 0; void (*softRebootFunc)(void) = 0;
void resetW5100() { void resetHard() {
#ifdef W5100_RESET_PIN #ifdef RESET_PIN
Serial.print(F("Reset Wiznet5100 shield with digital pin ")); Serial.print(F("Reset Wiznet5100 shield with digital pin "));
Serial.println(QUOTE(W5100_RESET_PIN)); Serial.println(QUOTE(RESET_PIN));
delay(50); delay(50);
pinMode(W5100_RESET_PIN, OUTPUT); pinMode(W5100_RESET_PIN, OUTPUT);
digitalWrite(W5100_RESET_PIN,LOW); digitalWrite(W5100_RESET_PIN,LOW);
@@ -727,17 +726,43 @@ void cmdFunctionSave(int arg_cnt, char **args)
void cmdFunctionIp(int arg_cnt, char **args) void cmdFunctionIp(int arg_cnt, char **args)
//(char* tokens) //(char* tokens)
{ IPAddress ip0 (0,0,0,0); {
IPAddress ip0(0, 0, 0, 0);
IPAddress ip; IPAddress ip;
DNSClient dns; DNSClient dns;
switch (arg_cnt) { switch (arg_cnt) {
case 5: if (dns.inet_aton(args[4],ip)) saveFlash(OFFSET_MASK,ip); else saveFlash(OFFSET_MASK,ip0); case 5:
case 4: if (dns.inet_aton(args[3],ip)) saveFlash(OFFSET_GW,ip); else saveFlash(OFFSET_GW,ip0); if (dns.inet_aton(args[4], ip)) saveFlash(OFFSET_MASK, ip);
case 3: if (dns.inet_aton(args[2],ip)) saveFlash(OFFSET_DNS,ip); else saveFlash(OFFSET_DNS,ip0); else saveFlash(OFFSET_MASK, ip0);
case 2: if (dns.inet_aton(args[1],ip)) saveFlash(OFFSET_IP,ip); else saveFlash(OFFSET_IP,ip0); case 4:
if (dns.inet_aton(args[3], ip)) saveFlash(OFFSET_GW, ip);
else saveFlash(OFFSET_GW, ip0);
case 3:
if (dns.inet_aton(args[2], ip)) saveFlash(OFFSET_DNS, ip);
else saveFlash(OFFSET_DNS, ip0);
case 2:
if (dns.inet_aton(args[1], ip)) saveFlash(OFFSET_IP, ip);
else saveFlash(OFFSET_IP, ip0);
break; break;
case 1: //dynamic IP case 1:
saveFlash(OFFSET_IP,ip0); IPAddress current_ip = Ethernet.localIP();
IPAddress current_mask = Ethernet.subnetMask();
IPAddress current_gw = Ethernet.gatewayIP();
IPAddress current_dns = Ethernet.dnsServerIP();
saveFlash(OFFSET_IP, current_ip);
saveFlash(OFFSET_MASK, current_mask);
saveFlash(OFFSET_GW, current_gw);
saveFlash(OFFSET_DNS, current_dns);
Serial.print(F("Saved current config(ip,dns,gw,subnet):"));
printIPAddress(current_ip);
Serial.print(F(" ,"));
printIPAddress(current_dns);
Serial.print(F(" ,"));
printIPAddress(current_gw);
Serial.print(F(" ,"));
printIPAddress(current_mask);
Serial.println(F(";"));
} }
Serial.println(F("Saved")); Serial.println(F("Saved"));
} }
@@ -808,7 +833,7 @@ void saveFlash(short n, IPAddress& ip) {
for(int i=0;i<4;i++) EEPROM.write(n++,ip[i]); for(int i=0;i<4;i++) EEPROM.write(n++,ip[i]);
} }
int loadFlash(short n, IPAddress& ip) { int ipLoadFromFlash(short n, IPAddress &ip) {
for(int i=0;i<4;i++) ip[i]=EEPROM.read(n++); for(int i=0;i<4;i++) ip[i]=EEPROM.read(n++);
if (ip[0] && (ip[0] != 0xff)) return 1; if (ip[0] && (ip[0] != 0xff)) return 1;
return 0; return 0;
@@ -859,7 +884,7 @@ lan_status getConfig(int arg_cnt, char **args)
if (!root) { if (!root) {
Serial.println(F("Config parsing failed")); Serial.println(F("Config parsing failed"));
nextLanCheckTime = millis() + 15000; nextLanCheckTime = millis() + 15000;
return -11; return READ_RE_CONFIG;//-11;
} else { } else {
// char *outstr = aJson.print(root); // char *outstr = aJson.print(root);
// Serial.println(outstr); // Serial.println(outstr);
@@ -1092,9 +1117,9 @@ void printFirmwareVersionAndBuildOptions() {
Serial.println(F("(+)SDCARD")); Serial.println(F("(+)SDCARD"));
#endif #endif
#ifdef W5100_RESET_PIN #ifdef RESET_PIN
Serial.print(F("(+)HARDRESET on pin=")); Serial.print(F("(+)HARDRESET on pin="));
Serial.println(F(QUOTE(W5100_RESET_PIN))); Serial.println(F(QUOTE(RESET_PIN)));
#else #else
Serial.println("(-)HARDRESET, using soft"); Serial.println("(-)HARDRESET, using soft");
#endif #endif

View File

@@ -161,7 +161,7 @@ int loadFlash(short n, char *str, short l=32);
void saveFlash(short n, IPAddress& ip); void saveFlash(short n, IPAddress& ip);
int loadFlash(short n, IPAddress& ip); int ipLoadFromFlash(short n, IPAddress &ip);
lan_status getConfig(int arg_cnt=0, char **args=NULL); lan_status getConfig(int arg_cnt=0, char **args=NULL);
@@ -199,7 +199,7 @@ bool IsThermostat(const aJsonObject *item);
bool disabledDisconnected(const aJsonObject *thermoExtensionArray, int thermoLatestCommand); bool disabledDisconnected(const aJsonObject *thermoExtensionArray, int thermoLatestCommand);
void resetW5100(); void resetHard();
void onInitialStateInitLAN(); void onInitialStateInitLAN();

View File

@@ -10,8 +10,8 @@
[platformio] [platformio]
src_dir = lighthub src_dir = lighthub
env_default = env_default =
; megaatmega2560 megaatmega2560
due ; due
; esp8266 ; esp8266
; megaatmega2560-5500 ; megaatmega2560-5500
; due-5500 ; due-5500