mirror of
https://github.com/alexhopeoconnor/SunGather.git
synced 2026-10-04 02:48:12 +10:00
Merge pull request #54 from michbeck100/feature/running_state
#53 - adds support for bit masks
This commit is contained in:
@@ -1108,12 +1108,54 @@ registers:
|
||||
- response: 0x4000
|
||||
value: "EMS Run"
|
||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||
- name: "running_state"
|
||||
- name: "running_state"
|
||||
level: 2
|
||||
address: 13001
|
||||
datatype: "U16"
|
||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||
- name: "daily_pv_generation"
|
||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||
- name: "power_generated_from_pv"
|
||||
level: 2
|
||||
address: 13001
|
||||
datatype: "U16"
|
||||
mask: 1
|
||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||
- name: "battery_charging"
|
||||
level: 2
|
||||
address: 13001
|
||||
datatype: "U16"
|
||||
mask: 2
|
||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||
- name: "battery_discharging"
|
||||
level: 2
|
||||
address: 13001
|
||||
datatype: "U16"
|
||||
mask: 4
|
||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||
- name: "load_active"
|
||||
level: 2
|
||||
address: 13001
|
||||
datatype: "U16"
|
||||
mask: 8
|
||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||
- name: "feed_into_grid"
|
||||
level: 2
|
||||
address: 13001
|
||||
datatype: "U16"
|
||||
mask: 16
|
||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||
- name: "import_from_grid"
|
||||
level: 2
|
||||
address: 13001
|
||||
datatype: "U16"
|
||||
mask: 32
|
||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||
- name: "power_generated_from_load"
|
||||
level: 2
|
||||
address: 13001
|
||||
datatype: "U16"
|
||||
mask: 128
|
||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||
- name: "daily_pv_generation"
|
||||
level: 2
|
||||
address: 13002
|
||||
datatype: "U16"
|
||||
@@ -1153,7 +1195,7 @@ registers:
|
||||
datatype: "S32"
|
||||
unit: "W"
|
||||
models: ["SH5K-20","SH3K6","SH4K6","SH5K-V13","SH5K-30","SH3K6-30","SH4K6-30","SH5.0RS","SH3.6RS","SH4.6RS","SH6.0RS","SH10RT","SH8.0RT","SH6.0RT","SH5.0RT"]
|
||||
- name: "daily_battery_charge_from_pv"
|
||||
- name: "daily_battery_charge_from_pv"
|
||||
level: 1
|
||||
address: 13012
|
||||
datatype: "U16"
|
||||
|
||||
@@ -208,6 +208,9 @@ class SungrowInverter():
|
||||
if register.get('datatype') == "U16":
|
||||
if register_value == 0xFFFF:
|
||||
register_value = 0
|
||||
if register.get('mask'):
|
||||
# Filter the value through the mask.
|
||||
register_value = 1 if register_value & register.get('mask') != 0 else 0
|
||||
elif register.get('datatype') == "S16":
|
||||
if register_value == 0xFFFF or register_value == 0x7FFF:
|
||||
register_value = 0
|
||||
@@ -234,12 +237,13 @@ class SungrowInverter():
|
||||
if value['response'] == rr.registers[num]:
|
||||
register_value = value['value']
|
||||
|
||||
|
||||
|
||||
if register.get('accuracy'):
|
||||
register_value = round(register_value * register.get('accuracy'),2)
|
||||
|
||||
# Set the final register value with adjustments above included
|
||||
self.latest_scrape[register_name] = register_value
|
||||
break
|
||||
return True
|
||||
|
||||
def validateRegister(self, check_register):
|
||||
|
||||
Reference in New Issue
Block a user