log, some small fixes

This commit is contained in:
livello
2018-10-11 00:43:09 +03:00
parent 9432898b03
commit 39f655ff78
7 changed files with 131 additions and 68 deletions

View File

@@ -153,6 +153,9 @@ platformio device monitor -b 115200
* WIFI_MANAGER_DISABLE //Disable wifi manager for esp8266
* DHT_DISABLE //disable DHT Input support
* RESTART_LAN_ON_MQTT_ERRORS //reinit LAN if many mqtt errors occured
* WITH_STREAMING_LIB use streaming libriary for serial debug output otherwise use PrintEx library
* DEVICE_NAME short handy device name which is used instead of mac for download config http://{MY_CONFIG_SERVER}/{DEVICE_NAME}_config.json
* SYSLOG_ENABLE enable UDP SYSLOG support feature(under DEVELOPMENT) that must be configured through config file
@@ -176,5 +179,8 @@ platformio device monitor -b 115200
* DHT support enabled
* Wifi manager for esp8266 enabled
* RESTART_LAN_ON_MQTT_ERRORS disabled
* WITH_STREAMING_LIB disabled
* DEVICE_NAME disabled
* SYSLOG_ENABLE disabled
If you've using Arduino IDE to compile & flash firmware, it will use Default options above and you will not able to configure additional compilers options except edit "options.h" file

View File

@@ -25,5 +25,7 @@
# export FLAGS="$FLAGS -DDHCP_RETRY_INTERVAL=60000"
# export FLAGS="$FLAGS -DRESTART_LAN_ON_MQTT_ERRORS"
# export FLAGS="$FLAGS -DW5500_CS_PIN=53"
#export FLAGS="$FLAGS -DSYSLOG_ENABLE"
#export FLAGS="$FLAGS -DDEVICE_NAME=MYDEVICE"
export FLAGS="$FLAGS -DPIO_SRC_REV="$(git log --pretty=format:%h_%ad -1 --date=short)
echo $FLAGS

View File

@@ -67,6 +67,7 @@ PWM Out
#include "Arduino.h"
#include "main.h"
#include "options.h"
#include "utils.h"
#ifdef WITH_STREAMING_LIB
#include "Streaming.h"
#else
@@ -113,7 +114,7 @@ WiFiClient ethClient;
EthernetClient ethClient;
#endif
#ifndef SYSLOG_DISABLE
#ifdef SYSLOG_ENABLE
#include <Syslog.h>
EthernetUDP udpSyslogClient;
Syslog udpSyslog(udpSyslogClient, SYSLOG_PROTO_IETF);
@@ -208,8 +209,11 @@ void mqttCallback(char *topic, byte *payload, unsigned int length) {
void printIPAddress(IPAddress ipAddress) {
for (byte i = 0; i < 4; i++)
// (i < 3) ? debugSerial << _DEC(ipAddress[i]) << F(".") : debugSerial << _DEC(ipAddress[i])<<F(", ");
#ifdef WITH_STREAMING_LIB
(i < 3) ? debugSerial << _DEC(ipAddress[i]) << F(".") : debugSerial << _DEC(ipAddress[i]) << F(", ");
#else
(i < 3) ? debugSerial << (ipAddress[i]) << F(".") : debugSerial << (ipAddress[i])<<F(", ");
#endif
}
void printMACAddress() {
@@ -282,7 +286,7 @@ lan_status lanLoop() {
break;
case READ_RE_CONFIG:
if (loadConfigFromEEPROM(0, NULL)) lanStatus = IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER;//2;
if (loadConfigFromEEPROM()) lanStatus = IP_READY_CONFIG_LOADED_CONNECTING_TO_BROKER;//2;
else {
nextLanCheckTime = millis() + 5000;
lanStatus = AWAITING_ADDRESS;//-10;
@@ -348,7 +352,7 @@ void ip_ready_config_loaded_connecting_to_broker() {
char *user = &empty;
char passwordBuf[16] = "";
char *password = passwordBuf;
#ifndef SYSLOG_DISABLE
#ifdef SYSLOG_ENABLE
debugSerial<<"debugSerial:";
delay(100);
if (udpSyslogArr && aJson.getArraySize(udpSyslogArr)) {
@@ -575,9 +579,7 @@ void Changed(int i, DeviceAddress addr, int val) {
owEmit = aJson.getObjectItem(owObj, "emit")->valuestring;
if (owEmit) {
strncpy(addrbuf, owEmit, sizeof(addrbuf));
debugSerial<<owEmit;
debugSerial<<F("=");
debugSerial<<val;
debugSerial<<owEmit<<F("=")<<val;
}
owItem = aJson.getObjectItem(owObj, "item")->valuestring;
} else debugSerial<<F("1w-item not found in config");
@@ -601,12 +603,12 @@ void Changed(int i, DeviceAddress addr, int val) {
void cmdFunctionHelp(int arg_cnt, char **args)
{
printFirmwareVersionAndBuildOptions();
#ifndef SYSLOG_DISABLE
#ifdef SYSLOG_ENABLE
// udpSyslog.logf(LOG_INFO, "free RAM: %d",freeRam());
#endif
printCurentLanConfig();
debugSerial<<F(" free RAM: ")<<freeRam()<<F(" Use the commands: 'help' - this text\n"
printFreeRam();
debugSerial<<F("\nUse these commands: 'help' - this text\n"
"'mac de:ad:be:ef:fe:00' set and store MAC-address in EEPROM\n"
"'ip [ip[,dns[,gw[,subnet]]]]' - set static IP\n"
"'save' - save config in NVRAM\n"
@@ -730,11 +732,11 @@ void printConfigSummary() {
}
void cmdFunctionLoad(int arg_cnt, char **args) {
loadConfigFromEEPROM(arg_cnt, args);
loadConfigFromEEPROM();
restoreState();
}
int loadConfigFromEEPROM(int arg_cnt, char **args)
int loadConfigFromEEPROM()
{
char ch;
debugSerial<<F("loading Config");
@@ -847,7 +849,6 @@ void cmdFunctionClearEEPROM(int arg_cnt, char **args){
}
void cmdFunctionPwd(int arg_cnt, char **args)
//(char* tokens)
{ char empty[]="";
if (arg_cnt)
saveFlash(OFFSET_MQTT_PWD,args[1]);
@@ -856,16 +857,7 @@ void cmdFunctionPwd(int arg_cnt, char **args)
}
void cmdFunctionSetMac(int arg_cnt, char **args) {
//debugSerial<<"Got:");
//debugSerial<<args[1]);
if (sscanf(args[1], "%x:%x:%x:%x:%x:%x%с",
&mac[0],
&mac[1],
&mac[2],
&mac[3],
&mac[4],
&mac[5]) < 6) {
if (sscanf(args[1], "%x:%x:%x:%x:%x:%x%с", &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]) < 6) {
debugSerial<<F("could not parse: ")<<args[1];
return;
}
@@ -905,9 +897,9 @@ void saveFlash(short n, IPAddress& ip) {
}
int ipLoadFromFlash(short n, IPAddress &ip) {
for(int i=0;i<4;i++) ip[i]=EEPROM.read(n++);
if (ip[0] && (ip[0] != 0xff)) return 1;
return 0;
for (int i = 0; i < 4; i++)
ip[i] = EEPROM.read(n++);
return (ip[0] && (ip[0] != 0xff));
}
lan_status loadConfigFromHttp(int arg_cnt, char **args)
@@ -921,9 +913,12 @@ lan_status loadConfigFromHttp(int arg_cnt, char **args)
saveFlash(OFFSET_CONFIGSERVER, configServer);
} else if (!loadFlash(OFFSET_CONFIGSERVER, configServer))
strncpy_P(configServer,configserver,sizeof(configServer));
#ifndef DEVICE_NAME
snprintf(URI, sizeof(URI), "/%02x-%02x-%02x-%02x-%02x-%02x.config.json", mac[0], mac[1], mac[2], mac[3], mac[4],
mac[5]);
#else
snprintf(URI, sizeof(URI), "/%s_config.json",QUOTE(DEVICE_NAME));
#endif
debugSerial<<F("Config URI: http://")<<configServer<<URI;
#if defined(__AVR__)
@@ -1084,7 +1079,7 @@ void setup_main() {
sd_card_w5100_setup();
#endif
setupMacAddress();
loadConfigFromEEPROM(0, NULL);
loadConfigFromEEPROM();
#ifdef _modbus
#ifdef CONTROLLINO
@@ -1128,7 +1123,7 @@ void setup_main() {
}
void printFirmwareVersionAndBuildOptions() {
debugSerial<<F("\nLazyhome.ru LightHub controller ")<<F(QUOTE(PIO_SRC_REV))<<F("C++ version:")<<F(QUOTE(__cplusplus));
debugSerial<<F("\nLazyhome.ru LightHub controller ")<<F(QUOTE(PIO_SRC_REV))<<F(" C++ version:")<<F(QUOTE(__cplusplus));
#ifdef CONTROLLINO
debugSerial<<F("\n(+)CONTROLLINO");
#endif
@@ -1145,8 +1140,7 @@ void printFirmwareVersionAndBuildOptions() {
#endif
#ifdef USE_1W_PIN
debugSerial<<F("(-)DS2482-100 USE_1W_PIN=");
debugSerial<<QUOTE(USE_1W_PIN);
debugSerial<<F("\n(-)DS2482-100 USE_1W_PIN=")<<QUOTE(USE_1W_PIN);
#else
debugSerial<<F("\n(+)DS2482-100");
#endif
@@ -1156,7 +1150,7 @@ void printFirmwareVersionAndBuildOptions() {
#endif
#ifdef DMX_DISABLE
debugSerial<<F("(-)DMX");
debugSerial<<F("\n(-)DMX");
#else
debugSerial<<F("\n(+)DMX");
#endif
@@ -1183,8 +1177,7 @@ void printFirmwareVersionAndBuildOptions() {
#endif
#ifdef RESET_PIN
debugSerial<<F("\n(+)HARDRESET on pin=");
debugSerial<<F(QUOTE(RESET_PIN);
debugSerial<<F("\n(+)HARDRESET on pin=")<<F(QUOTE(RESET_PIN);
#else
debugSerial<<F("\n(-)HARDRESET, using soft");
#endif
@@ -1195,6 +1188,9 @@ void printFirmwareVersionAndBuildOptions() {
debugSerial<<F("\n(-)RESTART_LAN_ON_MQTT_ERRORS");
#endif
}
void printFreeRam(){
debugSerial<<F("\nfree RAM: ")<<freeRam();
}
void setupMacAddress() {
@@ -1271,7 +1267,7 @@ void loop_main() {
dmxout.update();
#endif
#ifndef SYSLOG_DISABLE
#ifdef SYSLOG_ENABLE
// debugSerial<<F("#"));
// udpSyslog.log(LOG_INFO, "Ping syslog:");
#endif
@@ -1416,8 +1412,7 @@ void thermoLoop(void) {
nextThermostatCheck = millis() + THERMOSTAT_CHECK_PERIOD;
#ifndef DISABLE_FREERAM_PRINT
(thermostatCheckPrinted) ? debugSerial<<F("\nfree:") : debugSerial<<F(" ");
debugSerial<<freeRam()<<" ";
(thermostatCheckPrinted) ? debugSerial<<F("\nfree:")<<freeRam()<<" " : debugSerial<<F(" ")<<freeRam()<<F(" ");
#endif
}

View File

@@ -169,7 +169,7 @@ void applyConfig();
void cmdFunctionLoad(int arg_cnt, char **args);
int loadConfigFromEEPROM(int arg_cnt, char **args);
int loadConfigFromEEPROM();
void cmdFunctionReq(int arg_cnt, char **args);
@@ -237,3 +237,5 @@ void ip_ready_config_loaded_connecting_to_broker();
void printCurentLanConfig();
void printFreeRam();

View File

@@ -47,7 +47,7 @@ int owUpdate() {
short sr;
//net.setStrongPullup();
Serial.println(F("Searching"));
debugSerial.println(F("Searching"));
if (net) net->reset_search();
for (short i = 0; i < t_count; i++) wstat[i] &= ~SW_FIND; //absent
@@ -58,18 +58,18 @@ int owUpdate() {
if (!memcmp(term[i], term[t_count], 8)) {
ifind = i;
wstat[i] |= SW_FIND;
Serial.print(F(" Node:"));
PrintBytes(term[t_count], 8);
Serial.println(F(" alive"));
debugSerial.print(F(" Node:"));
PrintBytes(term[t_count], 8,0);
debugSerial.println(F(" alive"));
break;
}; //alive
if (ifind < 0 && sensors) {
wstat[t_count] = SW_FIND; //Newly detected
Serial.print(F("dev#"));
Serial.print(t_count);
Serial.print(F(" Addr:"));
PrintBytes(term[t_count], 8);
Serial.println();
debugSerial.print(F("dev#"));
debugSerial.print(t_count);
debugSerial.print(F(" Addr:"));
PrintBytes(term[t_count], 8,0);
debugSerial.println();
if (term[t_count][0] == 0x28) {
sensors->setResolution(term[t_count], TEMPERATURE_PRECISION);
net->setStrongPullup();
@@ -80,8 +80,8 @@ int owUpdate() {
}//if
} //while
Serial.print(F("1-wire count: "));
Serial.println(t_count);
debugSerial.print(F("1-wire count: "));
debugSerial.println(t_count);
#endif
}
@@ -91,12 +91,12 @@ int owSetup(owChangedType owCh) {
//// todo - move memory allocation to here
if (net) return true; // Already initialized
#ifdef DS2482_100_I2C_TO_1W_BRIDGE
Serial.println(F("DS2482_100_I2C_TO_1W_BRIDGE init"));
debugSerial.println(F("DS2482_100_I2C_TO_1W_BRIDGE init"));
net = new OneWire;
#else
Serial.print(F("One wire setup on PIN:"));
Serial.println(QUOTE(USE_1W_PIN));
net = new OneWire (USE_1W_PIN);
debugSerial.print(F("One wire setup on PIN:"));
debugSerial.println(QUOTE(USE_1W_PIN));
net = new OneWire (USE_1W_PIN);
#endif
@@ -112,29 +112,29 @@ net = new OneWire (USE_1W_PIN);
#ifdef DS2482_100_I2C_TO_1W_BRIDGE
Wire.begin();
if (net->checkPresence()) {
Serial.println(F("DS2482-100 present"));
debugSerial.println(F("DS2482-100 present"));
net->deviceReset();
#ifdef APU_OFF
Serial.println(F("APU off"));
debugSerial.println(F("APU off"));
#else
net->setActivePullup();
#endif
Serial.println(F("\tChecking for 1-Wire devices..."));
debugSerial.println(F("\tChecking for 1-Wire devices..."));
if (net->wireReset())
Serial.println(F("\tReset done"));
debugSerial.println(F("\tReset done"));
sensors->begin();
owChanged = owCh;
//owUpdate();
//Serial.println(F("\t1-w Updated"));
//debugSerial.println(F("\t1-w Updated"));
sensors->setWaitForConversion(false);
return true;
}
#endif
Serial.println(F("\tDS2482 error"));
debugSerial.println(F("\tDS2482 error"));
return false;
// IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement
@@ -158,7 +158,7 @@ int sensors_loop(void) {
case 0x28: // Thermomerer
t = sensors->getTempC(term[si]);//*10.0;
//Serial.println("o");
//debugSerial.println("o");
if (owChanged) owChanged(si, term[si], t);
sensors->requestTemperaturesByAddress(term[si]);
si++;
@@ -192,11 +192,11 @@ void owAdd(DeviceAddress addr) {
memcpy(term[t_count], addr, 8);
//term[t_count]=addr;
Serial.print(F("dev#"));
Serial.print(t_count);
Serial.print(F(" Addr:"));
PrintBytes(term[t_count], 8);
Serial.println();
debugSerial.print(F("dev#"));
debugSerial.print(t_count);
debugSerial.print(F(" Addr:"));
PrintBytes(term[t_count], 8,0);
debugSerial.println();
if (term[t_count][0] == 0x28) {
sensors->setResolution(term[t_count], TEMPERATURE_PRECISION);
net->setStrongPullup();

View File

@@ -19,6 +19,7 @@ e-mail anklimov@gmail.com
*/
#include "utils.h"
#include "options.h"
#if defined(__SAM3X8E__) || defined(ARDUINO_ARCH_STM32F1)
#include <malloc.h>
@@ -134,5 +135,61 @@ void parseBytes(const char *str, char separator, byte *bytes, int maxBytes, int
str++; // Point to next character after separator
}
}
#define ARDBUFFER 16 //Buffer for storing intermediate strings. Performance may vary depending on size.
int log(const char *str, ...)//TODO: __FlashStringHelper str support
{
int i, count=0, j=0, flag=0;
char temp[ARDBUFFER+1];
for(i=0; str[i]!='\0';i++) if(str[i]=='%') count++; //Evaluate number of arguments required to be printed
va_list argv;
va_start(argv, count);
for(i=0,j=0; str[i]!='\0';i++) //Iterate over formatting string
{
if(str[i]=='%')
{
//Clear buffer
temp[j] = '\0';
Serial.print(temp);
j=0;
temp[0] = '\0';
//Process argument
switch(str[++i])
{
case 'd': debugSerial.print(va_arg(argv, int));
break;
case 'l': debugSerial.print(va_arg(argv, long));
break;
case 'f': debugSerial.print(va_arg(argv, double));
break;
case 'c': debugSerial.print((char)va_arg(argv, int));
break;
case 's': debugSerial.print(va_arg(argv, char *));
break;
default: ;
};
}
else
{
//Add to buffer
temp[j] = str[i];
j = (j+1)%ARDBUFFER;
if(j==0) //If buffer is full, empty buffer.
{
temp[ARDBUFFER] = '\0';
debugSerial.print(temp);
temp[0]='\0';
}
}
};
Serial.println(); //Print trailing newline
return count + 1; //Return number of arguments detected
}
#pragma message(VAR_NAME_VALUE(debugSerial))
#pragma message(VAR_NAME_VALUE(SERIAL_BAUD))

View File

@@ -25,10 +25,11 @@ e-mail anklimov@gmail.com
#include <Arduino.h>
void PrintBytes(uint8_t* addr, uint8_t count, bool newline=0);
void PrintBytes(uint8_t* addr, uint8_t count, bool newline);
void SetBytes(uint8_t* addr, uint8_t count, char * out);
void SetAddr(char * out, uint8_t* addr);
uint8_t HEX2DEC(char i);
int getInt(char ** chan);
unsigned long freeRam ();
void parseBytes(const char* str, char separator, byte* bytes, int maxBytes, int base);
int log(const char *str, ...);