Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timebased dimmer #121

Merged
merged 12 commits into from
Jan 23, 2023
1 change: 1 addition & 0 deletions cloc.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c:\usr\ols\bin\cloc --exclude-dir=.pio,.vscode,_release,.github . --by-file-by-lang
60 changes: 54 additions & 6 deletions embed/config.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ <h1>EnvBoyX Settings (settingID: <span replace="settingId">EBXCFG.vXX</span>)</h

<div class="setupModeOnly notice" hidden>
<p>セットアップモードです。</p>
<p>一度設定を保存して再起動すると通常モードに移行します。</p>
<p>初回設定時はWiFi設定を入力して保存することで通常モードに移行します。</p>
<p>誤ってセットアップモードに移行した場合は一度設定を保存して再起動すると通常モードに移行します。</p>
</div>

<form method='post'>
Expand Down Expand Up @@ -48,6 +49,52 @@ <h1>EnvBoyX Settings (settingID: <span replace="settingId">EBXCFG.vXX</span>)</h
MQTTモード(間欠動作・MQTT送信後ディープスリープ・非推奨)
</label><br>
</fieldset>


<fieldset>
<legend>時刻関連設定</legend>
<strong>NTPサーバー設定</strong><br>
NTPサーバーを使用しない場合、時刻関係の機能は動作しません。<br>
<label>
<input type='radio' name='ntp' value='no' id='ntp__no'>
使用しない
</label><br>
<label>
<input type='radio' name='ntp' value='yes' id='ntp__yes'>
使用する
</label><br>
<br>

<strong>NTPサーバーのIPアドレス</strong><br>
<input type='text' name='ntpAddress' placeholder='IP Address' id='ntpAddress'><br>
<br>

<strong>タイムゾーン</strong><br>
<p><a href="https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TZ.h">有効なタイムゾーン一覧</a></p>
<input type='text' name='ntpTimezone' placeholder='timezone'><br>
<br>

<strong>時刻によるディスプレイ自動消灯</strong><br>
<label>
<input type='radio' name='ntpAutoDimmer' value='no' id='ntpAutoDimmer__no'>
使用しない
</label><br>
<label>
<input type='radio' name='ntpAutoDimmer' value='yes' id='ntpAutoDimmer__yes'>
使用する
</label><br>
<br>

<strong>時刻によるディスプレイ自動消灯時刻</strong><br>
指定した時刻の間、ディスプレイを消灯します。<br>
<input type="time" name='ntpAutoDimmerStart' id='ntpAutoDimmerStart'>
&nbsp;~&nbsp;
<input type="time" name='ntpAutoDimmerEnd' id='ntpAutoDimmerEnd'>
<br>

</fieldset>


<fieldset>
<legend>表示デバイス共通設定</legend>
<strong>画面反転</strong><br>
Expand All @@ -67,18 +114,18 @@ <h1>EnvBoyX Settings (settingID: <span replace="settingId">EBXCFG.vXX</span>)</h

<strong>Wait for reconfigure画面</strong><br>
※ 起動時にセットアップモードに入るための待ち時間を追加します。<br>
v46以降、セットアップモードに意図的に入る必要はほぼありません。<br>

<label>
<input type='radio' name='displayWaitForReconfigure' value='skip' id='displayWaitForReconfigure__skip'>
表示しない(推奨)
</label><br>
<label>
<input type='radio' name='displayWaitForReconfigure' value='on' id='displayWaitForReconfigure__on'>
表示する
</label><br>


<label>
<input type='radio' name='displayWaitForReconfigure' value='skip' id='displayWaitForReconfigure__skip'>
表示しない(推奨)
</label><br>

<strong>自動消灯する明るさ(暗いと判定するしきい値)</strong><br>
<span>※ 光量センサーがない場合は自動的に無効になります。</span><br>
<span>※ 自動消灯を使用しない場合は、999999を入力してください。</span><br>
Expand Down Expand Up @@ -131,6 +178,7 @@ <h1>EnvBoyX Settings (settingID: <span replace="settingId">EBXCFG.vXX</span>)</h
縦表示モード(デカ文字)
</label><br>
</fieldset>

<fieldset>
<legend>MH-Z19B デバイス設定</legend>
<strong>MH-Z19B CO2センサー有無(金色のセンサー)</strong><br>
Expand Down
17 changes: 7 additions & 10 deletions include/ConfigClass.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,6 @@
#include "utils.h"
#include "SimpleMap.h"

// * 項目追加時の実装項目:
// - [ ] 2. Setup HTML http_setup_web_get.cpp http_setup_get_root_content
// - [ ] 3. Setup POST後の表示 (if required) http_setup_web_post.cpp http_setup_post_root_content
// - [ ] 4. Web API http_api_backup_config
// - [ ] 5. Web API updateConfig
// - [ ] 6. Write Config _create_config_json
// - [ ] 7. Read Config read_config_file
// - [ ] 8. Print config print_config
// - [ ] 9. Config version global.cpp

enum class ConfigValueType {
String = 0, // 任意の文字列
Expand Down Expand Up @@ -130,12 +121,18 @@ class Config {
return configMetaMap.get(key);
}

// 設定値を取得する
// 設定値を取得する(String)
String get(String key) {
checkKeyExist("get", key, true);
return configMap.get(key);
}

// 設定値を取得する(bool)
bool getAsBoolean(String key) {
String val = configMap.get(key);
return parseBooleanString(val);
}

// set 普通のキー
ConfigSetResult set(String key, String value, bool haltOnNoKey = true) {
// debuglog("[Config] key=" + key + " value=" + value);
Expand Down
27 changes: 18 additions & 9 deletions include/config.h → include/config/config.h
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
#pragma once

#include <ArduinoJson.h>
#include "FS.h"
#include <LittleFS.h>

#include "config_names.h"
#include "config_values.h"
#include "ConfigClass.h"

// --------------------------------------------------------------------
// ボード依存あり
// --------------------------------------------------------------------
enum struct CFG_VALIDATE_RESULT {
// 存在していて、バージョンも一致している
VALID,
// 存在しているが、バージョンが一致していない
NEED_UPGRADE,
// 存在していない
NOT_FOUND,
// 不明
ERROR
};

/**
* CONFIGをファイルから読み取る。
Expand All @@ -25,8 +32,11 @@ void create_configure_flag_file();

/** config ok フラグファイルを削除する */
void remove_configure_flag_file();
bool has_valid_config_file();
bool has_valid_config();

/** configファイルの存在とバージョンをチェックする */
CFG_VALIDATE_RESULT has_valid_config_file();

bool has_configured_file();

void config_setup();

Expand All @@ -37,21 +47,20 @@ void config_factory_reset();
// ボード依存なし
// --------------------------------------------------------------------

void print_config();

void trim_config();

/** config値をファイルに書き出す。closeはしない */
void write_config_file(File f);

/** ファイルを読んでconfig値にセット。closeはしない */
bool read_config_file(File f);
bool read_config_file(File f, bool readForUpdate);

/** ファイルを読んでSETTING_IDを返す。
* 取得できない場合はINVALIDが返る。closeはしない
*/
String read_config_setting_id(File f);


// APIコール用 Config->JSON
DynamicJsonDocument create_config_json(std::vector<String>& keys);

Expand Down
15 changes: 15 additions & 0 deletions include/config_names.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

#include <Arduino.h>

// memo
// Add new config
// config_names.h (variable names only)
// config_names.cpp (name attribute of config.html)
// config_values.h (variable names only)
// config_values.cpp (value of choice candicate)
// ConfigClass_metadata.cpp
// ConfigClass_defaultValue.cpp
/**
* Configで使用される、名称の定数クラス。
* 実際の値は ConfigValue クラスにある
Expand All @@ -21,6 +29,13 @@ class ConfigNames {
static const String DISPLAY_AUTODIM_LUX; // v45
static const String DISPLAY_AUTODIM_WAIT_SEC; // v45

static const String NTP; // v47
static const String NTP_ADDRESS; // v47
static const String NTP_TIMEZONE; // v47
static const String NTP_AUTO_DIMMER; // v47
static const String NTP_AUTO_DIMMER_START; // v47
static const String NTP_AUTO_DIMMER_END; // v47

static const String OLED_TYPE;

static const String ST7789;
Expand Down
6 changes: 6 additions & 0 deletions include/config_values.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ class ConfigValues {
static const String OPMODE_MQTT;
static const String OPMODE_DISPLAY;

static const String NTP_ON; // v47
static const String NTP_OFF; // v47

static const String NTP_AUTO_DIMMER_ON; // v47
static const String NTP_AUTO_DIMMER_OFF; // v47

static const String ST7789_USE;
static const String ST7789_NOUSE;

Expand Down
3 changes: 3 additions & 0 deletions include/network/time_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@
void ntp_setup();
String getFormattedTime();

String getDate();
String getTime();

/** time is not set due to NTP failed or NTP disabled */
const String TIME_NOT_READY = "0000/00/00 00:00:00";
1 change: 1 addition & 0 deletions include/sensors/timebased_dimmer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
void timebased_dimmer();
10 changes: 9 additions & 1 deletion src/ConfigClass_defaultValue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,24 @@

/**
* 初期値をセットする
* ここでセットしていない項目は存在しないものとして扱われる
*/
void Config::loadDefaultValue() {
this->addConfig(ConfigNames::SETTING_ID, "");
this->addConfig(ConfigNames::SSID, "");
this->addConfig(ConfigNames::PASSWORD, "");

this->addConfig(ConfigNames::MDNS, "ebx");

this->addConfig(ConfigNames::OPMODE, ConfigValues::OPMODE_DISPLAY);

this->addConfig(ConfigNames::NTP, ConfigValues::NTP_OFF);
this->addConfig(ConfigNames::NTP_ADDRESS, "");
this->addConfig(ConfigNames::NTP_TIMEZONE, "JST-9");

this->addConfig(ConfigNames::NTP_AUTO_DIMMER, ConfigValues::NTP_AUTO_DIMMER_OFF);
this->addConfig(ConfigNames::NTP_AUTO_DIMMER_START, "");
this->addConfig(ConfigNames::NTP_AUTO_DIMMER_END, "");

this->addConfig(ConfigNames::DISPLAY_FLIP, ConfigValues::DISPLAY_FLIP_OFF);
this->addConfig(ConfigNames::DISPLAY_BRIGHTNESS, "255");
this->addConfig(ConfigNames::DISPLAY_RECONFIG, ConfigValues::DISPLAY_RECONFIG_SKIP); // v44: 追加(ON) v47: デフォルトOFF
Expand Down
70 changes: 57 additions & 13 deletions src/ConfigClass_metadata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#include "config_values.h"

/**
* 初期値をセットする
* Configのメタデータをセットする
* ここでセットしていない項目は存在しないものとして扱われる
* 正直なところ、メモリの無駄ではあるのでメモリがカツカツになったら
* 素朴な実装に切り替えても良いかもしれない。
Expand Down Expand Up @@ -52,27 +52,48 @@ void Config::loadMetadata() {
meta.validValues = std::vector<String> {ConfigValues::OPMODE_DISPLAY, ConfigValues::OPMODE_MQTT};
this->addMeta(meta);
}
{
{ // v47
ConfigMeta meta;
meta.key = ConfigNames::DISPLAY_FLIP;
meta.key = ConfigNames::NTP;
meta.type = ConfigValueType::Choise;
meta.flags = RunningConfigChangeFlags::DISPLAY_REDRAW_REQ;
meta.validValues = std::vector<String> {ConfigValues::DISPLAY_FLIP_OFF, ConfigValues::DISPLAY_FLIP_ON};
meta.flags = RunningConfigChangeFlags::REBOOT_REQ;
meta.validValues = std::vector<String> {ConfigValues::NTP_ON, ConfigValues::NTP_OFF};
this->addMeta(meta);
}
{
{ // v47
ConfigMeta meta;
meta.key = ConfigNames::DISPLAY_BRIGHTNESS;
meta.type = ConfigValueType::Integer;
meta.flags = RunningConfigChangeFlags::DISPLAY_REDRAW_REQ;
meta.key = ConfigNames::NTP_ADDRESS;
meta.type = ConfigValueType::String;
meta.flags = RunningConfigChangeFlags::REBOOT_REQ;
this->addMeta(meta);
}
{
{ // v47
ConfigMeta meta;
meta.key = ConfigNames::DISPLAY_RECONFIG;
meta.type = ConfigValueType::Choise;
meta.key = ConfigNames::NTP_TIMEZONE;
meta.type = ConfigValueType::String;
meta.flags = RunningConfigChangeFlags::REBOOT_REQ;
meta.validValues = std::vector<String> {ConfigValues::DISPLAY_RECONFIG_ON, ConfigValues::DISPLAY_RECONFIG_SKIP};
this->addMeta(meta);
}
{ // v47
ConfigMeta meta;
meta.key = ConfigNames::NTP_AUTO_DIMMER;
meta.type = ConfigValueType::Choise;
meta.flags = RunningConfigChangeFlags::OK;
meta.validValues = std::vector<String> {ConfigValues::NTP_AUTO_DIMMER_ON, ConfigValues::NTP_AUTO_DIMMER_OFF};
this->addMeta(meta);
}
{ // v47
ConfigMeta meta;
meta.key = ConfigNames::NTP_AUTO_DIMMER_START;
meta.type = ConfigValueType::String;
meta.flags = RunningConfigChangeFlags::OK;
this->addMeta(meta);
}
{ // v47
ConfigMeta meta;
meta.key = ConfigNames::NTP_AUTO_DIMMER_END;
meta.type = ConfigValueType::String;
meta.flags = RunningConfigChangeFlags::OK;
this->addMeta(meta);
}
{
Expand All @@ -91,6 +112,29 @@ void Config::loadMetadata() {
meta.flags = RunningConfigChangeFlags::REBOOT_REQ;
this->addMeta(meta);
}
{
ConfigMeta meta;
meta.key = ConfigNames::DISPLAY_FLIP;
meta.type = ConfigValueType::Choise;
meta.flags = RunningConfigChangeFlags::DISPLAY_REDRAW_REQ;
meta.validValues = std::vector<String> {ConfigValues::DISPLAY_FLIP_OFF, ConfigValues::DISPLAY_FLIP_ON};
this->addMeta(meta);
}
{
ConfigMeta meta;
meta.key = ConfigNames::DISPLAY_BRIGHTNESS;
meta.type = ConfigValueType::Integer;
meta.flags = RunningConfigChangeFlags::DISPLAY_REDRAW_REQ;
this->addMeta(meta);
}
{
ConfigMeta meta;
meta.key = ConfigNames::DISPLAY_RECONFIG;
meta.type = ConfigValueType::Choise;
meta.flags = RunningConfigChangeFlags::REBOOT_REQ;
meta.validValues = std::vector<String> {ConfigValues::DISPLAY_RECONFIG_ON, ConfigValues::DISPLAY_RECONFIG_SKIP};
this->addMeta(meta);
}
{
ConfigMeta meta;
meta.key = ConfigNames::OLED_TYPE;
Expand Down
Loading