Skip to content

Commit

Permalink
Ladepriorität,Batt.entladung im Sonnen/Mixedmode
Browse files Browse the repository at this point in the history
  • Loading branch information
ka-vaNu committed Oct 13, 2023
1 parent adeac16 commit 8f008c6
Show file tree
Hide file tree
Showing 4 changed files with 221 additions and 55 deletions.
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -259,12 +259,30 @@ The RSCP protocol groups *Tags* (i.e. states or values) into *Namespaces* (i.e.
<td>number</td>
<td>Charging power [W]; usually propagates to SET_POWER</td>
</tr>
<tr>
<td>EMS</td>
<td>SET_BATTERY_BEFORE_CAR_MODE</td>
<td>boolean</td>
<td>Prioritising battery charging before wallbox</td>
</tr>
<tr>
<td>EMS</td>
<td>SET_BATTERY_TO_CAR_MODE</td>
<td>boolean</td>
<td>Battery discharge by wallbox in sun mode</td>
</tr>
<tr>
<td>EMS</td>
<td>SET_WB_DISCHARGE_BAT_UNTIL</td>
<td>number</td>
<td>Percentage up to which the wallbox may discharge the battery</td>
</tr>
<tr>
<td>EMS</td>
<td>SET_WB_ENFORCE_POWER_ASSIGNMENT</td>
<td>boolean</td>
<td>Prevent battery discharge through wall box in mixing mode, true=forbidden, false=allowed</td>
</tr>
<tr>
<td>EMS (1)</td>
<td>IDLE_PERIOD_ACTIVE</td>
Expand Down
4 changes: 4 additions & 0 deletions admin/words.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

162 changes: 108 additions & 54 deletions lib/RscpTags.json
Original file line number Diff line number Diff line change
Expand Up @@ -2510,7 +2510,7 @@
},
"16777334": {
"TagHex": "0x01000076",
"TagName": "REQ_SET_BATTERY_TO_CAR_MODE",
"TagName": "SET_BATTERY_TO_CAR_MODE",
"TagNameGlobal": "TAG_EMS_REQ_SET_BATTERY_TO_CAR_MODE",
"DataTagHex": "0x000076",
"NameSpace": "EMS",
Expand All @@ -2534,32 +2534,6 @@
"Unit": "",
"Description": "Statusabfrage des BatteryToCar Modus"
},
"16777336": {
"TagHex": "0x01000078",
"TagName": "REQ_SET_BATTERY_BEFORE_CAR_MODE",
"TagNameGlobal": "TAG_EMS_REQ_SET_BATTERY_BEFORE_CAR_MODE",
"DataTagHex": "0x000078",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "USER",
"Unit": "",
"Description": "Aktiviert, deaktiviert den BatteryBeforeCar Modus"
},
"16777337": {
"TagHex": "0x01000079",
"TagName": "REQ_BATTERY_BEFORE_CAR_MODE",
"TagNameGlobal": "TAG_EMS_REQ_BATTERY_BEFORE_CAR_MODE",
"DataTagHex": "0x000079",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "USER",
"Unit": "",
"Description": "Statusabfrage des BatteryBeforeCar Modus"
},
"16777344": {
"TagHex": "0x01000080",
"TagName": "REQ_GET_IDLE_PERIODS",
Expand Down Expand Up @@ -7604,32 +7578,6 @@
"Unit": "",
"Description": "1 = Modus aktiviert / 0 = Modus deaktiviert"
},
"25165944": {
"TagHex": "0x01800078",
"TagName": "SET_BATTERY_BEFORE_CAR_MODE",
"TagNameGlobal": "TAG_EMS_SET_BATTERY_BEFORE_CAR_MODE",
"DataTagHex": "0x800078",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "NO_AUTH",
"Unit": "",
"Description": "1 = Modus aktiviert / 0 = Modus deaktiviert / 0xFF = Aktivierung nicht möglich (BatteryToCar noch aktiv?)"
},
"25165945": {
"TagHex": "0x01800079",
"TagName": "BATTERY_BEFORE_CAR_MODE",
"TagNameGlobal": "TAG_EMS_BATTERY_BEFORE_CAR_MODE",
"DataTagHex": "0x800079",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "NO_AUTH",
"Unit": "",
"Description": "1 = Modus aktiviert / 0 = Modus deaktiviert"
},
"25165952": {
"TagHex": "0x01800080",
"TagName": "GET_IDLE_PERIODS",
Expand Down Expand Up @@ -14641,13 +14589,119 @@
"TagHex": "0x0180027C",
"TagName": "SET_WB_DISCHARGE_BAT_UNTIL",
"TagNameGlobal": "TAG_EMS_SET_WB_DISCHARGE_BAT_UNTIL",
"DataTagHex": "0x80027D",
"DataTagHex": "0x80027C",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "USER",
"Unit": "%",
"Description": "imported from pvtom/rscp2mqtt"
},
"16777851": {
"TagHex": "0x0100027B",
"TagName": "REQ_GET_WALLBOX_ENFORCE_POWER_ASSIGNMENT",
"TagNameGlobal": "TAG_EMS_REQ_GET_WALLBOX_ENFORCE_POWER_ASSIGNMENT",
"DataTagHex": "0x00027B",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "USER",
"Unit": "",
"Description": "Abfrage: Batterieentladung durch Wallbox, im Mischmodus und während Haltezeit und Zeitfunktion"
},
"25166459": {
"TagHex": "0x0180027B",
"TagName": "WB_ENFORCE_POWER_ASSIGNMENT",
"TagNameGlobal": "TAG_EMS_GET_WALLBOX_ENFORCE_POWER_ASSIGNMENT",
"DataTagHex": "0x80027B",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "USER",
"Unit": "",
"Description": "Batterieentladung durch Wallbox im Mischmodus unterbinden , erlaubt=false, unterbunden=true"
},
"16777850": {
"TagHex": "0x0100027A",
"TagName": "REQ_SET_WB_ENFORCE_POWER_ASSIGNMENT",
"TagNameGlobal": "TAG_EMS_REQ_SET_WALLBOX_ENFORCE_POWER_ASSIGNMENT",
"DataTagHex": "0x00027A",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "USER",
"Unit": "",
"Description": "Batterieentladung durch Wallbox im Mischmodus unterbinden , erlaubt=false, unterbunden=true"
},
"25166458": {
"TagHex": "0x0180027A",
"TagName": "SET_WB_ENFORCE_POWER_ASSIGNMENT",
"TagNameGlobal": "TAG_EMS_SET_WALLBOX_ENFORCE_POWER_ASSIGNMENT",
"DataTagHex": "0x80027A",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "USER",
"Unit": "",
"Description": "Batterieentladung durch Wallbox im Mischmodus unterbinden , erlaubt=false, unterbunden=true"
},

"16777336": {
"TagHex": "0x01000078",
"TagName": "REQ_SET_BATTERY_BEFORE_CAR_MODE",
"TagNameGlobal": "TAG_EMS_REQ_SET_BATTERY_BEFORE_CAR_MODE",
"DataTagHex": "0x000078",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "USER",
"Unit": "",
"Description": "Aktiviert, deaktiviert den BatteryBeforeCar Modus"
},
"16777337": {
"TagHex": "0x01000079",
"TagName": "REQ_BATTERY_BEFORE_CAR_MODE",
"TagNameGlobal": "TAG_EMS_REQ_BATTERY_BEFORE_CAR_MODE",
"DataTagHex": "0x000079",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "USER",
"Unit": "",
"Description": "Statusabfrage des BatteryBeforeCar Modus"
},
"25165944": {
"TagHex": "0x01800078",
"TagName": "SET_BATTERY_BEFORE_CAR_MODE",
"TagNameGlobal": "TAG_EMS_SET_BATTERY_BEFORE_CAR_MODE",
"DataTagHex": "0x800078",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "NO_AUTH",
"Unit": "",
"Description": "1 = Modus aktiviert / 0 = Modus deaktiviert / 0xFF = Aktivierung nicht möglich (BatteryToCar noch aktiv?)"
},
"25165945": {
"TagHex": "0x01800079",
"TagName": "BATTERY_BEFORE_CAR_MODE",
"TagNameGlobal": "TAG_EMS_BATTERY_BEFORE_CAR_MODE",
"DataTagHex": "0x800079",
"NameSpace": "EMS",
"NameSpaceHex": "0x01",
"DataType": "UChar8",
"DataTypeHex": "0x03",
"UserLevel": "NO_AUTH",
"Unit": "",
"Description": "1 = Modus aktiviert / 0 = Modus deaktiviert"
}
}

92 changes: 91 additions & 1 deletion main.js
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,9 @@ const mapChangedIdToSetTags = {
"EMS.POWER_LIMITS_USED": ["TAG_EMS_REQ_SET_POWER_SETTINGS", "TAG_EMS_POWER_LIMITS_USED"],
"EMS.WEATHER_REGULATED_CHARGE_ENABLED": ["TAG_EMS_REQ_SET_POWER_SETTINGS", "TAG_EMS_WEATHER_REGULATED_CHARGE_ENABLED"],
"EMS.SET_WB_DISCHARGE_BAT_UNTIL": [],
"EMS.SET_BATTERY_TO_CAR_MODE": [],
"EMS.SET_WB_ENFORCE_POWER_ASSIGNMENT": [],
"EMS.SET_BATTERY_BEFORE_CAR_MODE": [],
"EMS.SET_POWER_MODE": [],
"EMS.SET_POWER_VALUE": [],
"EMS.*.*.IDLE_PERIOD_ACTIVE": [],
Expand Down Expand Up @@ -365,7 +368,10 @@ const ignoreIds = [
"EMS.MANUAL_CHARGE_LASTSTART", // invalid Timestamp value
"EMS.SYS_SPEC_INDEX",
"EMS.SET_IDLE_PERIODS",
"EMS.SET_WB_DISCHARGE_BAT_UNTIL", // Response is always "true", not usable for state with unit "%"
"EMS.SET_WB_DISCHARGE_BAT_UNTIL", // Response is always "true", not usable for state with unit "%"
"EMS.SET_BATTERY_TO_CAR_MODE", // Response is set to EMS.BATTERY_TO_CAR_MODE
"EMS.SET_WB_ENFORCE_POWER_ASSIGNMENT", //Response is set to EMS.WB_ENFORCE_POWER_ASSIGNMENT
"EMS.SET_BATTERY_BEFORE_CAR_MODE", //Response is set to EMS.BATTERY_BEFORE_CAR_MODE
"BAT.UNDEFINED",
"BAT.INTERNAL_CURRENT_AVG30",
"BAT.INTERNAL_MTV_AVG30",
Expand Down Expand Up @@ -877,6 +883,7 @@ class E3dcRscp extends utils.Adapter {
this.addTagtoFrame( "TAG_EMS_REQ_BAT_DISCHARGE_LIMIT", sml );
this.addTagtoFrame( "TAG_EMS_REQ_DCDC_DISCHARGE_LIMIT", sml );
this.addTagtoFrame( "TAG_EMS_REQ_GET_WB_DISCHARGE_BAT_UNTIL", sml );
this.addTagtoFrame( "TAG_EMS_REQ_GET_WALLBOX_ENFORCE_POWER_ASSIGNMENT", sml );
this.addTagtoFrame( "TAG_EMS_REQ_REMAINING_BAT_CHARGE_POWER", sml );
this.addTagtoFrame( "TAG_EMS_REQ_REMAINING_BAT_DISCHARGE_POWER", sml );
this.addTagtoFrame( "TAG_EMS_REQ_EMERGENCY_POWER_STATUS", sml );
Expand Down Expand Up @@ -927,12 +934,50 @@ class E3dcRscp extends utils.Adapter {
this.log.debug( `queueEmsSetWbDischargeUntil( ${limit} )` );
this.clearFrame();
this.addTagtoFrame( "TAG_EMS_REQ_SET_WB_DISCHARGE_BAT_UNTIL", "", limit );
this.addTagtoFrame( "TAG_EMS_REQ_GET_WB_DISCHARGE_BAT_UNTIL", "S" );
this.pushFrame( );
// Acknowledge SET_WB_DISCHARGE_BAT_UNTIL
this.setState( "EMS.SET_WB_DISCHARGE_BAT_UNTIL", limit, true );
}


queueEmsSetBatt2CarMode( b2c ) {
this.log.debug( `queueEmsSetBatt2CarMode( ${b2c} )` );
this.clearFrame();
this.addTagtoFrame( "TAG_EMS_REQ_SET_BATTERY_TO_CAR_MODE", "", b2c );
this.addTagtoFrame( "TAG_EMS_REQ_BATTERY_TO_CAR_MODE", "S" );
this.pushFrame( );
// Acknowledge SET_BATTERY_TO_CAR_MODE
this.setState( "EMS.SET_BATTERY_TO_CAR_MODE", b2c, true );
}


queueEmsEnforceWBPowerAssignment( b2cMixedMode ) {
// Empty battery in mixedmode
this.log.debug( `queueEmsEnforceWBPowerAssignment( ${b2cMixedMode} )` );
this.clearFrame();
this.addTagtoFrame( "TAG_EMS_REQ_SET_WALLBOX_ENFORCE_POWER_ASSIGNMENT", "", b2cMixedMode );
this.pushFrame( );
this.clearFrame();
this.addTagtoFrame( "TAG_EMS_REQ_GET_WALLBOX_ENFORCE_POWER_ASSIGNMENT", "S" );
this.pushFrame( );
// Acknowledge SET_WB_DISCHARGE_BAT_UNTIL
this.setState( "EMS.SET_WB_ENFORCE_POWER_ASSIGNMENT", b2cMixedMode, true );
}


queueEmsSetBattBeforeCar( battBeforeCar ) {
// Empty battery in mixedmode
this.log.debug( `queueEmsSetBattBeforeCar( ${battBeforeCar} )` );
this.clearFrame();
this.addTagtoFrame( "TAG_EMS_REQ_SET_BATTERY_BEFORE_CAR_MODE", "", battBeforeCar );
this.addTagtoFrame( "TAG_EMS_REQ_BATTERY_BEFORE_CAR_MODE", "S" );
this.pushFrame( );
// Acknowledge SET_WB_DISCHARGE_BAT_UNTIL
this.setState( "EMS.SET_BATTERY_BEFORE_CAR_MODE", battBeforeCar, true );
}


queueSysRequestData( sml ) {
this.clearFrame();
this.addTagtoFrame( "TAG_SYS_REQ_IS_SYSTEM_REBOOTING", sml );
Expand Down Expand Up @@ -1812,6 +1857,39 @@ class E3dcRscp extends utils.Adapter {
},
native: {},
} );
await this.setObjectNotExistsAsync( "EMS.SET_BATTERY_TO_CAR_MODE", {
type: "state",
common: {
name: systemDictionary["SET_BATTERY_TO_CAR_MODE"][this.language],
type: "boolean",
role: "switch",
read: false,
write: true
},
native: {},
} );
await this.setObjectNotExistsAsync( "EMS.SET_WB_ENFORCE_POWER_ASSIGNMENT", {
type: "state",
common: {
name: systemDictionary["SET_WB_ENFORCE_POWER_ASSIGNMENT"][this.language],
type: "boolean",
role: "switch",
read: false,
write: true
},
native: {},
} );
await this.setObjectNotExistsAsync( "EMS.SET_BATTERY_BEFORE_CAR_MODE", {
type: "state",
common: {
name: systemDictionary["SET_BATTERY_BEFORE_CAR_MODE"][this.language],
type: "boolean",
role: "switch",
read: false,
write: true
},
native: {},
} );
}
if( this.config.query_sys ) {
await this.setObjectNotExistsAsync( "SYS", {
Expand Down Expand Up @@ -1986,6 +2064,18 @@ class E3dcRscp extends utils.Adapter {
this.getState( "EMS.SET_WB_DISCHARGE_BAT_UNTIL", ( err, limit ) => {
this.queueEmsSetWbDischargeUntil( limit ? limit.val : 0 );
} );
} else if ( id.endsWith( "EMS.SET_BATTERY_TO_CAR_MODE" ) ) {
this.getState( "EMS.SET_BATTERY_TO_CAR_MODE", ( err, b2c ) => {
this.queueEmsSetBatt2CarMode( b2c ? b2c.val : 0 );
} );
} else if ( id.endsWith( "EMS.SET_WB_ENFORCE_POWER_ASSIGNMENT" ) ) {
this.getState( "EMS.SET_WB_ENFORCE_POWER_ASSIGNMENT", ( err, b2cMixedMode ) => {
this.queueEmsEnforceWBPowerAssignment( b2cMixedMode ? b2cMixedMode.val : 0 );
} );
} else if ( id.endsWith( "EMS.SET_BATTERY_BEFORE_CAR_MODE" ) ) {
this.getState( "EMS.SET_BATTERY_BEFORE_CAR_MODE", ( err, battBeforeCar ) => {
this.queueEmsSetBattBeforeCar( battBeforeCar ? battBeforeCar.val : 0 );
} );
} else if ( id.includes( ".WB." ) ) {
this.log.debug( "WB changed" );
wb.queueWbSetData( id );
Expand Down

0 comments on commit 8f008c6

Please sign in to comment.