Improve efficiency of MQTT streaming behavior

This commit is contained in:
Carsten Schmiemann 2022-06-29 01:54:20 +02:00
parent b36c0c4621
commit 798acb1839
1 changed files with 167 additions and 9 deletions

View File

@ -282,15 +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);
ESP_LOGD(TAG, "metric: %s", (char*)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);
}
}
@ -959,7 +1077,47 @@ void OvmsServerV3::Ticker1(std::string event, void* data)
}
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;
}
}