StephanJoubert / home_assistant_solarman

Home Assistant component for Solarman collectors used with a variety of inverters.
Apache License 2.0
512 stars 191 forks source link

Yesterday's, this/last year and this/last month production (with Solis inverter) #106

Open arizzi opened 1 year ago

arizzi commented 1 year ago

in solisman3 library there are plenty of other registers not implemented in solarman (see https://github.com/NosIreland/solismon3/blob/master/config/registers.py) A few nice one to add would be those for "yesterday's" "this/last month" and "this/last year" production.

If it is considered useful I can add them to the solis_hybrid.yaml (not sure if they work ok with other brands)

ChirpyTurnip commented 1 year ago

You can do this by switching to the custom_parameters.yaml file. Simply copy and paste the config you're using now into that then modify. I have a Solis S5 and using the RS485 Modbus guide I've made lots (relatively speaking) of changes. I also run it now as a manual sensor rather than as "integration" so I can get a faster refresh rate. My yaml is as follows:

# S5-GR1P(3-6)K
# Modbus information retrieved from:
# https://www.scss.tcd.ie/coghlan/Elios4you/RS485_MODBUS-Hybrid-BACoghlan-201811228-1854.pdf
# Ntries marked #OK seem to work correctly, those marked #BORKED are not yet working. 

requests:
  - start: 3005
    end:  3024
    mb_functioncode: 0x04
  - start: 3035
    end:  3043
    mb_functioncode: 0x04
  - start: 3056
    end:  3058
    mb_functioncode: 0x04
  - start: 3066
    end:  3071
    mb_functioncode: 0x04

parameters:
 - group: InverterStatus
   items: 
    - name: "Inverter Status" #OK
      class: ""
      state_class: ""      
      uom: ""
      scale: 1
      rule: 1
      registers: [3043]
      isstr: true
      lookup: 
      - key: 0
        value: "Stand-by"
      - key: 1
        value: "Open Run"
      - key: 2
        value: "Soft Run"
      - key: 3
        value: "Generating"
      icon: 'mdi:home-lightning-bolt'

    - name: "Operating Status" #BORKED
      class: ""
      state_class: ""
      uom: ""
      scale: 1
      rule: 2
      registers: [3071]
      icon: 'mdi:home-lightning-bolt'

    - name: "Working Mode" #OK
      class: ""
      state_class: ""
      uom: ""
      scale: 1
      rule: 1
      registers: [3040]
      isstr: true
      lookup: 
      - key: 0
        value: "No Response"
      - key: 1
        value: "Volt-Watt"
      - key: 2
        value: "Volt-VAr"
      - key: 3
        value: "Fixed PF"
      - key: 4
        value: "Fixed VAr"
      - key: 5
        value: "Power-PF"
      - key: 6
        value: "Rule21"
      icon: 'mdi:home-lightning-bolt'

    - name: "Inverter Temperature" #OK
      class: "temperature"
      state_class: "measurement"      
      uom: "°C"
      scale: 0.1
      rule: 2
      registers: [3041]
      icon: 'mdi:thermometer'

#    - name: "Fault Status 01 (Grid)" #BORKED
#      class: ""
#      state_class: ""
#      uom: ""
#      scale: 1
#      rule: 6
#      registers: [3066]
#      icon: 'mdi:alert'

#    - name: "Fault Status 02 (DC)" #BORKED
#      class: ""
#      state_class: ""
#      uom: ""
#      scale: 1
#      rule: 6
#      registers: [3067]
#      icon: 'mdi:alert'

#    - name: "Fault Status 03 (Protection)" #BORKED
#      class: ""
#      state_class: ""
#      uom: ""
#      scale: 1
#      rule: 6
#      registers: [3068]
#      icon: 'mdi:alert'

#    - name: "Fault Status 04 (Device)" #BORKED
#      class: ""
#      state_class: ""
#      uom: ""
#      scale: 1
#      rule: 6
#      registers: [3069]
#      icon: 'mdi:alert'

 - group: InverterDC
   items: 
    - name: "PV1 Voltage" #OK
      class: "voltage"
      state_class: "measurement"
      uom: "V"
      scale: 0.1
      rule: 1
      registers: [3021]
      icon: 'mdi:solar-power'

    - name: "PV1 Current" #OK
      class: "current"
      uom: "A"
      scale: 0.1
      rule: 1
      registers: [3022]
      icon: 'mdi:current-dc'

    - name: "PV2 Voltage" #OK
      class: "voltage"
      state_class: "measurement"
      uom: "V"
      scale: 0.1
      rule: 1
      registers: [3023]
      icon: 'mdi:solar-power'

    - name: "PV2 Current" #OK
      class: "current"
      state_class: "measurement"
      uom: "A"
      scale: 0.1
      rule: 1
      registers: [3024]
      icon: 'mdi:current-dc'

    - name: "Inverter DC Power" #OK
      class: "power"
      state_class: "measurement"
      uom: "W"
      scale: 1
      rule: 3
      registers: [3007,3008]
      icon: 'mdi:solar-power'

 - group: InverterAC
   items: 
    - name: "Inverter Voltage" #OK
      class: "voltage"
      state_class: "measurement"
      uom: "V"
      scale: 0.1
      rule: 1
      registers: [3035]
      icon: 'mdi:transmission-tower'

    - name: "Inverter Current" #OK - relative to apparent power
      class: "current"
      state_class: "measurement"
      uom: "A"
      scale: 0.1
      rule: 1
      registers: [3038]
      icon: 'mdi:current-ac'

    - name: "Inverter Active Power" #OK
      class: "power"
      state_class: "measurement"
      uom: "W"
      scale: 1
      rule: 4
      registers: [3005,3006]
      icon: 'mdi:transmission-tower'

    - name: "Inverter Reactive Power" #OK
      class: "reactive_power"
      state_class: "measurement"
      uom: "VAr"
      scale: 1
      rule: 4
      registers: [3056]
      icon: 'mdi:transmission-tower'

    - name: "Inverter Apparent Power" #OK
      class: "apparent_power"
      state_class: "measurement"
      uom: "VA"
      scale: 1
      rule: 4
      registers: [3058]
      icon: 'mdi:transmission-tower'

    - name: "Inverter Frequency" #OK
      class: "frequency"
      state_class: "measurement"
      uom: "Hz"
      scale: 0.01
      rule: 1
      registers: [3042]
      icon: 'mdi:sine-wave'

    - name: "Power Limitation" #BORKED
      class: ""
      state_class: "measurement"
      uom: "%"
      scale: 0.01
      rule: 1
      registers: [3050]
      icon: 'mdi:alert'

 - group: Generation
   items: 
    - name: "Daily Generation" #OK
      class: "energy"
      state_class: "measurement"
      uom: "kWh"
      scale: 0.1
      rule: 1
      registers: [3014]
      icon: 'mdi:solar-power'

    - name: "Monthly Generation" #OK
      class: "energy"
      state_class: "total_increasing"
      uom: "kWh"
      scale: 1
      rule: 3
      registers: [3011,3012]
      icon: 'mdi:solar-power'

    - name: "Yearly Generation" #OK
      class: "energy"
      state_class: "total_increasing"
      uom: "kWh"
      scale: 1
      rule: 3
      registers: [3017,3018]
      icon: 'mdi:solar-power'

    - name: "Total Generation" #OK
      class: "energy"
      state_class: "total_increasing"
      uom: "kWh"
      scale: 1
      rule: 3
      registers: [3009,3010]
      icon: 'mdi:solar-power'

The borked ones need me to figure out how to read the values of the individual bits in a string....and I'm not that smart (yet). As for last month, yesterday generation data you just copy the equivalent ones and insert the register references (bearing in mind you always need the register number - 1 as the read location, so if the document says you need #3041 your config has to call #3040....just because we sraet counting at 1 but the register starts at 0).