changes for Finder, introduce Wifi-Enable flag

This commit is contained in:
hg 2015-05-18 12:36:47 +02:00
parent 655e8f6861
commit 34eddf58ce
5 changed files with 136 additions and 139 deletions

View File

@ -151,10 +151,10 @@ environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.DTS/value=3600 environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.DTS/value=3600
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/delimiter=\: environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/delimiter=\:
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/operation=replace
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/value=1431556581 environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.LOCAL/value=1431952539
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/delimiter=\: environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/delimiter=\:
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/operation=replace
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/value=1431549381 environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.UTC/value=1431945339
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/delimiter=\: environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/delimiter=\:
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/operation=replace
environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/value=3600 environment/project/it.baeyens.arduino.core.toolChain.release.1600398586/A.EXTRA.TIME.ZONE/value=3600

View File

@ -13,7 +13,7 @@
enum enum
{ {
VOLTAGE, VOLTAGE,
FREQUENCY, COSPHI,
CURRENT, CURRENT,
POWER, POWER,
ENERGY, ENERGY,
@ -25,33 +25,24 @@ Packet packets[TOTAL_NO_OF_PACKETS];
// Mudbus *modbusSlave; // Mudbus *modbusSlave;
uint16_t voltage[2]; uint16_t voltage;
uint16_t frequency[2]; uint16_t cosphi;
uint16_t current[2]; uint16_t current;
uint16_t power[2]; uint16_t power;
uint16_t energy[2]; union {
uint16_t in[2];
uint32_t v;
} energy;
float startEnergy = 0; float startEnergy = 0;
float convF(uint16_t in[2]) {
union {
struct {
uint16_t a;
uint16_t b;
} s;
float f;
} U;
U.s.a = in[1];
U.s.b = in[0];
return U.f;
}
float getVoltage() { return convF(voltage); } float getVoltage() { return (float)voltage; }
float getCurrent() { return convF(current); } float getCurrent() { return (float)current * 0.1; }
float getFrequency() { return convF(frequency); } float getCosPhi() { return (float)cosphi * 0.01; }
float getPower() { return convF(power); } float getPower() { return (float)power * 0.01; }
float getEnergy() { return convF(energy); } float getEnergy() { return (float)energy.v; }
float getNewEnergy() { return convF(energy) - startEnergy; } float getNewEnergy() { return ((float)energy.v) - startEnergy; }
// void modbusAppBegin(Mudbus *mb) { // void modbusAppBegin(Mudbus *mb) {
@ -60,11 +51,14 @@ void modbusAppBegin() {
// modbusSlave = mb; // modbusSlave = mb;
modbus_construct(&packets[VOLTAGE], 1, READ_HOLDING_REGISTERS, 0x2000, 2, voltage);
modbus_construct(&packets[FREQUENCY], 1, READ_HOLDING_REGISTERS, 0x2020, 2, frequency);
modbus_construct(&packets[CURRENT], 1, READ_HOLDING_REGISTERS, 0x2060, 2, current); modbus_construct(&packets[VOLTAGE], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 35, 1, &voltage);
modbus_construct(&packets[POWER], 1, READ_HOLDING_REGISTERS, 0x2080, 2, power); modbus_construct(&packets[COSPHI], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 39, 1, &cosphi);
modbus_construct(&packets[ENERGY], 1, READ_HOLDING_REGISTERS, 0x3000, 2, energy); modbus_construct(&packets[CURRENT], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 36, 1, &current);
modbus_construct(&packets[POWER], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 37, 1, &power);
modbus_construct(&packets[ENERGY], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 27, 2, energy.in);
// modbus_construct(&packets[POWER], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 1, 1, &power);
modbus_configure(&Serial2, MODBUS_BAUD, SERIAL_8N2, MODBUS_TIMEOUT, modbus_configure(&Serial2, MODBUS_BAUD, SERIAL_8N2, MODBUS_TIMEOUT,

View File

@ -14,13 +14,13 @@
const uint32_t MODBUS_BAUD = 1200; const uint32_t MODBUS_BAUD = 9600;
const uint16_t MODBUS_TIMEOUT = 10000; const uint16_t MODBUS_TIMEOUT = 10000;
const uint16_t MODBUS_SCANRATE = 1000; const uint16_t MODBUS_SCANRATE = 1000;
const uint8_t MODBUS_RETRY_COUNT = 25; const uint8_t MODBUS_RETRY_COUNT = 25;
const uint8_t MODBUS_TX_ENABLE_PIN = 2; const uint8_t MODBUS_TX_ENABLE_PIN = 2;
const uint8_t ZEROING_PIN = 3; const uint8_t ZEROING_PIN = 3;
const uint8_t MODBUS_ADDRESS = 1;
// void modbusAppBegin(Mudbus *mb); // void modbusAppBegin(Mudbus *mb);
void modbusAppBegin(); void modbusAppBegin();
@ -28,7 +28,7 @@ void modbusAppExec();
float getVoltage(); float getVoltage();
float getCurrent(); float getCurrent();
float getFrequency(); float getCosPhi();
float getPower(); float getPower();
float getEnergy(); float getEnergy();
float getNewEnergy(); float getNewEnergy();

View File

@ -201,12 +201,15 @@ void waiting_for_turnaround()
// get the serial data from the buffer // get the serial data from the buffer
void waiting_for_reply() void waiting_for_reply()
{ {
// Serial.println("A0");
if ((*ModbusPort).available()) // is there something to check? if ((*ModbusPort).available()) // is there something to check?
{ {
Serial.println("A1");
unsigned char overflowFlag = 0; unsigned char overflowFlag = 0;
buffer = 0; buffer = 0;
while ((*ModbusPort).available()) while ((*ModbusPort).available())
{ {
Serial.println("A2");
// The maximum number of bytes is limited to the serial buffer size // The maximum number of bytes is limited to the serial buffer size
// of BUFFER_SIZE. If more bytes is received than the BUFFER_SIZE the // of BUFFER_SIZE. If more bytes is received than the BUFFER_SIZE the
// overflow flag will be set and the serial buffer will be read until // overflow flag will be set and the serial buffer will be read until
@ -220,7 +223,7 @@ void waiting_for_reply()
overflowFlag = 1; overflowFlag = 1;
frame[buffer] = (*ModbusPort).read(); frame[buffer] = (*ModbusPort).read();
// Serial.print("R: "); Serial.println(frame[buffer], 16); Serial.print("R: "); Serial.println(frame[buffer], 16);
buffer++; buffer++;
} }
// This is not 100% correct but it will suffice. // This is not 100% correct but it will suffice.
@ -504,7 +507,7 @@ void sendPacket(unsigned char bufferSize)
digitalWrite(TxEnablePin, HIGH); digitalWrite(TxEnablePin, HIGH);
for (unsigned char i = 0; i < bufferSize; i++) { for (unsigned char i = 0; i < bufferSize; i++) {
// Serial.print("S: "); Serial.println(frame[i],16); Serial.print("S: "); Serial.println(frame[i],16);
(*ModbusPort).write(frame[i]); (*ModbusPort).write(frame[i]);
} }

View File

@ -39,6 +39,9 @@ Metro minute = Metro(60000);
Metro second = Metro(1000); Metro second = Metro(1000);
uint32_t uptime; uint32_t uptime;
static bool wifiEnabled = false;
void callback(char* topic, byte* payload, unsigned int length) { void callback(char* topic, byte* payload, unsigned int length) {
// handle message arrived // handle message arrived
} }
@ -78,46 +81,46 @@ void setup() {
lcd.print("Starting ..."); lcd.print("Starting ...");
if (wifiEnabled) {
// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
lcd.setCursor(0, 1);
lcd.print("WiFi shield not present");
// don't continue:
while(true);
}
// check for the presence of the shield: int status = WL_IDLE_STATUS;
if (WiFi.status() == WL_NO_SHIELD) { while ( status != WL_CONNECTED) {
Serial.println("WiFi shield not present"); Serial.print("Attempting to connect to SSID: ");
lcd.setCursor(0, 1); Serial.println(ssid);
lcd.print("WiFi shield not present"); lcd.setCursor(0, 1);
// don't continue: lcd.print("Trying: ");
while(true); lcd.print(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:
delay(10000);
}
Serial.println("Connected.");
lcd.setCursor(0, 2);
lcd.print("Connected.");
printWifiStatus();
// if (! client.connect("WiFiPowerMeter")) {
// Serial.println("MQTT broker not found");
// lcd.home();
// lcd.clear();
// lcd.print("MQTT broker not found");
// while (true);
// } else {
// lcd.print(" *");
// }
} }
int status = WL_IDLE_STATUS;
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
lcd.setCursor(0, 1);
lcd.print("Trying: ");
lcd.print(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:
delay(10000);
}
Serial.println("Connected.");
lcd.setCursor(0, 2);
lcd.print("Connected.");
printWifiStatus();
// if (! client.connect("WiFiPowerMeter")) {
// Serial.println("MQTT broker not found");
// lcd.home();
// lcd.clear();
// lcd.print("MQTT broker not found");
// while (true);
// } else {
// lcd.print(" *");
// }
delay(1000); delay(1000);
lcd.home(); lcd.home();
lcd.clear(); lcd.clear();
@ -160,18 +163,20 @@ void updateDisplay() {
lcd.print(days); lcd.print("/"); lcd.print(hours); lcd.print(":"); lcd.print(days); lcd.print("/"); lcd.print(hours); lcd.print(":");
lcd.print(minutes); lcd.print(":"); lcd.print(seconds); lcd.print(" "); lcd.print(minutes); lcd.print(":"); lcd.print(seconds); lcd.print(" ");
long rssi = WiFi.RSSI(); if (wifiEnabled) {
lcd.print(rssi); lcd.print(" "); long rssi = WiFi.RSSI();
uint8_t wifiStatus = WiFi.status(); lcd.print(rssi); lcd.print(" ");
lcd.print(wifiStatus); uint8_t wifiStatus = WiFi.status();
lcd.print(disconnectState); lcd.print(wifiStatus);
lcd.print(disconnectState);
}
lcd.setCursor(0, 1); lcd.setCursor(0, 1);
lcd.print(getVoltage()); lcd.print("V"); lcd.print(getVoltage()); lcd.print("V");
lcd.setCursor(10, 1); lcd.setCursor(10, 1);
lcd.print(getCurrent()); lcd.print("A"); lcd.print(getCurrent()); lcd.print("A");
lcd.setCursor(0, 2); lcd.setCursor(0, 2);
lcd.print(getFrequency()); lcd.print("Hz"); lcd.print(getCosPhi()); lcd.print("");
lcd.setCursor(10, 2); lcd.setCursor(10, 2);
lcd.print(getPower()); lcd.print("W"); lcd.print(getPower()); lcd.print("W");
lcd.setCursor(0, 3); lcd.setCursor(0, 3);
@ -188,67 +193,61 @@ void loop() {
modbusAppExec(); modbusAppExec();
// Mb.Run(); // Mb.Run();
if ((disconnectState == 0) && (! client.loop())) { if (wifiEnabled) {
disconnectState = 1; if ((disconnectState == 0) && (! client.loop())) {
}
switch (disconnectState) {
case 0:
// Serial.println("discState 0");
// everything fine
break;
case 1:
Serial.println("discState 1");
client.disconnect();
disconnectTime = millis();
disconnectState = 2;
break;
case 2:
Serial.println("discState 3");
if (disconnectTime + 2000 < millis()) {
disconnectState = 3;
}
break;
case 3:
Serial.println("discState 3");
if (client.connect("WiFiPowerMeter")) {
disconnectTime = millis();
disconnectState = 0;
} else {
disconnectState = 1; disconnectState = 1;
} }
break;
default:
disconnectState = 0;
break;
}
switch (disconnectState) {
case 0:
// Serial.println("discState 0");
// everything fine
if (minute.check() == 1) { break;
char strbuf[256]; case 1:
memset(strbuf, sizeof(strbuf), 0); Serial.println("discState 1");
PString buf = PString(strbuf, sizeof(strbuf)); client.disconnect();
buf << "{ \"metadata\": { \"device\": \"WiFiPowerMeter\" }, " << disconnectTime = millis();
"\"data\": {" << disconnectState = 2;
"\"voltage\": " << getVoltage() << ", " << break;
"\"current\": " << getCurrent() << ", " << case 2:
"\"frequency\": " << getFrequency() << ", " << Serial.println("discState 3");
"\"power\": " << getPower() << ", " << if (disconnectTime + 2000 < millis()) {
"\"energy\": " << getEnergy() << ", " << disconnectState = 3;
"\"newEnergy\": " << getNewEnergy() << ", " << }
"\"uptime\": " << uptime << break;
"}" << case 3:
"}" << endl; Serial.println("discState 3");
if (disconnectState == 0) { if (client.connect("WiFiPowerMeter")) {
client.publish("IoT/WiFiPowerMeter/Measurement", strbuf); disconnectTime = millis();
disconnectState = 0;
} else {
disconnectState = 1;
}
break;
default:
disconnectState = 0;
break;
} }
if (minute.check() == 1) {
char strbuf[256];
memset(strbuf, sizeof(strbuf), 0);
PString buf = PString(strbuf, sizeof(strbuf));
buf << "{ \"metadata\": { \"device\": \"WiFiPowerMeter\" }, " <<
"\"data\": {" <<
"\"voltage\": " << getVoltage() << ", " <<
"\"current\": " << getCurrent() << ", " <<
"\"cosphi\": " << getCosPhi() << ", " <<
"\"power\": " << getPower() << ", " <<
"\"energy\": " << getEnergy() << ", " <<
"\"newEnergy\": " << getNewEnergy() << ", " <<
"\"uptime\": " << uptime <<
"}" <<
"}" << endl;
if (disconnectState == 0) {
client.publish("IoT/WiFiPowerMeter/Measurement", strbuf);
}
}
} }
if (second.check() == 1) { if (second.check() == 1) {
@ -256,11 +255,12 @@ void loop() {
Serial.println("tick"); Serial.println("tick");
String msg = String("{ \"metadata\": { \"device\": \"WiFiPowerMeter\" }, \"data\": { \"uptime\": ") + uptime + String("}}"); if (wifiEnabled) {
if (disconnectState == 0) { String msg = String("{ \"metadata\": { \"device\": \"WiFiPowerMeter\" }, \"data\": { \"uptime\": ") + uptime + String("}}");
client.publish("IoT/WiFiPowerMeter/Heartbeat", (char*)msg.c_str()); if (disconnectState == 0) {
client.publish("IoT/WiFiPowerMeter/Heartbeat", (char*)msg.c_str());
}
} }
} }
} }