dynamic bms endpoint
This commit is contained in:
parent
9520802f7b
commit
fb6484bdf2
116
src/main.cpp
116
src/main.cpp
|
@ -20,8 +20,10 @@ IPAddress DNS(0, 0, 0, 0);
|
||||||
IPAddress MQTT_SERVER(0, 0, 0, 0);
|
IPAddress MQTT_SERVER(0, 0, 0, 0);
|
||||||
uint16_t MQTT_PORT = 0;
|
uint16_t MQTT_PORT = 0;
|
||||||
bool standalone = true;
|
bool standalone = true;
|
||||||
#define MQTT_BASE_TOPIC "/espmega/ProR3"
|
// #define MQTT_BASE_TOPIC "/espmega/ProR3"
|
||||||
char STATE_REQUEST_TOPIC[75] = MQTT_BASE_TOPIC "/requeststate";
|
char MQTT_BASE_TOPIC[20];
|
||||||
|
uint8_t base_topic_length = 0;
|
||||||
|
char STATE_REQUEST_TOPIC[40];
|
||||||
// #define MQTT_USE_AUTH
|
// #define MQTT_USE_AUTH
|
||||||
#ifdef MQTT_USE_AUTH
|
#ifdef MQTT_USE_AUTH
|
||||||
const char MQTT_USERNAME[] = "username";
|
const char MQTT_USERNAME[] = "username";
|
||||||
|
@ -47,8 +49,8 @@ const float pwm_linear_scaling_m[PWM_COUNT] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||||
const float pwm_linear_scaling_c[PWM_COUNT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
const float pwm_linear_scaling_c[PWM_COUNT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
#define PWM_CYCLE_VALUES_COUNT 3
|
#define PWM_CYCLE_VALUES_COUNT 3
|
||||||
const int PWM_CYCLE_VALUES[PWM_CYCLE_VALUES_COUNT] = {50, 125, 255};
|
const int PWM_CYCLE_VALUES[PWM_CYCLE_VALUES_COUNT] = {50, 125, 255};
|
||||||
char PWM_SET_STATE_TOPIC[75] = MQTT_BASE_TOPIC "/pwm/00/set/state";
|
char PWM_SET_STATE_TOPIC[70];
|
||||||
char PWM_SET_VALUE_TOPIC[75] = MQTT_BASE_TOPIC "/pwm/00/set/value";
|
char PWM_SET_VALUE_TOPIC[70];
|
||||||
|
|
||||||
// Infrared Transciever
|
// Infrared Transciever
|
||||||
#define IR_RECIEVE_PIN 32
|
#define IR_RECIEVE_PIN 32
|
||||||
|
@ -72,14 +74,14 @@ uint8_t ac_fan_speed = 0;
|
||||||
uint8_t ac_temperature = 25;
|
uint8_t ac_temperature = 25;
|
||||||
#define AC_MAX_TEMPERATURE 30
|
#define AC_MAX_TEMPERATURE 30
|
||||||
#define AC_MIN_TEMPERATURE 18
|
#define AC_MIN_TEMPERATURE 18
|
||||||
char AC_SET_MODE_TOPIC[75] = MQTT_BASE_TOPIC "/ac/set/mode";
|
char AC_SET_MODE_TOPIC[75];
|
||||||
char AC_SET_FAN_TOPIC[75] = MQTT_BASE_TOPIC "/ac/set/fan_speed";
|
char AC_SET_FAN_TOPIC[75];
|
||||||
char AC_SET_TEMPERATURE_TOPIC[75] = MQTT_BASE_TOPIC "/ac/set/temperature";
|
char AC_SET_TEMPERATURE_TOPIC[75];
|
||||||
char AC_MODE_TOPIC[75] = MQTT_BASE_TOPIC "/ac/mode";
|
char AC_MODE_TOPIC[75];
|
||||||
char AC_FAN_TOPIC[75] = MQTT_BASE_TOPIC "/ac/fan_speed";
|
char AC_FAN_TOPIC[75];
|
||||||
char AC_TEMPERATURE_TOPIC[75] = MQTT_BASE_TOPIC "/ac/temperature";
|
char AC_TEMPERATURE_TOPIC[75];
|
||||||
char AC_ROOM_TEMPERATURE_TOPIC[75] = MQTT_BASE_TOPIC "/ac/room_temperature";
|
char AC_ROOM_TEMPERATURE_TOPIC[75];
|
||||||
char AC_HUMIDITY_TOPIC[75] = MQTT_BASE_TOPIC "/ac/humidity";
|
char AC_HUMIDITY_TOPIC[75];
|
||||||
|
|
||||||
// EEPROM ADDRESS
|
// EEPROM ADDRESS
|
||||||
#define EEPROM_ADDRESS_AC_MODE 0 // 01bytes
|
#define EEPROM_ADDRESS_AC_MODE 0 // 01bytes
|
||||||
|
@ -162,14 +164,14 @@ void eeprom_ip_update(uint16_t rom_address, uint8_t byte1, uint8_t byte2, uint8_
|
||||||
IPAddress eeprom_ip_retrieve(uint16_t rom_address);
|
IPAddress eeprom_ip_retrieve(uint16_t rom_address);
|
||||||
void set_hostname(String hostname);
|
void set_hostname(String hostname);
|
||||||
void eeprom_hostname_retrieve();
|
void eeprom_hostname_retrieve();
|
||||||
void set_topic(String topic);
|
void set_basetopic(String topic);
|
||||||
void eeprom_topic_retrieve();
|
void eeprom_basetopic_retrieve();
|
||||||
void mqtt_port_set(uint16_t port);
|
void mqtt_port_set(uint16_t port);
|
||||||
void eeprom_mqtt_port_retrieve();
|
void eeprom_mqtt_port_retrieve();
|
||||||
|
|
||||||
char PWM_STATE_TOPIC[75] = MQTT_BASE_TOPIC "/pwm/00/state";
|
char PWM_STATE_TOPIC[75];
|
||||||
char PWM_VALUE_TOPIC[75] = MQTT_BASE_TOPIC "/pwm/00/value";
|
char PWM_VALUE_TOPIC[75];
|
||||||
char INPUTS_TOPIC[75] = MQTT_BASE_TOPIC "/input/00";
|
char INPUTS_TOPIC[75];
|
||||||
|
|
||||||
WiFiClient eth;
|
WiFiClient eth;
|
||||||
PubSubClient mqtt_client(MQTT_SERVER, 1883, eth);
|
PubSubClient mqtt_client(MQTT_SERVER, 1883, eth);
|
||||||
|
@ -275,6 +277,42 @@ void eeprom_retrieve_init()
|
||||||
eeprom_hostname_retrieve();
|
eeprom_hostname_retrieve();
|
||||||
eeprom_mqtt_port_retrieve();
|
eeprom_mqtt_port_retrieve();
|
||||||
mqtt_client.setServer(MQTT_SERVER, MQTT_PORT);
|
mqtt_client.setServer(MQTT_SERVER, MQTT_PORT);
|
||||||
|
eeprom_basetopic_retrieve();
|
||||||
|
base_topic_length = strlen(MQTT_BASE_TOPIC)+1;
|
||||||
|
memcpy(STATE_REQUEST_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(STATE_REQUEST_TOPIC, "/requeststate");
|
||||||
|
memcpy(PWM_SET_STATE_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(PWM_SET_STATE_TOPIC, "/pwm/00/set/state");
|
||||||
|
memcpy(PWM_SET_VALUE_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(PWM_SET_VALUE_TOPIC, "/pwm/00/set/value");
|
||||||
|
memcpy(AC_SET_MODE_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(AC_SET_MODE_TOPIC, "/ac/set/mode");
|
||||||
|
memcpy(AC_SET_FAN_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(AC_SET_FAN_TOPIC, "/ac/set/fan_speed");
|
||||||
|
memcpy(AC_SET_TEMPERATURE_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(AC_SET_TEMPERATURE_TOPIC, "/ac/set/temperature");
|
||||||
|
memcpy(AC_MODE_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(AC_MODE_TOPIC, "/ac/mode");
|
||||||
|
memcpy(AC_FAN_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(AC_FAN_TOPIC, "/ac/fan_speed");
|
||||||
|
memcpy(AC_TEMPERATURE_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(AC_TEMPERATURE_TOPIC, "/ac/temperature");
|
||||||
|
memcpy(AC_ROOM_TEMPERATURE_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(AC_ROOM_TEMPERATURE_TOPIC, "/ac/room_temperature");
|
||||||
|
memcpy(AC_HUMIDITY_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(AC_HUMIDITY_TOPIC, "/ac/humidity");
|
||||||
|
memcpy(PWM_STATE_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(PWM_STATE_TOPIC, "/pwm/00/state");
|
||||||
|
memcpy(PWM_VALUE_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(PWM_VALUE_TOPIC, "/pwm/00/value");
|
||||||
|
memcpy(INPUTS_TOPIC, MQTT_BASE_TOPIC, 20);
|
||||||
|
strcat(INPUTS_TOPIC, "/input/00");
|
||||||
|
Serial.println(PWM_STATE_TOPIC);
|
||||||
|
Serial.println(PWM_VALUE_TOPIC);
|
||||||
|
Serial.println(PWM_SET_STATE_TOPIC);
|
||||||
|
Serial.println(PWM_SET_VALUE_TOPIC);
|
||||||
|
Serial.print("BTLEN: ");
|
||||||
|
Serial.println(base_topic_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
void io_begin()
|
void io_begin()
|
||||||
|
@ -335,10 +373,10 @@ void mqtt_subscribe()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < PWM_COUNT; i++)
|
for (int i = 0; i < PWM_COUNT; i++)
|
||||||
{
|
{
|
||||||
PWM_SET_VALUE_TOPIC[sizeof(MQTT_BASE_TOPIC) + 4] = ((i - i % 10) / 10) + '0';
|
PWM_SET_VALUE_TOPIC[base_topic_length + 4] = ((i - i % 10) / 10) + '0';
|
||||||
PWM_SET_VALUE_TOPIC[sizeof(MQTT_BASE_TOPIC) + 5] = (i % 10) + '0';
|
PWM_SET_VALUE_TOPIC[base_topic_length + 5] = (i % 10) + '0';
|
||||||
PWM_SET_STATE_TOPIC[sizeof(MQTT_BASE_TOPIC) + 4] = ((i - i % 10) / 10) + '0';
|
PWM_SET_STATE_TOPIC[base_topic_length + 4] = ((i - i % 10) / 10) + '0';
|
||||||
PWM_SET_STATE_TOPIC[sizeof(MQTT_BASE_TOPIC) + 5] = (i % 10) + '0';
|
PWM_SET_STATE_TOPIC[base_topic_length + 5] = (i % 10) + '0';
|
||||||
mqtt.subscribe(PWM_SET_STATE_TOPIC, pwm_state_callback);
|
mqtt.subscribe(PWM_SET_STATE_TOPIC, pwm_state_callback);
|
||||||
mqtt.subscribe(PWM_SET_VALUE_TOPIC, pwm_value_callback);
|
mqtt.subscribe(PWM_SET_VALUE_TOPIC, pwm_value_callback);
|
||||||
}
|
}
|
||||||
|
@ -362,8 +400,8 @@ void thread_initialization()
|
||||||
|
|
||||||
void pwm_state_callback(String topic, String message)
|
void pwm_state_callback(String topic, String message)
|
||||||
{
|
{
|
||||||
int a = topic.charAt(sizeof(MQTT_BASE_TOPIC) + 4) - '0';
|
int a = topic.charAt(base_topic_length + 4) - '0';
|
||||||
int b = topic.charAt(sizeof(MQTT_BASE_TOPIC) + 5) - '0';
|
int b = topic.charAt(base_topic_length + 5) - '0';
|
||||||
int id = 10 * a + b;
|
int id = 10 * a + b;
|
||||||
if (message.compareTo("on") == 0)
|
if (message.compareTo("on") == 0)
|
||||||
{
|
{
|
||||||
|
@ -377,8 +415,8 @@ void pwm_state_callback(String topic, String message)
|
||||||
|
|
||||||
void pwm_value_callback(String topic, String message)
|
void pwm_value_callback(String topic, String message)
|
||||||
{
|
{
|
||||||
int a = topic.charAt(sizeof(MQTT_BASE_TOPIC) + 4) - '0';
|
int a = topic.charAt(base_topic_length + 4) - '0';
|
||||||
int b = topic.charAt(sizeof(MQTT_BASE_TOPIC) + 5) - '0';
|
int b = topic.charAt(base_topic_length + 5) - '0';
|
||||||
int id = 10 * a + b;
|
int id = 10 * a + b;
|
||||||
int value = message.toInt();
|
int value = message.toInt();
|
||||||
pwm_set_value(id, value);
|
pwm_set_value(id, value);
|
||||||
|
@ -430,10 +468,10 @@ void publish_pwm_state(int id)
|
||||||
{
|
{
|
||||||
int state = pwm_states[id];
|
int state = pwm_states[id];
|
||||||
int value = pwm_values[id];
|
int value = pwm_values[id];
|
||||||
PWM_STATE_TOPIC[sizeof(MQTT_BASE_TOPIC) + 4] = ((id - id % 10) / 10) + '0';
|
PWM_STATE_TOPIC[base_topic_length + 4] = ((id - id % 10) / 10) + '0';
|
||||||
PWM_STATE_TOPIC[sizeof(MQTT_BASE_TOPIC) + 5] = (id % 10) + '0';
|
PWM_STATE_TOPIC[base_topic_length + 5] = (id % 10) + '0';
|
||||||
PWM_VALUE_TOPIC[sizeof(MQTT_BASE_TOPIC) + 4] = ((id - id % 10) / 10) + '0';
|
PWM_VALUE_TOPIC[base_topic_length + 4] = ((id - id % 10) / 10) + '0';
|
||||||
PWM_VALUE_TOPIC[sizeof(MQTT_BASE_TOPIC) + 5] = (id % 10) + '0';
|
PWM_VALUE_TOPIC[base_topic_length + 5] = (id % 10) + '0';
|
||||||
if (state == 1)
|
if (state == 1)
|
||||||
{
|
{
|
||||||
mqtt_client.publish(PWM_STATE_TOPIC, "on");
|
mqtt_client.publish(PWM_STATE_TOPIC, "on");
|
||||||
|
@ -541,9 +579,8 @@ void publish_input_state(int id)
|
||||||
|
|
||||||
void publish_input_state(int id, int state)
|
void publish_input_state(int id, int state)
|
||||||
{
|
{
|
||||||
char INPUTS_TOPIC[75] = MQTT_BASE_TOPIC "/input/00";
|
INPUTS_TOPIC[base_topic_length + 6] = ((id - id % 10) / 10) + '0';
|
||||||
INPUTS_TOPIC[sizeof(MQTT_BASE_TOPIC) + 6] = ((id - id % 10) / 10) + '0';
|
INPUTS_TOPIC[base_topic_length + 7] = (id % 10) + '0';
|
||||||
INPUTS_TOPIC[sizeof(MQTT_BASE_TOPIC) + 7] = (id % 10) + '0';
|
|
||||||
mqtt.publish(String(INPUTS_TOPIC), state ? "1" : "0");
|
mqtt.publish(String(INPUTS_TOPIC), state ? "1" : "0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -773,6 +810,7 @@ void lcd_refresh()
|
||||||
panel.writeStr("mqttsv_set.txt", MQTT_SERVER.toString());
|
panel.writeStr("mqttsv_set.txt", MQTT_SERVER.toString());
|
||||||
panel.writeStr("host_set.txt", HOSTNAME);
|
panel.writeStr("host_set.txt", HOSTNAME);
|
||||||
panel.writeNum("port_set.val", MQTT_PORT);
|
panel.writeNum("port_set.val", MQTT_PORT);
|
||||||
|
panel.writeStr("topic_set.txt", MQTT_BASE_TOPIC);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -887,6 +925,7 @@ void trigger13()
|
||||||
set_dns(panel.readStr("dns_set.txt"));
|
set_dns(panel.readStr("dns_set.txt"));
|
||||||
set_mqtt_server(panel.readStr("mqttsv_set.txt"));
|
set_mqtt_server(panel.readStr("mqttsv_set.txt"));
|
||||||
set_hostname(panel.readStr("host_set.txt"));
|
set_hostname(panel.readStr("host_set.txt"));
|
||||||
|
set_basetopic(panel.readStr("topic_set.txt"));
|
||||||
uint16_t port = panel.readNumber("port_set.val");
|
uint16_t port = panel.readNumber("port_set.val");
|
||||||
mqtt_port_set(port);
|
mqtt_port_set(port);
|
||||||
Serial.println("NEWPORT:");
|
Serial.println("NEWPORT:");
|
||||||
|
@ -960,8 +999,17 @@ void set_hostname(String hostname)
|
||||||
void eeprom_hostname_retrieve()
|
void eeprom_hostname_retrieve()
|
||||||
{
|
{
|
||||||
ESPMega_EEPROM.readBlock(EEPROM_ADDRESS_HOSTNAME, (uint8_t *)HOSTNAME, 15);
|
ESPMega_EEPROM.readBlock(EEPROM_ADDRESS_HOSTNAME, (uint8_t *)HOSTNAME, 15);
|
||||||
Serial.print("HOSTNAMEREAD:");
|
}
|
||||||
Serial.println(HOSTNAME);
|
|
||||||
|
void set_basetopic(String topic)
|
||||||
|
{
|
||||||
|
topic.toCharArray(MQTT_BASE_TOPIC, 20);
|
||||||
|
ESPMega_EEPROM.writeBlock(EEPROM_ADDRESS_TOPIC, (uint8_t *)MQTT_BASE_TOPIC, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
void eeprom_basetopic_retrieve()
|
||||||
|
{
|
||||||
|
ESPMega_EEPROM.readBlock(EEPROM_ADDRESS_TOPIC, (uint8_t *)MQTT_BASE_TOPIC, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mqtt_port_set(uint16_t port)
|
void mqtt_port_set(uint16_t port)
|
||||||
|
|
Loading…
Reference in New Issue