Merge pull request #4046 from tonhuisman/feature/sysvars-add-systm_0-and-systm_sp

[Sysvars] Add %systm_hm_0%, %systm_hm_sp%, %systm_hm_am_0%, %systm_hm_am_sp%, %systime_am_0% and %systime_am_sp%
This commit is contained in:
TD-er
2022-05-31 22:32:27 +02:00
committed by GitHub
6 changed files with 66 additions and 15 deletions
+25 -1
View File
@@ -46,17 +46,41 @@ More uses of these system variables can be seen in the rules section and formula
- Current time if NTP is enabled (hh:mm:ss, hh:mm prior to v2.0).
-
* - ``%systm_hm%``
- 01:23
- 1:23
- Current time if NTP is enabled (hh:mm "old behavior").
-
* - ``%systm_hm_0%``
- 01:23
- Current time if NTP is enabled (0-prefixed if hour < 10).
-
* - ``%systm_hm_sp%``
- ` 1:23`
- Current time if NTP is enabled (space-prefixed if hour < 10).
-
* - ``%systime_am%``
- 1:23:54 AM
- Current AM/PM time if NTP is enabled (hh:mm:ss xM).
-
* - ``%systime_am_0%``
- 01:23:54 AM
- Current AM/PM time if NTP is enabled (0-prefixed if hour < 10).
-
* - ``%systime_am_sp%``
- ` 1:23:54 AM`
- Current AM/PM time if NTP is enabled (space-prefixed if hour < 10).
-
* - ``%systm_hm_am%``
- 1:23 AM
- Current AM/PM time if NTP is enabled (hh:mm:ss xM).
-
* - ``%systm_hm_am_0%``
- 01:23 AM
- Current AM/PM time if NTP is enabled (0-prefixed if hour < 10).
-
* - ``%systm_hm_am_sp%``
- ` 1:23 AM`
- Current AM/PM time if NTP is enabled (space-prefixed if hour < 10).
-
* - ``%lcltime%``
- 2020-03-16 01:23:54
- Current date/time if NTP is enabled (YYYY-MM-DD hh:mm:ss).
+14 -11
View File
@@ -493,42 +493,45 @@ String ESPEasy_time::getDateString(const struct tm& ts, char delimiter) {
return DateString;
}
String ESPEasy_time::getTimeString(char delimiter, bool show_seconds /*=true*/) const
String ESPEasy_time::getTimeString(char delimiter, bool show_seconds /*=true*/, char hour_prefix /*='\0'*/) const
{
return getTimeString(tm, delimiter, false, show_seconds);
return getTimeString(tm, delimiter, false, show_seconds, hour_prefix);
}
String ESPEasy_time::getTimeString_ampm(char delimiter, bool show_seconds /*=true*/) const
String ESPEasy_time::getTimeString_ampm(char delimiter, bool show_seconds /*=true*/, char hour_prefix /*='\0'*/) const
{
return getTimeString(tm, delimiter, true, show_seconds);
return getTimeString(tm, delimiter, true, show_seconds, hour_prefix);
}
// returns the current Time separated by the given delimiter
// time format example with ':' delimiter: 23:59:59 (HH:MM:SS)
String ESPEasy_time::getTimeString(const struct tm& ts, char delimiter, bool am_pm, bool show_seconds)
String ESPEasy_time::getTimeString(const struct tm& ts, char delimiter, bool am_pm, bool show_seconds, char hour_prefix /*='\0'*/)
{
char TimeString[20]; // 19 digits plus the null char
char hour_prefix_s[2] = { 0 };
if (am_pm) {
uint8_t hour(ts.tm_hour % 12);
if (hour == 0) { hour = 12; }
const char a_or_p = ts.tm_hour < 12 ? 'A' : 'P';
if (hour < 10) { hour_prefix_s[0] = hour_prefix; }
if (show_seconds) {
sprintf_P(TimeString, PSTR("%d%c%02d%c%02d %cM"),
hour, delimiter, ts.tm_min, delimiter, ts.tm_sec, a_or_p);
sprintf_P(TimeString, PSTR("%s%d%c%02d%c%02d %cM"),
hour_prefix_s, hour, delimiter, ts.tm_min, delimiter, ts.tm_sec, a_or_p);
} else {
sprintf_P(TimeString, PSTR("%d%c%02d %cM"),
hour, delimiter, ts.tm_min, a_or_p);
sprintf_P(TimeString, PSTR("%s%d%c%02d %cM"),
hour_prefix_s, hour, delimiter, ts.tm_min, a_or_p);
}
} else {
if (show_seconds) {
sprintf_P(TimeString, PSTR("%02d%c%02d%c%02d"),
ts.tm_hour, delimiter, ts.tm_min, delimiter, ts.tm_sec);
} else {
sprintf_P(TimeString, PSTR("%d%c%02d"),
ts.tm_hour, delimiter, ts.tm_min);
if (ts.tm_hour < 10) { hour_prefix_s[0] = hour_prefix; }
sprintf_P(TimeString, PSTR("%s%d%c%02d"),
hour_prefix_s, ts.tm_hour, delimiter, ts.tm_min);
}
}
return TimeString;
+3 -3
View File
@@ -67,13 +67,13 @@ static String getDateString(const struct tm& ts, char delimiter);
// Formats the current Time
// Default time format example: 235959 (HHMMSS)
String getTimeString(char delimiter = '\0', bool show_seconds=true) const;
String getTimeString(char delimiter = '\0', bool show_seconds = true, char hour_prefix = '\0') const;
String getTimeString_ampm(char delimiter = '\0', bool show_seconds=true) const;
String getTimeString_ampm(char delimiter = '\0', bool show_seconds = true, char hour_prefix = '\0') const;
// returns the current Time separated by the given delimiter
// time format example with ':' delimiter: 23:59:59 (HH:MM:SS)
static String getTimeString(const struct tm& ts, char delimiter, bool am_pm, bool show_seconds);
static String getTimeString(const struct tm& ts, char delimiter, bool am_pm, bool show_seconds, char hour_prefix = '\0');
+12
View File
@@ -169,8 +169,14 @@ String SystemVariables::getSystemVariable(SystemVariables::Enum enumval) {
case SYSSEC_D: return String(((node_time.hour() * 60) + node_time.minute()) * 60 + node_time.second());
case SYSTIME: return node_time.getTimeString(':');
case SYSTIME_AM: return node_time.getTimeString_ampm(':');
case SYSTIME_AM_0: return node_time.getTimeString_ampm(':', true, '0');
case SYSTIME_AM_SP: return node_time.getTimeString_ampm(':', true, ' ');
case SYSTM_HM: return node_time.getTimeString(':', false);
case SYSTM_HM_0: return node_time.getTimeString(':', false, '0');
case SYSTM_HM_SP: return node_time.getTimeString(':', false, ' ');
case SYSTM_HM_AM: return node_time.getTimeString_ampm(':', false);
case SYSTM_HM_AM_0: return node_time.getTimeString_ampm(':', false, '0');
case SYSTM_HM_AM_SP: return node_time.getTimeString_ampm(':', false, ' ');
case SYSWEEKDAY: return String(node_time.weekday());
case SYSWEEKDAY_S: return node_time.weekday_str();
case SYSYEAR_0:
@@ -355,8 +361,14 @@ const __FlashStringHelper * SystemVariables::toString(SystemVariables::Enum enum
case Enum::SYSSTACK: return F("%sysstack%");
case Enum::SYSTIME: return F("%systime%");
case Enum::SYSTIME_AM: return F("%systime_am%");
case Enum::SYSTIME_AM_0: return F("%systime_am_0%");
case Enum::SYSTIME_AM_SP: return F("%systime_am_sp%");
case Enum::SYSTM_HM: return F("%systm_hm%");
case Enum::SYSTM_HM_0: return F("%systm_hm_0%");
case Enum::SYSTM_HM_SP: return F("%systm_hm_sp%");
case Enum::SYSTM_HM_AM: return F("%systm_hm_am%");
case Enum::SYSTM_HM_AM_0: return F("%systm_hm_am_0%");
case Enum::SYSTM_HM_AM_SP: return F("%systm_hm_am_sp%");
case Enum::SYSWEEKDAY: return F("%sysweekday%");
case Enum::SYSWEEKDAY_S: return F("%sysweekday_s%");
case Enum::SYSYEAR: return F("%sysyear%");
+6
View File
@@ -69,8 +69,14 @@ public:
SYSSTACK,
SYSTIME,
SYSTIME_AM,
SYSTIME_AM_0,
SYSTIME_AM_SP,
SYSTM_HM,
SYSTM_HM_0,
SYSTM_HM_SP,
SYSTM_HM_AM,
SYSTM_HM_AM_0,
SYSTM_HM_AM_SP,
SYSWEEKDAY,
SYSWEEKDAY_S,
SYSYEAR,
+6
View File
@@ -100,9 +100,15 @@ void handle_sysvars() {
addSysVar_enum_html(SystemVariables::LCLTIME);
addSysVar_enum_html(SystemVariables::LCLTIME_AM);
addSysVar_enum_html(SystemVariables::SYSTM_HM);
addSysVar_enum_html(SystemVariables::SYSTM_HM_0);
addSysVar_enum_html(SystemVariables::SYSTM_HM_SP);
addSysVar_enum_html(SystemVariables::SYSTM_HM_AM);
addSysVar_enum_html(SystemVariables::SYSTM_HM_AM_0);
addSysVar_enum_html(SystemVariables::SYSTM_HM_AM_SP);
addSysVar_enum_html(SystemVariables::SYSTIME);
addSysVar_enum_html(SystemVariables::SYSTIME_AM);
addSysVar_enum_html(SystemVariables::SYSTIME_AM_0);
addSysVar_enum_html(SystemVariables::SYSTIME_AM_SP);
addSysVar_enum_html(SystemVariables::SYSBUILD_DATE);
addSysVar_enum_html(SystemVariables::SYSBUILD_TIME);
addSysVar_enum_html(SystemVariables::SYSBUILD_FILENAME);