Bentel KYO32 Alarm System Integration

Hi Lorenzo,
sorry to bother you but I’ve been using your work for few days now, all the detector’s status are working perfectly in home-assistant, but I can’t figure out how other entities are working, they show it’s enable or disable, but no matter what I’m doing on the keyboard of the alarme, I don’t see any changes. (and what the “Safe Mode” is there for ? I’ve been checking the Bentel manual but could’t find what it could be related to)
not that I really need anything more, but I was wondering if at least the status of the alarme (on or off) can be seen through espkyogate ? (I’m using the bentel kyo 8W, if it’s acting differently than the kyo32).

Hello @julien-billaud, strange. have you configure all status regarding arm of partitions?
If you configured enabled_total_area_xx, enabled_partial_area_xx, disabled_area_xx you should see changes when you arm/disarm with alarm keyboard.

“Safe Mode” is a special button only if there’s issue during firmware update of esphome, nothing related Bentel…

Yes I configured it that way :
In the lamba part I only kept the area “0” as I’m only using the first area :

        &kyo32->allarme_area[0],
        &kyo32->inserimento_totale_area[0],
        &kyo32->inserimento_parziale_area[0],
        &kyo32->inserimento_parziale_ritardo_0_area[0],
        &kyo32->disinserita_area[0],
        &kyo32->stato_uscita[0]

then in Binary sensor part :

      - id: alarm_area_1
        name: "Alarme"
      - id: enabled_total_area_1
        name: "Activation Totale"
      - id: enabled_partial_area_1
        name: "Activation Partielle"    
      - id: enabled_partial_delay_0_area_1
        name: "Activation Partielle Sans Délai"
      - id: disabled_area_1
        name: "Désactivation"
      - id: exit_status_1
        name: "État Sortie 1"

If I enable the debug and then arm/disarm the alarm, I can see the following :


So it seems like it should work, but the sensor doesn’t get it’s status update in HA

Hello, yes, configuration seems ok… in your case the input_boolean.enabled_total_area_1 should change from false to true and input_boolean.disabled_area_1 from true to false and viceversa… doesn’t it?

Are you using the latest version of my firmware (v2024.4.26) ?

lo so non sono un genio ma non riesco a configurare il panello allarme con espkyogate “quello con la tastiera”, con inserimento di due aree ( arma in casa ) e tre aree (arma fuori casa) qualcuno mi potrebbe aiutare

Hi folks,

ESPHome 2025.2.0 is introducing a breaking change that affects the integration.
I have no idea on how complex it will be the migration to the external component.

thoughts?

Removal of Custom Components

Custom components were deprecated over a year ago and, as promised, support for them was removed in this release. We encourage all developers to migrate their custom components to External Components. Please see A Note About Custom Components for a detailed explanation and next steps.

Yes, I know… [ESPHome 2025.2.0 e Custom Components · Issue #63 · lorenzo-deluca/espkyogate · GitHub](we are working here)

If anyone want’s to contribute please write on GitHub issue.

Thanks! :slight_smile:

Hi,

anyone can suggest me how resolve this warning?

Hello Bremby, have you check on my YAML example?
I think is in this line of configuration:

# Enable logging
logger:
  level: INFO
  baud_rate: 0
  logs:
    component: ERROR

Hi, before i start with this awesom integration, is it working with the latest home assistand and esphome updates?

Thanks

Yes sir, but the config is only “hiding” the message; the warning and the behavior are still there

yes, it works :wink:

mmmh, you mean the WARNING messages about “took a long time”?

It’s how the integration works… Kyo Unit is “slow” (a few fractions of a second) to answer on serial line and “lock” the code but it’s normal and it works perfectly :wink:

If you want you can improve the code :slight_smile:

Just a clarification: in the code, the zones start from 0
&kyo32->zona[0]
but in the ID declaration they all start from 1

- id: zone_1
  name: "Sensore DT Taverna"
  device_class: "motion"

Is this correct, or should the IDs also start from 0? Or does it not matter?

yes, ID name is indifferent, only the order is important :slight_smile:

Hi,
I’m finally playing around with this awesome integration, everything worked flawlessly on the first try. Again, many thanks for your fantastic work!

That said, this was my very first time using ESPHome, so the installation process was slightly different from your guide, but there were no issues.

I just have a few questions for you:
Is it normal for all the entities to become unavailable for a few seconds every 1 or 2 hours? It’s not a big deal for me, but I’m trying to keep everything running as smoothly as possible.

Also, regarding the entity “stato sirena” what is it supposed to indicate? I thought it would become active when the siren is ringing, but that doesn’t seem to be the case for me.

many thanks

1 Like

For unavailable entities it’s not optimal, have you try to monitor the ESP with a ping entity? Which ESP board you’re using? is the WiFi connection good where you put the ESP?

“stato sirena” is indicates the status of the siren/horn… should go ON when the central unit’s siren sounds.

I’m using a D1 Mini board (this one: [link]) and it’s about 4 meters from my access point, so I assume the Wi-Fi signal is strong enough. should I try another board?

for the siren it always shows as OFF.
this is my configuration, maybe there somethings wrong?

external_components:
  - source:
      type: git
      url: https://github.com/robertklep/esphome-custom-component
    components: [ custom, custom_component ]

esp8266:
  board: d1_mini
# ESP32 boards alternative directives
# platform: ESP32
# board: esp32doit-devkit-v1

esphome:
  name: "esphome-antifurto"
  friendly_name: Antifurto
  comment: Alarm System Serial to HA controller  
  includes:
    - components/bentel-kyo/bentel_kyo32.h

uart:
  id: uart_bus
  tx_pin: GPIO5
  rx_pin: GPIO4
  # ESP32 boards alternative directives
  # tx_pin: GPIO17
  # rx_pin: GPIO16
  baud_rate: 9600
  data_bits: 8
  parity: EVEN  

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # use_address: "192.168.179.4"
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: !secret hotspot_wifi_ssid
    password: !secret hotspot_wifi_password
    

captive_portal:

# Enable logging
logger:
  level: INFO
  baud_rate: 0
  logs:
    component: ERROR

# Enable Home Assistant API
api:
  encryption:
    key: !secret api_encryption_key

ota:
  platform: esphome
  password: !secret ota_password
  
switch:
  - platform: safe_mode
    name: "ESPKyoGate (Safe Mode)"

binary_sensor:
  - platform: custom
    lambda: |-
      auto kyo32 = new Bentel_Kyo32(id(uart_bus));
      App.register_component(kyo32);
      return {
        kyo32->kyo_comunication,
        kyo32->stato_sirena,
        kyo32->warn_mancanza_rete,
        kyo32->sabotaggio_zona, 
        kyo32->sabotaggio_sistema,
        kyo32->warn_scomparsa_bpi,
        kyo32->warn_fusibile,
        kyo32->warn_batteria_bassa,
        kyo32->warn_guasto_linea_telefonica,
        kyo32->warn_codici_default,
        kyo32->warn_wireless,
        kyo32->sabotaggio_bpi,
        kyo32->sabotaggio_jam,
        kyo32->sabotaggio_wireless,
        kyo32->sabotaggio_chiave_falsa,

        &kyo32->zona[0],
        &kyo32->zona[1],
        &kyo32->zona[2],
        &kyo32->zona[3],
        &kyo32->zona[4],
        &kyo32->zona[5],
        &kyo32->zona[6],
        &kyo32->zona[7],
        &kyo32->zona[8],
        &kyo32->zona[9],
        &kyo32->zona[10],
        &kyo32->zona[11],

        &kyo32->zona_esclusa[0],
        &kyo32->zona_esclusa[1],
        &kyo32->zona_esclusa[2],
        &kyo32->zona_esclusa[3],
        &kyo32->zona_esclusa[4],
        &kyo32->zona_esclusa[5],
        &kyo32->zona_esclusa[6],
        &kyo32->zona_esclusa[7],
        &kyo32->zona_esclusa[8],
        &kyo32->zona_esclusa[9],
        &kyo32->zona_esclusa[10],
        &kyo32->zona_esclusa[11],

        &kyo32->memoria_allarme_zona[0],
        &kyo32->memoria_allarme_zona[1],
        &kyo32->memoria_allarme_zona[2],
        &kyo32->memoria_allarme_zona[3],
        &kyo32->memoria_allarme_zona[4],
        &kyo32->memoria_allarme_zona[5],
        &kyo32->memoria_allarme_zona[6],
        &kyo32->memoria_allarme_zona[7],
        &kyo32->memoria_allarme_zona[8],
        &kyo32->memoria_allarme_zona[9],
        &kyo32->memoria_allarme_zona[10],
        &kyo32->memoria_allarme_zona[11],

        &kyo32->allarme_area[0],
        &kyo32->allarme_area[1],
        &kyo32->allarme_area[2],

        &kyo32->inserimento_totale_area[0],
        &kyo32->inserimento_totale_area[1],

        &kyo32->disinserita_area[0],
        &kyo32->disinserita_area[1],
      };
    binary_sensors:
      - id: kyo_comunication
        name: "Comunicazione Centrale"
      - id: stato_sirena
        name: "Stato Sirena"
      - id: warn_mancanza_rete
        name: "Mancanza Rete"
      - id: sabotaggio_zona
        name: "Sabotaggio Zona"
      - id: sabotaggio_sistema
        name: "Sabotaggio Sistema"
      - id: warn_scomparsa_bpi
        name: "Scomparsa BPI"
      - id: warn_fusibile
        name: "Fusibile"
      - id: warn_batteria_bassa
        name: "Batteria Bassa"
      - id: warn_guasto_linea_telefonica
        name: "Guasto Linea Telefonica"
      - id: warn_codici_default
        name: "Codici Default"
      - id: warn_wireless
        name: "Wireless"
      - id: sabotaggio_bpi
        name: "Sabotaggio BPI"
      - id: sabotaggio_jam
        name: "Sabotaggio Jam"
      - id: sabotaggio_wireless
        name: "Sabotaggio wireless"
      - id: sabotaggio_chiave_falsa
        name: "Sabotaggio Chiave Falsa"

      - id: zone_1
        name: "Porta Ingresso"
        device_class: "door"
      - id: zone_2
        name: "Portafinestra Soggiorno"
        device_class: "window"
      - id: zone_3
        name: "Finestra Soggiorno"
        device_class: "window"
      - id: zone_4
        name: "Portafinestra Cucina"
        device_class: "window"
      - id: zone_5
        name: "Portafinestra Camera"
        device_class: "window"
      - id: zone_6
        name: "Finestra Bagno"
        device_class: "window"
      - id: zone_7
        name: "Portafinestra Lab"
        device_class: "window"
      - id: zone_8
        name: "Sabotaggio GSM"
        device_class: "smoke"
      - id: zone_9
        name: "Sensore Movimento Retro"
        device_class: "motion"
      - id: zone_10
        name: "Sensore Movimento Avanti"
        device_class: "motion"
      - id: zone_11
        name: "Sabotaggio Sensori Movimento"
        device_class: "smoke"
      - id: zone_12
        name: "Batteria Sensori Movimento"
        device_class: "smoke"

      - id: excluded_zone_1
        name: "Escl. Porta Ingresso"
      - id: excluded_zone_2
        name: "Escl. Portafinestra Soggiorno"
      - id: excluded_zone_3
        name: "Escl. Finestra Soggiorno"
      - id: excluded_zone_4
        name: "Escl. Portafinestra Cucina"
      - id: excluded_zone_5
        name: "Escl. Portafinestra Camera"
      - id: excluded_zone_6
        name: "Escl. Finestra Bagno"
      - id: excluded_zone_7
        name: "Escl. Portafinestra Lab"
      - id: excluded_zone_8
        name: "Escl. Sabotaggio GSM"
      - id: excluded_zone_9
        name: "Escl. Sensore Movimento Retro"
      - id: excluded_zone_10
        name: "Escl. Sensore Movimento Avanti"
      - id: excluded_zone_11
        name: "Escl. Sabotaggio Sensori Movimento"
      - id: excluded_zone_12
        name: "Escl. Batteria Sensori Movimento"

      - id: alarm_memory_zone_1
        name: "Mem. Allarme Porta Ingresso"
      - id: alarm_memory_zone_2
        name: "Mem. Allarme Portafinestra Soggiorno"
      - id: alarm_memory_zone_3
        name: "Mem. Allarme Finestra Soggiorno"
      - id: alarm_memory_zone_4
        name: "Mem. Allarme Portafinestra Cucina"
      - id: alarm_memory_zone_5
        name: "Mem. Allarme Portafinestra Camera"
      - id: alarm_memory_zone_6
        name: "Mem. Allarme Finestra Bagno"
      - id: alarm_memory_zone_7
        name: "Mem. Allarme Portafinestra Lab"
      - id: alarm_memory_zone_8
        name: "Mem. Allarme Sabotaggio GSM"
      - id: alarm_memory_zone_9
        name: "Mem. Allarme Sensore Movimento Retro"
      - id: alarm_memory_zone_10
        name: "Mem. Allarme Sensore Movimento Avanti"
      - id: alarm_memory_zone_11
        name: "Mem. Allarme Sabotaggio Sensori Movimento"
      - id: alarm_memory_zone_12
        name: "Mem. Allarme Batteria Sensori Movimento"

      - id: alarm_area_1
        name: "Allarme Perimetrale"
      - id: alarm_area_2
        name: "Allarme Radar Esterni"
      - id: alarm_area_3
        name: "Allarme Batteria Sensori Movimento"   

      - id: enabled_total_area_1
        name: "Ins. Totale Perimetrale"
      - id: enabled_total_area_2
        name: "Ins. Totale Radar Esterni"

      - id: disabled_area_1
        name: "Disins. Perimetrale"
      - id: disabled_area_2
        name: "Disins. Radar Esterni"

Configuration is ok, have you update bentel_kyo32.h with the latest version from my GitHub?

Anyway yes, wemosD1 is very poor, it’s better to upgrade to latest ESP32 :slight_smile:

Yes, I downloaded all the files last week, so I assume they were up to date.
Could you suggest some good ESP32 boards?

Thanks!