Configuration extended and some more LED code improvements
This commit is contained in:
@@ -41,7 +41,7 @@
|
|||||||
"arduino",
|
"arduino",
|
||||||
"espidf"
|
"espidf"
|
||||||
],
|
],
|
||||||
"name": "OBPkb61 ESP32-S3-N16R8 16 MB QD, 8 MB PSRAM)",
|
"name": "OBPkp61 ESP32-S3-N16R8 16 MB QD, 8 MB PSRAM)",
|
||||||
"upload": {
|
"upload": {
|
||||||
"flash_size": "16MB",
|
"flash_size": "16MB",
|
||||||
"maximum_ram_size": 327680,
|
"maximum_ram_size": 327680,
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ struct ConfigDef {
|
|||||||
static const ConfigDef configdefs[] = {
|
static const ConfigDef configdefs[] = {
|
||||||
{"systemName", ConfigType::STRING, String("OBPkp61")},
|
{"systemName", ConfigType::STRING, String("OBPkp61")},
|
||||||
{"systemMode", ConfigType::CHAR, 'K'},
|
{"systemMode", ConfigType::CHAR, 'K'},
|
||||||
|
{"nightMode", ConfigType::BOOL, false},
|
||||||
{"logLevel", ConfigType::BYTE, uint8_t(4)},
|
{"logLevel", ConfigType::BYTE, uint8_t(4)},
|
||||||
{"adminPassword", ConfigType::STRING, String("obpkp61")},
|
{"adminPassword", ConfigType::STRING, String("obpkp61")},
|
||||||
{"useAdminPass", ConfigType::BOOL, true},
|
{"useAdminPass", ConfigType::BOOL, true},
|
||||||
@@ -49,6 +50,8 @@ static const ConfigDef configdefs[] = {
|
|||||||
{"cpuSpeed", ConfigType::SHORT, int16_t(160)},
|
{"cpuSpeed", ConfigType::SHORT, int16_t(160)},
|
||||||
{"ledBrightness", ConfigType::SHORT, int16_t(96)},
|
{"ledBrightness", ConfigType::SHORT, int16_t(96)},
|
||||||
{"rgbBrightness", ConfigType::SHORT, int16_t(96)},
|
{"rgbBrightness", ConfigType::SHORT, int16_t(96)},
|
||||||
|
{"buzEnable", ConfigType::BOOL, false},
|
||||||
|
{"buzPower", ConfigType::BYTE, uint8_t(50)},
|
||||||
{"tempFormat", ConfigType::CHAR, 'C'},
|
{"tempFormat", ConfigType::CHAR, 'C'},
|
||||||
{"switchBank", ConfigType::BYTE, uint8_t(0)},
|
{"switchBank", ConfigType::BYTE, uint8_t(0)},
|
||||||
{"key1", ConfigType::BYTE, uint8_t(1)},
|
{"key1", ConfigType::BYTE, uint8_t(1)},
|
||||||
@@ -63,6 +66,8 @@ static const ConfigDef configdefs[] = {
|
|||||||
{"key5long", ConfigType::BYTE, uint8_t(15)},
|
{"key5long", ConfigType::BYTE, uint8_t(15)},
|
||||||
{"key6", ConfigType::BYTE, uint8_t(6)},
|
{"key6", ConfigType::BYTE, uint8_t(6)},
|
||||||
{"key6long", ConfigType::BYTE, uint8_t(16)},
|
{"key6long", ConfigType::BYTE, uint8_t(16)},
|
||||||
|
{"n2kSysInst", ConfigType::BYTE, uint8_t(0)},
|
||||||
|
{"n2kDevInst", ConfigType::BYTE, uint8_t(0)},
|
||||||
{"n2kDestA", ConfigType::STRING, String("none")},
|
{"n2kDestA", ConfigType::STRING, String("none")},
|
||||||
{"n2kDestB", ConfigType::STRING, String("none")},
|
{"n2kDestB", ConfigType::STRING, String("none")},
|
||||||
{"n2kDestC", ConfigType::STRING, String("none")},
|
{"n2kDestC", ConfigType::STRING, String("none")},
|
||||||
|
|||||||
@@ -6,3 +6,4 @@ extern int16_t rgb_brightness;
|
|||||||
void led_init();
|
void led_init();
|
||||||
void led_test();
|
void led_test();
|
||||||
void led_blink(uint8_t channel, uint8_t count, int16_t brightness, uint32_t interval_ms);
|
void led_blink(uint8_t channel, uint8_t count, int16_t brightness, uint32_t interval_ms);
|
||||||
|
void led_set_mode();
|
||||||
|
|||||||
@@ -129,18 +129,24 @@ struct ButtonEvent {
|
|||||||
ButtonPressType pressType;
|
ButtonPressType pressType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern uint8_t loglevel;
|
||||||
|
|
||||||
extern Nmea2kTwai &NMEA2000;
|
extern Nmea2kTwai &NMEA2000;
|
||||||
extern tN2kDeviceList *pN2kDeviceList;
|
extern tN2kDeviceList *pN2kDeviceList;
|
||||||
|
|
||||||
extern char globalmode;
|
extern char globalmode;
|
||||||
extern uint8_t loglevel;
|
extern char mode;
|
||||||
|
extern char ledmode;
|
||||||
|
extern char audiomode;
|
||||||
|
extern char destination;
|
||||||
|
|
||||||
extern uint64_t chipid;
|
extern uint64_t chipid;
|
||||||
extern int16_t led_brightness;
|
// extern int16_t led_brightness;
|
||||||
extern int16_t rgb_brightness;
|
// extern int16_t rgb_brightness;
|
||||||
|
extern bool ap_enabled;
|
||||||
|
extern bool buz_enabled;
|
||||||
extern uint8_t keycode[6];
|
extern uint8_t keycode[6];
|
||||||
extern uint8_t longcode[6];
|
extern uint8_t longcode[6];
|
||||||
|
|
||||||
extern float temp;
|
extern float temp;
|
||||||
extern float hum;
|
extern float hum;
|
||||||
|
|
||||||
|
|||||||
12
src/led.cpp
12
src/led.cpp
@@ -93,3 +93,15 @@ void led_blink(uint8_t channel, uint8_t count, int16_t brightness, uint32_t inte
|
|||||||
}
|
}
|
||||||
delay(interval_ms);
|
delay(interval_ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void led_set_mode() {
|
||||||
|
if (mode == 'C') {
|
||||||
|
ledcWrite(LEDC_LED_A, ledmode == 'N' ? led_brightness : 0); // Nightmode
|
||||||
|
ledcWrite(LEDC_LED_B, audiomode == 'D' ? led_brightness : 0); // Silence
|
||||||
|
ledcWrite(LEDC_LED_C, ap_enabled ? led_brightness : 0); // Accesspoint
|
||||||
|
} else {
|
||||||
|
ledcWrite(LEDC_LED_A, destination == 'A' ? led_brightness : 0);
|
||||||
|
ledcWrite(LEDC_LED_B, destination == 'B' ? led_brightness : 0);
|
||||||
|
ledcWrite(LEDC_LED_C, destination == 'C' ? led_brightness : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
39
src/main.cpp
39
src/main.cpp
@@ -39,13 +39,15 @@ uint8_t loglevel = 5;
|
|||||||
|
|
||||||
const char* wifi_ssid = "OBPKP61";
|
const char* wifi_ssid = "OBPKP61";
|
||||||
const char* wifi_pass = "keypad61";
|
const char* wifi_pass = "keypad61";
|
||||||
bool ap_enabled = false;
|
|
||||||
bool ap_hidden = false;
|
bool ap_hidden = false;
|
||||||
|
bool ap_enabled = true;
|
||||||
|
|
||||||
unsigned long firstStart = 0;
|
unsigned long firstStart = 0;
|
||||||
unsigned long lastSensor = 0;
|
unsigned long lastSensor = 0;
|
||||||
unsigned long lastPrint = 0;
|
unsigned long lastPrint = 0;
|
||||||
|
|
||||||
|
unsigned long env_interval = 2000;
|
||||||
|
|
||||||
bool rgb_r = false;
|
bool rgb_r = false;
|
||||||
bool rgb_g = false;
|
bool rgb_g = false;
|
||||||
bool rgb_b = false;
|
bool rgb_b = false;
|
||||||
@@ -58,7 +60,8 @@ RTC_DATA_ATTR char ledmode = 'D'; // (D)ay | (N)ight
|
|||||||
RTC_DATA_ATTR char audiomode = 'E'; // (E)nabled | (D)isabled
|
RTC_DATA_ATTR char audiomode = 'E'; // (E)nabled | (D)isabled
|
||||||
RTC_DATA_ATTR char destination = 'A'; // A | B | C im RTC-Speicher überlebt deep sleep
|
RTC_DATA_ATTR char destination = 'A'; // A | B | C im RTC-Speicher überlebt deep sleep
|
||||||
|
|
||||||
uint buzzerpower = 50; // TBD make use of this
|
bool buz_enabled = true;
|
||||||
|
uint buzzerpower = 50; // TBD make use of this 0 .. 100%
|
||||||
|
|
||||||
uint8_t keycode[6]; // configurable keycodes
|
uint8_t keycode[6]; // configurable keycodes
|
||||||
uint8_t longcode[6]; // configurable keycodes for long pressed keys
|
uint8_t longcode[6]; // configurable keycodes for long pressed keys
|
||||||
@@ -71,6 +74,7 @@ float hum = 0.0;
|
|||||||
uint8_t nodeid; // NMEA2000 id on bus
|
uint8_t nodeid; // NMEA2000 id on bus
|
||||||
Nmea2kTwai &NMEA2000=*(new Nmea2kTwai(CAN_TX, CAN_RX, CAN_RECOVERY_PERIOD));
|
Nmea2kTwai &NMEA2000=*(new Nmea2kTwai(CAN_TX, CAN_RX, CAN_RECOVERY_PERIOD));
|
||||||
tN2kDeviceList *pN2kDeviceList;
|
tN2kDeviceList *pN2kDeviceList;
|
||||||
|
uint8_t n2k_id[3] = { 254, 254, 254 }; // aktuelle IDs für dest A, B, C
|
||||||
|
|
||||||
String processor(const String& var) {
|
String processor(const String& var) {
|
||||||
// dummy for now
|
// dummy for now
|
||||||
@@ -261,6 +265,8 @@ void setup() {
|
|||||||
String apip = config.getString("apIp");
|
String apip = config.getString("apIp");
|
||||||
String apmask = config.getString("apMask");
|
String apmask = config.getString("apMask");
|
||||||
|
|
||||||
|
env_interval = config.getShort("envInterval") * 1000;
|
||||||
|
|
||||||
// Setup webserver
|
// Setup webserver
|
||||||
WiFi.persistent(false);
|
WiFi.persistent(false);
|
||||||
WiFi.mode(WIFI_MODE_AP);
|
WiFi.mode(WIFI_MODE_AP);
|
||||||
@@ -293,6 +299,15 @@ void setup() {
|
|||||||
|
|
||||||
// NMEA2000 configuration
|
// NMEA2000 configuration
|
||||||
|
|
||||||
|
// Destinations setup, refresh in loop later
|
||||||
|
if (config.getString("n2kDestA") == "all") {
|
||||||
|
// broadcast
|
||||||
|
} else if (config.getString("n2kDestA") == "none") {
|
||||||
|
// disabled
|
||||||
|
} else {
|
||||||
|
// NAME
|
||||||
|
}
|
||||||
|
|
||||||
NMEA2000.SetN2kCANMsgBufSize(8);
|
NMEA2000.SetN2kCANMsgBufSize(8);
|
||||||
NMEA2000.SetN2kCANReceiveFrameBufSize(250);
|
NMEA2000.SetN2kCANReceiveFrameBufSize(250);
|
||||||
NMEA2000.SetN2kCANSendFrameBufSize(250);
|
NMEA2000.SetN2kCANSendFrameBufSize(250);
|
||||||
@@ -492,6 +507,7 @@ void print_n2k_devicelist() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// rename to: void sendSwitchBank()
|
// rename to: void sendSwitchBank()
|
||||||
|
// later: void send_switchbank(uint8_t keycode, uint8_t dest_id) {
|
||||||
void send_switchbank(uint8_t keycode) {
|
void send_switchbank(uint8_t keycode) {
|
||||||
tN2kMsg N2kMsg;
|
tN2kMsg N2kMsg;
|
||||||
tN2kBinaryStatus bankstatus;
|
tN2kBinaryStatus bankstatus;
|
||||||
@@ -505,9 +521,7 @@ void send_switchbank(uint8_t keycode) {
|
|||||||
SetN2kPGN127502(N2kMsg, 0, bankstatus);
|
SetN2kPGN127502(N2kMsg, 0, bankstatus);
|
||||||
NMEA2000.SendMsg(N2kMsg);
|
NMEA2000.SendMsg(N2kMsg);
|
||||||
|
|
||||||
Serial.print("PGN127502 sent: Switch=");
|
LOGI(TAG, "PGN127502 sent: Switch=%d", keycode);
|
||||||
Serial.print(keycode);
|
|
||||||
Serial.println(" Action=On");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_sensor_temphum(float temp_k, float hum_perc) {
|
void send_sensor_temphum(float temp_k, float hum_perc) {
|
||||||
@@ -546,7 +560,7 @@ void loop() {
|
|||||||
ledcWrite(LEDC_LED_C, 0);
|
ledcWrite(LEDC_LED_C, 0);
|
||||||
ledcWrite(LEDC_LED_A, led_brightness);
|
ledcWrite(LEDC_LED_A, led_brightness);
|
||||||
}
|
}
|
||||||
LOGI(TAG, "New destination=%s", destination);
|
LOGI(TAG, "New destination=%c", destination);
|
||||||
}
|
}
|
||||||
} else if (event.pressType == ButtonPressType::LONG) {
|
} else if (event.pressType == ButtonPressType::LONG) {
|
||||||
shortBeep();
|
shortBeep();
|
||||||
@@ -560,6 +574,7 @@ void loop() {
|
|||||||
ledcWrite(LEDC_RGBLED_B, 0);
|
ledcWrite(LEDC_RGBLED_B, 0);
|
||||||
LOGI(TAG, "Leaving config mode");
|
LOGI(TAG, "Leaving config mode");
|
||||||
}
|
}
|
||||||
|
led_set_mode();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// normal button
|
// normal button
|
||||||
@@ -584,29 +599,35 @@ void loop() {
|
|||||||
if (ledmode == 'D') {
|
if (ledmode == 'D') {
|
||||||
LOGI(TAG, "Night mode enabled");
|
LOGI(TAG, "Night mode enabled");
|
||||||
ledmode = 'N';
|
ledmode = 'N';
|
||||||
|
ledcWrite(LEDC_LED_A, led_brightness);
|
||||||
} else {
|
} else {
|
||||||
LOGI(TAG, "Day mode enabled");
|
LOGI(TAG, "Day mode enabled");
|
||||||
ledmode = 'D';
|
ledmode = 'D';
|
||||||
|
ledcWrite(LEDC_LED_A, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BUTTON_2: // switch audio on/off
|
case BUTTON_2: // switch audio on/off
|
||||||
if (audiomode == 'E') {
|
if (audiomode == 'E') {
|
||||||
LOGI(TAG, "Disabled audio");
|
LOGI(TAG, "Disabled audio");
|
||||||
audiomode = 'D';
|
audiomode = 'D';
|
||||||
|
ledcWrite(LEDC_LED_B, led_brightness);
|
||||||
} else {
|
} else {
|
||||||
LOGI(TAG, "Enabled audio");
|
LOGI(TAG, "Enabled audio");
|
||||||
audiomode = 'E';
|
audiomode = 'E';
|
||||||
|
ledcWrite(LEDC_LED_B, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BUTTON_3: // switch accesspoint on/off
|
case BUTTON_3: // switch accesspoint on/off
|
||||||
if (ap_enabled) {
|
if (ap_enabled) {
|
||||||
ESP_LOGI(TAG, "Disable Accesspoint");
|
LOGI(TAG, "Disable Accesspoint");
|
||||||
WiFi.softAPdisconnect(true);
|
WiFi.softAPdisconnect(true);
|
||||||
ap_enabled = false;
|
ap_enabled = false;
|
||||||
|
ledcWrite(LEDC_LED_C, 0);
|
||||||
} else {
|
} else {
|
||||||
Serial.println("Enable Accesspoint");
|
LOGI(TAG, "Enable Accesspoint");
|
||||||
WiFi.softAP(wifi_ssid, wifi_pass, WIFI_CHANNEL, ap_hidden, WIFI_MAX_STA);
|
WiFi.softAP(wifi_ssid, wifi_pass, WIFI_CHANNEL, ap_hidden, WIFI_MAX_STA);
|
||||||
ap_enabled = true;
|
ap_enabled = true;
|
||||||
|
ledcWrite(LEDC_LED_C, led_brightness);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BUTTON_4: // reserved
|
case BUTTON_4: // reserved
|
||||||
@@ -633,7 +654,7 @@ void loop() {
|
|||||||
// NMEA2000.loop(); // not implemented yet
|
// NMEA2000.loop(); // not implemented yet
|
||||||
NMEA2000.ParseMessages();
|
NMEA2000.ParseMessages();
|
||||||
|
|
||||||
if ((millis() - lastSensor >= 5000) and sht_available) {
|
if ((millis() - lastSensor >= env_interval) and sht_available) {
|
||||||
lastSensor = millis();
|
lastSensor = millis();
|
||||||
sht.read();
|
sht.read();
|
||||||
temp = sht.getTemperature(); // °C
|
temp = sht.getTemperature(); // °C
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "webserver.h"
|
#include "webserver.h"
|
||||||
|
#include "led.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <AsyncTCP.h>
|
#include <AsyncTCP.h>
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
#include <esp32/clk.h> // for cpu frequency
|
#include <esp32/clk.h> // for cpu frequency
|
||||||
|
#include "esp_rom_uart.h" // for uart wait idle
|
||||||
#include <Update.h>
|
#include <Update.h>
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
@@ -105,6 +107,7 @@ void webserver_init() {
|
|||||||
StaticJsonDocument<1024> doc;
|
StaticJsonDocument<1024> doc;
|
||||||
doc["systemName"] = config.getString("systemName");
|
doc["systemName"] = config.getString("systemName");
|
||||||
doc["systemMode"] = String(config.getChar("systemMode"));
|
doc["systemMode"] = String(config.getChar("systemMode"));
|
||||||
|
doc["nightMode"] = config.getBool("nightMode") ? "true" : "false";
|
||||||
doc["instDesc1"] = config.getString("instDesc1");
|
doc["instDesc1"] = config.getString("instDesc1");
|
||||||
doc["instDesc2"] = config.getString("instDesc2");
|
doc["instDesc2"] = config.getString("instDesc2");
|
||||||
doc["logLevel"] = loglevel;
|
doc["logLevel"] = loglevel;
|
||||||
@@ -119,10 +122,12 @@ void webserver_init() {
|
|||||||
doc["apPassword"] = "********";
|
doc["apPassword"] = "********";
|
||||||
doc["stopApTime"] = config.getShort("stopApTime");
|
doc["stopApTime"] = config.getShort("stopApTime");
|
||||||
doc["apHidden"] = config.getBool("apHidden") ? "true" : "false";
|
doc["apHidden"] = config.getBool("apHidden") ? "true" : "false";
|
||||||
doc["cpuSpeed"] = 160;
|
doc["cpuSpeed"] = config.getShort("cpuSpeed");
|
||||||
doc["tempFormat"] = String(config.getChar("tempFormat"));
|
doc["tempFormat"] = String(config.getChar("tempFormat"));
|
||||||
doc["ledBrightness"] = led_brightness;
|
doc["ledBrightness"] = config.getShort("ledBrightness");
|
||||||
doc["rgbBrightness"] = rgb_brightness;
|
doc["rgbBrightness"] = config.getShort("rgbBrightness");
|
||||||
|
doc["buzEnable"] = config.getBool("buzEnable") ? "true" : "false";
|
||||||
|
doc["buzPower"] = config.getByte("buzPower");
|
||||||
doc["switchBank"] = config.getByte("switchBank");
|
doc["switchBank"] = config.getByte("switchBank");
|
||||||
doc["key1"] = keycode[BUTTON_1];
|
doc["key1"] = keycode[BUTTON_1];
|
||||||
doc["key2"] = keycode[BUTTON_2];
|
doc["key2"] = keycode[BUTTON_2];
|
||||||
@@ -136,6 +141,8 @@ void webserver_init() {
|
|||||||
doc["key4long"] = longcode[BUTTON_4];
|
doc["key4long"] = longcode[BUTTON_4];
|
||||||
doc["key5long"] = longcode[BUTTON_5];
|
doc["key5long"] = longcode[BUTTON_5];
|
||||||
doc["key6long"] = longcode[BUTTON_6];
|
doc["key6long"] = longcode[BUTTON_6];
|
||||||
|
doc["n2kSysInst"] = config.getByte("n2kSysInst");
|
||||||
|
doc["n2kDevInst"] = config.getByte("n2kDevInst");
|
||||||
doc["n2kDestA"] = config.getString("n2kDestA");
|
doc["n2kDestA"] = config.getString("n2kDestA");
|
||||||
doc["n2kDestB"] = config.getString("n2kDestB");
|
doc["n2kDestB"] = config.getString("n2kDestB");
|
||||||
doc["n2kDestC"] = config.getString("n2kDestC");
|
doc["n2kDestC"] = config.getString("n2kDestC");
|
||||||
@@ -145,6 +152,18 @@ void webserver_init() {
|
|||||||
request->send(200, "application/json", out);
|
request->send(200, "application/json", out);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
server.on("/api/reset", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||||
|
LOGD(TAG, "reset called");
|
||||||
|
StaticJsonDocument<100> doc;
|
||||||
|
doc["status"] = "OK";
|
||||||
|
String out;
|
||||||
|
serializeJson(doc, out);
|
||||||
|
request->send(200, "application/json", out);
|
||||||
|
led_blink(LEDC_RGBLED_G, 3, 4095, 500);
|
||||||
|
esp_rom_uart_tx_wait_idle(0);
|
||||||
|
ESP.restart();
|
||||||
|
});
|
||||||
|
|
||||||
server.on("/api/resetconfig", HTTP_GET, [](AsyncWebServerRequest *request) {
|
server.on("/api/resetconfig", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||||
LOGD(TAG, "resetconfig called");
|
LOGD(TAG, "resetconfig called");
|
||||||
StaticJsonDocument<100> doc;
|
StaticJsonDocument<100> doc;
|
||||||
@@ -155,7 +174,7 @@ void webserver_init() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
server.on("/api/status", HTTP_GET, [](AsyncWebServerRequest *request) {
|
server.on("/api/status", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||||
StaticJsonDocument<200> doc;
|
StaticJsonDocument<512> doc;
|
||||||
doc["version"] = VERSION;
|
doc["version"] = VERSION;
|
||||||
int cpu_freq = esp_clk_cpu_freq() / 1000000;
|
int cpu_freq = esp_clk_cpu_freq() / 1000000;
|
||||||
doc["cpuspeed"] = String(cpu_freq) + "MHz";
|
doc["cpuspeed"] = String(cpu_freq) + "MHz";
|
||||||
@@ -179,6 +198,9 @@ void webserver_init() {
|
|||||||
default:
|
default:
|
||||||
doc["mode"] = "*unknown*";
|
doc["mode"] = "*unknown*";
|
||||||
}
|
}
|
||||||
|
doc["n2kDestA"] = config.getString("n2kDestA");
|
||||||
|
doc["n2kDestB"] = config.getString("n2kDestB");
|
||||||
|
doc["n2kDestC"] = config.getString("n2kDestC");
|
||||||
doc["status"] = "OK";
|
doc["status"] = "OK";
|
||||||
String out;
|
String out;
|
||||||
serializeJson(doc, out);
|
serializeJson(doc, out);
|
||||||
|
|||||||
@@ -22,6 +22,13 @@
|
|||||||
"category": "System"
|
"category": "System"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"name": "nightMode",
|
||||||
|
"label": "Night mode",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": "false",
|
||||||
|
"description": "Enable night mode for minimal lighting",
|
||||||
|
"category": "System"
|
||||||
|
},{
|
||||||
"name": "logLevel",
|
"name": "logLevel",
|
||||||
"label": "Log level",
|
"label": "Log level",
|
||||||
"type": "list",
|
"type": "list",
|
||||||
@@ -156,6 +163,27 @@
|
|||||||
"description": "The brightness of the rgb status led (0..4095).",
|
"description": "The brightness of the rgb status led (0..4095).",
|
||||||
"category": "Hardware"
|
"category": "Hardware"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "buzEnable",
|
||||||
|
"label": "Enable buzzer",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": "true",
|
||||||
|
"description": "Enable audio feedback with internal buzzer",
|
||||||
|
"category": "Hardware"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "buzPower",
|
||||||
|
"label": "Buzzer power",
|
||||||
|
"type": "number",
|
||||||
|
"default": 50,
|
||||||
|
"min": 0,
|
||||||
|
"max": 100,
|
||||||
|
"description": "The loudness of the buzzer (0..100%)",
|
||||||
|
"category": "Hardware",
|
||||||
|
"condition": {
|
||||||
|
"buzEnable": "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "tempFormat",
|
"name": "tempFormat",
|
||||||
"label": "Temperature Format",
|
"label": "Temperature Format",
|
||||||
@@ -336,5 +364,25 @@
|
|||||||
"max": 300,
|
"max": 300,
|
||||||
"description": "interval in seconds to send environment data [1..300]",
|
"description": "interval in seconds to send environment data [1..300]",
|
||||||
"category": "NMEA2000"
|
"category": "NMEA2000"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "n2kSysInst",
|
||||||
|
"label": "System instance",
|
||||||
|
"type": "number",
|
||||||
|
"default": 0,
|
||||||
|
"min": 0,
|
||||||
|
"max": 255,
|
||||||
|
"description": "The NMEA2000 system instance the device belongs to\nRange [0 .. 255] default 0",
|
||||||
|
"category": "NMEA2000"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "n2kDevInst",
|
||||||
|
"label": "Device instance",
|
||||||
|
"type": "number",
|
||||||
|
"default": 0,
|
||||||
|
"min": 0,
|
||||||
|
"max": 255,
|
||||||
|
"description": "The instance number of this device\nRange [0 .. 255] default 0",
|
||||||
|
"category": "NMEA2000"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html><head>
|
<html><head>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
<title>OBPkeyboard 6/1</title>
|
<title>OBPkeypad 6/1</title>
|
||||||
<link rel="icon" href="data:,">
|
<link rel="icon" href="data:,">
|
||||||
<script>
|
<script>
|
||||||
if (!window.isSecureContext) {
|
if (!window.isSecureContext) {
|
||||||
@@ -17,7 +17,7 @@ if (!window.isSecureContext) {
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
<h1 id="headline">OBPkb61</h1>
|
<h1 id="headline">OBPkp61</h1>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<span class="label" id="conn_label">disconnected</span>
|
<span class="label" id="conn_label">disconnected</span>
|
||||||
<span class="value" id="connected"></span>
|
<span class="value" id="connected"></span>
|
||||||
@@ -66,15 +66,15 @@ if (!window.isSecureContext) {
|
|||||||
|
|
||||||
<div class="row even">
|
<div class="row even">
|
||||||
<span class="label">Dest A</span>
|
<span class="label">Dest A</span>
|
||||||
<span class="value" id="destA">---</span>
|
<span class="value" id="n2kDestA">---</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<span class="label">Dest B</span>
|
<span class="label">Dest B</span>
|
||||||
<span class="value" id="destB">---</span>
|
<span class="value" id="n2kDestB">---</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="row even">
|
<div class="row even">
|
||||||
<span class="label">Dest C</span>
|
<span class="label">Dest C</span>
|
||||||
<span class="value" id="destC">---</span>
|
<span class="value" id="n2kDestC">---</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|||||||
Reference in New Issue
Block a user