Skip to content

Commit cc8d336

Browse files
authored
Merge pull request #5 from dfrozen/dev
1.0.3 Stable
2 parents 49ada5d + 7ab80f1 commit cc8d336

File tree

7 files changed

+140
-55
lines changed

7 files changed

+140
-55
lines changed

MQTT_Connection.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include "MQTT_Connection.h"
55
#include "Settings.h"
66

7-
7+
bool RESET = false;
88
void callback(char* topic, byte* payload, unsigned int length);
99

1010
WiFiClient wifiClient;
@@ -80,7 +80,7 @@ void callback(char* topic, byte* payload, unsigned int length) {
8080

8181
unsigned int HighBase,LowBase;
8282
String dataStr, topicStr,topicShort;
83-
bool SET;
83+
8484
for (int i=0 ; i<length; i++)dataStr += (char)payload[i];
8585
HighBase =dataStr.substring(0,dataStr.lastIndexOf(',')).toInt();
8686
LowBase = dataStr.substring(dataStr.lastIndexOf(',')+1).toInt();
@@ -90,25 +90,25 @@ void callback(char* topic, byte* payload, unsigned int length) {
9090
if (topicShort == "reset" && HighBase == 1 ){
9191

9292
client.publish((PUB_TOPIC "status"),"SET Enabled",true);
93-
SET = true;
93+
RESET = true;
9494
}
95-
if (topicShort == "Cold: " & SET) {
95+
if (topicShort == "Cold: " & RESET) {
9696

9797
EEPROM_write_Int(CounterLowAddress[0], LowBase);
9898
EEPROM_write_Int(CounterHighAddress[0], HighBase);
9999
client.publish((PUB_TOPIC "status"),"set Cold: new data",true);
100100
client.publish((PUB_TOPIC "correct/reset"),"0",true);
101101
countersInit();
102-
SET = false;
102+
RESET = false;
103103
}
104-
if (topicShort == "Hot: " & SET) {
104+
if (topicShort == "Hot: " & RESET) {
105105

106106
EEPROM_write_Int(CounterLowAddress[1], LowBase);
107107
EEPROM_write_Int(CounterHighAddress[1], HighBase);
108108
client.publish((PUB_TOPIC "status"),"set Hot: new data",true);
109109
client.publish((PUB_TOPIC "correct/reset"),"0",true);
110110
countersInit();
111-
SET = false;
111+
RESET = false;
112112
}
113113

114114
}

README.md

Lines changed: 61 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,90 @@
11

22
# wc_esp8266
3-
ESP8266, LiquidCrystal_I2C water meter monitor with MQTT
43

5-
The monitor for the watermeter, saves the measurements in EEPROM.
6-
Have a reset mode to default measurements Based on ESP8266 and Arduino IDE
4+
ESP8266, LiquidCrystal_I2C watermeter monitor with MQTT
5+
![](docs/img/IMG_1937.jpg)
6+
Здесь лежит скетч для Arduino IDE, с помощью которого из ESP8266 и двухстрокового LCD 16x2 можно сделать монитор для счетчиков воды.
7+
Возможности:
8+
1. Установка первоначальных значений через MQTT
9+
2. Все измерения сохраняются EEPROM.
10+
3. Сделана поддержка обновления прошивки по Wi-Fi
711

8-
## warning
9-
garanted work with Bounce 2 ver 2.2.0
12+
### Внимание
13+
гарантированная работоспособность проверена Bounce 2 ver 2.2.0
1014

15+
### 1.0.3 - 2020.03.31 - BugFix, Вынос WiFi, MQTT, Update Server во внешние процедуры.
1116

12-
### ver 1.0.3 - 2020.03.31 - BugFix, Вынос WiFi, MQTT, Update Server во внешние процедуры.
17+
### 1.0.2 - 2020.03.28 - BugFix, Вынос настроек в Settings.h (GitHub)
1318

14-
### ver 1.0.2 - 2020.03.28 - BugFix, Вынос настроек в Settings.h (GitHub)
19+
### 1.0.1 - 2020.03.25 - Первая версия кода на базе ESP8266
1520

16-
### ver 1.0.1 - 2020.03.25 - Первая версия кода на базе ESP8266
1721

22+
### HOW USE
1823

19-
# HOW USE
24+
### Перед сборкой измените параметры в `Settings.h`
2025

21-
## Change if you need for default config
26+
//Hostname of ESP8266
27+
#define WIFI_HOSTNAME "WaterMeter"
2228

23-
//Hostname of ESP8266
24-
#define WIFI_HOSTNAME "WaterMeter"
29+
//Wifi SSID to connect to Leave empty to disable Wi-Fi.
30+
#define WIFI_SSID "Bestoloch"
2531

26-
//Wifi SSID to connect to Leave empty to disable Wi-Fi.
27-
#define WIFI_SSID "Bestoloch"
32+
//Passowrd for WIFI
33+
#define WIFI_PASSWORD "511794sinikon"
2834

29-
//Passowrd for WIFI
30-
#define WIFI_PASSWORD "511794sinikon"
35+
//set the mqqt host name or ip address to your mqqt host. Leave empty to disable mqtt.
36+
#define MQTT_SERVER "10.10.100.14"
37+
//mqtt port for the above host
38+
#define MQTT_PORT 1883
39+
//if authentication is enabled for mqtt, set the username below. Leave empty to disable authentication
40+
#define MQTT_USER "orangepi"
41+
#define MQTT_PASS "orangepi"
3142

32-
//set the mqqt host name or ip address to your mqqt host. Leave empty to disable mqtt.
33-
#define MQTT_SERVER "10.10.100.14"
34-
//mqtt port for the above host
35-
#define MQTT_PORT 1883
36-
//if authentication is enabled for mqtt, set the username below. Leave empty to disable authentication
37-
#define MQTT_USER "orangepi"
38-
#define MQTT_PASS "orangepi"
43+
// Publish branch of topic to MQTT
44+
#define PUB_TOPIC "/home/watermeter/"
45+
// Subscribe branch of topic for Callback
46+
#define SUB_TOPIC "/home/watermeter/correct/#"
3947

40-
// Publish branch of topic to MQTT
41-
#define PUB_TOPIC "/home/watermeter/"
42-
// Subscribe branch of topic for Callback
43-
#define SUB_TOPIC "/home/watermeter/correct/#"
48+
/////////////////////////webupdate server//////////////////////////////////////////
4449

45-
/////////////////////////webudate server//////////////////////////////////////////
50+
#define update_host "WaterMeter"
4651

47-
#define update_host "WaterMeter"
52+
#define update_path "/firmware"
4853

49-
#define update_path "/firmware"
54+
#define update_username "admin"
5055

51-
#define update_username "admin"
56+
#define update_password "admin"
5257

53-
#define update_password "admin"
58+
/////////////////////////////////////////////////////////////////////////////////////////////////
59+
#define DEBUG true // Выдача отладочной информации в COM-порт
60+
#define BUFFER_SIZE 100
5461

55-
/////////////////////////////////////////////////////////////////////////////////////////////////
62+
// Пины для подключения устройств
63+
#define BUTTON_PIN 16//Пин с кнопкой
64+
#define HOT_COUNTER_PIN 14//Пин счетчика горячей воды
65+
#define COLD_COUNTER_PIN 12//Пин счетчика холодной воды
66+
#define COUNTERS 2//Колличество счетчиков в системе
67+
#define STEP 10 // Цена импульса - 1 на 10 литров, или 1 на литр
5668

57-
#define DEBUG true // Выдача отладочной информации в COM-порт
58-
#define BUFFER_SIZE 100
69+
## Установка превочальных значений
70+
Если необходимо скоректировать данные или установить первоначальные значения.:
5971

60-
// Пины для подключения устройств
61-
#define BUTTON_PIN 16 //Пин с кнопкой
62-
#define HOT_COUNTER_PIN 14 //Пин счетчика горячей воды
63-
#define COLD_COUNTER_PIN 12 //Пин счетчика холодной водыводы
64-
#define COUNTERS 2 //Колличество счетчиков в системе
65-
#define STEP 10 // Цена импульса - 1 на 10 литров, или 1 на литр
72+
1. Записать в MQTT Topic "/watercount/correct/reset" = 1
73+
2. Записать в MQTT Topic "/watercount/correct/Cold:{Hot:}" = 00000,000 (после запятой обязательно 3 знака)
6674

67-
## Set default or correction
68-
if You need correct data of measurements, to do:
69-
for sample you need correct Cold water measurements
70-
1. synchronize MQTT Topic "/watercount/correct/Hot:" to current measurements /watercount/Hot: (if no sync maybe rewrite )
71-
2. Set MQTT Topic "/watercount/correct/reset" = 1
72-
3. Set MQTT Topic "/watercount/correct/Cold:" correct data
75+
Когда данные будут сохранены в EEPROM
7376

74-
If new data saved to EEPROM auto reset "/watercount/correct/reset" = 0 and /watercount/status "set Cold: new data"
77+
78+
1. в MQTT Topic вернется /watercount/correct/reset = 0
79+
2. в MQTT Topic вернется /watercount/status "set Cold: new data"
80+
81+
## Iobroker MQTT Topic`s
82+
83+
84+
![](docs/img/mqtt.png)
85+
86+
## Вариант использования
87+
![](docs/img/IMG_1945.PNG)
7588

7689
## License
7790
MIT License

docs/img/IMG_1937.jpg

64.6 KB
Loading

docs/img/IMG_1945.PNG

152 KB
Loading

docs/img/mqtt.png

21.8 KB
Loading

script/water.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
2+
/*createState("javascript.0.monitor.DayHotWater","");
3+
createState("javascript.0.monitor.MonthHotWater","");
4+
createState("javascript.0.monitor.DayHotRate","");
5+
createState("javascript.0.monitor.MonthHotRate","");
6+
createState("javascript.0.monitor.DayColdWater","");
7+
createState("javascript.0.monitor.MonthColdWater","");
8+
createState("javascript.0.monitor.DayColdRate","");
9+
createState("javascript.0.monitor.MonthColdRate","");
10+
*/
11+
12+
sendTo('pushover.0', 'Скрипт Расчета расхода Воды запущен');
13+
14+
schedule('{"time":{"start":"23:45","end":"23:59","mode":"minutes","interval":5},"period":{"days":1}}', function () {
15+
16+
var date = new Date();
17+
18+
//var w_day = date.getDay(); // 0-воскр. 6-суббота
19+
20+
var hour = date.getHours();
21+
22+
var day = date.getDate();
23+
24+
var min = date.getMinutes();
25+
26+
var DayHotWater = getState('mqtt.0.home.watermeter.Hot:__'/*home/sensors/watercount/Hot:*/).val;
27+
var DayColdWater = getState('mqtt.0.home.watermeter.Cold:_'/*home/sensors/watercount/Cold:*/).val;
28+
log('Текущее значение счетчика Холодной воды' +DayColdWater);
29+
log('Текущее значение счетчика Горячей воды' +DayHotWater);
30+
31+
if(hour == 23 && min == 55) { /*каждый день в 23-55 сохраняем данные энерго потребления */
32+
33+
var last_DayHotWater = getState("javascript.0.monitor.DayHotWater").val;
34+
var last_DayColdWater = getState("javascript.0.monitor.DayColdWater").val;
35+
var rate1= DayHotWater -last_DayHotWater;
36+
var rate2= DayColdWater -last_DayColdWater;
37+
38+
setState ('javascript.0.monitor.DayHotWater'/*javascript 0 monitor DayHotWater*/, DayHotWater.toFixed(2));
39+
setState ('javascript.0.monitor.DayColdWater'/*javascript 0 monitor DayColdWater*/, DayColdWater.toFixed(2));
40+
setState ('javascript.0.monitor.DayHotRate'/*javascript 0 monitor DayHotRate*/, rate1.toFixed(2));
41+
setState ('javascript.0.monitor.DayColdRate'/*javascript 0 monitor DayHotRate*/, rate2.toFixed(2));
42+
43+
log('Сохранено дневное потребление Горячей воды ' +rate1.toFixed(2));
44+
log('Сохранено дневное потребление Холодной воды '+rate2.toFixed(2));
45+
46+
sendTo('pushover.0', 'Сохранено дневное потребление Холодной воды: ' +rate2.toFixed(2) +' at '+hour +':'
47+
+min );
48+
sendTo('pushover.0', 'Сохранено дневное потребление Горячей воды: ' +rate1.toFixed(2) + ' at '+hour +':'
49+
+min );
50+
}
51+
52+
if(day == 10 && hour == 23 && min == 55) { /*10 числа каждого месяца сохраняем данные энерго потребления */
53+
54+
var last_MonthHotWater = getState("javascript.0.monitor.MonthHotWater").val;
55+
var last_MonthColdWater = getState("javascript.0.monitor.MonthColdWater").val;
56+
var Month_rate1= DayHotWater -last_MonthHotWater;
57+
var Month_rate2= DayColdWater -last_MonthColdWater;
58+
59+
setState ('javascript.0.monitor.MonthHotWater', DayHotWater.toFixed(2));
60+
setState ('javascript.0.monitor.MonthColdtWater', DayColdWater.toFixed(2));
61+
setState ('javascript.0.monitor.MonthHotRate',Month_rate1.toFixed(2));
62+
setState ('javascript.0.monitor.MonthColdRate', Month_rate2.toFixed(2));
63+
64+
log('Сохранено месячное потребление Горячей воды '+Month_rate1.toFixed(2));
65+
log('Сохранено месячное потребление Холодной воды '+Month_rate2.toFixed(2));
66+
sendTo('pushover.0', 'Сохранено месячное потребление Холодной воды: '+Month_rate2.toFixed(2) +' at '+hour +':'
67+
+min );
68+
sendTo('pushover.0', 'Сохранено месячное потребление Горячей воды: '+Month_rate1.toFixed(2) +' at '+hour +':'
69+
+min );
70+
}
71+
72+
});

wc_esp8266.ino.generic.bin

32 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)