solax-py-library 1.0.0.2521__tar.gz → 1.0.0.2601__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.
Files changed (83) hide show
  1. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/PKG-INFO +1 -1
  2. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/pyproject.toml +1 -1
  3. solax_py_library-1.0.0.2601/solax_py_library/device/types/device.py +16 -0
  4. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/condition/cabinet_condition.py +17 -14
  5. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/types/condition.py +1 -1
  6. solax_py_library-1.0.0.2601/solax_py_library/smart_scene/types/condition_value.py +30 -0
  7. solax_py_library-1.0.0.2601/solax_py_library/test/test_smart_scene/test_condition.py +45 -0
  8. solax_py_library-1.0.0.2521/solax_py_library/test/test_smart_scene/test_condition.py +0 -11
  9. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/README.md +0 -0
  10. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/__init__.py +0 -0
  11. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/device/__init__.py +0 -0
  12. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/device/constant/__init__.py +0 -0
  13. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/device/constant/cabinet.py +0 -0
  14. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/device/constant/inverter_model_info.py +0 -0
  15. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/device/core/__init__.py +0 -0
  16. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/device/core/interver/__init__.py +0 -0
  17. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/device/core/interver/base.py +0 -0
  18. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/device/types/__init__.py +0 -0
  19. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/device/types/alarm.py +0 -0
  20. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/device/types/inverter_config.py +0 -0
  21. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/device/types/modbus_point.py +0 -0
  22. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/exception.py +0 -0
  23. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/__init__.py +0 -0
  24. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/constant/__init__.py +0 -0
  25. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/constant/message_entry.py +0 -0
  26. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/__init__.py +0 -0
  27. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/action/__init__.py +0 -0
  28. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/action/base.py +0 -0
  29. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/action/ems_action.py +0 -0
  30. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/action/system_action.py +0 -0
  31. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/condition/__init__.py +0 -0
  32. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/condition/base.py +0 -0
  33. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/condition/date_condition.py +0 -0
  34. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/condition/price_condition.py +0 -0
  35. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/condition/system_condition.py +0 -0
  36. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/condition/weather_condition.py +0 -0
  37. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/service/__init__.py +0 -0
  38. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/core/service/runner.py +0 -0
  39. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/exceptions/__init__.py +0 -0
  40. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/exceptions/price.py +0 -0
  41. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/exceptions/smart_scene.py +0 -0
  42. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/exceptions/weather.py +0 -0
  43. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/types/__init__.py +0 -0
  44. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/types/action.py +0 -0
  45. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/smart_scene/types/smart_scene_content.py +0 -0
  46. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/__init__.py +0 -0
  47. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/constant/__init__.py +0 -0
  48. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/constant/crc_table.py +0 -0
  49. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/core/__init__.py +0 -0
  50. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/core/base_modbus.py +0 -0
  51. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/core/parser.py +0 -0
  52. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/core/snap_shot.py +0 -0
  53. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/exceptions/__init__.py +0 -0
  54. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/exceptions/snap_shot.py +0 -0
  55. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/test/__init__.py +0 -0
  56. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/types/__init__.py +0 -0
  57. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/snap_shot/types/address.py +0 -0
  58. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/test/__init__.py +0 -0
  59. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/test/test_smart_scene/__init__.py +0 -0
  60. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/test/test_utils/__init__.py +0 -0
  61. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/test/test_utils/test_cloud_client.py +0 -0
  62. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/__init__.py +0 -0
  63. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/api/__init__.py +0 -0
  64. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/api/service.py +0 -0
  65. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/core/__init__.py +0 -0
  66. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/core/data_adapter/__init__.py +0 -0
  67. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/core/data_adapter/base.py +0 -0
  68. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/core/data_adapter/csv.py +0 -0
  69. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/core/upload_service/__init__.py +0 -0
  70. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/core/upload_service/base.py +0 -0
  71. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/core/upload_service/ftp.py +0 -0
  72. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/exceptions/__init__.py +0 -0
  73. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/exceptions/upload_error.py +0 -0
  74. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/test/__init__.py +0 -0
  75. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/test/test_ftp.py +0 -0
  76. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/types/__init__.py +0 -0
  77. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/types/client.py +0 -0
  78. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/upload/types/ftp.py +0 -0
  79. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/utils/__init__.py +0 -0
  80. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/utils/cloud_client.py +0 -0
  81. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/utils/common.py +0 -0
  82. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/utils/struct_util.py +0 -0
  83. {solax_py_library-1.0.0.2521 → solax_py_library-1.0.0.2601}/solax_py_library/utils/time_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: solax-py-library
3
- Version: 1.0.0.2521
3
+ Version: 1.0.0.2601
4
4
  Summary: some common tool
5
5
  Author: shenlvyu
6
6
  Author-email: 13296718439@163.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "solax-py-library"
3
- version = "1.0.0.2521"
3
+ version = "1.0.0.2601"
4
4
  description = "some common tool"
5
5
  authors = ["shenlvyu <13296718439@163.com>", "x5m8944pjl <371630856@qq.com>"]
6
6
  readme = "README.md"
@@ -0,0 +1,16 @@
1
+ from enum import IntEnum
2
+
3
+
4
+ class DeviceType(IntEnum):
5
+ EMS_TYPE = 100
6
+ PCS_TYPE = 1
7
+ BMS_TYPE = 2 # 电池簇
8
+ ELM_TYPE = 3
9
+ EVC_TYPE = 4
10
+ IO_TYPE = 5
11
+ ESS_TYPE = 6 # 机柜
12
+ CELL_TYPE = 7 # 单体
13
+ AIRCONDITIONER_TYPE = 501
14
+ FIRE_SAFETY_TYPE = 502
15
+ COLD_TYPE = 503
16
+ DEHUMIDIFY_TYPE = 504
@@ -7,6 +7,7 @@ from solax_py_library.smart_scene.types.condition import (
7
7
  ConditionType,
8
8
  )
9
9
  from solax_py_library.device.types.alarm import AlarmLevel
10
+ from solax_py_library.smart_scene.types.condition_value import CabinetValue
10
11
 
11
12
 
12
13
  class CabinetCondition(BaseCondition):
@@ -15,30 +16,32 @@ class CabinetCondition(BaseCondition):
15
16
  def __init__(self, update_value_function, **kwargs):
16
17
  super().__init__(update_value_function, **kwargs)
17
18
  self.value = defaultdict(
18
- lambda: {
19
- "soc": 0,
20
- "alarm_level": {
21
- AlarmLevel.EMERGENCY: False,
22
- AlarmLevel.NORMAL: False,
23
- AlarmLevel.TIPS: False,
24
- },
25
- }
19
+ lambda: CabinetValue
26
20
  )
27
21
 
28
22
  def meet_func(self, data: CabinetConditionItemData, ctx):
29
23
  if not self.value:
30
24
  return False
31
25
  cabinet = ctx["cabinet"] or []
26
+ condition_data = data.childData.data
32
27
  for cabinet_sn in cabinet:
28
+ cabinet_value = self.value[cabinet_sn]
29
+ if not cabinet_value:
30
+ continue
33
31
  if data.childType == CabinetConditionType.cabinetSoc:
34
- if self.value[cabinet_sn]["soc"] is None:
35
- return False
32
+ if self.value[cabinet_sn].soc is None:
33
+ continue
36
34
  if data.childData.function.function()(
37
- compare_value=self.value[cabinet_sn]["soc"],
38
- base_value=data.childData.data[0],
35
+ compare_value=self.value[cabinet_sn].soc,
36
+ base_value=condition_data[0],
39
37
  ):
40
38
  return True
41
39
  elif data.childType == CabinetConditionType.cabinetAlarm:
42
- if self.value[cabinet_sn]["alarm_level"][data.childData.data[0]]:
43
- return True
40
+ alarm_type = condition_data[-1]
41
+ for device_type in condition_data[:-1]:
42
+ alarm_info = cabinet_value.alarm_info(device_type)
43
+ if not alarm_info:
44
+ continue
45
+ if alarm_info[alarm_type-1] is True:
46
+ return True
44
47
  return False
@@ -163,7 +163,7 @@ class CabinetConditionItemData(BaseModel):
163
163
  def _check_child_data(cls, value, values):
164
164
  child_type = values.get("childType")
165
165
  if child_type == CabinetConditionType.cabinetAlarm:
166
- assert value.data[0] in {
166
+ assert value.data[-1] in {
167
167
  AlarmLevel.TIPS,
168
168
  AlarmLevel.NORMAL,
169
169
  AlarmLevel.EMERGENCY,
@@ -0,0 +1,30 @@
1
+ from typing import List
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from solax_py_library.device.types.device import DeviceType
6
+
7
+
8
+ class CabinetValue(BaseModel):
9
+ soc: int = None
10
+ cabinet_alarm: List[bool] = Field(default_factory=lambda :[False, False, False])
11
+ pcs_alarm: List[bool] = Field(default_factory=lambda :[False, False, False])
12
+ io_alarm: List[bool] = Field(default_factory=lambda :[False, False, False])
13
+ bms_alarm: List[bool] = Field(default_factory=lambda :[False, False, False])
14
+ air_alarm: List[bool] = Field(default_factory=lambda :[False, False, False])
15
+ liquid_alarm: List[bool] = Field(default_factory=lambda :[False, False, False])
16
+
17
+ def alarm_info(self, device_type):
18
+ if device_type == DeviceType.EMS_TYPE:
19
+ return self.cabinet_alarm
20
+ elif device_type == DeviceType.PCS_TYPE:
21
+ return self.pcs_alarm
22
+ elif device_type == DeviceType.IO_TYPE:
23
+ return self.io_alarm
24
+ elif device_type == DeviceType.BMS_TYPE:
25
+ return self.bms_alarm
26
+ elif device_type == DeviceType.AIRCONDITIONER_TYPE:
27
+ return self.air_alarm
28
+ elif device_type == DeviceType.COLD_TYPE:
29
+ return self.liquid_alarm
30
+ return None
@@ -0,0 +1,45 @@
1
+ from unittest import TestCase
2
+
3
+ from solax_py_library.device.types.device import DeviceType
4
+ from solax_py_library.smart_scene.core.condition import DateCondition, BaseCondition, CabinetCondition
5
+ from solax_py_library.smart_scene.types.condition import CabinetConditionItemData, CabinetConditionType, \
6
+ ConditionItemChildData
7
+ from solax_py_library.smart_scene.types.condition_value import CabinetValue
8
+
9
+
10
+ class TestCondition(TestCase):
11
+ def test_condition(self):
12
+ date_condition = DateCondition(
13
+ update_value_function=lambda: 1,
14
+ )
15
+ assert isinstance(date_condition, BaseCondition)
16
+
17
+ def test_cabinet_condition(self):
18
+ cabinet_condition = CabinetCondition(
19
+ update_value_function=lambda: {
20
+ "SN1": CabinetValue(
21
+ soc=0,
22
+ io_alarm=[False, True, False],
23
+ ),
24
+ },
25
+ )
26
+ cabinet_condition.update_value()
27
+ assert cabinet_condition.meet_func(
28
+ data=CabinetConditionItemData(
29
+ childType=CabinetConditionType.cabinetAlarm,
30
+ childData=ConditionItemChildData(
31
+ data=[DeviceType.IO_TYPE, DeviceType.COLD_TYPE, 1]
32
+ )
33
+ ),
34
+ ctx={"cabinet": ["SN1"]}
35
+ ) is False
36
+ assert cabinet_condition.meet_func(
37
+ data=CabinetConditionItemData(
38
+ childType=CabinetConditionType.cabinetAlarm,
39
+ childData=ConditionItemChildData(
40
+ data=[DeviceType.IO_TYPE, DeviceType.COLD_TYPE, 2]
41
+ )
42
+ ),
43
+ ctx={"cabinet": ["SN1"]}
44
+ ) is True
45
+
@@ -1,11 +0,0 @@
1
- from unittest import TestCase
2
-
3
- from solax_py_library.smart_scene.core.condition import DateCondition, BaseCondition
4
-
5
-
6
- class TestCondition(TestCase):
7
- def test_condition(self):
8
- date_condition = DateCondition(
9
- update_value_function=lambda: 1,
10
- )
11
- assert isinstance(date_condition, BaseCondition)