Browse Source

Many changes and fix

pull/313/head
DanielR92 3 years ago
parent
commit
89bd5c0ffb
  1. 5
      tools/esp8266/app.cpp
  2. 24
      tools/esp8266/hmDefines.h
  3. 2
      tools/esp8266/hmInverter.h
  4. 30
      tools/esp8266/hmRadio.h
  5. 10
      tools/esp8266/html/serial.html
  6. 11
      tools/esp8266/webApi.cpp

5
tools/esp8266/app.cpp

@ -566,6 +566,11 @@ void app::cbMqtt(char* topic, byte* payload, unsigned int length) {
// uint16_t power_factor = std::stoi(strtok(NULL, "/"));
DPRINTLN(DBG_INFO, F("Set Power Factor not implemented for inverter ") + String(iv->id) );
break;
case CleanState_LockAndAlarm: // Clean lock & alarm (+ reboot)
iv->devControlCmd = CleanState_LockAndAlarm;
DPRINTLN(DBG_INFO, F("Clean lock & alarm (+ reboot) for inverter ") + String(iv->id) );
iv->devControlRequest = true;
break;
default:
DPRINTLN(DBG_INFO, "Not implemented");
break;

24
tools/esp8266/hmDefines.h

@ -26,9 +26,14 @@ enum {FLD_UDC = 0, FLD_IDC, FLD_PDC, FLD_YD, FLD_YW, FLD_YT,
FLD_UAC, FLD_IAC, FLD_PAC, FLD_F, FLD_T, FLD_PFC, FLD_EFF,
FLD_IRR, FLD_PRA,FLD_ALARM_MES_ID,FLD_FW_VERSION,FLD_FW_BUILD_YEAR,
FLD_FW_BUILD_MONTH_DAY,FLD_HW_ID,FLD_ACT_PWR_LIMIT,FLD_LAST_ALARM_CODE};
enum {FLD_UDC = 0, FLD_IDC, FLD_PDC, FLD_YD, FLD_YW, FLD_YT,
FLD_UAC, FLD_IAC, FLD_PAC, FLD_F, FLD_T, FLD_PF, FLD_EFF,
FLD_IRR, FLD_Q,FLD_ALARM_MES_CNT,FLD_FW_VERSION,FLD_FW_BUILD_YEAR,
FLD_FW_BUILD_MONTH_DAY,FLD_HW_ID,FLD_ACT_PWR_LIMIT,FLD_LAST_ALARM_CODE};
const char* const fields[] = {"U_DC", "I_DC", "P_DC", "YieldDay", "YieldWeek", "YieldTotal",
"U_AC", "I_AC", "P_AC", "Freq", "Temp", "PFC", "Efficiency", "Irradiation","P_ACr",
"U_AC", "I_AC", "P_AC", "F_AC", "Temp", "PF_AC", "Efficiency", "Irradiation","Q_AC",
"ALARM_MES_ID","FWVersion","FWBuildYear","FWBuildMonthDay","HWPartId","PowerLimit","LastAlarmCode"};
const char* const notAvail = "n/a";
@ -54,7 +59,7 @@ const byteAssign_fieldDeviceClass deviceFieldAssignment[] = {
{FLD_PAC, DEVICE_CLS_PWR, STATE_CLS_MEASUREMENT},
{FLD_F, DEVICE_CLS_FREQ, STATE_CLS_NONE},
{FLD_T, DEVICE_CLS_TEMP, STATE_CLS_MEASUREMENT},
{FLD_PFC, DEVICE_CLS_NONE, STATE_CLS_NONE},
{FLD_PF, DEVICE_CLS_NONE, STATE_CLS_NONE},
{FLD_EFF, DEVICE_CLS_NONE, STATE_CLS_NONE},
{FLD_IRR, DEVICE_CLS_NONE, STATE_CLS_NONE}
};
@ -123,8 +128,9 @@ const byteAssign_t hm1chAssignment[] = {
{ FLD_UAC, UNIT_V, CH0, 14, 2, 10 },
{ FLD_IAC, UNIT_A, CH0, 22, 2, 100 },
{ FLD_PAC, UNIT_W, CH0, 18, 2, 10 },
{ FLD_PRA, UNIT_VA, CH0, 20, 2, 10 },
{ FLD_Q, UNIT_VA, CH0, 20, 2, 10 },
{ FLD_F, UNIT_HZ, CH0, 16, 2, 100 },
{ FLD_PF, UNIT_NONE,CH0, 24, 2, 1000 },
{ FLD_PFC, UNIT_PCT, CH0, 24, 2, 10 },
{ FLD_T, UNIT_C, CH0, 26, 2, 10 },
{ FLD_ALARM_MES_ID, UNIT_NONE, CH0, 28, 2, 1 },
@ -157,11 +163,11 @@ const byteAssign_t hm2chAssignment[] = {
{ FLD_UAC, UNIT_V, CH0, 26, 2, 10 },
{ FLD_IAC, UNIT_A, CH0, 34, 2, 100 },
{ FLD_PAC, UNIT_W, CH0, 30, 2, 10 },
{ FLD_PRA, UNIT_VA, CH0, 32, 2, 10 },
{ FLD_Q, UNIT_VA, CH0, 32, 2, 10 },
{ FLD_F, UNIT_HZ, CH0, 28, 2, 100 },
{ FLD_PFC, UNIT_PCT, CH0, 36, 2, 10 },
{ FLD_PF, UNIT_NONE,CH0, 36, 2, 1000 },
{ FLD_T, UNIT_C, CH0, 38, 2, 10 },
{ FLD_ALARM_MES_ID, UNIT_NONE, CH0, 40, 2, 1 }, // -> ALARM_MES_CNT???
{ FLD_ALARM_MES_CNT, UNIT_NONE, CH0, 40, 2, 1 },
{ FLD_YD, UNIT_WH, CH0, CALC_YD_CH0, 0, CMD_CALC },
{ FLD_YT, UNIT_KWH, CH0, CALC_YT_CH0, 0, CMD_CALC },
{ FLD_PDC, UNIT_W, CH0, CALC_PDC_CH0, 0, CMD_CALC },
@ -206,11 +212,11 @@ const byteAssign_t hm4chAssignment[] = {
{ FLD_UAC, UNIT_V, CH0, 46, 2, 10 },
{ FLD_IAC, UNIT_A, CH0, 54, 2, 100 },
{ FLD_PAC, UNIT_W, CH0, 50, 2, 10 },
{ FLD_PRA, UNIT_VA, CH0, 52, 2, 10 },
{ FLD_Q, UNIT_VA, CH0, 52, 2, 10 },
{ FLD_F, UNIT_HZ, CH0, 48, 2, 100 },
{ FLD_PFC, UNIT_PCT, CH0, 56, 2, 10 },
{ FLD_PF, UNIT_NONE,CH0, 56, 2, 1000 },
{ FLD_T, UNIT_C, CH0, 58, 2, 10 },
{ FLD_ALARM_MES_ID, UNIT_NONE, CH0, 60, 2, 1 },
{ FLD_ALARM_MES_CNT, UNIT_NONE, CH0, 60, 2, 1 },
{ FLD_YD, UNIT_WH, CH0, CALC_YD_CH0, 0, CMD_CALC },
{ FLD_YT, UNIT_KWH, CH0, CALC_YT_CH0, 0, CMD_CALC },
{ FLD_PDC, UNIT_W, CH0, CALC_PDC_CH0, 0, CMD_CALC },

2
tools/esp8266/hmInverter.h

@ -253,7 +253,7 @@ class Inverter {
DPRINTLN(DBG_VERBOSE, "add real time");
// get last alarm message index and save it in the inverter object
if (getPosByChFld(0, FLD_ALARM_MES_ID, rec) == pos){
if (getPosByChFld(0, FLD_ALARM_MES_CNT, rec) == pos){
if (alarmMesIndex < rec->record[pos]){
alarmMesIndex = rec->record[pos];
//enqueCommand<InfoCommand>(AlarmUpdate); // What is the function of AlarmUpdate?

30
tools/esp8266/hmRadio.h

@ -165,22 +165,26 @@ class HmRadio {
void sendControlPacket(uint64_t invId, uint8_t cmd, uint16_t *data) {
DPRINTLN(DBG_INFO, F("sendControlPacket cmd: ") + String(cmd));
sendCmdPacket(invId, TX_REQ_DEVCONTROL, ALL_FRAMES, false); // 0x80 implementation as original DTU code
sendCmdPacket(invId, TX_REQ_DEVCONTROL, SINGLE_FRAME, false); // 0x80 implementation as original DTU code???
int cnt = 0;
mTxBuf[10] = cmd; // cmd --> 0x0b => Type_ActivePowerContr, 0 on, 1 off, 2 restart, 12 reactive power, 13 power factor
mTxBuf[10 + (++cnt)] = 0x00;
if (cmd >= ActivePowerContr && cmd <= PFSet){
mTxBuf[10 + (++cnt)] = ((data[0] * 10) >> 8) & 0xff; // power limit
mTxBuf[10 + (++cnt)] = ((data[0] * 10) ) & 0xff; // power limit
mTxBuf[10 + (++cnt)] = ((data[1] ) >> 8) & 0xff; // setting for persistens handlings
mTxBuf[10 + (++cnt)] = ((data[1] ) ) & 0xff; // setting for persistens handling
mTxBuf[10] = cmd; // cmd --> 0x0b => Type_ActivePowerContr, 0 on, 1 off, 2 restart, 12 reactive power, 13 power factor, 20 CleanState_LockAndAlarm
if (cmd != CleanState_LockAndAlarm)
{
mTxBuf[10 + (++cnt)] = 0x00;
if (cmd >= ActivePowerContr && cmd <= PFSet){
mTxBuf[10 + (++cnt)] = ((data[0] * 10) >> 8) & 0xff; // power limit
mTxBuf[10 + (++cnt)] = ((data[0] * 10) ) & 0xff; // power limit
mTxBuf[10 + (++cnt)] = ((data[1] ) >> 8) & 0xff; // setting for persistens handlings
mTxBuf[10 + (++cnt)] = ((data[1] ) ) & 0xff; // setting for persistens handling
}
// crc control data
uint16_t crc = Ahoy::crc16(&mTxBuf[10], cnt+1);
mTxBuf[10 + (++cnt)] = (crc >> 8) & 0xff;
mTxBuf[10 + (++cnt)] = (crc ) & 0xff;
}
// crc control data
uint16_t crc = Ahoy::crc16(&mTxBuf[10], cnt+1);
mTxBuf[10 + (++cnt)] = (crc >> 8) & 0xff;
mTxBuf[10 + (++cnt)] = (crc ) & 0xff;
// crc over all
cnt +=1;
cnt++;
mTxBuf[10 + cnt] = Ahoy::crc8(mTxBuf, 10 + cnt);
sendPacket(invId, mTxBuf, 10 + (++cnt), true);

10
tools/esp8266/html/serial.html

@ -23,7 +23,8 @@
<input type="button" value="power limit 100%" class="btn" id="pwrlim2"/>
<input type="button" value="power limit 10%" class="btn" id="pwrlim"/>
<input type="button" value="Turn Off" class="btn" id="turnoff"/>
<input type="button" value="Turn On" class="btn" id="turnon"/><br/>
<input type="button" value="Turn On" class="btn" id="turnon"/>
<input type="button" value="Clean &amp; Reboot" class="btn" id="cln_lock_and_alarm"/><br/>
Ctrl result: <span id="result">n/a</span>
</div>
</div>
@ -93,6 +94,13 @@
e.innerHTML = "Error: " + obj["error"];
}
document.getElementById("cln_lock_and_alarm").addEventListener("click", function() {
var obj = new Object();
obj.cmd = 20;
obj.tx_request = 81;
getAjax("/api/ctrl", ctrlCb, "POST", JSON.stringify(obj));
});
document.getElementById("turnon").addEventListener("click", function() {
var obj = new Object();
obj.cmd = 0;

11
tools/esp8266/webApi.cpp

@ -261,7 +261,7 @@ void webApi::getLive(JsonObject obj) {
JsonArray invArr = obj.createNestedArray(F("inverter"));
obj["refresh_interval"] = SEND_INTERVAL;
uint8_t list[] = {FLD_UAC, FLD_IAC, FLD_PAC, FLD_F, FLD_PFC, FLD_T, FLD_YT, FLD_YD, FLD_PDC, FLD_EFF, FLD_PRA, FLD_ALARM_MES_ID};
uint8_t list[] = {FLD_UAC, FLD_IAC, FLD_PAC, FLD_F, FLD_PF, FLD_T, FLD_YT, FLD_YD, FLD_PDC, FLD_EFF, FLD_Q};
Inverter<> *iv;
uint8_t pos;
@ -364,6 +364,15 @@ bool webApi::setCtrl(DynamicJsonDocument jsonIn, JsonObject jsonOut) {
else
return false;
}
else if(CleanState_LockAndAlarm == cmd) {
Inverter<> *iv = getInverter(jsonIn, jsonOut);
if(NULL != iv) {
iv->devControlCmd = CleanState_LockAndAlarm;
iv->devControlRequest = true;
}
else
return false;
}
else {
jsonOut["error"] = "unknown 'cmd' = " + String(cmd);
return false;

Loading…
Cancel
Save