solax-py-library 1.0.0.20__tar.gz → 1.0.0.21__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/PKG-INFO +1 -1
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/pyproject.toml +1 -1
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/__init__.py +1 -1
- solax_py_library-1.0.0.21/solax_py_library/device/constant/inverter_model_info.py +312 -0
- solax_py_library-1.0.0.21/solax_py_library/device/core/interver/__init__.py +36 -0
- solax_py_library-1.0.0.21/solax_py_library/device/core/interver/base.py +215 -0
- solax_py_library-1.0.0.21/solax_py_library/device/types/__init__.py +0 -0
- solax_py_library-1.0.0.21/solax_py_library/device/types/inverter_config.py +41 -0
- solax_py_library-1.0.0.21/solax_py_library/device/types/modbus_point.py +30 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/exception.py +10 -10
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/snap_shot/__init__.py +3 -3
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/snap_shot/constant/__init__.py +5 -5
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/snap_shot/constant/crc_table.py +258 -258
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/snap_shot/core/__init__.py +0 -2
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/snap_shot/core/base_modbus.py +14 -14
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/snap_shot/core/parser.py +225 -225
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/snap_shot/core/snap_shot.py +14 -12
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/snap_shot/exceptions/__init__.py +3 -3
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/snap_shot/exceptions/snap_shot.py +9 -9
- solax_py_library-1.0.0.21/solax_py_library/snap_shot/test/__init__.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/snap_shot/types/__init__.py +15 -15
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/snap_shot/types/address.py +39 -39
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/__init__.py +3 -3
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/api/service.py +24 -24
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/core/upload_service/ftp.py +1 -1
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/exceptions/__init__.py +8 -8
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/exceptions/upload_error.py +21 -21
- solax_py_library-1.0.0.21/solax_py_library/upload/test/__init__.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/test/test_ftp.py +1 -1
- solax_py_library-1.0.0.21/solax_py_library/utils/__init__.py +0 -0
- solax_py_library-1.0.0.21/solax_py_library/utils/common.py +38 -0
- solax_py_library-1.0.0.21/solax_py_library/utils/struct_util.py +30 -0
- solax_py_library-1.0.0.20/solax_py_library/utils/common.py +0 -19
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/README.md +0 -0
- {solax_py_library-1.0.0.20/solax_py_library/snap_shot/test → solax_py_library-1.0.0.21/solax_py_library/device}/__init__.py +0 -0
- {solax_py_library-1.0.0.20/solax_py_library/upload/test → solax_py_library-1.0.0.21/solax_py_library/device/constant}/__init__.py +0 -0
- {solax_py_library-1.0.0.20/solax_py_library/utils → solax_py_library-1.0.0.21/solax_py_library/device/core}/__init__.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/api/__init__.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/core/__init__.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/core/data_adapter/__init__.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/core/data_adapter/base.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/core/data_adapter/csv.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/core/upload_service/__init__.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/core/upload_service/base.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/types/__init__.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/types/client.py +0 -0
- {solax_py_library-1.0.0.20 → solax_py_library-1.0.0.21}/solax_py_library/upload/types/ftp.py +0 -0
@@ -1 +1 @@
|
|
1
|
-
__all__ = ["upload", "snap_shot"]
|
1
|
+
__all__ = ["upload", "snap_shot"]
|
@@ -0,0 +1,312 @@
|
|
1
|
+
Inverter_model_info = {
|
2
|
+
"A": {
|
3
|
+
"A3F040": {"model": "X3-FTH", "rated_power": 40000},
|
4
|
+
"A3F050": {"model": "X3-FTH", "rated_power": 50000},
|
5
|
+
"A3F060": {"model": "X3-FTH", "rated_power": 60000},
|
6
|
+
"A3F070": {"model": "X3-FTH", "rated_power": 70000},
|
7
|
+
"A3F080": {"model": "X3-FTH", "rated_power": 80000},
|
8
|
+
"A3F100": {"model": "X3-FTH", "rated_power": 100000},
|
9
|
+
"A3F110": {"model": "X3-FTH", "rated_power": 110000},
|
10
|
+
"A3F120": {"model": "X3-FTH", "rated_power": 120000},
|
11
|
+
"A3F125": {"model": "X3-FTH", "rated_power": 125000},
|
12
|
+
"A3F136": {"model": "X3-FTH", "rated_power": 136000},
|
13
|
+
"A3F150": {"model": "X3-FTH", "rated_power": 150000},
|
14
|
+
},
|
15
|
+
"B": {
|
16
|
+
"B3F040": {"model": "X3-FTH", "rated_power": 40000},
|
17
|
+
"B3F050": {"model": "X3-FTH", "rated_power": 50000},
|
18
|
+
"B3F060": {"model": "X3-FTH", "rated_power": 60000},
|
19
|
+
"B3F070": {"model": "X3-FTH", "rated_power": 70000},
|
20
|
+
"B3F080": {"model": "X3-FTH", "rated_power": 80000},
|
21
|
+
"B3F100": {"model": "X3-FTH", "rated_power": 100000},
|
22
|
+
"B3F110": {"model": "X3-FTH", "rated_power": 110000},
|
23
|
+
"B3F120": {"model": "X3-FTH", "rated_power": 120000},
|
24
|
+
"B3F125": {"model": "X3-FTH", "rated_power": 125000},
|
25
|
+
"B3F136": {"model": "X3-FTH", "rated_power": 136000},
|
26
|
+
"B3F150": {"model": "X3-FTH", "rated_power": 150000},
|
27
|
+
},
|
28
|
+
"C": {
|
29
|
+
"C107": {"model": "EVCharger_1", "rated_power": 7200},
|
30
|
+
"C111": {"model": "EVCharger_1", "rated_power": 11000},
|
31
|
+
"C122": {"model": "EVCharger_1", "rated_power": 22000},
|
32
|
+
"C307": {"model": "EVCharger_3", "rated_power": 7200},
|
33
|
+
"C311": {"model": "EVCharger_3", "rated_power": 11000},
|
34
|
+
"C322": {"model": "EVCharger_3", "rated_power": 22000},
|
35
|
+
},
|
36
|
+
"F": {
|
37
|
+
"F430": {"model": "X1-Fit-G4", "rated_power": 3000},
|
38
|
+
"F437": {"model": "X1-Fit-G4", "rated_power": 3700},
|
39
|
+
"F450": {"model": "X1-Fit-G4", "rated_power": 5000},
|
40
|
+
"F460": {"model": "X1-Fit-G4", "rated_power": 6000},
|
41
|
+
"F475": {"model": "X1-Fit-G4", "rated_power": 7500},
|
42
|
+
"F34A06": {"model": "X3-Fit-G4", "rated_power": 6000},
|
43
|
+
"F34C06": {"model": "X3-Fit-G4", "rated_power": 6000},
|
44
|
+
"F34A08": {"model": "X3-Fit-G4", "rated_power": 8000},
|
45
|
+
"F34C08": {"model": "X3-Fit-G4", "rated_power": 8000},
|
46
|
+
"F34A10": {"model": "X3-Fit-G4", "rated_power": 10000},
|
47
|
+
"F34C10": {"model": "X3-Fit-G4", "rated_power": 10000},
|
48
|
+
"F34A15": {"model": "X3-Fit-G4", "rated_power": 15000},
|
49
|
+
"F34C15": {"model": "X3-Fit-G4", "rated_power": 15000},
|
50
|
+
},
|
51
|
+
"J": {
|
52
|
+
"J16": {"model": "J1-ESS-HB", "rated_power": 6000},
|
53
|
+
"J13": {"model": "J1-ESS-HB", "rated_power": 3000},
|
54
|
+
},
|
55
|
+
"H": {
|
56
|
+
"H34M05": {"model": "X3-Hybrid-G4", "rated_power": 5000},
|
57
|
+
"H34M06": {"model": "X3-Hybrid-G4", "rated_power": 6000},
|
58
|
+
"H34M08": {"model": "X3-Hybrid-G4", "rated_power": 8000},
|
59
|
+
"H34M10": {"model": "X3-Hybrid-G4", "rated_power": 10000},
|
60
|
+
"H34M12": {"model": "X3-Hybrid-G4", "rated_power": 12000},
|
61
|
+
"H34M15": {"model": "X3-Hybrid-G4", "rated_power": 15000},
|
62
|
+
"H34D05": {"model": "X3-Hybrid-G4", "rated_power": 5000},
|
63
|
+
"H34D06": {"model": "X3-Hybrid-G4", "rated_power": 6000},
|
64
|
+
"H34D08": {"model": "X3-Hybrid-G4", "rated_power": 8000},
|
65
|
+
"H34D10": {"model": "X3-Hybrid-G4", "rated_power": 10000},
|
66
|
+
"H34D12": {"model": "X3-Hybrid-G4", "rated_power": 12000},
|
67
|
+
"H34D15": {"model": "X3-Hybrid-G4", "rated_power": 15000},
|
68
|
+
"H34C05": {"model": "X3-Hybrid-G4", "rated_power": 5000},
|
69
|
+
"H34C06": {"model": "X3-Hybrid-G4", "rated_power": 6000},
|
70
|
+
"H34C08": {"model": "X3-Hybrid-G4", "rated_power": 8000},
|
71
|
+
"H34C10": {"model": "X3-Hybrid-G4", "rated_power": 10000},
|
72
|
+
"H34C12": {"model": "X3-Hybrid-G4", "rated_power": 12000},
|
73
|
+
"H34C15": {"model": "X3-Hybrid-G4", "rated_power": 15000},
|
74
|
+
"H34B05": {"model": "X3-Hybrid-G4", "rated_power": 5000},
|
75
|
+
"H34B06": {"model": "X3-Hybrid-G4", "rated_power": 6000},
|
76
|
+
"H34B08": {"model": "X3-Hybrid-G4", "rated_power": 8000},
|
77
|
+
"H34B10": {"model": "X3-Hybrid-G4", "rated_power": 10000},
|
78
|
+
"H34B12": {"model": "X3-Hybrid-G4", "rated_power": 12000},
|
79
|
+
"H34B15": {"model": "X3-Hybrid-G4", "rated_power": 15000},
|
80
|
+
"H34A05": {"model": "X3-Hybrid-G4", "rated_power": 5000},
|
81
|
+
"H34A06": {"model": "X3-Hybrid-G4", "rated_power": 6000},
|
82
|
+
"H34A08": {"model": "X3-Hybrid-G4", "rated_power": 8000},
|
83
|
+
"H34A10": {"model": "X3-Hybrid-G4", "rated_power": 10000},
|
84
|
+
"H34A12": {"model": "X3-Hybrid-G4", "rated_power": 12000},
|
85
|
+
"H34A15": {"model": "X3-Hybrid-G4", "rated_power": 15000},
|
86
|
+
"H34T05": {"model": "X3-Hybrid-G4", "rated_power": 5000},
|
87
|
+
"H34T06": {"model": "X3-Hybrid-G4", "rated_power": 6000},
|
88
|
+
"H34T08": {"model": "X3-Hybrid-G4", "rated_power": 8000},
|
89
|
+
"H34T10": {"model": "X3-Hybrid-G4", "rated_power": 10000},
|
90
|
+
"H34T12": {"model": "X3-Hybrid-G4", "rated_power": 12000},
|
91
|
+
"H34T15": {"model": "X3-Hybrid-G4", "rated_power": 15000},
|
92
|
+
"H430": {"model": "X1-Hybrid-G4", "rated_power": 3000},
|
93
|
+
"H437": {"model": "X1-Hybrid-G4", "rated_power": 3700},
|
94
|
+
"H450": {"model": "X1-Hybrid-G4", "rated_power": 5000},
|
95
|
+
"H460": {"model": "X1-Hybrid-G4", "rated_power": 6000},
|
96
|
+
"H475": {"model": "X1-Hybrid-G4", "rated_power": 7500},
|
97
|
+
"H35M05": {"model": "X3-IES", "rated_power": 5000},
|
98
|
+
"H35M06": {"model": "X3-IES", "rated_power": 6000},
|
99
|
+
"H35M08": {"model": "X3-IES", "rated_power": 8000},
|
100
|
+
"H35M10": {"model": "X3-IES", "rated_power": 10000},
|
101
|
+
"H35M12": {"model": "X3-IES", "rated_power": 12000},
|
102
|
+
"H35M15": {"model": "X3-IES", "rated_power": 15000},
|
103
|
+
"H35D05": {"model": "X3-IES", "rated_power": 5000},
|
104
|
+
"H35D06": {"model": "X3-IES", "rated_power": 6000},
|
105
|
+
"H35D08": {"model": "X3-IES", "rated_power": 8000},
|
106
|
+
"H35D10": {"model": "X3-IES", "rated_power": 10000},
|
107
|
+
"H35D12": {"model": "X3-IES", "rated_power": 12000},
|
108
|
+
"H35D15": {"model": "X3-IES", "rated_power": 15000},
|
109
|
+
"H35C05": {"model": "X3-IES", "rated_power": 5000},
|
110
|
+
"H35C06": {"model": "X3-IES", "rated_power": 6000},
|
111
|
+
"H35C08": {"model": "X3-IES", "rated_power": 8000},
|
112
|
+
"H35C10": {"model": "X3-IES", "rated_power": 10000},
|
113
|
+
"H35C12": {"model": "X3-IES", "rated_power": 12000},
|
114
|
+
"H35C15": {"model": "X3-IES", "rated_power": 15000},
|
115
|
+
"H35B05": {"model": "X3-IES", "rated_power": 5000},
|
116
|
+
"H35B06": {"model": "X3-IES", "rated_power": 6000},
|
117
|
+
"H35B08": {"model": "X3-IES", "rated_power": 8000},
|
118
|
+
"H35B10": {"model": "X3-IES", "rated_power": 10000},
|
119
|
+
"H35B12": {"model": "X3-IES", "rated_power": 12000},
|
120
|
+
"H35B15": {"model": "X3-IES", "rated_power": 15000},
|
121
|
+
"H35A05": {"model": "X3-IES", "rated_power": 5000},
|
122
|
+
"H35A06": {"model": "X3-IES", "rated_power": 6000},
|
123
|
+
"H35A08": {"model": "X3-IES", "rated_power": 8000},
|
124
|
+
"H35A10": {"model": "X3-IES", "rated_power": 10000},
|
125
|
+
"H35A12": {"model": "X3-IES", "rated_power": 12000},
|
126
|
+
"H35A15": {"model": "X3-IES", "rated_power": 15000},
|
127
|
+
"H35T05": {"model": "X3-IES", "rated_power": 5000},
|
128
|
+
"H35T06": {"model": "X3-IES", "rated_power": 6000},
|
129
|
+
"H35T08": {"model": "X3-IES", "rated_power": 8000},
|
130
|
+
"H35T10": {"model": "X3-IES", "rated_power": 10000},
|
131
|
+
"H35T12": {"model": "X3-IES", "rated_power": 12000},
|
132
|
+
"H35T15": {"model": "X3-IES", "rated_power": 15000},
|
133
|
+
"H530": {"model": "X1-IES", "rated_power": 3000},
|
134
|
+
"H537": {"model": "X1-IES", "rated_power": 3700},
|
135
|
+
"H546": {"model": "X1-IES", "rated_power": 4600},
|
136
|
+
"H550": {"model": "X1-IES", "rated_power": 5000},
|
137
|
+
"H560": {"model": "X1-IES", "rated_power": 6000},
|
138
|
+
"H580": {"model": "X1-IES", "rated_power": 8000},
|
139
|
+
"H3BC15": {"model": "X3-ULT", "rated_power": 15000},
|
140
|
+
"H3BD15": {"model": "X3-ULT", "rated_power": 15000},
|
141
|
+
"H3BE15": {"model": "X3-ULT", "rated_power": 15000},
|
142
|
+
"H3BF15": {"model": "X3-ULT", "rated_power": 15000},
|
143
|
+
"H3BG15": {"model": "X3-ULT", "rated_power": 15000},
|
144
|
+
"H3BC20": {"model": "X3-ULT", "rated_power": 20000},
|
145
|
+
"H3BD20": {"model": "X3-ULT", "rated_power": 20000},
|
146
|
+
"H3BE20": {"model": "X3-ULT", "rated_power": 20000},
|
147
|
+
"H3BF20": {"model": "X3-ULT", "rated_power": 20000},
|
148
|
+
"H3BG20": {"model": "X3-ULT", "rated_power": 20000},
|
149
|
+
"H3BC25": {"model": "X3-ULT", "rated_power": 25000},
|
150
|
+
"H3BD25": {"model": "X3-ULT", "rated_power": 25000},
|
151
|
+
"H3BE25": {"model": "X3-ULT", "rated_power": 25000},
|
152
|
+
"H3BF25": {"model": "X3-ULT", "rated_power": 25000},
|
153
|
+
"H3BG25": {"model": "X3-ULT", "rated_power": 25000},
|
154
|
+
"H3BC30": {"model": "X3-ULT", "rated_power": 30000},
|
155
|
+
"H3BD30": {"model": "X3-ULT", "rated_power": 30000},
|
156
|
+
"H3BE30": {"model": "X3-ULT", "rated_power": 30000},
|
157
|
+
"H3BF30": {"model": "X3-ULT", "rated_power": 30000},
|
158
|
+
"H3BG30": {"model": "X3-ULT", "rated_power": 30000},
|
159
|
+
},
|
160
|
+
"L": {
|
161
|
+
"L3G020": {"model": "X3-MGA-G2", "rated_power": 20000},
|
162
|
+
"L3G025": {"model": "X3-MGA-G2", "rated_power": 25000},
|
163
|
+
"L3G030": {"model": "X3-MGA-G2", "rated_power": 30000},
|
164
|
+
"L3G040": {"model": "X3-MGA-G2", "rated_power": 40000},
|
165
|
+
"L3G035": {"model": "X3-MGA-G2", "rated_power": 35000},
|
166
|
+
"L3G050": {"model": "X3-MGA-G2", "rated_power": 50000},
|
167
|
+
"L3G060": {"model": "X3-MGA-G2", "rated_power": 60000},
|
168
|
+
},
|
169
|
+
"M": {
|
170
|
+
"MC203": {"model": "X3-MIC-G2", "rated_power": 3000},
|
171
|
+
"MC204": {"model": "X3-MIC-G2", "rated_power": 4000},
|
172
|
+
"MC205": {"model": "X3-MIC-G2", "rated_power": 5000},
|
173
|
+
"MC206": {"model": "X3-MIC-G2", "rated_power": 6000},
|
174
|
+
"MC208": {"model": "X3-MIC-G2", "rated_power": 8000},
|
175
|
+
"MC210": {"model": "X3-MIC-G2", "rated_power": 10000},
|
176
|
+
"MC212": {"model": "X3-MIC-G2", "rated_power": 12000},
|
177
|
+
"MC215": {"model": "X3-MIC-G2", "rated_power": 15000},
|
178
|
+
"MPT30": {"model": "X3-PRO-G2", "rated_power": 30000},
|
179
|
+
"MPT25": {"model": "X3-PRO-G2", "rated_power": 25000},
|
180
|
+
"MPT20": {"model": "X3-PRO-G2", "rated_power": 20000},
|
181
|
+
"MPT17": {"model": "X3-PRO-G2", "rated_power": 17000},
|
182
|
+
"MPT15": {"model": "X3-PRO-G2", "rated_power": 15000},
|
183
|
+
"MPT12": {"model": "X3-PRO-G2", "rated_power": 12000},
|
184
|
+
"MPT10": {"model": "X3-PRO-G2", "rated_power": 10000},
|
185
|
+
"MPT08": {"model": "X3-PRO-G2", "rated_power": 8000},
|
186
|
+
},
|
187
|
+
"P": {
|
188
|
+
"P3F040": {"model": "X3-FTH", "rated_power": 40000},
|
189
|
+
"P3F050": {"model": "X3-FTH", "rated_power": 50000},
|
190
|
+
"P3F060": {"model": "X3-FTH", "rated_power": 60000},
|
191
|
+
"P3F070": {"model": "X3-FTH", "rated_power": 70000},
|
192
|
+
"P3F080": {"model": "X3-FTH", "rated_power": 80000},
|
193
|
+
"P3F100": {"model": "X3-FTH", "rated_power": 100000},
|
194
|
+
"P3F110": {"model": "X3-FTH", "rated_power": 110000},
|
195
|
+
"P3F120": {"model": "X3-FTH", "rated_power": 120000},
|
196
|
+
"P3F125": {"model": "X3-FTH", "rated_power": 125000},
|
197
|
+
"P3F136": {"model": "X3-FTH", "rated_power": 136000},
|
198
|
+
"P3F150": {"model": "X3-FTH", "rated_power": 150000},
|
199
|
+
},
|
200
|
+
"X": {
|
201
|
+
"X3F040": {"model": "X3-FTH", "rated_power": 40000},
|
202
|
+
"X3F050": {"model": "X3-FTH", "rated_power": 50000},
|
203
|
+
"X3F060": {"model": "X3-FTH", "rated_power": 60000},
|
204
|
+
"X3F070": {"model": "X3-FTH", "rated_power": 70000},
|
205
|
+
"X3F080": {"model": "X3-FTH", "rated_power": 80000},
|
206
|
+
"X3F100": {"model": "X3-FTH", "rated_power": 100000},
|
207
|
+
"X3F110": {"model": "X3-FTH", "rated_power": 110000},
|
208
|
+
"X3F120": {"model": "X3-FTH", "rated_power": 120000},
|
209
|
+
"X3F125": {"model": "X3-FTH", "rated_power": 125000},
|
210
|
+
"X3F136": {"model": "X3-FTH", "rated_power": 136000},
|
211
|
+
"X3F150": {"model": "X3-FTH", "rated_power": 150000},
|
212
|
+
"X3G020": {"model": "X3-MGA-G2", "rated_power": 20000},
|
213
|
+
"X3G025": {"model": "X3-MGA-G2", "rated_power": 25000},
|
214
|
+
"X3G030": {"model": "X3-MGA-G2", "rated_power": 30000},
|
215
|
+
"X3G040": {"model": "X3-MGA-G2", "rated_power": 40000},
|
216
|
+
"X3G035": {"model": "X3-MGA-G2", "rated_power": 35000},
|
217
|
+
"X3G050": {"model": "X3-MGA-G2", "rated_power": 50000},
|
218
|
+
"X3G060": {"model": "X3-MGA-G2", "rated_power": 60000},
|
219
|
+
"XB4030": {"model": "X1-BOOST-G4", "rated_power": 3000},
|
220
|
+
"XB40330": {"model": "X1-BOOST-G4", "rated_power": 3300},
|
221
|
+
"XB4036": {"model": "X1-BOOST-G4", "rated_power": 3600},
|
222
|
+
"XB4042": {"model": "X1-BOOST-G4", "rated_power": 4200},
|
223
|
+
"XB4050": {"model": "X1-BOOST-G4", "rated_power": 5000},
|
224
|
+
"XB4055": {"model": "X1-BOOST-G4", "rated_power": 5500},
|
225
|
+
"XB4060": {"model": "X1-BOOST-G4", "rated_power": 6000},
|
226
|
+
"XB4A30": {"model": "X1-BOOST-G4", "rated_power": 3000},
|
227
|
+
"XB4A330": {"model": "X1-BOOST-G4", "rated_power": 3300},
|
228
|
+
"XB4A36": {"model": "X1-BOOST-G4", "rated_power": 3600},
|
229
|
+
"XB4A42": {"model": "X1-BOOST-G4", "rated_power": 4200},
|
230
|
+
"XB4A50": {"model": "X1-BOOST-G4", "rated_power": 5000},
|
231
|
+
"XB4A55": {"model": "X1-BOOST-G4", "rated_power": 5500},
|
232
|
+
"XB4A60": {"model": "X1-BOOST-G4", "rated_power": 6000},
|
233
|
+
"XM4006": {"model": "X1-MINI-G4", "rated_power": 600},
|
234
|
+
"XM4007": {"model": "X1-MINI-G4", "rated_power": 700},
|
235
|
+
"XM4008": {"model": "X1-MINI-G4", "rated_power": 800},
|
236
|
+
"XM4011": {"model": "X1-MINI-G4", "rated_power": 1100},
|
237
|
+
"XM4015": {"model": "X1-MINI-G4", "rated_power": 1500},
|
238
|
+
"XM4020": {"model": "X1-MINI-G4", "rated_power": 2000},
|
239
|
+
"XM4025": {"model": "X1-MINI-G4", "rated_power": 2500},
|
240
|
+
"XM4030": {"model": "X1-MINI-G4", "rated_power": 3000},
|
241
|
+
"XM4033": {"model": "X1-MINI-G4", "rated_power": 3300},
|
242
|
+
"XM4037": {"model": "X1-MINI-G4", "rated_power": 3700},
|
243
|
+
"XM4040": {"model": "X1-MINI-G4", "rated_power": 4000},
|
244
|
+
"XSTA05": {"model": "X1-SMART-G2", "rated_power": 5000},
|
245
|
+
"XSTA06": {"model": "X1-SMART-G2", "rated_power": 6000},
|
246
|
+
"XSTA07": {"model": "X1-SMART-G2", "rated_power": 7000},
|
247
|
+
"XSTA08": {"model": "X1-SMART-G2", "rated_power": 8000},
|
248
|
+
"XSTA09": {"model": "X1-SMART-G2", "rated_power": 9000},
|
249
|
+
"XSTA10": {"model": "X1-SMART-G2", "rated_power": 10000},
|
250
|
+
},
|
251
|
+
"5": {
|
252
|
+
"50204": {"model": "X1-HAC-4P", "rated_power": 4600},
|
253
|
+
"50207": {"model": "X1-HAC-7P", "rated_power": 7200},
|
254
|
+
"50209": {"model": "X1-HAC-9P", "rated_power": 9600},
|
255
|
+
"5020B": {"model": "X1-HAC-11P", "rated_power": 11000},
|
256
|
+
"5020M": {"model": "X1-HAC-22P", "rated_power": 22000},
|
257
|
+
"50304": {"model": "X3-HAC-4P", "rated_power": 4600},
|
258
|
+
"50307": {"model": "X3-HAC-7P", "rated_power": 7200},
|
259
|
+
"50309": {"model": "X3-HAC-9P", "rated_power": 9600},
|
260
|
+
"5030B": {"model": "X3-HAC-11P", "rated_power": 11000},
|
261
|
+
"5030M": {"model": "X3-HAC-22P", "rated_power": 22000},
|
262
|
+
"50404": {"model": "J1-HAC-4P", "rated_power": 4600},
|
263
|
+
"50407": {"model": "J1-HAC-7P", "rated_power": 7200},
|
264
|
+
"50409": {"model": "J1-HAC-9P", "rated_power": 9000},
|
265
|
+
"5040B": {"model": "J1-HAC-11P", "rated_power": 11000},
|
266
|
+
"5040M": {"model": "J1-HAC-22P", "rated_power": 22000},
|
267
|
+
"50504": {"model": "A1-HAC-4P", "rated_power": 4600},
|
268
|
+
"50507": {"model": "A1-HAC-7P", "rated_power": 7200},
|
269
|
+
"50509": {"model": "A1-HAC-9P", "rated_power": 9000},
|
270
|
+
"5050B": {"model": "A1-HAC-11P", "rated_power": 11000},
|
271
|
+
"5050M": {"model": "A1-HAC-22P", "rated_power": 22000},
|
272
|
+
"50604": {"model": "X1-HAC-4S", "rated_power": 4600},
|
273
|
+
"50607": {"model": "X1-HAC-7S", "rated_power": 7200},
|
274
|
+
"50609": {"model": "X1-HAC-9S", "rated_power": 9600},
|
275
|
+
"5060B": {"model": "X1-HAC-11S", "rated_power": 11000},
|
276
|
+
"5060M": {"model": "X1-HAC-22S", "rated_power": 22000},
|
277
|
+
"50704": {"model": "X3-HAC-4S", "rated_power": 4600},
|
278
|
+
"50707": {"model": "X3-HAC-7S", "rated_power": 7200},
|
279
|
+
"50709": {"model": "X3-HAC-9S", "rated_power": 9600},
|
280
|
+
"5070B": {"model": "X3-HAC-11S", "rated_power": 11000},
|
281
|
+
"5070M": {"model": "X3-HAC-22S", "rated_power": 22000},
|
282
|
+
"50804": {"model": "C1-HAC-4P", "rated_power": 4600},
|
283
|
+
"50807": {"model": "C1-HAC-7P", "rated_power": 7200},
|
284
|
+
"50809": {"model": "C1-HAC-9P", "rated_power": 9600},
|
285
|
+
"5080B": {"model": "C1-HAC-11P", "rated_power": 11000},
|
286
|
+
"5080M": {"model": "C1-HAC-22P", "rated_power": 22000},
|
287
|
+
"50904": {"model": "C3-HAC-4P", "rated_power": 4600},
|
288
|
+
"50907": {"model": "C3-HAC-7P", "rated_power": 7200},
|
289
|
+
"50909": {"model": "C3-HAC-9P", "rated_power": 9600},
|
290
|
+
"5090B": {"model": "C3-HAC-11P", "rated_power": 11000},
|
291
|
+
"5090M": {"model": "C3-HAC-22P", "rated_power": 22000},
|
292
|
+
},
|
293
|
+
"3": {
|
294
|
+
"30P2B00": {"model": "X3-FTH-PLUS", "rated_power": 75000},
|
295
|
+
"30P3400": {"model": "X3-FTH-PLUS", "rated_power": 100000},
|
296
|
+
"30P3E00": {"model": "X3-FTH-PLUS", "rated_power": 110000},
|
297
|
+
"30P3Y00": {"model": "X3-FTH-PLUS", "rated_power": 120000},
|
298
|
+
"30P3T00": {"model": "X3-FTH-PLUS", "rated_power": 125000},
|
299
|
+
"30P4800": {"model": "X3-FTH-PLUS", "rated_power": 136000},
|
300
|
+
"30P4M00": {"model": "X3-FTH-PLUS", "rated_power": 150000},
|
301
|
+
"30Y9C00": {"model": "X3-GRAND", "rated_power": 300000},
|
302
|
+
"30YA000": {"model": "X3-GRAND", "rated_power": 320000},
|
303
|
+
"30YAA00": {"model": "X3-GRAND", "rated_power": 330000},
|
304
|
+
"30YAD00": {"model": "X3-GRAND", "rated_power": 333000},
|
305
|
+
"30YAU00": {"model": "X3-GRAND", "rated_power": 350000},
|
306
|
+
},
|
307
|
+
"166": "ZTY-1",
|
308
|
+
"167": "ZTY-3",
|
309
|
+
"SEVEN": "3S-IS",
|
310
|
+
"PMC-340": "EM300",
|
311
|
+
"PMC-53A": "EM700",
|
312
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
from .base import InverterProtocol
|
2
|
+
|
3
|
+
|
4
|
+
inverter_protocol_map = {}
|
5
|
+
|
6
|
+
|
7
|
+
def register_protocol(protocol_class: InverterProtocol):
|
8
|
+
if protocol_class.inverter_model is None:
|
9
|
+
raise RuntimeError("未找到对应的设备类型")
|
10
|
+
inverter_protocol_map[protocol_class.inverter_model] = protocol_class
|
11
|
+
|
12
|
+
|
13
|
+
def ProtocolFactory(inverter_model: int, *args, **kwargs) -> InverterProtocol:
|
14
|
+
"""
|
15
|
+
创建协议实例。
|
16
|
+
inverter_model: 逆变器类型
|
17
|
+
device_info: 设备信息。
|
18
|
+
data: 数据。
|
19
|
+
"""
|
20
|
+
protocol_class = inverter_protocol_map.get(inverter_model)
|
21
|
+
if not protocol_class:
|
22
|
+
raise ValueError(f"未找到名为 '{str(inverter_model)}' 的协议")
|
23
|
+
return protocol_class(*args, **kwargs)
|
24
|
+
|
25
|
+
|
26
|
+
def match_pcs(operate_queue, slave_num):
|
27
|
+
for device_model in inverter_protocol_map.keys():
|
28
|
+
client = ProtocolFactory(device_model)
|
29
|
+
sn_data = client.read_sn(operate_queue.modbus_rtu, slave_num)
|
30
|
+
if not sn_data:
|
31
|
+
continue
|
32
|
+
sn = get_char(sn_data)
|
33
|
+
inverter_model, _ = client.parse_sn(sn)
|
34
|
+
if inverter_model:
|
35
|
+
return inverter_model, sn
|
36
|
+
return None, None
|
@@ -0,0 +1,215 @@
|
|
1
|
+
import json
|
2
|
+
from abc import ABCMeta, abstractmethod
|
3
|
+
from collections import OrderedDict
|
4
|
+
from datetime import datetime
|
5
|
+
from typing import List, Union
|
6
|
+
|
7
|
+
from pydantic.class_validators import Validator
|
8
|
+
|
9
|
+
from solax_py_library.device.types.inverter_config import InverterConfig, InverterPoint
|
10
|
+
from solax_py_library.device.types.modbus_point import WriteModbusPoint, ReadModbusPoint
|
11
|
+
from solax_py_library.utils.common import round_value
|
12
|
+
from solax_py_library.utils.struct_util import unpack
|
13
|
+
|
14
|
+
|
15
|
+
class InverterProtocol(metaclass=ABCMeta):
|
16
|
+
inverter_model: None
|
17
|
+
|
18
|
+
def __init__(self, point_config):
|
19
|
+
self.col_name_index_map = OrderedDict()
|
20
|
+
self.col_index_name_map = OrderedDict()
|
21
|
+
self.col_id_index_map = {}
|
22
|
+
self.sn_config = None
|
23
|
+
self.shutdown_config = None
|
24
|
+
self.boot_up_config = None
|
25
|
+
self.time_config = None
|
26
|
+
self.version_config = None
|
27
|
+
self.error_map = None
|
28
|
+
self._prepare(point_config)
|
29
|
+
|
30
|
+
def _prepare(self, point_config: str):
|
31
|
+
point_config = json.loads(point_config)
|
32
|
+
self.real_data_start_address = None
|
33
|
+
self.real_data_end_address = None
|
34
|
+
try:
|
35
|
+
point_config = InverterConfig(**point_config)
|
36
|
+
except Validator as e:
|
37
|
+
print(e)
|
38
|
+
for index, real_point in enumerate(point_config.real_data):
|
39
|
+
point_key = real_point.point_key
|
40
|
+
point_id = real_point.point_id
|
41
|
+
self.col_name_index_map[point_key] = real_point
|
42
|
+
self.col_index_name_map[point_id] = real_point
|
43
|
+
self.col_id_index_map[point_id] = index
|
44
|
+
self.real_data_start_address = min(
|
45
|
+
self.real_data_start_address, real_point.starting_address
|
46
|
+
)
|
47
|
+
self.real_data_end_address = max(
|
48
|
+
self.real_data_end_address,
|
49
|
+
real_point.starting_address + real_point.quantity_of_x - 1,
|
50
|
+
)
|
51
|
+
|
52
|
+
self.sn_config = point_config.other_data.sn
|
53
|
+
self.shutdown_config = point_config.other_data.shutdown
|
54
|
+
self.boot_up_config = point_config.other_data.boot_up
|
55
|
+
self.time_config = point_config.other_data.time
|
56
|
+
self.version_config = point_config.other_data.version
|
57
|
+
|
58
|
+
self.error_map = point_config.error_map
|
59
|
+
|
60
|
+
def read_real_data(self, modbus_client, slave):
|
61
|
+
real_data = self._execute_modbus(
|
62
|
+
modbus_client,
|
63
|
+
slave,
|
64
|
+
ReadModbusPoint(
|
65
|
+
starting_address=self.real_data_start_address,
|
66
|
+
quantity_of_x=self.real_data_end_address
|
67
|
+
- self.real_data_start_address
|
68
|
+
+ 1,
|
69
|
+
function_code=InverterPoint.function_code,
|
70
|
+
),
|
71
|
+
)
|
72
|
+
ret_real_data = {}
|
73
|
+
for point_id, point_info in self.col_index_name_map.items():
|
74
|
+
offset = point_info.starting_address
|
75
|
+
data = real_data[offset : offset + point_info.quantity_of_x]
|
76
|
+
ret_real_data[point_id] = self._parse_point_data(point_info, data)
|
77
|
+
return ret_real_data
|
78
|
+
|
79
|
+
def read_real_data_to_list(self, modbus_client, slave):
|
80
|
+
real_data = self.read_real_data(modbus_client, slave)
|
81
|
+
return list(real_data.values())
|
82
|
+
|
83
|
+
def _parse_point_data(self, point_info: InverterPoint, point_data):
|
84
|
+
value = unpack(
|
85
|
+
point_data, data_format=point_info.register_dataformat, reversed=True
|
86
|
+
)
|
87
|
+
accuracy = point_info.accuracy
|
88
|
+
return round_value(value * accuracy, 3)
|
89
|
+
|
90
|
+
def get_data_by_point_id_from_list(self, point_id, real_data):
|
91
|
+
point_index = self.col_id_index_map[point_id]
|
92
|
+
return real_data[point_index]
|
93
|
+
|
94
|
+
@abstractmethod
|
95
|
+
def get_real_power(self, read_data):
|
96
|
+
raise NotImplementedError()
|
97
|
+
|
98
|
+
@abstractmethod
|
99
|
+
def get_error_data(self, read_data):
|
100
|
+
raise NotImplementedError()
|
101
|
+
|
102
|
+
@abstractmethod
|
103
|
+
def parse_pcs_status(self, read_data):
|
104
|
+
...
|
105
|
+
|
106
|
+
@abstractmethod
|
107
|
+
def parse_error_code(self, error_data):
|
108
|
+
...
|
109
|
+
|
110
|
+
def error_to_alarm_code(self, error_codes: List[int]):
|
111
|
+
if not self.error_map:
|
112
|
+
return error_codes
|
113
|
+
alarm_codes = []
|
114
|
+
for error_code in error_codes:
|
115
|
+
if alarm_code := self.error_map.get(error_code):
|
116
|
+
alarm_codes.append(alarm_code)
|
117
|
+
return alarm_codes
|
118
|
+
|
119
|
+
def pv_power_data(self, real_data):
|
120
|
+
...
|
121
|
+
|
122
|
+
def get_pv_capacity(self, real_data, history_data):
|
123
|
+
...
|
124
|
+
|
125
|
+
def get_active_power(self, read_data):
|
126
|
+
...
|
127
|
+
|
128
|
+
def get_reactive_power(self, read_data):
|
129
|
+
...
|
130
|
+
|
131
|
+
# ============================== read or write =========================================
|
132
|
+
|
133
|
+
def _execute_modbus(
|
134
|
+
self,
|
135
|
+
modbus_client,
|
136
|
+
slave_num,
|
137
|
+
point_info: Union[WriteModbusPoint, ReadModbusPoint],
|
138
|
+
output_value=None,
|
139
|
+
):
|
140
|
+
try:
|
141
|
+
ret = modbus_client.read_and_write(
|
142
|
+
slave_num,
|
143
|
+
**point_info.dict(
|
144
|
+
include={"starting_address", "quantity_of_x", "function_code"}
|
145
|
+
),
|
146
|
+
output_value=output_value,
|
147
|
+
)
|
148
|
+
except Exception as e:
|
149
|
+
print(e)
|
150
|
+
return ret
|
151
|
+
|
152
|
+
def shutdown(self, modbus_client, slave_num):
|
153
|
+
self._execute_modbus(
|
154
|
+
modbus_client,
|
155
|
+
slave_num,
|
156
|
+
self.shutdown_config,
|
157
|
+
output_value=self.shutdown_config.output_value,
|
158
|
+
)
|
159
|
+
|
160
|
+
def boot_up(self, modbus_client, slave_num):
|
161
|
+
self._execute_modbus(
|
162
|
+
modbus_client,
|
163
|
+
slave_num,
|
164
|
+
self.boot_up_config,
|
165
|
+
output_value=self.boot_up_config.output_value,
|
166
|
+
)
|
167
|
+
|
168
|
+
def read_sn(self, modbus_client, slave_num):
|
169
|
+
return self._execute_modbus(modbus_client, slave_num, self.sn_config)
|
170
|
+
|
171
|
+
def read_soft_version_and_hard_version(self, modbus_client, slave_num):
|
172
|
+
soft_inv_version = self.read_soft_version(modbus_client, slave_num)
|
173
|
+
hard_inv_version = self.read_hard_version(modbus_client, slave_num)
|
174
|
+
return soft_inv_version, hard_inv_version
|
175
|
+
|
176
|
+
def read_soft_version(self, modbus_client, slave_num):
|
177
|
+
return self._execute_modbus(
|
178
|
+
modbus_client, slave_num, self.version_config.software
|
179
|
+
)
|
180
|
+
|
181
|
+
def read_hard_version(self, modbus_client, slave_num):
|
182
|
+
return self._execute_modbus(
|
183
|
+
modbus_client, slave_num, self.version_config.hardware
|
184
|
+
)
|
185
|
+
|
186
|
+
def get_upgrade_value(self, crc, file_size):
|
187
|
+
crc_nums = [crc[1], crc[0]]
|
188
|
+
file_size = [file_size[1], file_size[0]]
|
189
|
+
value = (
|
190
|
+
[self.inverter_model]
|
191
|
+
+ crc_nums
|
192
|
+
+ [1, 0, 0, 0, 0, 0, 0]
|
193
|
+
+ file_size
|
194
|
+
+ [1, 0, 0]
|
195
|
+
)
|
196
|
+
return value
|
197
|
+
|
198
|
+
def write_pcs_time(self, modbus_client, slave_num):
|
199
|
+
self._execute_modbus(
|
200
|
+
modbus_client,
|
201
|
+
slave_num,
|
202
|
+
self.time_config,
|
203
|
+
output_value=self._build_pcs_time_value(),
|
204
|
+
)
|
205
|
+
|
206
|
+
def _build_pcs_time_value(self):
|
207
|
+
cur_time = datetime.now()
|
208
|
+
return [
|
209
|
+
cur_time.year,
|
210
|
+
cur_time.month,
|
211
|
+
cur_time.day,
|
212
|
+
cur_time.hour,
|
213
|
+
cur_time.minute,
|
214
|
+
cur_time.second,
|
215
|
+
]
|
File without changes
|
@@ -0,0 +1,41 @@
|
|
1
|
+
from typing import List, Optional, Dict
|
2
|
+
from modbus_tk import defines
|
3
|
+
|
4
|
+
from pydantic import BaseModel
|
5
|
+
from enum import IntEnum
|
6
|
+
|
7
|
+
from solax_py_library.device.types.modbus_point import ReadModbusPoint, WriteModbusPoint
|
8
|
+
|
9
|
+
|
10
|
+
class InverterModel(IntEnum):
|
11
|
+
...
|
12
|
+
|
13
|
+
def __str__(self):
|
14
|
+
...
|
15
|
+
|
16
|
+
|
17
|
+
class InverterPoint(ReadModbusPoint):
|
18
|
+
description: Optional[str]
|
19
|
+
point_key: str
|
20
|
+
point_id: int
|
21
|
+
accuracy: Optional[float]
|
22
|
+
function_code: int = defines.READ_INPUT_REGISTERS
|
23
|
+
|
24
|
+
|
25
|
+
class InverterVersionConfig(BaseModel):
|
26
|
+
software: ReadModbusPoint
|
27
|
+
hardware: ReadModbusPoint
|
28
|
+
|
29
|
+
|
30
|
+
class InverterSystemConfig(BaseModel):
|
31
|
+
sn: ReadModbusPoint
|
32
|
+
shutdown: WriteModbusPoint
|
33
|
+
boot_up: WriteModbusPoint
|
34
|
+
time: WriteModbusPoint
|
35
|
+
version: InverterVersionConfig
|
36
|
+
|
37
|
+
|
38
|
+
class InverterConfig(BaseModel):
|
39
|
+
real_data: List[InverterPoint]
|
40
|
+
other_data: InverterSystemConfig
|
41
|
+
error_map: Dict[int, int]
|