StephanJoubert / home_assistant_solarman

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

negative values #520

Open mrlordziemniak opened 4 months ago

mrlordziemniak commented 4 months ago

Hi, I made a integration for DTSD422-D3 smart meter using https://github.com/kbialek/deye-inverter-mqtt/blob/main/docs/metric_group_igen_dtsd422.md and it is working,

requests:
  - start: 0x01
    end:  0x64
    mb_functioncode: 0x03
  - start: 0x65
    end:  0xA1
    mb_functioncode: 0x03
  - start: 0x1001
    end:  0x1064
    mb_functioncode: 0x03
  - start: 0x1065
    end:  0x10A1
    mb_functioncode: 0x03

parameters:
 - group: Output
   items: 
    - name: "CT1 Napięcie"
      class: "voltage"
      state_class: "measurement"      
      uom: "V"
      scale: 0.1
      rule: 1
      registers: [0x01]
      icon: 'mdi:alpha-v-circle-outline'

    - name: "CT2 Napięcie"
      class: "voltage"
      state_class: "measurement"      
      uom: "V"
      scale: 0.1
      rule: 1
      registers: [0x02]
      icon: 'mdi:alpha-v-circle-outline'

    - name: "CT3 Napięcie"
      class: "voltage"
      state_class: "measurement"      
      uom: "V"
      scale: 0.1
      rule: 1
      registers: [0x03]
      icon: 'mdi:alpha-v-circle-outline'

    - name: "CT4 Napięcie"
      class: "voltage"
      state_class: "measurement"      
      uom: "V"
      scale: 0.1
      rule: 1
      registers: [0x1001]
      icon: 'mdi:alpha-v-circle-outline'

    - name: "CT5 Napięcie"
      class: "voltage"
      state_class: "measurement"      
      uom: "V"
      scale: 0.1
      rule: 1
      registers: [0x1002]
      icon: 'mdi:alpha-v-circle-outline'

    - name: "CT6 Napięcie"
      class: "voltage"
      state_class: "measurement"      
      uom: "V"
      scale: 0.1
      rule: 1
      registers: [0x1003]
      icon: 'mdi:alpha-v-circle-outline'

    - name: "CT1 Prąd"
      class: "current"
      state_class: "measurement"      
      uom: "A"
      scale: 0.001
      rule: 4
      registers: [0x08]
      icon: 'mdi:alpha-a-circle-outline'

    - name: "CT2 Prąd"
      class: "current"
      state_class: "measurement"      
      uom: "A"
      scale: 0.001
      rule: 4
      registers: [0x0A]
      icon: 'mdi:alpha-a-circle-outline'

    - name: "CT3 Prąd"
      class: "current"
      state_class: "measurement"      
      uom: "A"
      scale: 0.001
      rule: 4
      registers: [0x0C]
      icon: 'mdi:alpha-a-circle-outline'

    - name: "CT4 Prąd"
      class: "current"
      state_class: "measurement"      
      uom: "A"
      scale: 0.001
      rule: 4
      registers: [0x1008]
      icon: 'mdi:alpha-a-circle-outline'

    - name: "CT5 Prąd"
      class: "current"
      state_class: "measurement"      
      uom: "A"
      scale: 0.001
      rule: 4
      registers: [0x100A]
      icon: 'mdi:alpha-a-circle-outline'

    - name: "CT6 Prąd"
      class: "current"
      state_class: "measurement"      
      uom: "A"
      scale: 0.001
      rule: 4
      registers: [0x100C]
      icon: 'mdi:alpha-a-circle-outline'

    - name: "Active Power CT1"
      class: "power"
      state_class: "measurement"      
      uom: "W"
      scale: 1
      rule: 4
      registers: [0x010]
      icon: 'mdi:home-lightning-bolt'

    - name: "Active Power CT2"
      class: "power"
      state_class: "measurement"      
      uom: "W"
      scale: 1
      rule: 4
      registers: [0x012]
      icon: 'mdi:home-lightning-bolt'

    - name: "Active Power CT3"
      class: "power"
      state_class: "measurement"      
      uom: "W"
      scale: 1
      rule: 4
      registers: [0x014]
      icon: 'mdi:home-lightning-bolt'

    - name: "Active Power CT4"
      class: "power"
      state_class: "measurement"      
      uom: "W"
      scale: 1
      rule: 4
      registers: [0x1010]
      icon: 'mdi:home-lightning-bolt'

    - name: "Active Power CT5"
      class: "power"
      state_class: "measurement"      
      uom: "W"
      scale: 1
      rule: 4
      registers: [0x1012]
      icon: 'mdi:home-lightning-bolt'

    - name: "Active Power CT6"
      class: "power"
      state_class: "measurement"      
      uom: "W"
      scale: 1
      rule: 4
      registers: [0x1014]
      icon: 'mdi:home-lightning-bolt'

    - name: "Total Active Power"
      class: "power"
      state_class: "measurement"      
      uom: "W"
      scale: 1
      rule: 4
      registers: [0x0E]
      icon: 'mdi:home-lightning-bolt'

    - name: "Total Active Power 2"
      class: "power"
      state_class: "measurement"      
      uom: "W"
      scale: 1
      rule: 4
      registers: [0x100E]
      icon: 'mdi:home-lightning-bolt'

    - name: "Pobór z sieci"
      class: "power"
      state_class: "total_increasing"      
      uom: "kWh"
      scale: 1
      rule: 1
      registers: [0x2B]
      icon: 'mdi:home-lightning-bolt'

    - name: "Zużycie energii"
      class: "power"
      state_class: "total_increasing"      
      uom: "kWh"
      scale: 1
      rule: 1
      registers: [0x102B]
      icon: 'mdi:home-lightning-bolt'

    - name: "HZ"
      class: "frequency"
      state_class: "measurement"      
      uom: "Hz"
      scale: 0.01
      rule: 1
      registers: [0x29]
      icon: 'mdi:home-lightning-bolt'

    - name: "Wysłana do sieci"
      class: "power"
      state_class: "total_increasing"      
      uom: "kWh"
      scale: 1
      rule: 1
      registers: [0x35]
      icon: 'mdi:home-lightning-bolt'

but for current there is duble registry addres, for example ct1 has 0x07 for sign and 0x08 for data, how to implement this? because with this code above i got always positive current. In kbialek repository he got SingleRegisterSensor and SignedMagnitudeDoubleRegisterSensor but i dont know how run that docker scripts, so im using this one :P can someone help me with that?

mrlordziemniak commented 4 months ago

when i use rule 2 (signed) i cant get negative value, there is register 0A for sign and 0B for value, how to read that? and rule 3 is not working it is the same like 1 (i have checked paraser.py file) i have 32bit value in two register when i read it by rule 6 i get hex value for two registers and when i manually add this i can get correct value