const.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. """Constants for the Solar of Things integration."""
  2. DOMAIN = "solar_of_things"
  3. # ─── Configuration keys ────────────────────────────────────────────────────────
  4. CONF_IOT_TOKEN = "iot_token" # legacy / advanced manual entry
  5. CONF_STATION_ID = "station_id"
  6. CONF_DEVICE_ID = "device_id"
  7. CONF_TIME_ZONE = "time_zone"
  8. # Credential-based auth (preferred)
  9. CONF_EMAIL = "email"
  10. CONF_PASSWORD = "password"
  11. # Runtime-stored token state (written back to config entry)
  12. CONF_REFRESH_TOKEN = "refresh_token"
  13. CONF_ACCESS_TOKEN_EXPIRES = "access_token_expires" # ISO-8601 string
  14. CONF_REFRESH_TOKEN_EXPIRES = "refresh_token_expires" # ISO-8601 string
  15. # ─── API base ──────────────────────────────────────────────────────────────────
  16. API_BASE_URL = "https://solar.siseli.com"
  17. # ─── Auth endpoints (discovered from portal JS bundle) ─────────────────────────
  18. API_LOGIN = "/login/account" # POST, no token needed
  19. API_REFRESH_TOKEN = "/login/refresh/access/token" # POST, no token needed
  20. # ─── Data endpoints ────────────────────────────────────────────────────────────
  21. API_TIME_SERIES = "/apis/deviceState/simple/attribute/keys/history/v1"
  22. API_MONTHLY_SUMMARY = "/apis/stationOverView/stateAttributeSummary/category/yearly"
  23. API_SETTINGS_GET = "/api/device/settings/v1"
  24. API_SETTINGS_SET = "/api/device/settings/update/v1"
  25. API_DEVICE_LIST = "/apis/device/list"
  26. # ─── Token refresh window ──────────────────────────────────────────────────────
  27. # Refresh the access token this many seconds *before* its stated expiry.
  28. # Mirrors the portal JS which refreshes when ≤300 s remain.
  29. TOKEN_REFRESH_LEAD_SECONDS = 300 # 5 minutes
  30. # ─── Sensor keys ───────────────────────────────────────────────────────────────
  31. SENSOR_KEYS = [
  32. "pvInputPower",
  33. "acOutputActivePower",
  34. "batteryDischargeCurrent",
  35. "batteryChargingCurrent",
  36. "batteryVoltage",
  37. "feedInPower",
  38. "batteryPower",
  39. "batterySOC",
  40. "gridPower",
  41. "loadPower",
  42. ]
  43. SENSOR_DEFINITIONS = {
  44. "pvInputPower": {
  45. "name": "PV Input Power",
  46. "unit": "W",
  47. "device_class": "power",
  48. "icon": "mdi:solar-power",
  49. },
  50. "acOutputActivePower": {
  51. "name": "AC Output Power",
  52. "unit": "W",
  53. "device_class": "power",
  54. "icon": "mdi:power-plug",
  55. },
  56. "batteryDischargeCurrent": {
  57. "name": "Battery Discharge Current",
  58. "unit": "A",
  59. "device_class": "current",
  60. "icon": "mdi:battery-arrow-down",
  61. },
  62. "batteryChargingCurrent": {
  63. "name": "Battery Charging Current",
  64. "unit": "A",
  65. "device_class": "current",
  66. "icon": "mdi:battery-arrow-up",
  67. },
  68. "batteryVoltage": {
  69. "name": "Battery Voltage",
  70. "unit": "V",
  71. "device_class": "voltage",
  72. "icon": "mdi:battery",
  73. },
  74. "batteryPower": {
  75. "name": "Battery Power",
  76. "unit": "W",
  77. "device_class": "power",
  78. "icon": "mdi:battery-charging",
  79. },
  80. "batterySOC": {
  81. "name": "Battery State of Charge",
  82. "unit": "%",
  83. "device_class": "battery",
  84. "icon": "mdi:battery",
  85. },
  86. "feedInPower": {
  87. "name": "Grid Feed-in Power",
  88. "unit": "W",
  89. "device_class": "power",
  90. "icon": "mdi:transmission-tower-export",
  91. },
  92. "gridPower": {
  93. "name": "Grid Import Power",
  94. "unit": "W",
  95. "device_class": "power",
  96. "icon": "mdi:transmission-tower-import",
  97. },
  98. "loadPower": {
  99. "name": "Load Power",
  100. "unit": "W",
  101. "device_class": "power",
  102. "icon": "mdi:home-lightning-bolt",
  103. },
  104. # Monthly summary sensors
  105. "monthly_pv_generated": {
  106. "name": "Monthly PV Generated",
  107. "unit": "kWh",
  108. "device_class": "energy",
  109. "icon": "mdi:solar-power",
  110. },
  111. "monthly_grid_import": {
  112. "name": "Monthly Grid Import",
  113. "unit": "kWh",
  114. "device_class": "energy",
  115. "icon": "mdi:transmission-tower-import",
  116. },
  117. "monthly_total_consumption": {
  118. "name": "Monthly Total Consumption",
  119. "unit": "kWh",
  120. "device_class": "energy",
  121. "icon": "mdi:home-lightning-bolt",
  122. },
  123. "monthly_solar_percentage": {
  124. "name": "Monthly Solar Coverage",
  125. "unit": "%",
  126. "icon": "mdi:percent",
  127. },
  128. }