212 lines
No EOL
6.8 KiB
C++
212 lines
No EOL
6.8 KiB
C++
#include <main.hpp>
|
|
|
|
RemoteVariable pm25_out = RemoteVariable();
|
|
RemoteVariable temp_out = RemoteVariable();
|
|
RemoteVariable weather = RemoteVariable();
|
|
|
|
const char *mode_names[] = {"off", "fan_only", "cool"};
|
|
const char *fan_speed_names[] = {"auto", "high", "medium", "low"};
|
|
|
|
AirConditioner ac = {
|
|
.max_temperature = 30,
|
|
.min_temperature = 15,
|
|
.modes = 3,
|
|
.mode_names = mode_names,
|
|
.fan_speeds = 4,
|
|
.fan_speed_names = fan_speed_names,
|
|
.getInfraredCode = &getInfraredCode};
|
|
/***********************************************
|
|
* End Configuration *
|
|
***********************************************/
|
|
|
|
ESPMegaPRO espmega = ESPMegaPRO();
|
|
ISEDisplay iseDisplay = ISEDisplay(&iseDisplayAdapter);
|
|
|
|
ClimateCard climateCard = ClimateCard(AIR_CONDITIONER_IR_PIN, ac,
|
|
AIR_CONDITIONER_SENSOR_TYPE, AIR_CONDITIONER_SENSOR_PIN,
|
|
AIR_CONDITIONER_RMT_CHANNEL);
|
|
|
|
void handleMqttMessage(char *topic, char *payload)
|
|
{
|
|
|
|
}
|
|
|
|
void sendStopBytes()
|
|
{
|
|
Serial.write(0xFF);
|
|
Serial.write(0xFF);
|
|
Serial.write(0xFF);
|
|
}
|
|
|
|
void sendExtStopBytes()
|
|
{
|
|
iseDisplayAdapter.write(0xFF);
|
|
iseDisplayAdapter.write(0xFF);
|
|
iseDisplayAdapter.write(0xFF);
|
|
}
|
|
|
|
void setup()
|
|
{
|
|
gpio_config_t gpio_2_conf;
|
|
gpio_2_conf.intr_type = GPIO_INTR_DISABLE;
|
|
gpio_2_conf.mode = GPIO_MODE_INPUT;
|
|
gpio_2_conf.pull_up_en = GPIO_PULLUP_ENABLE;
|
|
gpio_config(&gpio_2_conf);
|
|
// If GPIO 2 is pulled low, clear the FRAM then reboot (Reset the device to factory defaults)
|
|
bool clear_fram = !gpio_get_level(GPIO_NUM_2);
|
|
Serial.begin(115200);
|
|
iseDisplayAdapter.begin(ISE_DISPLAY_BAUD_RATE, SERIAL_8N1, ISE_DISPLAY_RX_PIN, ISE_DISPLAY_TX_PIN);
|
|
sendExtStopBytes();
|
|
iseDisplayAdapter.print("rest");
|
|
sendExtStopBytes();
|
|
sendStopBytes();
|
|
Serial.print("rest");
|
|
sendStopBytes();
|
|
Serial.print("boot_state.txt=\"Core Initializing . . .\"");
|
|
sendStopBytes();
|
|
espmega.begin();
|
|
// if (clear_fram)
|
|
// {
|
|
// Serial.print("boot_state.txt=\"Factory Resetting . . .\"");
|
|
// sendStopBytes();
|
|
// for (uint16_t i = 0; i < 32768; i++)
|
|
// {
|
|
// espmega.fram.write8(i, 0);
|
|
// }
|
|
// esp_restart();
|
|
// }
|
|
Serial.print("boot_state.txt=\"IoT Initializing . . .\"");
|
|
sendStopBytes();
|
|
espmega.enableIotModule();
|
|
ETH.begin();
|
|
espmega.iot->bindEthernetInterface(Ð);
|
|
Serial.print("boot_state.txt=\"Network Initializing . . .\"");
|
|
sendStopBytes();
|
|
espmega.iot->loadNetworkConfig();
|
|
espmega.iot->connectNetwork();
|
|
Serial.print("boot_state.txt=\"MQTT Initializing . . .\"");
|
|
sendStopBytes();
|
|
espmega.iot->loadMqttConfig();
|
|
espmega.iot->connectToMqtt();
|
|
Serial.print("boot_state.txt=\"Display Initializing . . .\"");
|
|
espmega.enableInternalDisplay(&Serial);
|
|
espmega.enableWebServer(80);
|
|
espmega.inputs.registerCallback(on_pin_change);
|
|
espmega.outputs.setAutoSaveToFRAM(true);
|
|
espmega.installCard(2, &climateCard);
|
|
climateCard.bindFRAM(&espmega.fram, 5000);
|
|
climateCard.loadStateFromFRAM();
|
|
climateCard.setFRAMAutoSave(true);
|
|
espmega.display->bindClimateCard(&climateCard);
|
|
espmega.iot->registerCard(0); // Register the Input Card
|
|
espmega.iot->registerCard(1); // Register the Output Card
|
|
espmega.iot->registerCard(2); // Register the Climate Card
|
|
auto bindedGetTime = std::bind(&ESPMegaPRO::getTime, &espmega);
|
|
iseDisplay.begin(&espmega.inputs, &espmega.outputs, &climateCard);
|
|
espmega.iot->registerRelativeMqttCallback(&handleMqttMessage);
|
|
iseDisplay.registerPageChangeCallback(&handlePageChange);
|
|
// placeholder
|
|
// PM2.5 PPM Remote Variable
|
|
// 12 bytes remote variable, 11 characters + null terminator
|
|
// Enable value request at /iqair/pm25_request
|
|
pm25_out.begin(6, "/aqi/value", espmega.iot, true, "/aqi/value_request");
|
|
// Temperature Remote Variable
|
|
temp_out.begin(6, "/temp/value", espmega.iot, true, "/weather/temp_request");
|
|
// Weather Remote Variable
|
|
weather.begin(45, "/weather", espmega.iot, true, "/weather_request");
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
espmega.loop();
|
|
iseDisplay.loop();
|
|
|
|
// Update the time every 15 seconds
|
|
//static bool run_when_init = false; // No static ? , this shit will reset to 0 every loop
|
|
static uint32_t last_time_updated = 0;
|
|
//rtctime_t time = espmega.getTime();
|
|
//when init update once then update every 15 seconds
|
|
// You don't need this, when it go from page 0 to 1 it call handlePageChange
|
|
// if(!run_when_init){
|
|
// time = espmega.getTime();
|
|
// iseDisplay.updateDateTimeText(time);
|
|
// last_time_updated = millis();
|
|
// run_when_init = true;
|
|
// }
|
|
|
|
|
|
if (millis() - last_time_updated > 15000)
|
|
{
|
|
rtctime_t time = espmega.getTime();
|
|
// log time
|
|
ESP_LOGI("time", "Time: %d:%d:%d", time.hours, time.minutes, time.seconds);
|
|
ESP_LOGI("Date", "Date: %d/%d/%d", time.day, time.month, time.year);
|
|
iseDisplay.updateDateTimeText(time);
|
|
last_time_updated = millis();
|
|
}
|
|
// Update the PM2.5 PPM value every 5 minutes
|
|
// static uint32_t last_pm25_out_update = 0;
|
|
// if (millis() - last_pm25_out_update > 300000)
|
|
// {
|
|
// uint16_t pm25_out_value = get_pm25_out();
|
|
// iseDisplay.updatePMoutside(pm25_out_value);
|
|
// last_pm25_out_update = millis();
|
|
// }
|
|
// // Update the temperature value every 5 minutes
|
|
// static uint32_t last_temp_out_update = 0;
|
|
// if (millis() - last_temp_out_update > 300000)
|
|
// {
|
|
// float temp_out_value = get_temp_out();
|
|
// iseDisplay.updateTempOutside(temp_out_value);
|
|
// last_temp_out_update = millis();
|
|
// }
|
|
// // Update the weather value every 5 minutes
|
|
// static uint32_t last_weather_update = 0;
|
|
// if (millis() - last_weather_update > 300000)
|
|
// {
|
|
// char *weather_value = weather.getValue();
|
|
// iseDisplay.updateWeather(weather_value);
|
|
// last_weather_update = millis();
|
|
// }
|
|
|
|
}
|
|
|
|
void on_pin_change(uint8_t pin, uint8_t value)
|
|
{
|
|
|
|
}
|
|
|
|
// uint16_t get_pm25_out()
|
|
// {
|
|
// uint16_t pm25_out_value = 0;
|
|
// // Read PM2.5 PPM from sensor
|
|
// pm25_out_value = atoi(pm25_out.getValue());
|
|
// return pm25_out_value;
|
|
// }
|
|
// float get_temp_out()
|
|
// {
|
|
// float temp_out_value = 0;
|
|
// // Read temperature from sensor
|
|
// temp_out_value = atof(temp_out.getValue());
|
|
// return temp_out_value;
|
|
// }
|
|
|
|
void handlePageChange(uint8_t page) {
|
|
|
|
// Which already send the time
|
|
//printESP_LOGI the page have changed
|
|
ESP_LOGI("Page", "Page change to: %d", page);
|
|
rtctime_t time = espmega.getTime();
|
|
iseDisplay.updateDateTimeText(time);
|
|
iseDisplay.updateLightGroupStatePageDashboard();
|
|
//iseDisplay.updatePMinside();
|
|
/* iseDisplay.updatePMoutside(get_pm25_out());
|
|
iseDisplay.updateWeather(weather.getValue());
|
|
iseDisplay.updateTempOutside(get_temp_out()); */
|
|
/* iseDisplay.updateACState();
|
|
iseDisplay.updateAirPurifierState();
|
|
iseDisplay.updateLightGroupStatePageStandby();
|
|
iseDisplay.updateLightGroupStatePageDashboard();
|
|
iseDisplay.updateuserACmode();
|
|
iseDisplay.updateAirPurifierStateStandby(); */
|
|
} |