From 2571e3c9f9b0abcb9033c183f2c3eee93d3a879a Mon Sep 17 00:00:00 2001 From: rejoe2 Date: Sun, 31 Dec 2023 14:24:23 +0100 Subject: [PATCH] MI - add grid profile request Note: this doesn't deliver entire grid profile infos... --- src/hm/Communication.h | 47 ++++++++++++++++++++++++++++-------------- src/hm/hmInverter.h | 2 ++ 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/hm/Communication.h b/src/hm/Communication.h index 9f96533d..4aa9ddcc 100644 --- a/src/hm/Communication.h +++ b/src/hm/Communication.h @@ -353,6 +353,12 @@ class Communication : public CommQueue<> { miDataDecode(p, q); } else if (p->packet[0] == (0x0f + ALL_FRAMES)) miHwDecode(p, q); + + else if (p->packet[0] == ( 0x10 + ALL_FRAMES)) { + // MI response from get Grid Profile information request + miGPFDecode(p, q); + } + else if ((p->packet[0] == 0x88) || (p->packet[0] == 0x92)) { record_t<> *rec = q->iv->getRecordStruct(RealTimeRunData_Debug); // choose the record structure rec->ts = q->ts; @@ -650,22 +656,31 @@ class Communication : public CommQueue<> { (mCbPayload)(InverterDevInform_Simple, q->iv); q->iv->miMultiParts++; } - //if(q->iv->miMultiParts > 5) - //closeRequest(q->iv, true); - //else - //if(q->iv->miMultiParts < 6) - // mState = States::WAIT; - - /*if (mPayload[iv->id].multi_parts > 5) { - iv->setQueuedCmdFinished(); - mPayload[iv->id].complete = true; - mPayload[iv->id].rxTmo = true; - mPayload[iv->id].requested= false; - iv->radioStatistics.rxSuccess++; - } - if (mHighPrioIv == NULL) - mHighPrioIv = iv; - */ + } + + inline void miGPFDecode(packet_t *p, const queue_s *q) { + record_t<> *rec = q->iv->getRecordStruct(InverterDevInform_Simple); // choose the record structure + rec->ts = q->ts; + + q->iv->setValue(2, rec, (uint32_t) (((p->packet[10] << 8) | p->packet[11]))); //FLD_GRID_PROFILE_CODE + q->iv->setValue(3, rec, (uint32_t) (((p->packet[12] << 8) | p->packet[13]))); //FLD_GRID_PROFILE_VERSION + +/* according to xlsx (different start byte -1!) + Polling Grid-connected Protection Parameter File Command - Receipt + byte[10] ST1 indicates the status of the grid-connected protection file. ST1=1 indicates the default grid-connected protection file, ST=2 indicates that the grid-connected protection file is configured and normal, ST=3 indicates that the grid-connected protection file cannot be recognized, ST=4 indicates that the grid-connected protection file is damaged + byte[11] byte[12] CountryStd variable indicates the national standard code of the grid-connected protection file + byte[13] byte[14] Version indicates the version of the grid-connected protection file + byte[15] byte[16] +*/ + /*if(mSerialDebug) { + DPRINT(DBG_INFO,F("ST1 ")); + DBGPRINTLN(String(p->packet[9])); + DPRINT(DBG_INFO,F("CountryStd ")); + DBGPRINTLN(String((p->packet[10] << 8) + p->packet[11])); + DPRINT(DBG_INFO,F("Version ")); + DBGPRINTLN(String((p->packet[12] << 8) + p->packet[13])); + }*/ + q->iv->miMultiParts = 7; // indicate we are ready } inline void miDataDecode(packet_t *p, const queue_s *q) { diff --git a/src/hm/hmInverter.h b/src/hm/hmInverter.h index 776b9c6f..757562bb 100644 --- a/src/hm/hmInverter.h +++ b/src/hm/hmInverter.h @@ -215,6 +215,8 @@ class Inverter { record_t<> *rec = getRecordStruct(InverterDevInform_Simple); if (getChannelFieldValue(CH0, FLD_PART_NUM, rec) == 0) cb(0x0f, false); // hard- and firmware version for missing HW part nr, delivered by frame 1 + else if((getChannelFieldValue(CH0, FLD_GRID_PROFILE_CODE, rec) == 0) && generalConfig->readGrid) // read grid profile + cb(0x10, false); // legacy GPF command else cb(((type == INV_TYPE_4CH) ? MI_REQ_4CH : MI_REQ_CH1), false); }