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()
|
void OvmsLocations::UpdateParkPosition()
|
||||||
{
|
{
|
||||||
OvmsRecMutexLock lock(&m_park_lock);
|
OvmsRecMutexLock lock(&m_park_lock);
|
||||||
|
|
||||||
bool caron = StdMetrics.ms_v_env_on->AsBool();
|
bool caron = StdMetrics.ms_v_env_on->AsBool();
|
||||||
if (caron)
|
if (caron)
|
||||||
{
|
{
|
||||||
|
|
|
@ -288,7 +288,7 @@ void ota_flash_http(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int arg
|
||||||
|
|
||||||
url = MyConfig.GetParamValue("ota","server");
|
url = MyConfig.GetParamValue("ota","server");
|
||||||
if (url.empty())
|
if (url.empty())
|
||||||
url = "ovms-ota.bit-cloud.de";
|
url = "api.openvehicles.com/firmware/ota";
|
||||||
|
|
||||||
url.append("/");
|
url.append("/");
|
||||||
url.append(GetOVMSProduct());
|
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 tag = MyConfig.GetParamValue("ota","tag");
|
||||||
std::string url = MyConfig.GetParamValue("ota","server");
|
std::string url = MyConfig.GetParamValue("ota","server");
|
||||||
if (url.empty())
|
if (url.empty())
|
||||||
url = "ovms-ota.bit-cloud.de";
|
url = "api.openvehicles.com/firmware/ota";
|
||||||
url.append("/");
|
url.append("/");
|
||||||
url.append(GetOVMSProduct());
|
url.append(GetOVMSProduct());
|
||||||
url.append("/");
|
url.append("/");
|
||||||
|
@ -1029,7 +1029,7 @@ bool OvmsOTA::AutoFlash(bool force)
|
||||||
std::string tag = MyConfig.GetParamValue("ota","tag");
|
std::string tag = MyConfig.GetParamValue("ota","tag");
|
||||||
std::string url = MyConfig.GetParamValue("ota","server");
|
std::string url = MyConfig.GetParamValue("ota","server");
|
||||||
if (url.empty())
|
if (url.empty())
|
||||||
url = "ovms-ota.bit-cloud.de";
|
url = "api.openvehicles.com/firmware/ota";
|
||||||
|
|
||||||
url.append("/");
|
url.append("/");
|
||||||
url.append(GetOVMSProduct());
|
url.append(GetOVMSProduct());
|
||||||
|
|
|
@ -282,14 +282,133 @@ void OvmsServerV3::TransmitModifiedMetrics()
|
||||||
if (!m_mgconn)
|
if (!m_mgconn)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
OvmsMetric* metric = MyMetrics.m_first;
|
if (StandardMetrics.ms_v_bat_soc->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||||
while (metric != NULL)
|
|
||||||
{
|
{
|
||||||
if (metric->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
TransmitMetric(StandardMetrics.ms_v_bat_soc);
|
||||||
{
|
}
|
||||||
TransmitMetric(metric);
|
if (StandardMetrics.ms_v_charge_voltage->IsModifiedAndClear(MyOvmsServerV3Modifier))
|
||||||
}
|
{
|
||||||
metric = metric->m_next;
|
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 (!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);
|
OvmsMutexLock mg(&m_mgconn_mutex);
|
||||||
if (!m_mgconn)
|
if (!m_mgconn)
|
||||||
return;
|
return;
|
||||||
metric->ClearModified(MyOvmsServerV3Modifier);
|
//metric->ClearModified(MyOvmsServerV3Modifier);
|
||||||
TransmitMetric(metric);
|
|
||||||
|
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)
|
void OvmsServerV3::ConfigChanged(OvmsConfigParam* param)
|
||||||
{
|
{
|
||||||
|
ESP_LOGD(TAG, "--- ConfigChanged ---");
|
||||||
m_streaming = MyConfig.GetParamValueInt("vehicle", "stream", 0);
|
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);
|
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);
|
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);
|
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);
|
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);
|
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);
|
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)
|
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)))
|
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();
|
TransmitModifiedMetrics();
|
||||||
m_lasttx = m_lasttx_stream = now;
|
m_lasttx = m_lasttx_stream = now;
|
||||||
}
|
}
|
||||||
else if (m_streaming && caron && m_peers && now > m_lasttx_stream+m_streaming)
|
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;
|
m_lasttx_stream = now;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,5 +11,5 @@ ifdef CONFIG_MG_ENABLE_SSL
|
||||||
COMPONENT_SRCDIRS := src
|
COMPONENT_SRCDIRS := src
|
||||||
COMPONENT_ADD_INCLUDEDIRS := src
|
COMPONENT_ADD_INCLUDEDIRS := src
|
||||||
COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive
|
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
|
endif
|
||||||
|
|
|
@ -164,10 +164,6 @@ void OvmsTLS::Reload()
|
||||||
extern const unsigned char isrg_x1_end[] asm("_binary_isrg_x1_crt_end");
|
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);
|
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)
|
// Add trusted certs on disk (/store/trustedca)
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *dp;
|
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
|
issues. Voltage and temperature sensors can lose their calibration or
|
||||||
become defective as well.
|
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",
|
c.input_text("Server", "server", server.c_str(), "Enter host name or IP address",
|
||||||
"<p>Public OVMS V2 servers:</p>"
|
"<p>Public OVMS V2 servers:</p>"
|
||||||
"<ul>"
|
"<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>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>"
|
"<li><code>ovms.dexters-web.de</code> <a href=\"https://dexters-web.de/?action=NewAccount\" target=\"_blank\">Registration</a></li>"
|
||||||
"</ul>");
|
"</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>");
|
"<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(
|
c.print(
|
||||||
"<datalist id=\"server-list\">"
|
"<datalist id=\"server-list\">"
|
||||||
"<option value=\"https://ovms-ota.bit-cloud.de\">"
|
|
||||||
"<option value=\"https://api.openvehicles.com/firmware/ota\">"
|
"<option value=\"https://api.openvehicles.com/firmware/ota\">"
|
||||||
"<option value=\"https://ovms.dexters-web.de/firmware/ota\">"
|
"<option value=\"https://ovms.dexters-web.de/firmware/ota\">"
|
||||||
"</datalist>"
|
"</datalist>"
|
||||||
|
@ -2661,7 +2659,7 @@ void OvmsWebServer::HandleCfgFirmware(PageEntry_t& p, PageContext_t& c)
|
||||||
"</datalist>"
|
"</datalist>"
|
||||||
);
|
);
|
||||||
c.input_text("Update server", "server", server.c_str(), "Specify or select from list (clear to see all options)",
|
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\"");
|
"list=\"server-list\"");
|
||||||
c.input_text("Version tag", "tag", tag.c_str(), "Specify or select from list (clear to see all options)",
|
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>",
|
"<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())
|
if (server.empty())
|
||||||
server = MyConfig.GetParamValue("ota", "server");
|
server = MyConfig.GetParamValue("ota", "server");
|
||||||
if (server.empty())
|
if (server.empty())
|
||||||
server = "https://ovms-ota.bit-cloud.de";
|
server = "https://api.openvehicles.com/firmware/ota";
|
||||||
|
|
||||||
MyOTA.GetStatus(info, true);
|
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.panel_start("primary", "Step 3/5: Update Firmware");
|
||||||
c.form_start(p.uri);
|
c.form_start(p.uri);
|
||||||
c.input_radio_start("Update server", "server");
|
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)",
|
c.input_radio_option("server", "Asia-Pacific (openvehicles.com)",
|
||||||
"https://api.openvehicles.com/firmware/ota" , server == "https://api.openvehicles.com/firmware/ota");
|
"https://api.openvehicles.com/firmware/ota" , server == "https://api.openvehicles.com/firmware/ota");
|
||||||
c.input_radio_option("server", "Europe (dexters-web.de)",
|
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:
|
// default data server = ota server:
|
||||||
if (server.empty()) {
|
if (server.empty()) {
|
||||||
server = MyConfig.GetParamValue("ota", "server");
|
server = MyConfig.GetParamValue("ota", "server");
|
||||||
if (startsWith(server, "ovms-ota.bit-cloud.de"))
|
if (startsWith(server, "ovms.dexters-web.de"))
|
||||||
server = "ovms-server.bit-cloud.de";
|
|
||||||
else
|
|
||||||
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_start("OVMS data server", "server");
|
||||||
c.input_radio_option("server", "No server connection", "" , 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",
|
c.input_radio_option("server",
|
||||||
"Asia-Pacific (openvehicles.com) <a href=\"https://www.openvehicles.com/user/register\" target=\"_blank\">Registration</a>",
|
"Asia-Pacific (openvehicles.com) <a href=\"https://www.openvehicles.com/user/register\" target=\"_blank\">Registration</a>",
|
||||||
"api.openvehicles.com" , server == "api.openvehicles.com");
|
"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);
|
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("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("reset","Reset BMS statistics",bms_reset);
|
||||||
cmd_bms->RegisterCommand("alerts","Show BMS alerts",bms_alerts);
|
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_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_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:
|
// A note on "PID" and their sizes here:
|
||||||
// By "PID" for the service types we mean the part of the request parameters
|
// 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.
|
// after the service type that is reflected in _every_ valid response to the request.
|
||||||
|
@ -479,6 +481,12 @@ class OvmsVehicle : public InternalRamAllocated
|
||||||
Range = 3,
|
Range = 3,
|
||||||
Performance = 4
|
Performance = 4
|
||||||
} vehicle_mode_t;
|
} vehicle_mode_t;
|
||||||
|
enum class vehicle_bms_status_t
|
||||||
|
{
|
||||||
|
Both,
|
||||||
|
Voltage,
|
||||||
|
Temperature
|
||||||
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
vehicle_mode_t VehicleModeKey(const std::string code);
|
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 BmsGetCellDefaultThresholdsVoltage(float* warn, float* alert, float* maxgrad=NULL, float* maxsddev=NULL);
|
||||||
void BmsGetCellDefaultThresholdsTemperature(float* warn, float* alert);
|
void BmsGetCellDefaultThresholdsTemperature(float* warn, float* alert);
|
||||||
void BmsResetCellStats();
|
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);
|
virtual bool FormatBmsAlerts(int verbosity, OvmsWriter* writer, bool show_warnings);
|
||||||
bool BmsCheckChangeCellArrangementVoltage(int readings, int readingspermodule = 0);
|
bool BmsCheckChangeCellArrangementVoltage(int readings, int readingspermodule = 0);
|
||||||
bool BmsCheckChangeCellArrangementTemperature(int readings, int readingspermodule = 0);
|
bool BmsCheckChangeCellArrangementTemperature(int readings, int readingspermodule = 0);
|
||||||
|
|
|
@ -550,13 +550,59 @@ void OvmsVehicle::BmsResetCellStats()
|
||||||
BmsResetCellTemperatures(false);
|
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;
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,61 +626,133 @@ void OvmsVehicle::BmsStatus(int verbosity, OvmsWriter* writer)
|
||||||
case OvmsStatus::Alert: talert++; break;
|
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:");
|
if (show_temperature)
|
||||||
writer->printf(" Average: %5.3fV [%5.3fV - %5.3fV]\n",
|
{
|
||||||
StdMetrics.ms_v_bat_pack_vavg->AsFloat(),
|
writer->puts("Temperature:");
|
||||||
StdMetrics.ms_v_bat_pack_vmin->AsFloat(),
|
writer->printf(" Average: %5.1fC [%5.1fC - %5.1fC]\n",
|
||||||
StdMetrics.ms_v_bat_pack_vmax->AsFloat());
|
StdMetrics.ms_v_bat_pack_tavg->AsFloat(),
|
||||||
writer->printf(" Deviation: SD %6.2fmV [max %.2fmV], %d warnings, %d alerts\n",
|
StdMetrics.ms_v_bat_pack_tmin->AsFloat(),
|
||||||
StdMetrics.ms_v_bat_pack_vstddev->AsFloat()*1000,
|
StdMetrics.ms_v_bat_pack_tmax->AsFloat());
|
||||||
StdMetrics.ms_v_bat_pack_vstddev_max->AsFloat()*1000,
|
writer->printf(" Deviation: SD %6.2fC [max %.2fC], %d warnings, %d alerts\n",
|
||||||
vwarn, valert);
|
StdMetrics.ms_v_bat_pack_tstddev->AsFloat(),
|
||||||
|
StdMetrics.ms_v_bat_pack_tstddev_max->AsFloat(),
|
||||||
writer->puts("Temperature:");
|
twarn, talert);
|
||||||
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:");
|
writer->puts("Cells:");
|
||||||
int kv = 0;
|
int kv = 0;
|
||||||
int kt = 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(" +");
|
writer->printf(" +");
|
||||||
for (c=0;c<m_bms_readingspermodule_v;c++) { writer->printf("-------"); }
|
if (show_voltage)
|
||||||
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 (kv < m_bms_readings_v)
|
for (c=0;c<max_cols_v;c++) { writer->printf("-------"); }
|
||||||
writer->printf(" %5.3fV",m_bms_voltages[kv++]);
|
writer->printf("-+");
|
||||||
else
|
|
||||||
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)
|
int items_left_v = m_bms_readings_v - kv;
|
||||||
writer->printf(" %5.1fC",m_bms_temperatures[kt++]);
|
reading_left_v = std::min(items_left_v, m_bms_readingspermodule_v);
|
||||||
else
|
rows_v = round_up_div(reading_left_v, max_cols_v);
|
||||||
writer->printf(" ");
|
}
|
||||||
|
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(" +");
|
writer->printf(" +");
|
||||||
for (c=0;c<m_bms_readingspermodule_v;c++) { writer->printf("-------"); }
|
if (show_voltage)
|
||||||
writer->printf("-+");
|
{
|
||||||
for (c=0;c<m_bms_readingspermodule_t;c++) { writer->printf("-------"); }
|
for (c=0;c<max_cols_v;c++) { writer->printf("-------"); }
|
||||||
writer->puts("-+");
|
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)
|
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)
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -87,8 +87,8 @@ OvmsVehicleRenaultZoePh2OBD::OvmsVehicleRenaultZoePh2OBD() {
|
||||||
mt_inv_hv_current = MyMetrics.InitFloat("zph2.i.current", SM_STALE_MID, 0, Amps);
|
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_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_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_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, Bar);
|
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_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);
|
mt_hvac_compressor_mode = MyMetrics.InitString("zph2.h.compressor.mode", SM_STALE_MID, 0, Other);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue