6 Commits
FIRST ... MQTT

Author SHA1 Message Date
hg
05dd3165ec changes 2015-05-19 07:42:08 +02:00
hg
2e8aaedf54 remove debugging 2015-05-18 22:07:51 +02:00
hg
023e557014 fix WiFiEnable to pin 3, fix presentation of energy 2015-05-18 22:07:33 +02:00
hg
5e433458c7 Wifi switch, but not working ;-( 2015-05-18 20:20:59 +02:00
hg
34eddf58ce changes for Finder, introduce Wifi-Enable flag 2015-05-18 12:36:47 +02:00
hg
655e8f6861 Added tag FIRST for changeset cc43be855ecd 2015-05-13 22:48:39 +02:00
6 changed files with 148 additions and 142 deletions

1
.hgtags Normal file
View File

@ -0,0 +1 @@
cc43be855ecd232c0616a107bfb50c04e48eaf92 FIRST

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=1431979958
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=1431972758
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,46 +25,42 @@ 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]; uint16_t energy[2];
float startEnergy = 0; float startEnergy = 0;
float convF(uint16_t in[2]) {
union { float getVoltage() { return (float)voltage; }
struct { float getCurrent() { return (float)current * 0.1; }
uint16_t a; float getCosPhi() { return (float)cosphi * 0.01; }
uint16_t b; float getPower() { return (float)power * 0.01; }
} s;
float f; float getEnergy() {
} U; uint32_t v = ((uint32_t)energy[1]) + (((uint32_t)energy[0]) << 16);
U.s.a = in[1]; float vv = ((float)v) * 0.01;
U.s.b = in[0]; return vv;
return U.f;
} }
float getVoltage() { return convF(voltage); } float getNewEnergy() { return getEnergy() - startEnergy; }
float getCurrent() { return convF(current); }
float getFrequency() { return convF(frequency); }
float getPower() { return convF(power); }
float getEnergy() { return convF(energy); }
float getNewEnergy() { return convF(energy) - startEnergy; }
// void modbusAppBegin(Mudbus *mb) { // void modbusAppBegin(Mudbus *mb) {
void modbusAppBegin() { void modbusAppBegin() {
pinMode(ZEROING_PIN, INPUT_PULLUP);
// 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);
// 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,
@ -75,7 +71,7 @@ void modbusAppExec() {
modbus_update(); modbus_update();
float nEnergy = getEnergy(); float nEnergy = getEnergy();
if (((0 == startEnergy) && (0 != nEnergy)) || (digitalRead(ZEROING_PIN) == 0)) { if ((0 == startEnergy) && (0 != nEnergy)) {
startEnergy = nEnergy; startEnergy = nEnergy;
} }

View File

@ -14,13 +14,12 @@
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 MODBUS_ADDRESS = 1;
// void modbusAppBegin(Mudbus *mb); // void modbusAppBegin(Mudbus *mb);
void modbusAppBegin(); void modbusAppBegin();
@ -28,7 +27,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

View File

@ -14,7 +14,7 @@
#include <avr/wdt.h> #include <avr/wdt.h>
const uint8_t WIFI_ENABLE_PIN = 3;
LiquidCrystal lcd = LiquidCrystal(A0, A1, A2, A3, A4, A5); LiquidCrystal lcd = LiquidCrystal(A0, A1, A2, A3, A4, A5);
@ -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
} }
@ -65,6 +68,11 @@ void printWifiStatus() {
} }
void setup() { void setup() {
pinMode(WIFI_ENABLE_PIN, INPUT_PULLUP);
delay(500);
wifiEnabled = (digitalRead(WIFI_ENABLE_PIN) != 0);
Serial.begin(57600); Serial.begin(57600);
while (!Serial) { while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only ; // wait for serial port to connect. Needed for Leonardo only
@ -78,7 +86,7 @@ void setup() {
lcd.print("Starting ..."); lcd.print("Starting ...");
if (wifiEnabled) {
// check for the presence of the shield: // check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) { if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present"); Serial.println("WiFi shield not present");
@ -116,7 +124,7 @@ void setup() {
// } else { // } else {
// lcd.print(" *"); // lcd.print(" *");
// } // }
}
delay(1000); delay(1000);
lcd.home(); lcd.home();
@ -160,20 +168,24 @@ 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(" ");
if (wifiEnabled) {
long rssi = WiFi.RSSI(); long rssi = WiFi.RSSI();
lcd.print(rssi); lcd.print(" "); lcd.print(rssi); lcd.print(" ");
uint8_t wifiStatus = WiFi.status(); uint8_t wifiStatus = WiFi.status();
lcd.print(wifiStatus); lcd.print(wifiStatus);
lcd.print(disconnectState); lcd.print(disconnectState);
} else {
lcd.print("no wifi");
}
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("kW");
lcd.setCursor(0, 3); lcd.setCursor(0, 3);
lcd.print(getEnergy()); lcd.print(" "); lcd.print(getNewEnergy()); lcd.print(" "); lcd.print(getEnergy()); lcd.print(" "); lcd.print(getNewEnergy()); lcd.print(" ");
lcd.print("kWh"); lcd.print("kWh");
@ -188,12 +200,11 @@ void loop() {
modbusAppExec(); modbusAppExec();
// Mb.Run(); // Mb.Run();
if (wifiEnabled) {
if ((disconnectState == 0) && (! client.loop())) { if ((disconnectState == 0) && (! client.loop())) {
disconnectState = 1; disconnectState = 1;
} }
switch (disconnectState) { switch (disconnectState) {
case 0: case 0:
// Serial.println("discState 0"); // Serial.println("discState 0");
@ -225,10 +236,6 @@ void loop() {
break; break;
} }
if (minute.check() == 1) { if (minute.check() == 1) {
char strbuf[256]; char strbuf[256];
memset(strbuf, sizeof(strbuf), 0); memset(strbuf, sizeof(strbuf), 0);
@ -237,7 +244,7 @@ void loop() {
"\"data\": {" << "\"data\": {" <<
"\"voltage\": " << getVoltage() << ", " << "\"voltage\": " << getVoltage() << ", " <<
"\"current\": " << getCurrent() << ", " << "\"current\": " << getCurrent() << ", " <<
"\"frequency\": " << getFrequency() << ", " << "\"cosphi\": " << getCosPhi() << ", " <<
"\"power\": " << getPower() << ", " << "\"power\": " << getPower() << ", " <<
"\"energy\": " << getEnergy() << ", " << "\"energy\": " << getEnergy() << ", " <<
"\"newEnergy\": " << getNewEnergy() << ", " << "\"newEnergy\": " << getNewEnergy() << ", " <<
@ -247,8 +254,7 @@ void loop() {
if (disconnectState == 0) { if (disconnectState == 0) {
client.publish("IoT/WiFiPowerMeter/Measurement", strbuf); client.publish("IoT/WiFiPowerMeter/Measurement", strbuf);
} }
}
} }
if (second.check() == 1) { if (second.check() == 1) {
@ -256,11 +262,12 @@ void loop() {
Serial.println("tick"); Serial.println("tick");
if (wifiEnabled) {
String msg = String("{ \"metadata\": { \"device\": \"WiFiPowerMeter\" }, \"data\": { \"uptime\": ") + uptime + String("}}"); String msg = String("{ \"metadata\": { \"device\": \"WiFiPowerMeter\" }, \"data\": { \"uptime\": ") + uptime + String("}}");
if (disconnectState == 0) { if (disconnectState == 0) {
client.publish("IoT/WiFiPowerMeter/Heartbeat", (char*)msg.c_str()); client.publish("IoT/WiFiPowerMeter/Heartbeat", (char*)msg.c_str());
} }
}
} }
} }