CONTROL_FEATURES.md 15 KB

Solar System Control Features

Overview

The Solar of Things integration now supports full control of your solar system settings through Home Assistant. You can adjust battery limits, change operating modes, and control grid interactions directly from your dashboard or automations.


🎛️ Control Entities

Number Entities (Sliders)

1. Battery Charge Limit

  • Type: Number (0-100%)
  • Description: Maximum battery charge level
  • Use Case: Preserve battery health by limiting charge to 90%
  • Entity: number.solar_station_xxxxx_battery_charge_limit

    # Set battery charge limit to 90%
    service: number.set_value
    target:
    entity_id: number.solar_station_xxxxx_battery_charge_limit
    data:
    value: 90
    

2. Battery Discharge Limit

  • Type: Number (0-100%)
  • Description: Minimum battery level before stopping discharge
  • Use Case: Keep battery reserve for emergencies
  • Entity: number.solar_station_xxxxx_battery_discharge_limit

    # Don't discharge below 20%
    service: number.set_value
    target:
    entity_id: number.solar_station_xxxxx_battery_discharge_limit
    data:
    value: 20
    

3. Grid Charge Limit

  • Type: Number (0-5000W)
  • Description: Maximum power to draw from grid for battery charging
  • Use Case: Charge from grid during off-peak hours
  • Entity: number.solar_station_xxxxx_grid_charge_limit

    # Allow 2000W grid charging
    service: number.set_value
    target:
    entity_id: number.solar_station_xxxxx_grid_charge_limit
    data:
    value: 2000
    

Select Entities (Dropdowns)

1. Operating Mode

  • Type: Select
  • Options:
    • Self-Use: Maximize self-consumption
    • Time-of-Use: Optimize for electricity rates
    • Backup: Prioritize battery reserve
    • Grid-Tie: Prioritize grid export
    • Off-Grid: Independent operation
  • Entity: select.solar_station_xxxxx_operating_mode

    # Switch to Time-of-Use mode
    service: select.select_option
    target:
    entity_id: select.solar_station_xxxxx_operating_mode
    data:
    option: "Time-of-Use"
    

2. Battery Priority

  • Type: Select
  • Options:
    • Solar First: Use solar before battery
    • Battery First: Use battery before solar
    • Grid First: Use grid before battery/solar
  • Entity: select.solar_station_xxxxx_battery_priority

    # Prioritize solar energy
    service: select.select_option
    target:
    entity_id: select.solar_station_xxxxx_battery_priority
    data:
    option: "Solar First"
    

Switch Entities (On/Off)

1. Grid Charging

  • Type: Switch
  • Description: Allow battery charging from grid
  • Use Case: Enable during cheap electricity periods
  • Entity: switch.solar_station_xxxxx_grid_charging

    # Enable grid charging
    service: switch.turn_on
    target:
    entity_id: switch.solar_station_xxxxx_grid_charging
    

2. Grid Feed-In

  • Type: Switch
  • Description: Allow exporting excess power to grid
  • Use Case: Disable when grid feed-in is not compensated
  • Entity: switch.solar_station_xxxxx_grid_feed_in

    # Disable grid export
    service: switch.turn_off
    target:
    entity_id: switch.solar_station_xxxxx_grid_feed_in
    

3. Backup Mode

  • Type: Switch
  • Description: Reserve battery for emergencies
  • Use Case: Prepare for expected power outage
  • Entity: switch.solar_station_xxxxx_backup_mode

    # Enable backup reserve
    service: switch.turn_on
    target:
    entity_id: switch.solar_station_xxxxx_backup_mode
    

🤖 Automation Examples

1. Time-of-Use Optimization

Charge from grid during cheap hours, discharge during peak hours:

automation:
  # Charge from grid during cheap period (midnight-6am)
  - alias: "Solar: Charge from Grid (Off-Peak)"
    trigger:
      - platform: time
        at: "00:00:00"
    action:
      - service: switch.turn_on
        target:
          entity_id: switch.solar_station_xxxxx_grid_charging
      - service: number.set_value
        target:
          entity_id: number.solar_station_xxxxx_grid_charge_limit
        data:
          value: 3000  # 3kW charging

  # Stop grid charging after cheap period
  - alias: "Solar: Stop Grid Charging (Peak)"
    trigger:
      - platform: time
        at: "06:00:00"
    action:
      - service: switch.turn_off
        target:
          entity_id: switch.solar_station_xxxxx_grid_charging
      - service: number.set_value
        target:
          entity_id: number.solar_station_xxxxx_grid_charge_limit
        data:
          value: 0

2. Weather-Based Battery Management

Adjust battery limits based on weather forecast:

automation:
  - alias: "Solar: Adjust for Cloudy Weather"
    trigger:
      - platform: state
        entity_id: weather.home
        attribute: condition
        to: "cloudy"
    action:
      # Lower discharge limit on cloudy days
      - service: number.set_value
        target:
          entity_id: number.solar_station_xxxxx_battery_discharge_limit
        data:
          value: 40  # Keep 40% reserve
      
      # Enable grid charging if needed
      - service: switch.turn_on
        target:
          entity_id: switch.solar_station_xxxxx_grid_charging

  - alias: "Solar: Adjust for Sunny Weather"
    trigger:
      - platform: state
        entity_id: weather.home
        attribute: condition
        to: "sunny"
    action:
      # Normal discharge limit on sunny days
      - service: number.set_value
        target:
          entity_id: number.solar_station_xxxxx_battery_discharge_limit
        data:
          value: 10
      
      # Disable grid charging (solar is sufficient)
      - service: switch.turn_off
        target:
          entity_id: switch.solar_station_xxxxx_grid_charging

3. Emergency Backup Preparation

Prepare for storms or power outages:

automation:
  - alias: "Solar: Storm Preparation"
    trigger:
      - platform: state
        entity_id: sensor.weather_alert
        to: "storm_warning"
    action:
      # Enable backup mode
      - service: switch.turn_on
        target:
          entity_id: switch.solar_station_xxxxx_backup_mode
      
      # Set high charge limit
      - service: number.set_value
        target:
          entity_id: number.solar_station_xxxxx_battery_charge_limit
        data:
          value: 100
      
      # Set high discharge limit (preserve battery)
      - service: number.set_value
        target:
          entity_id: number.solar_station_xxxxx_battery_discharge_limit
        data:
          value: 50
      
      # Enable grid charging to top up
      - service: switch.turn_on
        target:
          entity_id: switch.solar_station_xxxxx_grid_charging
      
      # Notify user
      - service: notify.mobile_app
        data:
          title: "Solar System: Storm Preparation"
          message: "Battery is being prepared for potential outage"

4. Dynamic Operating Mode

Switch modes based on electricity prices:

automation:
  - alias: "Solar: Peak Price Mode"
    trigger:
      - platform: numeric_state
        entity_id: sensor.electricity_price
        above: 0.25  # High price threshold
    action:
      - service: select.select_option
        target:
          entity_id: select.solar_station_xxxxx_operating_mode
        data:
          option: "Time-of-Use"
      
      # Maximize battery usage during peak
      - service: select.select_option
        target:
          entity_id: select.solar_station_xxxxx_battery_priority
        data:
          option: "Battery First"

  - alias: "Solar: Off-Peak Mode"
    trigger:
      - platform: numeric_state
        entity_id: sensor.electricity_price
        below: 0.10  # Low price threshold
    action:
      - service: select.select_option
        target:
          entity_id: select.solar_station_xxxxx_operating_mode
        data:
          option: "Self-Use"
      
      # Prioritize solar during off-peak
      - service: select.select_option
        target:
          entity_id: select.solar_station_xxxxx_battery_priority
        data:
          option: "Solar First"

5. Battery Health Protection

Extend battery life with charge cycling:

automation:
  - alias: "Solar: Weekly Battery Calibration"
    trigger:
      - platform: time
        at: "02:00:00"
    condition:
      - condition: time
        weekday:
          - sun  # Every Sunday
    action:
      # Full charge cycle
      - service: number.set_value
        target:
          entity_id: number.solar_station_xxxxx_battery_charge_limit
        data:
          value: 100
      
      - delay:
          hours: 6
      
      # Return to normal (90% max)
      - service: number.set_value
        target:
          entity_id: number.solar_station_xxxxx_battery_charge_limit
        data:
          value: 90

📊 Dashboard Examples

Control Panel Card

type: entities
title: Solar System Controls
entities:
  - entity: select.solar_station_xxxxx_operating_mode
    name: Operating Mode
  
  - entity: select.solar_station_xxxxx_battery_priority
    name: Battery Priority
  
  - type: divider
  
  - entity: number.solar_station_xxxxx_battery_charge_limit
    name: Charge Limit
  
  - entity: number.solar_station_xxxxx_battery_discharge_limit
    name: Discharge Limit
  
  - entity: number.solar_station_xxxxx_grid_charge_limit
    name: Grid Charge Power
  
  - type: divider
  
  - entity: switch.solar_station_xxxxx_grid_charging
    name: Grid Charging
  
  - entity: switch.solar_station_xxxxx_grid_feed_in
    name: Grid Feed-In
  
  - entity: switch.solar_station_xxxxx_backup_mode
    name: Backup Mode

Battery Management Card

type: vertical-stack
cards:
  - type: gauge
    entity: sensor.solar_station_xxxxx_battery_state_of_charge
    name: Battery Level
    min: 0
    max: 100
    needle: true
    segments:
      - from: 0
        color: "#db4437"
      - from: 20
        color: "#ff9800"
      - from: 50
        color: "#ffc107"
      - from: 80
        color: "#0f9d58"
  
  - type: entities
    title: Battery Controls
    entities:
      - entity: number.solar_station_xxxxx_battery_charge_limit
        name: Max Charge
      - entity: number.solar_station_xxxxx_battery_discharge_limit
        name: Min Discharge
      - entity: switch.solar_station_xxxxx_backup_mode
        name: Backup Reserve

Quick Actions Card

type: horizontal-stack
cards:
  - type: button
    name: Self-Use Mode
    icon: mdi:solar-power
    tap_action:
      action: call-service
      service: select.select_option
      target:
        entity_id: select.solar_station_xxxxx_operating_mode
      data:
        option: "Self-Use"
  
  - type: button
    name: Backup Mode
    icon: mdi:battery-lock
    tap_action:
      action: call-service
      service: switch.turn_on
      target:
        entity_id: switch.solar_station_xxxxx_backup_mode
  
  - type: button
    name: Grid Export
    icon: mdi:transmission-tower-export
    tap_action:
      action: call-service
      service: switch.toggle
      target:
        entity_id: switch.solar_station_xxxxx_grid_feed_in

⚠️ Important Notes

API Limitations

Note: The control API endpoints (/api/device/settings/v1 and /api/device/settings/update/v1) are assumed endpoints based on common IoT patterns. You will need to:

  1. Verify these endpoints exist in the actual Solar of Things API
  2. Test with your device to confirm functionality
  3. Adjust the API implementation based on actual response formats

Finding Actual Control Endpoints

To find the real control endpoints:

  1. Open https://solar.siseli.com
  2. Go to settings/control page on the web interface
  3. Open browser Developer Tools (F12) → Network tab
  4. Make a settings change (e.g., adjust battery limit)
  5. Find the API request in the Network tab
  6. Note the:
    • Endpoint URL
    • Request method (POST/PUT)
    • Payload format
    • Response format

Then update api.py with the correct endpoints and formats.

Safety Considerations

⚠️ Always test control features carefully:

  • Start with non-critical settings
  • Monitor system behavior after changes
  • Keep battery discharge limits reasonable (don't go below 10-20%)
  • Don't exceed manufacturer specifications
  • Have manual override capability

Permissions

Some settings may require:

  • Admin/installer level access
  • Special authentication
  • Firmware version requirements

Check your Solar of Things account permissions.


🔧 Troubleshooting

Settings Not Changing

  1. Check logs: Settings → System → Logs
  2. Verify device_id: Must be correct for control operations
  3. Test API: Try changing settings on solar.siseli.com web interface
  4. Check permissions: Account may not have control access

Control Entities Not Appearing

  1. Check device_id: Required for control entities
  2. Restart HA: After integration update
  3. Check coordinator: Ensure settings are being fetched
  4. Review logs: Look for error messages

Values Not Updating

  • Wait 5 minutes for next coordinator refresh
  • Or restart Home Assistant to force update
  • Check if web interface shows updated values

📝 Customization

You can customize available options by editing the integration files:

Operating Modes (select.py):

OPERATING_MODES = [
    "Self-Use",
    "Time-of-Use",
    "Backup",
    "Grid-Tie",
    "Off-Grid",
    # Add more modes here
]

Battery Priority (select.py):

BATTERY_PRIORITY_MODES = [
    "Solar First",
    "Battery First",
    "Grid First",
    # Add more priorities here
]

🚀 Advanced Usage

Script for Quick Mode Switching

script:
  solar_storm_mode:
    alias: "Solar: Storm Mode"
    sequence:
      - service: switch.turn_on
        target:
          entity_id: switch.solar_station_xxxxx_backup_mode
      - service: number.set_value
        target:
          entity_id: number.solar_station_xxxxx_battery_discharge_limit
        data:
          value: 50
      - service: switch.turn_on
        target:
          entity_id: switch.solar_station_xxxxx_grid_charging
      - service: notify.mobile_app
        data:
          message: "Solar system in storm protection mode"
  
  solar_normal_mode:
    alias: "Solar: Normal Mode"
    sequence:
      - service: switch.turn_off
        target:
          entity_id: switch.solar_station_xxxxx_backup_mode
      - service: number.set_value
        target:
          entity_id: number.solar_station_xxxxx_battery_discharge_limit
        data:
          value: 10
      - service: select.select_option
        target:
          entity_id: select.solar_station_xxxxx_operating_mode
        data:
          option: "Self-Use"

Scene Integration

scene:
  - name: Solar Economy Mode
    entities:
      select.solar_station_xxxxx_operating_mode: "Time-of-Use"
      select.solar_station_xxxxx_battery_priority: "Grid First"
      switch.solar_station_xxxxx_grid_feed_in: "on"
  
  - name: Solar Backup Mode
    entities:
      select.solar_station_xxxxx_operating_mode: "Backup"
      switch.solar_station_xxxxx_backup_mode: "on"
      number.solar_station_xxxxx_battery_discharge_limit: 50

Full control of your solar system is now at your fingertips! 🎉