Merge branch 've.direct-hex' into development
This commit is contained in:
commit
84a6ed540d
@ -60,6 +60,7 @@ VeDirectFrameHandler::VeDirectFrameHandler() :
|
|||||||
_state(IDLE),
|
_state(IDLE),
|
||||||
_checksum(0),
|
_checksum(0),
|
||||||
_textPointer(0),
|
_textPointer(0),
|
||||||
|
_hexSize(0),
|
||||||
_name(""),
|
_name(""),
|
||||||
_value(""),
|
_value(""),
|
||||||
_tmpFrame(),
|
_tmpFrame(),
|
||||||
@ -99,7 +100,9 @@ void VeDirectFrameHandler::rxData(uint8_t inbyte)
|
|||||||
{
|
{
|
||||||
//if (mStop) return;
|
//if (mStop) return;
|
||||||
if ( (inbyte == ':') && (_state != CHECKSUM) ) {
|
if ( (inbyte == ':') && (_state != CHECKSUM) ) {
|
||||||
|
_prevState = _state; //hex frame can interrupt TEXT
|
||||||
_state = RECORD_HEX;
|
_state = RECORD_HEX;
|
||||||
|
_hexSize = 0;
|
||||||
}
|
}
|
||||||
if (_state != RECORD_HEX) {
|
if (_state != RECORD_HEX) {
|
||||||
_checksum += inbyte;
|
_checksum += inbyte;
|
||||||
@ -177,10 +180,7 @@ void VeDirectFrameHandler::rxData(uint8_t inbyte)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case RECORD_HEX:
|
case RECORD_HEX:
|
||||||
if (hexRxEvent(inbyte)) {
|
_state = hexRxEvent(inbyte);
|
||||||
_checksum = 0;
|
|
||||||
_state = IDLE;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -279,10 +279,27 @@ void VeDirectFrameHandler::logE(const char * module, const char * error) {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* hexRxEvent
|
* hexRxEvent
|
||||||
* This function included for continuity and possible future use.
|
* This function records hex answers or async messages
|
||||||
*/
|
*/
|
||||||
bool VeDirectFrameHandler::hexRxEvent(uint8_t inbyte) {
|
int VeDirectFrameHandler::hexRxEvent(uint8_t inbyte) {
|
||||||
return true; // stubbed out for future
|
int ret=RECORD_HEX; // default - continue recording until end of frame
|
||||||
|
|
||||||
|
switch (inbyte) {
|
||||||
|
case '\n':
|
||||||
|
// restore previous state
|
||||||
|
ret=_prevState;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
_hexSize++;
|
||||||
|
if (_hexSize>=VE_MAX_HEX_LEN) { // oops -buffer overflow - something went wrong, we abort
|
||||||
|
logE(MODULE,"hexRx buffer overflow - aborting read");
|
||||||
|
_hexSize=0;
|
||||||
|
ret=IDLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VeDirectFrameHandler::isDataValid() {
|
bool VeDirectFrameHandler::isDataValid() {
|
||||||
@ -510,6 +527,9 @@ String VeDirectFrameHandler::getPidAsString(uint16_t pid)
|
|||||||
case 0XA10F:
|
case 0XA10F:
|
||||||
strPID = "BlueSolar MPPT VE.Can 150|100";
|
strPID = "BlueSolar MPPT VE.Can 150|100";
|
||||||
break;
|
break;
|
||||||
|
case 0XA110:
|
||||||
|
strPID = "SmartSolar MPPT RS 450|100";
|
||||||
|
break;
|
||||||
case 0XA112:
|
case 0XA112:
|
||||||
strPID = "BlueSolar MPPT VE.Can 250|70";
|
strPID = "BlueSolar MPPT VE.Can 250|70";
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -23,6 +23,8 @@
|
|||||||
|
|
||||||
#define VE_MAX_NAME_LEN 9 // VE.Direct Protocol: max name size is 9 including /0
|
#define VE_MAX_NAME_LEN 9 // VE.Direct Protocol: max name size is 9 including /0
|
||||||
#define VE_MAX_VALUE_LEN 33 // VE.Direct Protocol: max value size is 33 including /0
|
#define VE_MAX_VALUE_LEN 33 // VE.Direct Protocol: max value size is 33 including /0
|
||||||
|
#define VE_MAX_HEX_LEN 100 // Maximum size of hex frame - max payload 34 byte (=68 char) + safe buffer
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t PID; // product id
|
uint16_t PID; // product id
|
||||||
@ -69,12 +71,14 @@ private:
|
|||||||
void textRxEvent(char *, char *);
|
void textRxEvent(char *, char *);
|
||||||
void frameEndEvent(bool); // copy temp struct to public struct
|
void frameEndEvent(bool); // copy temp struct to public struct
|
||||||
void logE(const char *, const char *);
|
void logE(const char *, const char *);
|
||||||
bool hexRxEvent(uint8_t);
|
int hexRxEvent(uint8_t);
|
||||||
|
|
||||||
//bool mStop; // not sure what Victron uses this for, not using
|
//bool mStop; // not sure what Victron uses this for, not using
|
||||||
int _state; // current state
|
int _state; // current state
|
||||||
|
int _prevState; // previous state
|
||||||
uint8_t _checksum; // checksum value
|
uint8_t _checksum; // checksum value
|
||||||
char * _textPointer; // pointer to the private buffer we're writing to, name or value
|
char * _textPointer; // pointer to the private buffer we're writing to, name or value
|
||||||
|
int _hexSize; // length of hex buffer
|
||||||
char _name[VE_MAX_VALUE_LEN]; // buffer for the field name
|
char _name[VE_MAX_VALUE_LEN]; // buffer for the field name
|
||||||
char _value[VE_MAX_VALUE_LEN]; // buffer for the field value
|
char _value[VE_MAX_VALUE_LEN]; // buffer for the field value
|
||||||
veStruct _tmpFrame{}; // private struct for received name and value pairs
|
veStruct _tmpFrame{}; // private struct for received name and value pairs
|
||||||
|
|||||||
@ -522,10 +522,10 @@
|
|||||||
"InverterIdHint": "Wähle den Wechselrichter an dem die Batterie hängt.",
|
"InverterIdHint": "Wähle den Wechselrichter an dem die Batterie hängt.",
|
||||||
"InverterChannelId": "Kanal ID",
|
"InverterChannelId": "Kanal ID",
|
||||||
"InverterChannelIdHint": "Wähle den Kanal an dem die Batterie hängt.",
|
"InverterChannelIdHint": "Wähle den Kanal an dem die Batterie hängt.",
|
||||||
"TargetPowerConsumption": "Erlaubter Stromverbrauch",
|
"TargetPowerConsumption": "Angestrebter Netzbezung",
|
||||||
"TargetPowerConsumptionHint": "Angestrebter erlaubter Stromverbrauch.",
|
"TargetPowerConsumptionHint": "Angestrebter erlaubter Stromverbrauch aus dem Netz.",
|
||||||
"TargetPowerConsumptionHysteresis": "Hysterese für den Zielstromverbrauch",
|
"TargetPowerConsumptionHysteresis": "Hysterese für den angestrebten Netzbezug",
|
||||||
"TargetPowerConsumptionHysteresisHint": "Wert um den der Zielstromverbrauch schwanken darf, ohne dass nachgeregelt wird.",
|
"TargetPowerConsumptionHysteresisHint": "Wert um den der angestrebte Netzbezug schwanken darf, ohne dass nachgeregelt wird.",
|
||||||
"LowerPowerLimit": "Unteres Leistungslimit",
|
"LowerPowerLimit": "Unteres Leistungslimit",
|
||||||
"UpperPowerLimit": "Oberes Leistungslimit",
|
"UpperPowerLimit": "Oberes Leistungslimit",
|
||||||
"PowerMeters": "Leistungsmesser",
|
"PowerMeters": "Leistungsmesser",
|
||||||
|
|||||||
@ -523,10 +523,10 @@
|
|||||||
"InverterIdHint": "Select proper inverter ID where battery is connected to.",
|
"InverterIdHint": "Select proper inverter ID where battery is connected to.",
|
||||||
"InverterChannelId": "Channel ID",
|
"InverterChannelId": "Channel ID",
|
||||||
"InverterChannelIdHint": "Select proper channel where battery is connected to.",
|
"InverterChannelIdHint": "Select proper channel where battery is connected to.",
|
||||||
"TargetPowerConsumption": "Target power consumption",
|
"TargetPowerConsumption": "Target power consumption from grid",
|
||||||
"TargetPowerConsumptionHint": "Set the grid power consumption the limiter tries to achieve.",
|
"TargetPowerConsumptionHint": "Set the grid power consumption the limiter tries to achieve.",
|
||||||
"TargetPowerConsumptionHysteresis": "Hysteresis for power consumption",
|
"TargetPowerConsumptionHysteresis": "Hysteresis for power consumption from grid",
|
||||||
"TargetPowerConsumptionHysteresisHint": "Value around which the target power consumption fluctuates without readjustment.",
|
"TargetPowerConsumptionHysteresisHint": "Value around which the target grid power consumption fluctuates without readjustment.",
|
||||||
"LowerPowerLimit": "Lower power limit",
|
"LowerPowerLimit": "Lower power limit",
|
||||||
"UpperPowerLimit": "Upper power limit",
|
"UpperPowerLimit": "Upper power limit",
|
||||||
"PowerMeters": "Power meter",
|
"PowerMeters": "Power meter",
|
||||||
|
|||||||
@ -65,7 +65,7 @@
|
|||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="number" class="form-control" id="targetPowerConsumption"
|
<input type="number" class="form-control" id="targetPowerConsumption"
|
||||||
placeholder="75" min="0" v-model="powerLimiterConfigList.target_power_consumption"
|
placeholder="75" v-model="powerLimiterConfigList.target_power_consumption"
|
||||||
aria-describedby="targetPowerConsumptionDescription" required/>
|
aria-describedby="targetPowerConsumptionDescription" required/>
|
||||||
<span class="input-group-text" id="targetPowerConsumptionDescription">W</span>
|
<span class="input-group-text" id="targetPowerConsumptionDescription">W</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user