Merge branch 'wellenvogel:master' into master

This commit is contained in:
Norbert Walter 2025-03-04 21:38:32 +01:00 committed by GitHub
commit 98c8d44d2f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 53 additions and 15 deletions

View File

@ -493,6 +493,11 @@ double formatKnots(double cv)
return cv * 3600.0 / 1852.0; return cv * 3600.0 / 1852.0;
} }
double formatKmh(double cv)
{
return cv *3600.0 / 1000.0;
}
uint32_t mtr2nm(uint32_t m) uint32_t mtr2nm(uint32_t m)
{ {
return m / 1852; return m / 1852;

View File

@ -129,6 +129,7 @@ double formatCourse(double cv);
double formatDegToRad(double deg); double formatDegToRad(double deg);
double formatWind(double cv); double formatWind(double cv);
double formatKnots(double cv); double formatKnots(double cv);
double formatKmh(double cv);
uint32_t mtr2nm(uint32_t m); uint32_t mtr2nm(uint32_t m);
double mtr2nm(double m); double mtr2nm(double m);

View File

@ -27,18 +27,19 @@ class DummyConfig : public GwConfigInterface{
}; };
DummyConfig dummyConfig; DummyConfig dummyConfig;
String GwConfigHandler::toString() const{ void GwConfigHandler::logConfig(int level) const
String rt; {
rt+="Config: "; if (!logger->isActive(level))
for (int i=0;i<getNumConfig();i++){ return;
rt+=configs[i]->getName(); for (int i = 0; i < getNumConfig(); i++)
rt+="="; {
rt+=configs[i]->asString(); String v=configs[i]->asString();
rt+=", "; bool isChanged=v != configs[i]->getDefault();
} logger->logDebug(level, "Config[%s]%s='%s'", configs[i]->getName().c_str(),isChanged?"*":"", configs[i]->isSecret() ? "***" : configs[i]->asString().c_str());
return rt; if ((i%20) == 19) logger->flush();
} }
logger->flush();
}
String GwConfigHandler::toJson() const{ String GwConfigHandler::toJson() const{
String rt; String rt;
int num=getNumConfig(); int num=getNumConfig();
@ -80,6 +81,9 @@ GwConfigHandler::~GwConfigHandler(){
bool GwConfigHandler::loadConfig(){ bool GwConfigHandler::loadConfig(){
prefs->begin(PREF_NAME,true); prefs->begin(PREF_NAME,true);
for (int i=0;i<getNumConfig();i++){ for (int i=0;i<getNumConfig();i++){
if (!prefs->isKey(configs[i]->getName().c_str())) {
continue;
}
String v=prefs->getString(configs[i]->getName().c_str(),configs[i]->getDefault()); String v=prefs->getString(configs[i]->getName().c_str(),configs[i]->getDefault());
configs[i]->value=v; configs[i]->value=v;
} }

View File

@ -22,7 +22,7 @@ class GwConfigHandler: public GwConfigDefinitions{
void stopChanges(); void stopChanges();
bool updateValue(String name, String value); bool updateValue(String name, String value);
bool reset(); bool reset();
String toString() const; void logConfig(int level) const;
String toJson() const; String toJson() const;
String getString(const String name,const String defaultv="") const; String getString(const String name,const String defaultv="") const;
bool getBool(const String name,bool defaultv=false) const ; bool getBool(const String name,bool defaultv=false) const ;

View File

@ -85,6 +85,7 @@ bool GwWifi::connectInternal(){
if (wifiClient->asBoolean()){ if (wifiClient->asBoolean()){
clientIsConnected=false; clientIsConnected=false;
LOG_DEBUG(GwLog::LOG,"creating wifiClient ssid=%s",wifiSSID->asString().c_str()); LOG_DEBUG(GwLog::LOG,"creating wifiClient ssid=%s",wifiSSID->asString().c_str());
WiFi.setAutoReconnect(false); //#102
wl_status_t rt=WiFi.begin(wifiSSID->asCString(),wifiPass->asCString()); wl_status_t rt=WiFi.begin(wifiSSID->asCString(),wifiPass->asCString());
LOG_DEBUG(GwLog::LOG,"wifiClient connect returns %d",(int)rt); LOG_DEBUG(GwLog::LOG,"wifiClient connect returns %d",(int)rt);
lastConnectStart=millis(); lastConnectStart=millis();
@ -92,7 +93,8 @@ bool GwWifi::connectInternal(){
} }
return false; return false;
} }
#define RETRY_MILLIS 20000 //#102: we should have a wifi connect retry being > 30s - with some headroom
#define RETRY_MILLIS 40000
void GwWifi::loop(){ void GwWifi::loop(){
if (wifiClient->asBoolean()) if (wifiClient->asBoolean())
{ {

View File

@ -528,6 +528,31 @@ private:
{ {
SendMessage(NMEA0183Msg); SendMessage(NMEA0183Msg);
} }
if (shouldSend && NMEA0183Reference == NMEA0183Wind_Apparent)
{
double wa = formatCourse(WindAngle);
if (!NMEA0183Msg.Init("VWR", talkerId))
return;
if (!NMEA0183Msg.AddDoubleField(( wa > 180 ) ? 360-wa : wa))
return;
if (!NMEA0183Msg.AddStrField(( wa >= 0 && wa <= 180) ? 'R' : 'L'))
return;
if (!NMEA0183Msg.AddDoubleField(formatKnots(WindSpeed)))
return;
if (!NMEA0183Msg.AddStrField("N"))
return;
if (!NMEA0183Msg.AddDoubleField(WindSpeed))
return;
if (!NMEA0183Msg.AddStrField("M"))
return;
if (!NMEA0183Msg.AddDoubleField(formatKmh(WindSpeed)))
return;
if (!NMEA0183Msg.AddStrField("K"))
return;
SendMessage(NMEA0183Msg);
}
} }
/* if (WindReference == N2kWind_Apparent && boatData->SOG->isValid()) /* if (WindReference == N2kWind_Apparent && boatData->SOG->isValid())

View File

@ -801,6 +801,7 @@ void setup() {
MDNS.begin(config.getConfigItem(config.systemName)->asCString()); MDNS.begin(config.getConfigItem(config.systemName)->asCString());
channels.begin(fallbackSerial); channels.begin(fallbackSerial);
logger.flush(); logger.flush();
config.logConfig(GwLog::DEBUG);
webserver.registerMainHandler("/api/reset", [](AsyncWebServerRequest *request)->GwRequestMessage *{ webserver.registerMainHandler("/api/reset", [](AsyncWebServerRequest *request)->GwRequestMessage *{
return new ResetRequest(request->arg("_hash")); return new ResetRequest(request->arg("_hash"));
}); });