Sync to original project
This commit is contained in:
parent
8bbf09ffc5
commit
949affec1f
|
@ -753,7 +753,7 @@ void OvmsLocations::UpdatedVehicleOn(OvmsMetric* metric)
|
|||
void OvmsLocations::UpdateParkPosition()
|
||||
{
|
||||
OvmsRecMutexLock lock(&m_park_lock);
|
||||
|
||||
|
||||
bool caron = StdMetrics.ms_v_env_on->AsBool();
|
||||
if (caron)
|
||||
{
|
||||
|
|
|
@ -288,7 +288,7 @@ void ota_flash_http(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int arg
|
|||
|
||||
url = MyConfig.GetParamValue("ota","server");
|
||||
if (url.empty())
|
||||
url = "ovms-ota.bit-cloud.de";
|
||||
url = "api.openvehicles.com/firmware/ota";
|
||||
|
||||
url.append("/");
|
||||
url.append(GetOVMSProduct());
|
||||
|
@ -830,7 +830,7 @@ void OvmsOTA::GetStatus(ota_info& info, bool check_update /*=true*/)
|
|||
std::string tag = MyConfig.GetParamValue("ota","tag");
|
||||
std::string url = MyConfig.GetParamValue("ota","server");
|
||||
if (url.empty())
|
||||
url = "ovms-ota.bit-cloud.de";
|
||||
url = "api.openvehicles.com/firmware/ota";
|
||||
url.append("/");
|
||||
url.append(GetOVMSProduct());
|
||||
url.append("/");
|
||||
|
@ -1029,7 +1029,7 @@ bool OvmsOTA::AutoFlash(bool force)
|
|||
std::string tag = MyConfig.GetParamValue("ota","tag");
|
||||
std::string url = MyConfig.GetParamValue("ota","server");
|
||||
if (url.empty())
|
||||
url = "ovms-ota.bit-cloud.de";
|
||||
url = "api.openvehicles.com/firmware/ota";
|
||||
|
||||
url.append("/");
|
||||
url.append(GetOVMSProduct());
|
||||
|
|
|
@ -282,14 +282,133 @@ void OvmsServerV3::TransmitModifiedMetrics()
|
|||
if (!m_mgconn)
|
||||
return;
|
||||
|
||||
OvmsMetric* metric = MyMetrics.m_first;
|
||||
while (metric != NULL)
|
||||
if (StandardMetrics.ms_v_bat_soc->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
if (metric->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(metric);
|
||||
}
|
||||
metric = metric->m_next;
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_soc);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_voltage->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_voltage);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_current->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_current);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_state->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_state);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_substate->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_substate);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_mode->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_mode);
|
||||
}
|
||||
if (StandardMetrics.ms_v_bat_range_ideal->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_range_ideal);
|
||||
}
|
||||
if (StandardMetrics.ms_v_bat_range_est->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_range_est);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_climit->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_climit);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_kwh->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_kwh);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_timermode->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_timermode);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_timerstart->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_timerstart);
|
||||
}
|
||||
if (StandardMetrics.ms_v_bat_cac->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_cac);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_duration_full->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_duration_full);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_duration_range->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_duration_range);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_duration_soc->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_duration_soc);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_inprogress->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_inprogress);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_limit_range->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_limit_range);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_limit_soc->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_limit_soc);
|
||||
}
|
||||
if (StandardMetrics.ms_v_env_cooling->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_env_cooling);
|
||||
}
|
||||
if (StandardMetrics.ms_v_bat_range_full->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_range_full);
|
||||
}
|
||||
if (StandardMetrics.ms_v_bat_power->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_power);
|
||||
}
|
||||
if (StandardMetrics.ms_v_bat_voltage->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_voltage);
|
||||
}
|
||||
if (StandardMetrics.ms_v_bat_soh->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_soh);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_power->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_power);
|
||||
}
|
||||
if (StandardMetrics.ms_v_charge_efficiency->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_charge_efficiency);
|
||||
}
|
||||
if (StandardMetrics.ms_v_bat_current->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_current);
|
||||
}
|
||||
if (StandardMetrics.ms_v_bat_range_speed->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_range_speed);
|
||||
}
|
||||
if (StandardMetrics.ms_v_tpms_pressure->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_tpms_pressure);
|
||||
}
|
||||
if (StandardMetrics.ms_v_tpms_temp->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_tpms_temp);
|
||||
}
|
||||
if (StandardMetrics.ms_v_tpms_health->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_tpms_health);
|
||||
}
|
||||
if (StandardMetrics.ms_v_tpms_alert->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(StandardMetrics.ms_v_tpms_alert);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -748,13 +867,25 @@ void OvmsServerV3::MetricModified(OvmsMetric* metric)
|
|||
{
|
||||
if (!StandardMetrics.ms_s_v3_connected->AsBool()) return;
|
||||
|
||||
if (m_streaming)
|
||||
int now = StandardMetrics.ms_m_monotonic->AsInt();
|
||||
//ESP_LOGD(TAG, "now: %d, m_lasttx_stream: %d, m_streaming: %d", now, m_lasttx_stream, m_streaming);
|
||||
if (StandardMetrics.ms_v_env_on->AsBool() && m_streaming && now > m_lasttx_stream+m_streaming)
|
||||
{
|
||||
OvmsMutexLock mg(&m_mgconn_mutex);
|
||||
if (!m_mgconn)
|
||||
return;
|
||||
metric->ClearModified(MyOvmsServerV3Modifier);
|
||||
TransmitMetric(metric);
|
||||
//metric->ClearModified(MyOvmsServerV3Modifier);
|
||||
|
||||
while (metric != NULL)
|
||||
{
|
||||
if (metric->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||
{
|
||||
TransmitMetric(metric);
|
||||
}
|
||||
metric = metric->m_next;
|
||||
}
|
||||
//TransmitMetric(metric);
|
||||
m_lasttx_stream = now;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -817,13 +948,22 @@ void OvmsServerV3::EventListener(std::string event, void* data)
|
|||
*/
|
||||
void OvmsServerV3::ConfigChanged(OvmsConfigParam* param)
|
||||
{
|
||||
ESP_LOGD(TAG, "--- ConfigChanged ---");
|
||||
m_streaming = MyConfig.GetParamValueInt("vehicle", "stream", 0);
|
||||
ESP_LOGD(TAG, "m_streaming: %d", m_streaming);
|
||||
m_updatetime_connected = MyConfig.GetParamValueInt("server.v3", "updatetime.connected", 60);
|
||||
ESP_LOGD(TAG, "m_updatetime_connected: %d", m_updatetime_connected);
|
||||
m_updatetime_idle = MyConfig.GetParamValueInt("server.v3", "updatetime.idle", 600);
|
||||
ESP_LOGD(TAG, "m_updatetime_idle: %d", m_updatetime_idle);
|
||||
m_updatetime_awake = MyConfig.GetParamValueInt("server.v3", "updatetime.awake", m_updatetime_idle);
|
||||
ESP_LOGD(TAG, "m_updatetime_awake: %d", m_updatetime_awake);
|
||||
m_updatetime_on = MyConfig.GetParamValueInt("server.v3", "updatetime.on", m_updatetime_idle);
|
||||
ESP_LOGD(TAG, "m_updatetime_on: %d", m_updatetime_on);
|
||||
m_updatetime_charging = MyConfig.GetParamValueInt("server.v3", "updatetime.charging", m_updatetime_idle);
|
||||
ESP_LOGD(TAG, "m_updatetime_charging: %d", m_updatetime_charging);
|
||||
m_updatetime_sendall = MyConfig.GetParamValueInt("server.v3", "updatetime.sendall", 0);
|
||||
ESP_LOGD(TAG, "m_updatetime_sendall: %d", m_updatetime_sendall);
|
||||
ESP_LOGD(TAG, "--- ConfigChanged ---");
|
||||
}
|
||||
|
||||
void OvmsServerV3::NetUp(std::string event, void* data)
|
||||
|
@ -929,12 +1069,55 @@ void OvmsServerV3::Ticker1(std::string event, void* data)
|
|||
}
|
||||
else if ((m_lasttx==0)||(now>(m_lasttx+next)))
|
||||
{
|
||||
ESP_LOGD(TAG, "m_lasttx: %d next: %d, now: %d", m_lasttx, next, now);
|
||||
ESP_LOGD(TAG, "m_updatetime_connected: %d m_updatetime_on: %d, m_updatetime_charging: %d", m_updatetime_connected, m_updatetime_on, m_updatetime_charging);
|
||||
ESP_LOGD(TAG, "m_updatetime_awake: %d ", m_updatetime_awake);
|
||||
TransmitModifiedMetrics();
|
||||
m_lasttx = m_lasttx_stream = now;
|
||||
}
|
||||
else if (m_streaming && caron && m_peers && now > m_lasttx_stream+m_streaming)
|
||||
{
|
||||
// TODO: transmit streaming metrics
|
||||
//Transmit important metrics while streaming
|
||||
bool modified =
|
||||
StandardMetrics.ms_v_pos_latitude->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_pos_longitude->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_pos_direction->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_pos_altitude->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_pos_gpslock->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_pos_gpssq->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_pos_gpsmode->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_pos_gpshdop->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_pos_satcount->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_pos_gpsspeed->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_pos_speed->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_env_drivemode->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_bat_power->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_bat_energy_used->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_bat_energy_recd->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_inv_power->IsModifiedAndClear(MyOvmsServerV3Modifier) |
|
||||
StandardMetrics.ms_v_inv_efficiency->IsModifiedAndClear(MyOvmsServerV3Modifier);
|
||||
|
||||
// Quick exit if nothing modified
|
||||
if ((!modified)) return;
|
||||
|
||||
TransmitMetric(StandardMetrics.ms_v_pos_latitude);
|
||||
TransmitMetric(StandardMetrics.ms_v_pos_longitude);
|
||||
TransmitMetric(StandardMetrics.ms_v_pos_direction);
|
||||
TransmitMetric(StandardMetrics.ms_v_pos_altitude);
|
||||
TransmitMetric(StandardMetrics.ms_v_pos_gpslock);
|
||||
TransmitMetric(StandardMetrics.ms_v_pos_gpssq);
|
||||
TransmitMetric(StandardMetrics.ms_v_pos_gpsmode);
|
||||
TransmitMetric(StandardMetrics.ms_v_pos_gpshdop);
|
||||
TransmitMetric(StandardMetrics.ms_v_pos_satcount);
|
||||
TransmitMetric(StandardMetrics.ms_v_pos_gpsspeed);
|
||||
TransmitMetric(StandardMetrics.ms_v_pos_speed);
|
||||
TransmitMetric(StandardMetrics.ms_v_env_drivemode);
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_power);
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_energy_used);
|
||||
TransmitMetric(StandardMetrics.ms_v_bat_energy_recd);
|
||||
TransmitMetric(StandardMetrics.ms_v_inv_power);
|
||||
TransmitMetric(StandardMetrics.ms_v_inv_efficiency);
|
||||
|
||||
m_lasttx_stream = now;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,5 +11,5 @@ ifdef CONFIG_MG_ENABLE_SSL
|
|||
COMPONENT_SRCDIRS := src
|
||||
COMPONENT_ADD_INCLUDEDIRS := src
|
||||
COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive
|
||||
COMPONENT_EMBED_FILES := trustedca/usertrust.crt trustedca/digicert_global.crt trustedca/starfield_class2.crt trustedca/baltimore_cybertrust.crt trustedca/isrg_x1.crt trustedca/ovms_ca.crt
|
||||
COMPONENT_EMBED_FILES := trustedca/usertrust.crt trustedca/digicert_global.crt trustedca/starfield_class2.crt trustedca/baltimore_cybertrust.crt trustedca/isrg_x1.crt
|
||||
endif
|
||||
|
|
|
@ -164,10 +164,6 @@ void OvmsTLS::Reload()
|
|||
extern const unsigned char isrg_x1_end[] asm("_binary_isrg_x1_crt_end");
|
||||
m_trustlist["ISRG X1 CA"] = new OvmsTrustedCert(isrg_x1, isrg_x1_end - isrg_x1);
|
||||
|
||||
extern const unsigned char ovms_ca[] asm("_binary_ovms_ca_crt_start");
|
||||
extern const unsigned char ovms_ca_end[] asm("_binary_ovms_ca_crt_end");
|
||||
m_trustlist["OVMS Bit-Cloud.de CA"] = new OvmsTrustedCert(ovms_ca, ovms_ca_end - ovms_ca);
|
||||
|
||||
// Add trusted certs on disk (/store/trustedca)
|
||||
DIR *dir;
|
||||
struct dirent *dp;
|
||||
|
|
Binary file not shown.
|
@ -158,3 +158,4 @@ Also keep in mind, not all deviations may be caused by actual battery
|
|||
issues. Voltage and temperature sensors can lose their calibration or
|
||||
become defective as well.
|
||||
|
||||
|
||||
|
|
|
@ -1406,7 +1406,6 @@ void OvmsWebServer::HandleCfgServerV2(PageEntry_t& p, PageContext_t& c)
|
|||
c.input_text("Server", "server", server.c_str(), "Enter host name or IP address",
|
||||
"<p>Public OVMS V2 servers:</p>"
|
||||
"<ul>"
|
||||
"<li><code>ovms-server.bit-cloud.de</code> <a href=\"https://ovms.bit-cloud.de/user/register\" target=\"_blank\">Registration</a></li>"
|
||||
"<li><code>api.openvehicles.com</code> <a href=\"https://www.openvehicles.com/user/register\" target=\"_blank\">Registration</a></li>"
|
||||
"<li><code>ovms.dexters-web.de</code> <a href=\"https://dexters-web.de/?action=NewAccount\" target=\"_blank\">Registration</a></li>"
|
||||
"</ul>");
|
||||
|
@ -2650,7 +2649,6 @@ void OvmsWebServer::HandleCfgFirmware(PageEntry_t& p, PageContext_t& c)
|
|||
"<p>Automatic updates are normally only done if a wifi connection is available at the time. Before allowing updates via modem, be aware a single firmware image has a size of around 3 MB, which may lead to additional costs on your data plan.</p>");
|
||||
c.print(
|
||||
"<datalist id=\"server-list\">"
|
||||
"<option value=\"https://ovms-ota.bit-cloud.de\">"
|
||||
"<option value=\"https://api.openvehicles.com/firmware/ota\">"
|
||||
"<option value=\"https://ovms.dexters-web.de/firmware/ota\">"
|
||||
"</datalist>"
|
||||
|
@ -2661,7 +2659,7 @@ void OvmsWebServer::HandleCfgFirmware(PageEntry_t& p, PageContext_t& c)
|
|||
"</datalist>"
|
||||
);
|
||||
c.input_text("Update server", "server", server.c_str(), "Specify or select from list (clear to see all options)",
|
||||
"<p>Default is <code>https://ovms-ota.bit-cloud.de</code>.</p>",
|
||||
"<p>Default is <code>https://api.openvehicles.com/firmware/ota</code>.</p>",
|
||||
"list=\"server-list\"");
|
||||
c.input_text("Version tag", "tag", tag.c_str(), "Specify or select from list (clear to see all options)",
|
||||
"<p>Default is <code>main</code> for standard releases. Use <code>eap</code> (early access program) for stable or <code>edge</code> for bleeding edge developer builds.</p>",
|
||||
|
|
|
@ -749,7 +749,7 @@ std::string OvmsWebServer::CfgInit3(PageEntry_t& p, PageContext_t& c, std::strin
|
|||
if (server.empty())
|
||||
server = MyConfig.GetParamValue("ota", "server");
|
||||
if (server.empty())
|
||||
server = "https://ovms-ota.bit-cloud.de";
|
||||
server = "https://api.openvehicles.com/firmware/ota";
|
||||
|
||||
MyOTA.GetStatus(info, true);
|
||||
|
||||
|
@ -843,8 +843,6 @@ std::string OvmsWebServer::CfgInit3(PageEntry_t& p, PageContext_t& c, std::strin
|
|||
c.panel_start("primary", "Step 3/5: Update Firmware");
|
||||
c.form_start(p.uri);
|
||||
c.input_radio_start("Update server", "server");
|
||||
c.input_radio_option("server", "Europe, Germany (ovms-ota.bit-cloud.de)",
|
||||
"https://ovms-ota.bit-cloud.de" , server == "https://ovms-ota.bit-cloud.de");
|
||||
c.input_radio_option("server", "Asia-Pacific (openvehicles.com)",
|
||||
"https://api.openvehicles.com/firmware/ota" , server == "https://api.openvehicles.com/firmware/ota");
|
||||
c.input_radio_option("server", "Europe (dexters-web.de)",
|
||||
|
@ -952,10 +950,10 @@ std::string OvmsWebServer::CfgInit4(PageEntry_t& p, PageContext_t& c, std::strin
|
|||
// default data server = ota server:
|
||||
if (server.empty()) {
|
||||
server = MyConfig.GetParamValue("ota", "server");
|
||||
if (startsWith(server, "ovms-ota.bit-cloud.de"))
|
||||
server = "ovms-server.bit-cloud.de";
|
||||
else
|
||||
if (startsWith(server, "ovms.dexters-web.de"))
|
||||
server = "ovms.dexters-web.de";
|
||||
else
|
||||
server = "api.openvehicles.com";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1036,9 +1034,6 @@ std::string OvmsWebServer::CfgInit4(PageEntry_t& p, PageContext_t& c, std::strin
|
|||
|
||||
c.input_radio_start("OVMS data server", "server");
|
||||
c.input_radio_option("server", "No server connection", "" , server == "");
|
||||
c.input_radio_option("server",
|
||||
"Europe, Germany (ovms-server.bit-cloud.de) <a href=\"https://ovms.bit-cloud.de/user/register\" target=\"_blank\">Registration</a>",
|
||||
"ovms-server.bit-cloud.de" , server == "ovms-server.bit-cloud.de");
|
||||
c.input_radio_option("server",
|
||||
"Asia-Pacific (openvehicles.com) <a href=\"https://www.openvehicles.com/user/register\" target=\"_blank\">Registration</a>",
|
||||
"api.openvehicles.com" , server == "api.openvehicles.com");
|
||||
|
|
|
@ -90,6 +90,8 @@ OvmsVehicleFactory::OvmsVehicleFactory()
|
|||
|
||||
OvmsCommand* cmd_bms = MyCommandApp.RegisterCommand("bms","BMS framework", bms_status, "", 0, 0, false);
|
||||
cmd_bms->RegisterCommand("status","Show BMS status",bms_status);
|
||||
cmd_bms->RegisterCommand("temp","Show BMS temperature status",bms_status);
|
||||
cmd_bms->RegisterCommand("volt","Show BMS voltage status",bms_status);
|
||||
cmd_bms->RegisterCommand("reset","Reset BMS statistics",bms_reset);
|
||||
cmd_bms->RegisterCommand("alerts","Show BMS alerts",bms_alerts);
|
||||
|
||||
|
|
|
@ -155,6 +155,8 @@ struct DashboardConfig;
|
|||
#define VEHICLE_POLL_TYPE_OBDIIGROUP 0x21 // Custom: Read data by 8 bit PID
|
||||
#define VEHICLE_POLL_TYPE_OBDII_32 0x32 // Custom: VW routine control extension (8 bit PID)
|
||||
|
||||
#define VEHICLE_OBD_BROADCAST_MODULE_TX 0x7df
|
||||
#define VEHICLE_OBD_BROADCAST_MODULE_RX 0x0
|
||||
// A note on "PID" and their sizes here:
|
||||
// By "PID" for the service types we mean the part of the request parameters
|
||||
// after the service type that is reflected in _every_ valid response to the request.
|
||||
|
@ -479,6 +481,12 @@ class OvmsVehicle : public InternalRamAllocated
|
|||
Range = 3,
|
||||
Performance = 4
|
||||
} vehicle_mode_t;
|
||||
enum class vehicle_bms_status_t
|
||||
{
|
||||
Both,
|
||||
Voltage,
|
||||
Temperature
|
||||
};
|
||||
|
||||
public:
|
||||
vehicle_mode_t VehicleModeKey(const std::string code);
|
||||
|
@ -694,7 +702,7 @@ class OvmsVehicle : public InternalRamAllocated
|
|||
void BmsGetCellDefaultThresholdsVoltage(float* warn, float* alert, float* maxgrad=NULL, float* maxsddev=NULL);
|
||||
void BmsGetCellDefaultThresholdsTemperature(float* warn, float* alert);
|
||||
void BmsResetCellStats();
|
||||
virtual void BmsStatus(int verbosity, OvmsWriter* writer);
|
||||
virtual void BmsStatus(int verbosity, OvmsWriter* writer, vehicle_bms_status_t statusmode);
|
||||
virtual bool FormatBmsAlerts(int verbosity, OvmsWriter* writer, bool show_warnings);
|
||||
bool BmsCheckChangeCellArrangementVoltage(int readings, int readingspermodule = 0);
|
||||
bool BmsCheckChangeCellArrangementTemperature(int readings, int readingspermodule = 0);
|
||||
|
|
|
@ -550,13 +550,59 @@ void OvmsVehicle::BmsResetCellStats()
|
|||
BmsResetCellTemperatures(false);
|
||||
}
|
||||
|
||||
void OvmsVehicle::BmsStatus(int verbosity, OvmsWriter* writer)
|
||||
template<typename INT>
|
||||
INT round_up_div(INT value, INT divis)
|
||||
{
|
||||
return (value + divis -1) / divis;
|
||||
}
|
||||
|
||||
void OvmsVehicle::BmsStatus(int verbosity, OvmsWriter* writer, vehicle_bms_status_t statusmode)
|
||||
{
|
||||
auto check_max_cols = [](int total_cols, int maximum)
|
||||
{
|
||||
if (maximum <= 1)
|
||||
return 1;
|
||||
if (total_cols <= maximum)
|
||||
return total_cols;
|
||||
if (maximum >= 4 && total_cols % 4 == 0)
|
||||
return 4;
|
||||
if (total_cols % 3 == 0)
|
||||
return 3;
|
||||
if (maximum >= 5 && total_cols % 5 == 0)
|
||||
return 5;
|
||||
return maximum;
|
||||
};
|
||||
|
||||
int c;
|
||||
|
||||
if ((! m_bms_has_voltages)||(! m_bms_has_temperatures))
|
||||
bool show_voltage = m_bms_has_voltages;
|
||||
bool show_temperature = m_bms_has_temperatures;
|
||||
switch (statusmode)
|
||||
{
|
||||
writer->puts("No BMS status data available");
|
||||
case vehicle_bms_status_t::Both:
|
||||
break;
|
||||
case vehicle_bms_status_t::Voltage:
|
||||
show_temperature = false;
|
||||
break;
|
||||
case vehicle_bms_status_t::Temperature:
|
||||
show_voltage = false;
|
||||
break;
|
||||
}
|
||||
if ((!show_voltage) && (!show_temperature))
|
||||
{
|
||||
const char *datatype= "status";
|
||||
switch (statusmode)
|
||||
{
|
||||
case vehicle_bms_status_t::Both:
|
||||
break;
|
||||
case vehicle_bms_status_t::Voltage:
|
||||
datatype = "voltage";
|
||||
break;
|
||||
case vehicle_bms_status_t::Temperature:
|
||||
datatype = "temperature";
|
||||
break;
|
||||
}
|
||||
writer->printf("No BMS %s data available\n", datatype);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -580,61 +626,133 @@ void OvmsVehicle::BmsStatus(int verbosity, OvmsWriter* writer)
|
|||
case OvmsStatus::Alert: talert++; break;
|
||||
}
|
||||
}
|
||||
if (show_voltage)
|
||||
{
|
||||
writer->puts("Voltage:");
|
||||
writer->printf(" Average: %5.3fV [%5.3fV - %5.3fV]\n",
|
||||
StdMetrics.ms_v_bat_pack_vavg->AsFloat(),
|
||||
StdMetrics.ms_v_bat_pack_vmin->AsFloat(),
|
||||
StdMetrics.ms_v_bat_pack_vmax->AsFloat());
|
||||
writer->printf(" Deviation: SD %6.2fmV [max %.2fmV], %d warnings, %d alerts\n",
|
||||
StdMetrics.ms_v_bat_pack_vstddev->AsFloat()*1000,
|
||||
StdMetrics.ms_v_bat_pack_vstddev_max->AsFloat()*1000,
|
||||
vwarn, valert);
|
||||
}
|
||||
|
||||
writer->puts("Voltage:");
|
||||
writer->printf(" Average: %5.3fV [%5.3fV - %5.3fV]\n",
|
||||
StdMetrics.ms_v_bat_pack_vavg->AsFloat(),
|
||||
StdMetrics.ms_v_bat_pack_vmin->AsFloat(),
|
||||
StdMetrics.ms_v_bat_pack_vmax->AsFloat());
|
||||
writer->printf(" Deviation: SD %6.2fmV [max %.2fmV], %d warnings, %d alerts\n",
|
||||
StdMetrics.ms_v_bat_pack_vstddev->AsFloat()*1000,
|
||||
StdMetrics.ms_v_bat_pack_vstddev_max->AsFloat()*1000,
|
||||
vwarn, valert);
|
||||
|
||||
writer->puts("Temperature:");
|
||||
writer->printf(" Average: %5.1fC [%5.1fC - %5.1fC]\n",
|
||||
StdMetrics.ms_v_bat_pack_tavg->AsFloat(),
|
||||
StdMetrics.ms_v_bat_pack_tmin->AsFloat(),
|
||||
StdMetrics.ms_v_bat_pack_tmax->AsFloat());
|
||||
writer->printf(" Deviation: SD %6.2fC [max %.2fC], %d warnings, %d alerts\n",
|
||||
StdMetrics.ms_v_bat_pack_tstddev->AsFloat(),
|
||||
StdMetrics.ms_v_bat_pack_tstddev_max->AsFloat(),
|
||||
twarn, talert);
|
||||
if (show_temperature)
|
||||
{
|
||||
writer->puts("Temperature:");
|
||||
writer->printf(" Average: %5.1fC [%5.1fC - %5.1fC]\n",
|
||||
StdMetrics.ms_v_bat_pack_tavg->AsFloat(),
|
||||
StdMetrics.ms_v_bat_pack_tmin->AsFloat(),
|
||||
StdMetrics.ms_v_bat_pack_tmax->AsFloat());
|
||||
writer->printf(" Deviation: SD %6.2fC [max %.2fC], %d warnings, %d alerts\n",
|
||||
StdMetrics.ms_v_bat_pack_tstddev->AsFloat(),
|
||||
StdMetrics.ms_v_bat_pack_tstddev_max->AsFloat(),
|
||||
twarn, talert);
|
||||
}
|
||||
|
||||
writer->puts("Cells:");
|
||||
int kv = 0;
|
||||
int kt = 0;
|
||||
for (int module = 0; module < ((m_bms_readings_v+m_bms_readingspermodule_v-1)/m_bms_readingspermodule_v); module++)
|
||||
int module_count = 0;
|
||||
if (show_voltage)
|
||||
module_count = round_up_div(m_bms_readings_v,m_bms_readingspermodule_v);
|
||||
if (show_temperature)
|
||||
{
|
||||
int temp_module_count = round_up_div(m_bms_readings_t,m_bms_readingspermodule_t);
|
||||
if (temp_module_count > module_count)
|
||||
module_count = temp_module_count;
|
||||
}
|
||||
int max_cols_v = 0;
|
||||
if (show_voltage)
|
||||
max_cols_v = check_max_cols(m_bms_readingspermodule_v, show_temperature?4:5);
|
||||
int max_cols_t = 0;
|
||||
if (show_temperature)
|
||||
max_cols_t = check_max_cols(m_bms_readingspermodule_t, 5-max_cols_v);
|
||||
|
||||
for (int module = 0; module < module_count; ++module)
|
||||
{
|
||||
writer->printf(" +");
|
||||
for (c=0;c<m_bms_readingspermodule_v;c++) { writer->printf("-------"); }
|
||||
writer->printf("-+");
|
||||
for (c=0;c<m_bms_readingspermodule_t;c++) { writer->printf("-------"); }
|
||||
writer->puts("-+");
|
||||
writer->printf("%3d |",module+1);
|
||||
for (c=0; c<m_bms_readingspermodule_v; c++)
|
||||
if (show_voltage)
|
||||
{
|
||||
if (kv < m_bms_readings_v)
|
||||
writer->printf(" %5.3fV",m_bms_voltages[kv++]);
|
||||
else
|
||||
writer->printf(" ");
|
||||
for (c=0;c<max_cols_v;c++) { writer->printf("-------"); }
|
||||
writer->printf("-+");
|
||||
}
|
||||
writer->printf(" |");
|
||||
for (c=0; c<m_bms_readingspermodule_t; c++)
|
||||
|
||||
if (show_temperature) {
|
||||
for (c=0;c<max_cols_t;c++) { writer->printf("-------"); }
|
||||
writer->printf("-+");
|
||||
}
|
||||
writer->puts("");
|
||||
|
||||
int rows_v = 0, rows_t = 0;
|
||||
int reading_left_v = 0, reading_left_t = 0;
|
||||
if (show_voltage)
|
||||
{
|
||||
if (kt < m_bms_readings_t)
|
||||
writer->printf(" %5.1fC",m_bms_temperatures[kt++]);
|
||||
else
|
||||
writer->printf(" ");
|
||||
int items_left_v = m_bms_readings_v - kv;
|
||||
reading_left_v = std::min(items_left_v, m_bms_readingspermodule_v);
|
||||
rows_v = round_up_div(reading_left_v, max_cols_v);
|
||||
}
|
||||
if (show_temperature)
|
||||
{
|
||||
int items_left_t = m_bms_readings_t - kt;
|
||||
reading_left_t = std::min(items_left_t, m_bms_readingspermodule_t);
|
||||
rows_t = round_up_div(reading_left_t, max_cols_t);
|
||||
}
|
||||
int rows = std::max(rows_v,rows_t);
|
||||
for (int row = 0 ; row < rows; ++row)
|
||||
{
|
||||
if (row == 0)
|
||||
writer->printf("%3d |",module+1);
|
||||
else
|
||||
writer->printf(" |");
|
||||
if (show_voltage)
|
||||
{
|
||||
for (c=0; c<max_cols_v; c++)
|
||||
{
|
||||
if (kv < m_bms_readings_v && (reading_left_v > 0))
|
||||
{
|
||||
writer->printf(" %5.3fV",m_bms_voltages[kv]);
|
||||
--reading_left_v;
|
||||
++kv;
|
||||
}
|
||||
else
|
||||
writer->printf(" ");
|
||||
}
|
||||
writer->printf(" |");
|
||||
}
|
||||
if (show_temperature)
|
||||
{
|
||||
for (c=0; c<m_bms_readingspermodule_t; c++)
|
||||
{
|
||||
if (kt < m_bms_readings_t && (reading_left_t > 0))
|
||||
{
|
||||
writer->printf(" %5.1fC",m_bms_temperatures[kt]);
|
||||
--reading_left_t;
|
||||
++kt;
|
||||
}
|
||||
else
|
||||
writer->printf(" ");
|
||||
}
|
||||
writer->printf(" |");
|
||||
}
|
||||
writer->puts("");
|
||||
}
|
||||
writer->puts(" |");
|
||||
}
|
||||
|
||||
writer->printf(" +");
|
||||
for (c=0;c<m_bms_readingspermodule_v;c++) { writer->printf("-------"); }
|
||||
writer->printf("-+");
|
||||
for (c=0;c<m_bms_readingspermodule_t;c++) { writer->printf("-------"); }
|
||||
writer->puts("-+");
|
||||
if (show_voltage)
|
||||
{
|
||||
for (c=0;c<max_cols_v;c++) { writer->printf("-------"); }
|
||||
writer->printf("-+");
|
||||
}
|
||||
if (show_temperature)
|
||||
{
|
||||
for (c=0;c<max_cols_t;c++) { writer->printf("-------"); }
|
||||
writer->printf("-+");
|
||||
}
|
||||
writer->puts("");
|
||||
}
|
||||
|
||||
bool OvmsVehicle::FormatBmsAlerts(int verbosity, OvmsWriter* writer, bool show_warnings)
|
||||
|
|
|
@ -435,7 +435,14 @@ void OvmsVehicleFactory::bms_status(int verbosity, OvmsWriter* writer, OvmsComma
|
|||
{
|
||||
if (MyVehicleFactory.m_currentvehicle != NULL)
|
||||
{
|
||||
MyVehicleFactory.m_currentvehicle->BmsStatus(verbosity, writer);
|
||||
OvmsVehicle::vehicle_bms_status_t statusmode = OvmsVehicle::vehicle_bms_status_t::Both;
|
||||
const char* smode = cmd->GetName();
|
||||
if (strcmp(smode,"volt")==0)
|
||||
statusmode = OvmsVehicle::vehicle_bms_status_t::Voltage;
|
||||
else if (strcmp(smode,"temp")==0)
|
||||
statusmode = OvmsVehicle::vehicle_bms_status_t::Temperature;
|
||||
|
||||
MyVehicleFactory.m_currentvehicle->BmsStatus(verbosity, writer, statusmode);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -87,8 +87,8 @@ OvmsVehicleRenaultZoePh2OBD::OvmsVehicleRenaultZoePh2OBD() {
|
|||
mt_inv_hv_current = MyMetrics.InitFloat("zph2.i.current", SM_STALE_MID, 0, Amps);
|
||||
mt_mot_temp_stator1 = MyMetrics.InitFloat("zph2.m.temp.stator1", SM_STALE_MID, 0, Celcius);
|
||||
mt_mot_temp_stator2 = MyMetrics.InitFloat("zph2.m.temp.stator2", SM_STALE_MID, 0, Celcius);
|
||||
mt_hvac_compressor_speed = MyMetrics.InitFloat("zph2.h.compressor.speed", SM_STALE_MID, 0, rpm);
|
||||
mt_hvac_compressor_pressure = MyMetrics.InitFloat("zph2.h.compressor.pressure", SM_STALE_MID, 0, Bar);
|
||||
mt_hvac_compressor_speed = MyMetrics.InitFloat("zph2.h.compressor.speed", SM_STALE_MID, 0);
|
||||
mt_hvac_compressor_pressure = MyMetrics.InitFloat("zph2.h.compressor.pressure", SM_STALE_MID, 0);
|
||||
mt_hvac_compressor_power = MyMetrics.InitFloat("zph2.h.compressor.power", SM_STALE_MID, 0, Watts);
|
||||
mt_hvac_compressor_mode = MyMetrics.InitString("zph2.h.compressor.mode", SM_STALE_MID, 0, Other);
|
||||
|
||||
|
|
Loading…
Reference in New Issue