solax-py-library 1.0.0.2517__tar.gz → 1.0.0.2520__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 (80) hide show
  1. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/PKG-INFO +1 -1
  2. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/pyproject.toml +1 -1
  3. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/action/base.py +1 -1
  4. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/condition/price_condition.py +19 -13
  5. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/exceptions/smart_scene.py +24 -23
  6. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/types/action.py +12 -4
  7. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/README.md +0 -0
  8. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/__init__.py +0 -0
  9. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/device/__init__.py +0 -0
  10. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/device/constant/__init__.py +0 -0
  11. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/device/constant/cabinet.py +0 -0
  12. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/device/constant/inverter_model_info.py +0 -0
  13. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/device/core/__init__.py +0 -0
  14. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/device/core/interver/__init__.py +0 -0
  15. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/device/core/interver/base.py +0 -0
  16. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/device/types/__init__.py +0 -0
  17. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/device/types/alarm.py +0 -0
  18. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/device/types/inverter_config.py +0 -0
  19. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/device/types/modbus_point.py +0 -0
  20. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/exception.py +0 -0
  21. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/__init__.py +0 -0
  22. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/constant/__init__.py +0 -0
  23. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/constant/message_entry.py +0 -0
  24. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/__init__.py +0 -0
  25. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/action/__init__.py +0 -0
  26. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/action/ems_action.py +0 -0
  27. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/action/system_action.py +0 -0
  28. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/condition/__init__.py +0 -0
  29. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/condition/base.py +0 -0
  30. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/condition/cabinet_condition.py +0 -0
  31. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/condition/date_condition.py +0 -0
  32. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/condition/system_condition.py +0 -0
  33. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/condition/weather_condition.py +0 -0
  34. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/service/__init__.py +0 -0
  35. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/core/service/runner.py +0 -0
  36. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/exceptions/__init__.py +0 -0
  37. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/exceptions/price.py +0 -0
  38. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/exceptions/weather.py +0 -0
  39. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/types/__init__.py +0 -0
  40. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/types/condition.py +0 -0
  41. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/smart_scene/types/smart_scene_content.py +0 -0
  42. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/__init__.py +0 -0
  43. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/constant/__init__.py +0 -0
  44. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/constant/crc_table.py +0 -0
  45. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/core/__init__.py +0 -0
  46. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/core/base_modbus.py +0 -0
  47. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/core/parser.py +0 -0
  48. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/core/snap_shot.py +0 -0
  49. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/exceptions/__init__.py +0 -0
  50. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/exceptions/snap_shot.py +0 -0
  51. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/test/__init__.py +0 -0
  52. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/types/__init__.py +0 -0
  53. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/snap_shot/types/address.py +0 -0
  54. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/test/__init__.py +0 -0
  55. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/test/test_smart_scene/__init__.py +0 -0
  56. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/test/test_smart_scene/test_condition.py +0 -0
  57. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/test/test_utils/__init__.py +0 -0
  58. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/test/test_utils/test_cloud_client.py +0 -0
  59. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/__init__.py +0 -0
  60. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/api/__init__.py +0 -0
  61. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/api/service.py +0 -0
  62. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/core/__init__.py +0 -0
  63. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/core/data_adapter/__init__.py +0 -0
  64. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/core/data_adapter/base.py +0 -0
  65. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/core/data_adapter/csv.py +0 -0
  66. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/core/upload_service/__init__.py +0 -0
  67. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/core/upload_service/base.py +0 -0
  68. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/core/upload_service/ftp.py +0 -0
  69. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/exceptions/__init__.py +0 -0
  70. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/exceptions/upload_error.py +0 -0
  71. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/test/__init__.py +0 -0
  72. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/test/test_ftp.py +0 -0
  73. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/types/__init__.py +0 -0
  74. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/types/client.py +0 -0
  75. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/upload/types/ftp.py +0 -0
  76. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/utils/__init__.py +0 -0
  77. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/utils/cloud_client.py +0 -0
  78. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/utils/common.py +0 -0
  79. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/solax_py_library/utils/struct_util.py +0 -0
  80. {solax_py_library-1.0.0.2517 → solax_py_library-1.0.0.2520}/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.2517
3
+ Version: 1.0.0.2520
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.2517"
3
+ version = "1.0.0.2520"
4
4
  description = "some common tool"
5
5
  authors = ["shenlvyu <13296718439@163.com>", "x5m8944pjl <371630856@qq.com>"]
6
6
  readme = "README.md"
@@ -7,4 +7,4 @@ class BaseAction(object):
7
7
  child_data = data.childData
8
8
  child_type = data.childType
9
9
  do_func = self.do_func_map.get(child_type)
10
- return do_func(child_data, scene_id)
10
+ return do_func(scene_id, child_data.data)
@@ -18,24 +18,25 @@ class ElePriceCondition(BaseCondition):
18
18
  def __init__(self, update_value_function, **kwargs):
19
19
  super().__init__(update_value_function, **kwargs)
20
20
  self.buy = None
21
- self.unit = None
22
21
 
23
22
  def meet_func_price(self, function_value: ConditionFunc, data_value, index) -> bool:
24
23
  """电价条件的判定"""
25
- if index < 0 or index > len(self.value):
24
+ price = self.value["price"]
25
+ if index < 0 or index > len(price):
26
26
  return False
27
- if self.value[index] is None:
27
+ if price[index] is None:
28
28
  return False
29
- return function_value.function()(self.value[index], data_value[0])
29
+ return function_value.function()(price[index], data_value[0])
30
30
 
31
31
  def meet_func_highest_price(self, data_value, index) -> bool:
32
32
  value, unit = data_value
33
- if None in self.value[0:96]:
33
+ price = self.value["price"]
34
+ if None in price[0:96]:
34
35
  return False
35
36
  if unit == SmartSceneUnit.NUM: # 比最高电价低X元
36
- base = max(self.value[0:96]) - value
37
+ base = max(price[0:96]) - value
37
38
  else: # 比最高电价低X%
38
- base = round(max(self.value[0:96]) * (1 - value / 100), 4)
39
+ base = round(max(price[0:96]) * (1 - value / 100), 4)
39
40
  if self.value[index] <= base:
40
41
  return True
41
42
  else:
@@ -43,27 +44,32 @@ class ElePriceCondition(BaseCondition):
43
44
 
44
45
  def meet_func_lowest_price(self, data_value, index) -> bool:
45
46
  value, unit = data_value
46
- if None in self.value[0:96]:
47
+ price = self.value["price"]
48
+ if None in price[0:96]:
47
49
  return False
48
50
  if unit == SmartSceneUnit.NUM: # 比最低电价高X元
49
- base = value - min(self.value[0:96])
51
+ base = value - min(price[0:96])
50
52
  else: # 比最低电价高X%
51
- base = round(min(self.value[0:96]) * (1 + value / 100), 4)
52
- if self.value[index] >= base:
53
+ base = round(min(price[0:96]) * (1 + value / 100), 4)
54
+ if price[index] >= base:
53
55
  return True
54
56
  else:
55
57
  return False
56
58
 
57
59
  def meet_func_highest_or_lowest_hours(self, data_value, index, reverse) -> bool:
58
60
  sort_index, start_index = get_highest_or_lowest_value(
59
- data_value[0], data_value[1], data_value[2], self.value, reverse=reverse
61
+ data_value[0],
62
+ data_value[1],
63
+ data_value[2],
64
+ self.value["price"],
65
+ reverse=reverse,
60
66
  )
61
67
  if sort_index and index - start_index in sort_index:
62
68
  return True
63
69
  return False
64
70
 
65
71
  def meet_func(self, data: PriceConditionItemData, ctx):
66
- if not self.value:
72
+ if not self.value or not self.value.get("price"):
67
73
  # 未获取到价格数据,直接返回
68
74
  return False
69
75
  child_data = data.childData
@@ -1,81 +1,82 @@
1
1
  from solax_py_library.exception import SolaxBaseError
2
2
 
3
3
 
4
- class OnlyPositive(SolaxBaseError):
4
+ class MissParam(SolaxBaseError):
5
+ code = 0x2001
6
+ message = "smart_scene__miss_param"
7
+
8
+
9
+ class OnlyPositive(MissParam):
5
10
  message = "smart_scene__only_positive"
6
11
 
7
12
 
8
- class TimeRange(SolaxBaseError):
13
+ class TimeRange(MissParam):
9
14
  message = "smart_scene__time_range"
10
15
 
11
16
 
12
- class IrradianceOnlyPositive(SolaxBaseError):
17
+ class IrradianceOnlyPositive(MissParam):
13
18
  message = "smart_scene__irradiance_only_positive"
14
19
 
15
20
 
16
- class ExportLimitNum(SolaxBaseError):
21
+ class ExportLimitNum(MissParam):
17
22
  message = "smart_scene__export_limit_num"
18
23
 
19
24
 
20
- class ExportLimitPercent(SolaxBaseError):
25
+ class ExportLimitPercent(MissParam):
21
26
  message = "smart_scene__export_limit_percent"
22
27
 
23
28
 
24
- class ImportLimitNum(SolaxBaseError):
29
+ class ImportLimitNum(MissParam):
25
30
  message = "smart_scene__import_limit_num"
26
31
 
27
32
 
28
- class ImportOnlyPositive(SolaxBaseError):
33
+ class ImportOnlyPositive(MissParam):
29
34
  message = "smart_scene__import_only_positive"
30
35
 
31
36
 
32
- class SocLimit(SolaxBaseError):
37
+ class SocLimit(MissParam):
33
38
  message = "smart_scene__soc_limit"
34
39
 
35
40
 
36
- class ActivePowerLimitNum(SolaxBaseError):
41
+ class ActivePowerLimitNum(MissParam):
37
42
  message = "smart_scene__active_power_limit_num"
38
43
 
39
44
 
40
- class ReactivePowerLimitNum(SolaxBaseError):
45
+ class ReactivePowerLimitNum(MissParam):
41
46
  message = "smart_scene__reactive_power_limit_num"
42
47
 
43
48
 
44
- class EnergyLimit(SolaxBaseError):
49
+ class EnergyLimit(MissParam):
45
50
  message = "smart_scene__energy_limit"
46
51
 
47
52
 
48
- class PowerLimitNum(SolaxBaseError):
53
+ class PowerLimitNum(MissParam):
49
54
  message = "smart_scene__power_limit_num"
50
55
 
51
56
 
52
- class BatteryPowerLimitNum(SolaxBaseError):
57
+ class BatteryPowerLimitNum(MissParam):
53
58
  message = "smart_scene__battery_power_limit_num"
54
59
 
55
60
 
56
- class PvOnlyGe0(SolaxBaseError):
61
+ class PvOnlyGe0(MissParam):
57
62
  message = "smart_scene__pv_only_ge_0"
58
63
 
59
64
 
60
- class MissParam(SolaxBaseError):
61
- message = "smart_scene__miss_param"
62
-
63
-
64
- class CountLimit(SolaxBaseError):
65
+ class CountLimit(MissParam):
65
66
  message = "smart_scene__count_limit"
66
67
 
67
68
 
68
- class NameLengthLimit(SolaxBaseError):
69
+ class NameLengthLimit(MissParam):
69
70
  message = "smart_scene__name_length_limit"
70
71
 
71
72
 
72
- class UniqueLimit(SolaxBaseError):
73
+ class UniqueLimit(MissParam):
73
74
  message = "smart_scene__unique_limit"
74
75
 
75
76
 
76
- class ElectricityPriceFailure(SolaxBaseError):
77
+ class ElectricityPriceFailure(MissParam):
77
78
  message = "cloud__electricity_price_failure"
78
79
 
79
80
 
80
- class WeatherFailure(SolaxBaseError):
81
+ class WeatherFailure(MissParam):
81
82
  message = "cloud__weather_failure"
@@ -1,5 +1,5 @@
1
1
  from enum import Enum
2
- from typing import List, Union
2
+ from typing import List, Union, Any
3
3
 
4
4
  from pydantic import BaseModel
5
5
 
@@ -29,12 +29,16 @@ class DoControl(BaseModel):
29
29
 
30
30
 
31
31
  class ActionChildData(BaseModel):
32
- data: List[Union[DoControl, float, int]]
32
+ data: List[Any]
33
+
34
+
35
+ class SystemActionChildData(ActionChildData):
36
+ ...
33
37
 
34
38
 
35
39
  class SystemActionItemData(BaseModel):
36
40
  childType: SystemActionType
37
- childData: ActionChildData
41
+ childData: SystemActionChildData
38
42
 
39
43
  def to_text(self, lang, cabinet_type):
40
44
  if self.childType == SystemActionType.systemSwitch:
@@ -133,9 +137,13 @@ class SystemActionItemData(BaseModel):
133
137
  return ""
134
138
 
135
139
 
140
+ class EmsActionChildData(ActionChildData):
141
+ data: List[DoControl]
142
+
143
+
136
144
  class EmsActionItemData(BaseModel):
137
145
  childType: EmsActionType
138
- childData: ActionChildData
146
+ childData: EmsActionChildData
139
147
 
140
148
  def to_text(self, lang, cabinet_type):
141
149
  if self.childType == EmsActionType.DoControl: