Skip to content

Commit a9e473d

Browse files
authored
Merge pull request letscontrolit#1697 from TD-er/feature/1688_dewpoint
[letscontrolit#1688] Add dew point computation as standard conversion
2 parents ad84eb8 + 4baccf5 commit a9e473d

File tree

2 files changed

+46
-15
lines changed

2 files changed

+46
-15
lines changed

src/StringConverter.ino

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,33 @@ void parseEventVariables(String& s, struct EventStruct *event, boolean useURLenc
593593
#undef SMART_REPL
594594

595595
bool getConvertArgument(const String& marker, const String& s, float& argument, int& startIndex, int& endIndex) {
596+
String argumentString;
597+
if (getConvertArgumentString(marker, s, argumentString, startIndex, endIndex)) {
598+
if (!isFloat(argumentString)) return false;
599+
argument = argumentString.toFloat();
600+
return true;
601+
}
602+
return false;
603+
}
604+
605+
bool getConvertArgument2(const String& marker, const String& s, float& arg1, float& arg2, int& startIndex, int& endIndex) {
606+
String argumentString;
607+
if (getConvertArgumentString(marker, s, argumentString, startIndex, endIndex)) {
608+
int pos_comma = argumentString.indexOf(',');
609+
if (pos_comma == -1) return false;
610+
String arg1_s = argumentString.substring(0, pos_comma);
611+
if (!isFloat(arg1_s)) return false;
612+
String arg2_s = argumentString.substring(pos_comma+1);
613+
if (!isFloat(arg2_s)) return false;
614+
arg1 = arg1_s.toFloat();
615+
arg2 = arg2_s.toFloat();
616+
return true;
617+
}
618+
return false;
619+
}
620+
621+
622+
bool getConvertArgumentString(const String& marker, const String& s, String& argumentString, int& startIndex, int& endIndex) {
596623
startIndex = s.indexOf(marker);
597624
if (startIndex == -1) return false;
598625

@@ -604,10 +631,8 @@ bool getConvertArgument(const String& marker, const String& s, float& argument,
604631
endIndex = s.indexOf(')', startIndexArgument);
605632
if (endIndex == -1) return false;
606633

607-
String argumentString = s.substring(startIndexArgument, endIndex);
608-
if (argumentString.length() == 0 || !isFloat(argumentString)) return false;
609-
610-
argument = argumentString.toFloat();
634+
argumentString = s.substring(startIndexArgument, endIndex);
635+
if (argumentString.length() == 0) return false;
611636
++endIndex; // Must also strip ')' from the original string.
612637
return true;
613638
}
@@ -618,21 +643,26 @@ void parseStandardConversions(String& s, boolean useURLencode) {
618643
if (s.indexOf(F("%c_")) == -1)
619644
return; // Nothing to replace
620645

621-
float arg = 0.0;
646+
float arg1 = 0.0;
622647
int startIndex = 0;
623648
int endIndex = 0;
624649
// These replacements should be done in a while loop per marker,
625650
// since they also replace the numerical parameter.
626651
// The marker may occur more than once per string, but with different parameters.
627-
#define SMART_CONV(T,FUN) while (getConvertArgument((T), s, arg, startIndex, endIndex)) { repl(s.substring(startIndex, endIndex), (FUN), s, useURLencode); }
628-
SMART_CONV(F("%c_w_dir%"), getBearing(arg))
629-
SMART_CONV(F("%c_c2f%"), toString(CelsiusToFahrenheit(arg), 1))
630-
SMART_CONV(F("%c_ms2Bft%"), String(m_secToBeaufort(arg)))
631-
SMART_CONV(F("%c_cm2imp%"), centimeterToImperialLength(arg))
632-
SMART_CONV(F("%c_mm2imp%"), millimeterToImperialLength(arg))
633-
SMART_CONV(F("%c_m2day%"), toString(minutesToDay(arg), 2))
634-
SMART_CONV(F("%c_m2dh%"), minutesToDayHour(arg))
635-
SMART_CONV(F("%c_m2dhm%"), minutesToDayHourMinute(arg))
636-
SMART_CONV(F("%c_s2dhms%"), secondsToDayHourMinuteSecond(arg))
652+
#define SMART_CONV(T,FUN) while (getConvertArgument((T), s, arg1, startIndex, endIndex)) { repl(s.substring(startIndex, endIndex), (FUN), s, useURLencode); }
653+
SMART_CONV(F("%c_w_dir%"), getBearing(arg1))
654+
SMART_CONV(F("%c_c2f%"), toString(CelsiusToFahrenheit(arg1), 2))
655+
SMART_CONV(F("%c_ms2Bft%"), String(m_secToBeaufort(arg1)))
656+
SMART_CONV(F("%c_cm2imp%"), centimeterToImperialLength(arg1))
657+
SMART_CONV(F("%c_mm2imp%"), millimeterToImperialLength(arg1))
658+
SMART_CONV(F("%c_m2day%"), toString(minutesToDay(arg1), 2))
659+
SMART_CONV(F("%c_m2dh%"), minutesToDayHour(arg1))
660+
SMART_CONV(F("%c_m2dhm%"), minutesToDayHourMinute(arg1))
661+
SMART_CONV(F("%c_s2dhms%"), secondsToDayHourMinuteSecond(arg1))
662+
#undef SMART_CONV
663+
// Conversions with 2 parameters
664+
#define SMART_CONV(T,FUN) while (getConvertArgument2((T), s, arg1, arg2, startIndex, endIndex)) { repl(s.substring(startIndex, endIndex), (FUN), s, useURLencode); }
665+
float arg2 = 0.0;
666+
SMART_CONV(F("%c_dew_th%"), toString(compute_dew_point_temp(arg1, arg2), 2))
637667
#undef SMART_CONV
638668
}

src/WebServer.ino

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5545,6 +5545,7 @@ void handle_sysvars() {
55455545
addSysVar_html(F("Wind Dir.: %c_w_dir%(123.4)"));
55465546
addSysVar_html(F("{D}C to {D}F: %c_c2f%(20.4)"));
55475547
addSysVar_html(F("m/s to Bft: %c_ms2Bft%(5.1)"));
5548+
addSysVar_html(F("Dew point(T,H): %c_dew_th%(18.6,67)"));
55485549
addFormSeparator(3);
55495550
addSysVar_html(F("cm to imperial: %c_cm2imp%(190)"));
55505551
addSysVar_html(F("mm to imperial: %c_mm2imp%(1900)"));

0 commit comments

Comments
 (0)