Feature: Show RSSI of last received packet in radio stats
The value is also published via MQTT
This commit is contained in:
parent
0c2b6f1a61
commit
edfe06e31e
@ -169,7 +169,7 @@ void HoymilesRadio_CMT::loop()
|
||||
dumpBuf(f.fragment, f.len, false);
|
||||
Hoymiles.getMessageOutput()->printf("| %d dBm\r\n", f.rssi);
|
||||
|
||||
inv->addRxFragment(f.fragment, f.len);
|
||||
inv->addRxFragment(f.fragment, f.len, f.rssi);
|
||||
} else {
|
||||
Hoymiles.getMessageOutput()->println("Inverter Not found!");
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ void HoymilesRadio_NRF::loop()
|
||||
dumpBuf(f.fragment, f.len, false);
|
||||
Hoymiles.getMessageOutput()->printf("| %d dBm\r\n", f.rssi);
|
||||
|
||||
inv->addRxFragment(f.fragment, f.len);
|
||||
inv->addRxFragment(f.fragment, f.len, f.rssi);
|
||||
} else {
|
||||
Hoymiles.getMessageOutput()->println("Inverter Not found!");
|
||||
}
|
||||
|
||||
@ -137,6 +137,11 @@ bool InverterAbstract::getClearEventlogOnMidnight() const
|
||||
return _clearEventlogOnMidnight;
|
||||
}
|
||||
|
||||
int8_t InverterAbstract::getLastRssi() const
|
||||
{
|
||||
return _lastRssi;
|
||||
}
|
||||
|
||||
bool InverterAbstract::sendChangeChannelRequest()
|
||||
{
|
||||
return false;
|
||||
@ -185,8 +190,10 @@ void InverterAbstract::clearRxFragmentBuffer()
|
||||
_rxFragmentRetransmitCnt = 0;
|
||||
}
|
||||
|
||||
void InverterAbstract::addRxFragment(const uint8_t fragment[], const uint8_t len)
|
||||
void InverterAbstract::addRxFragment(const uint8_t fragment[], const uint8_t len, const int8_t rssi)
|
||||
{
|
||||
_lastRssi = rssi;
|
||||
|
||||
if (len < 11) {
|
||||
Hoymiles.getMessageOutput()->printf("FATAL: (%s, %d) fragment too short\r\n", __FILE__, __LINE__);
|
||||
return;
|
||||
|
||||
@ -61,8 +61,10 @@ public:
|
||||
void setClearEventlogOnMidnight(const bool enabled);
|
||||
bool getClearEventlogOnMidnight() const;
|
||||
|
||||
int8_t getLastRssi() const;
|
||||
|
||||
void clearRxFragmentBuffer();
|
||||
void addRxFragment(const uint8_t fragment[], const uint8_t len);
|
||||
void addRxFragment(const uint8_t fragment[], const uint8_t len, const int8_t rssi);
|
||||
uint8_t verifyAllFragments(CommandAbstract& cmd);
|
||||
|
||||
void performDailyTask();
|
||||
@ -131,6 +133,8 @@ private:
|
||||
bool _zeroYieldDayOnMidnight = false;
|
||||
bool _clearEventlogOnMidnight = false;
|
||||
|
||||
int8_t _lastRssi = 0;
|
||||
|
||||
std::unique_ptr<AlarmLogParser> _alarmLogParser;
|
||||
std::unique_ptr<DevInfoParser> _devInfoParser;
|
||||
std::unique_ptr<GridProfileParser> _gridProfileParser;
|
||||
|
||||
@ -97,6 +97,7 @@ void MqttHandleHassClass::publishConfig()
|
||||
publishInverterSensor(inv, "RX Fail Receive Partial", "radio/rx_fail_partial", "", "", DEVICE_CLS_NONE, STATE_CLS_NONE, CATEGORY_DIAGNOSTIC);
|
||||
publishInverterSensor(inv, "RX Fail Receive Corrupt", "radio/rx_fail_corrupt", "", "", DEVICE_CLS_NONE, STATE_CLS_NONE, CATEGORY_DIAGNOSTIC);
|
||||
publishInverterSensor(inv, "TX Re-Request Fragment", "radio/tx_re_request", "", "", DEVICE_CLS_NONE, STATE_CLS_NONE, CATEGORY_DIAGNOSTIC);
|
||||
publishInverterSensor(inv, "RSSI", "radio/rssi", "dBm", "", DEVICE_CLS_SIGNAL_STRENGTH, STATE_CLS_NONE, CATEGORY_DIAGNOSTIC);
|
||||
|
||||
// Loop all channels
|
||||
for (auto& t : inv->Statistics()->getChannelTypes()) {
|
||||
|
||||
@ -50,6 +50,7 @@ void MqttHandleInverterClass::loop()
|
||||
MqttSettings.publish(subtopic + "/radio/rx_fail_nothing", String(inv->RadioStats.RxFailNoAnswer));
|
||||
MqttSettings.publish(subtopic + "/radio/rx_fail_partial", String(inv->RadioStats.RxFailPartialAnswer));
|
||||
MqttSettings.publish(subtopic + "/radio/rx_fail_corrupt", String(inv->RadioStats.RxFailCorruptData));
|
||||
MqttSettings.publish(subtopic + "/radio/rssi", String(inv->getLastRssi()));
|
||||
|
||||
if (inv->DevInfo()->getLastUpdate() > 0) {
|
||||
// Bootloader Version
|
||||
|
||||
@ -153,6 +153,7 @@ void WebApiWsLiveClass::generateInverterCommonJsonResponse(JsonObject& root, std
|
||||
root["radio_stats"]["rx_fail_nothing"] = inv->RadioStats.RxFailNoAnswer;
|
||||
root["radio_stats"]["rx_fail_partial"] = inv->RadioStats.RxFailPartialAnswer;
|
||||
root["radio_stats"]["rx_fail_corrupt"] = inv->RadioStats.RxFailCorruptData;
|
||||
root["radio_stats"]["rssi"] = inv->getLastRssi();
|
||||
}
|
||||
|
||||
void WebApiWsLiveClass::generateInverterChannelJsonResponse(JsonObject& root, std::shared_ptr<InverterAbstract> inv)
|
||||
|
||||
@ -150,7 +150,10 @@
|
||||
"RxFailCorrupt": "Empfang Fehler: Beschädigt empfangen",
|
||||
"TxReRequest": "Gesendete Fragment Wiederanforderungen",
|
||||
"StatsReset": "Statistiken zurücksetzen",
|
||||
"StatsResetting": "Zurücksetzen..."
|
||||
"StatsResetting": "Zurücksetzen...",
|
||||
"Rssi": "RSSI des zuletzt empfangenen Paketes",
|
||||
"RssiHint": "HM-Wechselrichter unterstützen nur RSSI-Werte < -64 dBm und > -64 dBm. In diesem Fall wird -80 dBm und -30 dBm angezeigt.",
|
||||
"dBm": "{dbm} dBm"
|
||||
},
|
||||
"eventlog": {
|
||||
"Start": "Beginn",
|
||||
|
||||
@ -150,7 +150,10 @@
|
||||
"RxFailCorrupt": "RX Fail: Receive Corrupt",
|
||||
"TxReRequest": "TX Re-Request Fragment",
|
||||
"StatsReset": "Reset Statistics",
|
||||
"StatsResetting": "Resetting..."
|
||||
"StatsResetting": "Resetting...",
|
||||
"Rssi": "RSSI of last received packet",
|
||||
"RssiHint": "HM inverters only support RSSI values < -64 dBm and > -64 dBm. In this case, -80 dbm and -30 dbm is shown.",
|
||||
"dBm": "{dbm} dBm"
|
||||
},
|
||||
"eventlog": {
|
||||
"Start": "Start",
|
||||
|
||||
@ -150,7 +150,10 @@
|
||||
"RxFailCorrupt": "RX Fail: Receive Corrupt",
|
||||
"TxReRequest": "TX Re-Request Fragment",
|
||||
"StatsReset": "Reset Statistics",
|
||||
"StatsResetting": "Resetting..."
|
||||
"StatsResetting": "Resetting...",
|
||||
"Rssi": "RSSI of last received packet",
|
||||
"RssiHint": "HM inverters only support RSSI values < -64 dBm and > -64 dBm. In this case, -80 dbm and -30 dbm is shown.",
|
||||
"dBm": "{dbm} dBm"
|
||||
},
|
||||
"eventlog": {
|
||||
"Start": "Départ",
|
||||
|
||||
@ -28,6 +28,7 @@ export interface RadioStatistics {
|
||||
rx_fail_nothing: number;
|
||||
rx_fail_partial: number;
|
||||
rx_fail_corrupt: number;
|
||||
rssi: number;
|
||||
}
|
||||
|
||||
export interface Inverter {
|
||||
|
||||
@ -291,6 +291,16 @@
|
||||
<td>{{ $n(inverter.radio_stats.tx_re_request) }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
{{ $t('home.Rssi') }}
|
||||
<BIconInfoCircle v-tooltip :title="$t('home.RssiHint')" />
|
||||
</td>
|
||||
<td>
|
||||
{{ $t('home.dBm', { dbm: $n(inverter.radio_stats.rssi) }) }}
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<button
|
||||
@ -499,6 +509,7 @@ import {
|
||||
BIconCheckCircleFill,
|
||||
BIconCpu,
|
||||
BIconExclamationCircleFill,
|
||||
BIconInfoCircle,
|
||||
BIconJournalText,
|
||||
BIconOutlet,
|
||||
BIconPower,
|
||||
@ -525,6 +536,7 @@ export default defineComponent({
|
||||
BIconCheckCircleFill,
|
||||
BIconCpu,
|
||||
BIconExclamationCircleFill,
|
||||
BIconInfoCircle,
|
||||
BIconJournalText,
|
||||
BIconOutlet,
|
||||
BIconPower,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user