LD2410 esphome tips

Guys, help me understand…
Configuration on older version of esphome - worked.
Started writing when trying to update, something like:
The ‘g0_move_threshold’ option has been moved to the ‘g0_move_threshold’ number component.

Did it like this (Without “ld2410:”: error Component sensor.ld2410 requires component ld2410.):

ld2410:
number:

  • platform: ld2410
    timeout: 10s
    max_move_distance: 1.5m
    max_still_distance: 1.5m
    g0_move_threshold: 40
    g0_still_threshold: 10

Error where ‘timeout’ : some but not all values in the same group of inclusion ‘timeout’.

Tried to do it like this:
number:

  • platform: ld2410
    timeout:
    name: Timeout

What does this miracle Yudo want from me?

Have a look at the latest ESPHome entry for the LD2410, there had to be some major format changes to the YAML to get it accepted.

I changed according to this manual, based on my old config, but I don’t understand what my problem is …
Here it works:

number:

  • platform: ld2410
    timeout:
    name: timeout
    light_threshold:
    name: light threshold
    max_move_distance_gate:
    name: max move distance gate
    max_still_distance_gate:
    name: max still distance gate
    g0:
    move_threshold:
    name: g0 move threshold
    still_threshold:
    name: g0 still threshold
    g1:
    move_threshold:
    name: g1 move threshold
    still_threshold:
    name: g1 still threshold
    g2:
    move_threshold:
    name: g2 move threshold
    still_threshold:
    name: g2 still threshold
    g3:
    move_threshold:
    name: g3 move threshold
    still_threshold:
    name: g3 still threshold
    g4:
    move_threshold:
    name: g4 move threshold
    still_threshold:
    name: g4 still threshold
    g5:
    move_threshold:
    name: g5 move threshold
    still_threshold:
    name: g5 still threshold
    g6:
    move_threshold:
    name: g6 move threshold
    still_threshold:
    name: g6 still threshold
    g7:
    move_threshold:
    name: g7 move threshold
    still_threshold:
    name: g7 still threshold
    g8:
    move_threshold:
    name: g8 move threshold
    still_threshold:
    name: g8 still threshold

But what… why can’t you specify the values manually that were before:
timeout: 10s
max_move_distance: 1.5m
max_still_distance: 1.5m
g0_move_threshold: 40 # 0m / 0’
g0_still_threshold: 10 # 0m / 0’
g1_move_threshold: 40 # 0 - 0.75m / 0 - 2.46’
g1_still_threshold: 10 # 0 - 0.75m / 0 - 2.46’
g2_move_threshold: 40 # 0.75 - 1.5m / 2.46’ - 4.92’
g2_still_threshold: 10 # 0.75 - 1.5m / 2.46’ - 4.92’
g3_move_threshold: 40 # 1.5 - 2.25m / 4.92’ - 7.38’
g3_still_threshold: 10 # 1.5 - 2.25m / 4.92’ - 7.38’
g4_move_threshold: 40 # 2.25 - 3m’ / 7.38’ - 9.84’
g4_still_threshold: 40 # 2.25 - 3m’ / 7.38’ - 9.84’
g5_move_threshold: 40 # 3 - 3.75 / 9.84’ - 12.30’
g5_still_threshold: 40 # 3 - 3.75 / 9.84’ - 12.30’
g6_move_threshold: 30 # 3.75 - 4.5m / 12.30’ - 14.76’
g6_still_threshold: 15 # 3.75 - 4.5m / 12.30’ - 14.76’
g7_move_threshold: 30 # 4.5 - 5.25m / 14.76’ - 17.22’
g7_still_threshold: 15 # 4.5 - 5.25m / 14.76’ - 17.22’
g8_move_threshold: 30 # 5.25 - 6m / 17.22’ - 19.68’
g8_still_threshold: 15 # 5.25 - 6m / 17.22’ - 19.68’

I cured that problem by adding this just after the uart entry.

ld2410:
  throttle: 1500ms
  id: ld2410_comp

I only found this as I had left it in in one of my 4 configurations which was the only one working. No idea where it came from, or what it does :slight_smile:

It can be a bit frustrating if you don’t find the right channel, initially we had a couple of modules that were so poorly packaged and broken that we wanted to seek an investigation, but the store’s customer service argued that it couldn’t possibly be a problem because tens of thousands of LD2410 radars are made every month.
But the developers immediately ruled out if the modules in the warehouse were the same after feedback.

But certain aspects, when the price/performance revolution came and hilink brought fire to the 24G radar, I think they have been there to improve improve these issues. But store customer service is probably the lowest level of tech support channel.

The reason is now the values are configured in HA and not in ESPHome.
It was done to simplify the tuning of the LD2410 so you don’t need to have to recompile and upload it with ESPHome each time you had to make a change to the threshold values.

I installed LD2410 outside (under the roof so it is secure - rain will not fall on it directly) and when it rains this sensor detects movement and triggers false positives constantly. Which sliders should I adjust to stop this?

I believe the LD2410 was primarily designed for indoor use so I’m not sure how well it will be able to handle not detecting rain.
I would enable Engineering Mode and look at the move and still energy % for each gate (0 to 8) while it is raining with no other movement outside and then adjust all the Move and Still Thresholds to above those for each gate.
I’m also not sure how will handle windy days causing other movements that may get detected.

The ‘Failed to obtain the firmware:-1’ error only appears in the Play store version of the HLKRadarTool app (v1.1.32).

When using v1.1.22 of the app, the available firmwares load and display fine.

Just for info.
Latest HLKRadar update from Play store fixes update fw issue.

1 Like

Thanks. You are correct. The Playstore version has been updated to v1.1.37 and has corrected the firmware issue.

Is it possible to use more than one ld2410 sensor on an esp32?

Scott

1 Like

I have 2 LD2410 via UART, same device (ESP32dev).
The first has more load (2 reed switches, 8x relay board, hall sensor and LD2410) goes sweet.

Have another with same config for LD2410, plus 2 relay, same TX/Rx Pins, give one time this error starting the log:

[E][ld2410:336]: Error with last command : incorrect Header

But works well. The config is from the docs.

Wanted to cross-post this to help folks with getting their sensitivity dialed in:

can you share the yaml? I haven’t been able to get it working.

thx!

Here is the esphome config:



substitutions:
  board_platform: ESP32
  board_type: esp32dev
  devicename: DeViceName
  hostname: DeViceName
  calling_pin: GPIO18
  pedestrian_pin: GPIO21
  #ld2410 uart
  ld_tx_pin: GPIO17
  ld_rx_pin: GPIO16



esphome:
  name: $devicename
  friendly_name: $devicename
  platform: ESP32
  board: esp32dev
 
external_components:
  - source: github://esphome/esphome@dev
    components: [ ld2410 ]
 
# Enable logging
logger:
  level: DEBUG
 
# Enable Home Assistant API
api:
  encryption:
    key: !secret encryption_key
 
ota:
  password: !secret ota_password
  
 
wifi:
  #use_address: 192.168.3.121
  power_save_mode: none
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  
uart:
  id: uart01
  tx_pin: $ld_tx_pin
  rx_pin: $ld_rx_pin
  baud_rate: 256000
  parity: NONE
  stop_bits: 1
 
ld2410:

sensor:
#system
  - platform: wifi_signal
    name: WiFi Signal
    update_interval: 600s
  - platform:  internal_temperature
    name: Temperatura interna
    update_interval: 600s
#LD2410
  - platform: ld2410
    moving_distance:
      name : Distanza movimento
    still_distance:
      name: Distanza da fermo
    moving_energy:
      name: Energia movimento
    still_energy:             
      name: Energia fermo
    detection_distance:
      name: Distanza oggetto
    light:
      name: Luce
    g0:
      move_energy:
        name: g0 move energy
      still_energy:
        name: g0 still energy
    g1:
      move_energy:
        name: g1 move energy
      still_energy:
        name: g1 still energy
    g2:
      move_energy:
        name: g2 move energy
      still_energy:
        name: g2 still energy
    g3:
      move_energy:
        name: g3 move energy
      still_energy:
        name: g3 still energy
    g4:
      move_energy:
        name: g4 move energy
      still_energy:
        name: g4 still energy
    g5:
      move_energy:
        name: g5 move energy
      still_energy:
        name: g5 still energy
    g6:
      move_energy:
        name: g6 move energy
      still_energy:
        name: g6 still energy
    g7:
      move_energy:
        name: g7 move energy
      still_energy:
        name: g7 still energy
    g8:
      move_energy:
        name: g8 move energy
      still_energy:
        name: g8 still energy

binary_sensor:
#LD2410
  - platform: ld2410
    has_target:
      name: Persona
    has_moving_target:
      name: Persona in movimento
    has_still_target:
      name: Persona ferma
    out_pin_presence_status:
      name: out pin presence status
#system
  - platform: status
    name: Stato
  

switch: 
#system     
  - platform: restart
    name: Restart
    id: restart_switch
#LD2410
  - platform: ld2410
    engineering_mode:
      name: "engineering mode"
    bluetooth:
      name: "control bluetooth"

number:
  - platform: ld2410
    timeout:
      name: timeout
    light_threshold:
      name: light threshold
    max_move_distance_gate:
      name: max move distance gate
    max_still_distance_gate:
      name: max still distance gate
    g0:
      move_threshold:
        name: g0 move threshold
      still_threshold:
        name: g0 still threshold
    g1:
      move_threshold:
        name: g1 move threshold
      still_threshold:
        name: g1 still threshold
    g2:
      move_threshold:
        name: g2 move threshold
      still_threshold:
        name: g2 still threshold
    g3:
      move_threshold:
        name: g3 move threshold
      still_threshold:
        name: g3 still threshold
    g4:
      move_threshold:
        name: g4 move threshold
      still_threshold:
        name: g4 still threshold
    g5:
      move_threshold:
        name: g5 move threshold
      still_threshold:
        name: g5 still threshold
    g6:
      move_threshold:
        name: g6 move threshold
      still_threshold:
        name: g6 still threshold
    g7:
      move_threshold:
        name: g7 move threshold
      still_threshold:
        name: g7 still threshold
    g8:
      move_threshold:
        name: g8 move threshold
      still_threshold:
        name: g8 still threshold


button:
  - platform: ld2410
    factory_reset:
      name: "factory reset"
    restart:
      name: "restart"
    query_params:
      name: query params

text_sensor:
  - platform: ld2410
    version:
      name: "firmware version"
    mac_address:
      name: "mac address"

select:
  - platform: ld2410
    distance_resolution:
      name: "distance resolution"
    baud_rate:
      name: "baud rate"
    light_function:
      name: light function
    out_pin_level:
      name: out pin level

And here the lovelace card (note that 4-5 entities has been translated to italian)

type: vertical-stack
cards:
  - type: horizontal-stack
    cards:
      - type: entities
        entities:
          - entity: switch.DeviceName_engineering_mode
            name: engineering mode
  - type: vertical-stack
    cards:
      - type: entities
        entities:
          - entity: number.DeviceName_timeout
            name: timeout
          - entity: number.DeviceName_max_move_distance_gate
            name: Dist.max rilev. movimento
          - entity: number.DeviceName_max_still_distance_gate
            name: Dist.max rilev. fermo gate
          - entity: select.DeviceName_light_function
            name: Funzione con luce
          - entity: number.DeviceName_light_threshold
            name: Threshold luce
      - type: horizontal-stack
        cards:
          - type: entity
            entity: sensor.DeviceName_distanza_oggetto
            name: Distanza
          - type: entity
            entity: sensor.DeviceName_distanza_movimento
            name: Movimento
          - type: entity
            entity: sensor.DeviceName_distanza_da_fermo
            name: Fermo
  - type: horizontal-stack
    cards:
      - type: entity
        entity: sensor.DeviceName_move_energy
        name: Energia movimento
      - type: entity
        entity: sensor.DeviceName_still_energy
        name: Energia fermo
  - type: horizontal-stack
    cards:
      - type: entity
        entity: binary_sensor.DeviceName_out_pin_presence_status
        name: GPIO pr
        state_color: true
      - type: entity
        entity: binary_sensor.DeviceName_persona
        name: Presenza
        state_color: true
      - type: entity
        entity: binary_sensor.DeviceName_persona_in_movimento
        name: Movimento
        state_color: true
      - type: entity
        entity: binary_sensor.DeviceName_persona_ferma
        name: Fermo
        state_color: true
  - type: conditional
    conditions:
      - entity: switch.DeviceName_engineering_mode
        state: 'on'
    card:
      type: vertical-stack
      cards:
        - type: horizontal-stack
          cards:
            - type: entity
              entity: sensor.DeviceName_light
              name: Intensità luce
            - type: entity
              entity: binary_sensor.DeviceName_out_pin_presence_status
              name: Presenza pin est.
              state_color: true
        - type: horizontal-stack
          cards:
            - type: entity
              entity: sensor.DeviceName_g0_move_energy
              name: g0
            - type: entity
              entity: number.DeviceName_g0_move_threshold
              name: ' '
            - type: entity
              entity: sensor.DeviceName_g0_still_energy
              name: ' '
            - type: entity
              entity: number.DeviceName_g0_still_threshold
              name: ' '
        - type: horizontal-stack
          cards:
            - type: entity
              entity: sensor.DeviceName_g1_move_energy
              name: g1
              icon: ' '
            - type: entity
              entity: number.DeviceName_g1_move_threshold
              name: ' '
              icon: ' '
            - type: entity
              entity: sensor.DeviceName_g1_still_energy
              name: ' '
              icon: ' '
            - type: entity
              entity: number.DeviceName_g1_still_threshold
              name: ' '
              icon: ' '
        - type: horizontal-stack
          cards:
            - type: entity
              entity: sensor.DeviceName_g2_move_energy
              name: g2
              icon: ' '
            - type: entity
              entity: number.DeviceName_g2_move_threshold
              name: ' '
              icon: ' '
            - type: entity
              entity: sensor.DeviceName_g2_still_energy
              name: ' '
              icon: ' '
            - type: entity
              entity: number.DeviceName_g2_still_threshold
              name: ' '
              icon: ' '
        - type: horizontal-stack
          cards:
            - type: entity
              entity: sensor.DeviceName_g3_move_energy
              name: g3
              icon: ' '
            - type: entity
              entity: number.DeviceName_g3_move_threshold
              name: ' '
              icon: ' '
            - type: entity
              entity: sensor.DeviceName_g3_still_energy
              name: ' '
              icon: ' '
            - type: entity
              entity: number.DeviceName_g3_still_threshold
              name: ' '
              icon: ' '
        - type: horizontal-stack
          cards:
            - type: entity
              entity: sensor.DeviceName_g4_move_energy
              name: g4
              icon: ' '
            - type: entity
              entity: number.DeviceName_g4_move_threshold
              name: ' '
              icon: ' '
            - type: entity
              entity: sensor.DeviceName_g4_still_energy
              name: ' '
              icon: ' '
            - type: entity
              entity: number.DeviceName_g4_still_threshold
              name: ' '
              icon: ' '
        - type: horizontal-stack
          cards:
            - type: entity
              entity: sensor.DeviceName_g5_move_energy
              name: g5
              icon: ' '
            - type: entity
              entity: number.DeviceName_g5_move_threshold
              name: ' '
              icon: ' '
            - type: entity
              entity: sensor.DeviceName_g5_still_energy
              name: ' '
              icon: ' '
            - type: entity
              entity: number.DeviceName_g5_still_threshold
              name: ' '
              icon: ' '
        - type: horizontal-stack
          cards:
            - type: entity
              entity: sensor.DeviceName_g6_move_energy
              name: g6
              icon: ' '
            - type: entity
              entity: number.DeviceName_g6_move_threshold
              name: ' '
              icon: ' '
            - type: entity
              entity: sensor.DeviceName_g6_still_energy
              name: ' '
              icon: ' '
            - type: entity
              entity: number.DeviceName_g6_still_threshold
              name: ' '
              icon: ' '
        - type: horizontal-stack
          cards:
            - type: entity
              entity: sensor.DeviceName_g7_move_energy
              name: g7
              icon: ' '
            - type: entity
              entity: number.DeviceName_g7_move_threshold
              name: ' '
              icon: ' '
            - type: entity
              entity: sensor.DeviceName_g7_still_energy
              name: ' '
              icon: ' '
            - type: entity
              entity: number.DeviceName_g7_still_threshold
              name: ' '
              icon: ' '
        - type: horizontal-stack
          cards:
            - type: entity
              entity: sensor.DeviceName_g8_move_energy
              name: g8
              icon: ' '
            - type: entity
              entity: number.DeviceName_g8_move_threshold
              name: ' '
              icon: ' '
            - type: entity
              entity: sensor.DeviceName_g8_still_energy
              name: ' '
              icon: ' '
            - type: entity
              entity: number.DeviceName_g8_still_threshold
              name: ' '
              icon: ' '


you have to change DeviceName in substitution (esphome config), and rename it into the lovelace card (DeviceName)

1 Like

Not sure what skizzo’s talking about since I only see one uart being configured, but I did manage to figure it out myself, though there is one anomaly in the output. I would have expected that ld2410_id would serve to impart separate sensor names in HA, this proved not to be the case, maybe I’m missing something that would make this happen or maybe it’s a bug. In any case here is my working code, though I’ve only got two uart’s available on my ESP32-S2 mini.

esphome:
  name: esp32s2-238
  friendly_name: esp32-238

esp32:
  board: esp32-s2-saola-1
  framework:
    type: arduino

# Enable logging
logger:
  level: debug
  baud_rate: 0

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ota:
  password: "xxxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  power_save_mode: none  


#  manual_ip:
    # Set this to the IP of the ESP
#    static_ip: 192.168.0.238
    # Set this to the IP address of the router. Often ends with .1
#    gateway: 192.168.0.1
    # The subnet of the network. 255.255.255.0 works for most home networks.
#    subnet: 255.255.255.0    

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32-238 Fallback Hotspot"
    password: "IpZ1k35K0fhs"

captive_portal:

web_server:
  port: 80  

uart:
  - id: uart_0
    tx_pin: GPIO16
    rx_pin: GPIO17
    baud_rate: 256000
    parity: NONE
    stop_bits: 1

  - id: uart_1
    tx_pin: GPIO18
    rx_pin: GPIO21
    baud_rate: 256000
    parity: NONE
    stop_bits: 1

#  - id: uart_2
#    tx_pin: GPIO33
#    rx_pin: GPIO34
#    baud_rate: 256000
#    parity: NONE
#    stop_bits: 1        


ld2410:
  - id: ld2410_0
    uart_id: uart_0

  - id: ld2410_1
    uart_id: uart_1

#  - id: ld2410_2
#   uart_id: uart_2
  
binary_sensor:
  - platform: ld2410
    has_target:
      name: Presence
    has_moving_target:
      name: Moving Target
    has_still_target:
      name: Still Target
    ld2410_id: ld2410_0

  - platform: ld2410
    has_target:
      name: Presence1
    has_moving_target:
      name: Moving Target1
    has_still_target:
      name: Still Target1

    ld2410_id: ld2410_1

#  - platform: ld2410
#   has_target:
#      name: Presence
#    has_moving_target:
#      name: Moving Target
#    has_still_target:
#      name: Still Target
#    ld2410_id: ld2410_2        

sensor:
  - platform: ld2410
    moving_distance:
      name : Moving Distance
    still_distance:
      name: Still Distance
    moving_energy:
      name: Move Energy
    still_energy:
      name: Still Energy
    detection_distance:
      name: Detection Distance
    ld2410_id: ld2410_0

  - platform: ld2410
    moving_distance:
      name : Moving Distance1
    still_distance:
      name: Still Distance1
    moving_energy:
      name: Move Energy1
    still_energy:
      name: Still Energy1
    detection_distance:
      name: Detection Distance1
    ld2410_id: ld2410_1

#  - platform: ld2410
#    moving_distance:
#      name : Moving Distance
#    still_distance:
#      name: Still Distance
#    moving_energy:
#      name: Move Energy
#    still_energy:
#      name: Still Energy
#    detection_distance:
#      name: Detection Distance
#    ld2410_id: ld2410_2    
    
type or paste code here

I thought I almost finish almost 3 day calibration with trial and error in bathroom where washing machine and the dryer is installed. And then, wife turned on the washing machine and the dryer… it detects around 40-50% of presence… any ideas how to ignore these peaks?

If you monitor the machines you would be able to filter this false positive.

And in certain situations we must associate a PIR.

I have put together some graphs similar to the HLKRadarTool app using Apex Charts (installed from HACS).
The following code is based on the work done by patrick3399:

Add the following to configuration.yaml

template:
  - sensor:
      - name: "chart-MovementThresholds"
        state: |
              {{ now() }}
        attributes:
            Heights: |
                  {% set entities=["number.g0_move_threshold","number.g1_move_threshold","number.g2_move_threshold","number.g3_move_threshold","number.g4_move_threshold","number.g5_move_threshold","number.g6_move_threshold","number.g7_move_threshold","number.g8_move_threshold"] %}
                  {{ entities | map('states') | list }}

      - name: "chart-MovementEnergy"
        state: |
              {{ now() }}
        attributes:
            Heights: |
                  {% set entities=["sensor.g0_move_energy","sensor.g1_move_energy","sensor.g2_move_energy","sensor.g3_move_energy","sensor.g4_move_energy","sensor.g5_move_energy","sensor.g6_move_energy","sensor.g7_move_energy","sensor.g8_move_energy"] %}
                  {{ entities | map('states') | list }}

      - name: "chart-StillThresholds"
        state: |
              {{ now() }}
        attributes:
            Heights: |
                  {% set entities=["number.g0_still_threshold","number.g1_still_threshold","number.g2_still_threshold","number.g3_still_threshold","number.g4_still_threshold","number.g5_still_threshold","number.g6_still_threshold","number.g7_still_threshold","number.g8_still_threshold"] %}
                  {{ entities | map('states') | list }}
                  
      - name: "chart-StillEnergy"
        state: |
              {{ now() }}
        attributes:
            Heights: |
                  {% set entities=["sensor.g0_still_energy","sensor.g1_still_energy","sensor.g2_still_energy","sensor.g3_still_energy","sensor.g4_still_energy","sensor.g5_still_energy","sensor.g6_still_energy","sensor.g7_still_energy","sensor.g8_still_energy"] %}
                  {{ entities | map('states') | list }}

And the following cards for your dashboard.
Movement Chart:

type: custom:apexcharts-card
header:
  show: true
  title: Movement Energy
  show_states: false
  colorize_states: false
graph_span: 8d
update_interval: 15ms
series:
  - entity: sensor.chart_movementthresholds
    data_generator: |
      return entity.attributes.Heights.map((peak, index) => {
        return [moment().add(-(8-index), 'd'),  entity.attributes.Heights[index]];
      });
    opacity: 1
    color: FB239F
    stroke_width: 2
    show:
      legend_value: false
  - entity: sensor.chart_movementenergy
    data_generator: |
      return entity.attributes.Heights.map((peak, index) => {
        return [moment().add(-(8-index), 'd'),  entity.attributes.Heights[index]];
      });
    opacity: 1
    color: 0000FF
    stroke_width: 2
    show:
      legend_value: false
apex_config:
  xaxis:
    type: categories
    labels:
      rotate: 0
    title:
      text: Gates
      offsetX: 0
      offsetY: -10
      style:
        fontWeight: 600
    overwriteCategories:
      - 0
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
    update_delay: 1ms
    update_interval: 15ms
    dataLabels:
      enabled: false
      dropShadow:
        enabled: false
    stroke:
      curve: straight
    tooltip:
      enabled: false
  legend:
    show: true
    legend_values: false
  chart:
    height: 300px
  yaxis:
    min: 0
    max: 100

Still Chart:

type: custom:apexcharts-card
header:
  show: true
  title: Still Energy
  show_states: false
  colorize_states: false
graph_span: 8d
update_interval: 15ms
series:
  - entity: sensor.chart_stillthresholds
    data_generator: |
      return entity.attributes.Heights.map((peak, index) => {
        return [moment().add(-(8-index), 'd'),  entity.attributes.Heights[index]];
      });
    opacity: 1
    color: FB239F
    stroke_width: 2
    show:
      legend_value: false
  - entity: sensor.chart_stillenergy
    data_generator: |
      return entity.attributes.Heights.map((peak, index) => {
        return [moment().add(-(8-index), 'd'),  entity.attributes.Heights[index]];
      });
    opacity: 1
    color: 0000FF
    stroke_width: 2
    show:
      legend_value: false
apex_config:
  xaxis:
    type: categories
    labels:
      rotate: 0
    title:
      text: Gates
      offsetX: 0
      offsetY: -10
      style:
        fontWeight: 600
    overwriteCategories:
      - 0
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
    update_delay: 1ms
    update_interval: 15ms
    dataLabels:
      enabled: false
      dropShadow:
        enabled: false
    stroke:
      curve: straight
    tooltip:
      enabled: false
  legend:
    show: true
    legend_values: false
  chart:
    height: 300px
  yaxis:
    min: 0
    max: 100

10 Likes