Struggling to update Konnected alarm via the network (LAN)

Konnected alarm pro, connected via LAN, using the Home Assistant ESPHome builder.
Fixed IP address, and DNS on DHCP server.
ping konnected-ab2c3c.local correctly resolves to the device.
I’ve tried deleting the device and taking control of it again.

Error:

INFO Successfully compiled program.
ERROR Error resolving IP address of ['konnected-ab2c3c.local']. Is it connected to WiFi?
ERROR (If this error persists, please set a static IP address: https://esphome.io/components/wifi.html#manual-ips)
ERROR Timeout resolving IP address: Timeout while resolving IP address for ['konnected-ab2c3c.local']
WARNING Failed to upload to ['konnected-ab2c3c.local']

Nothing is seen on the device log as an attempted firmware upgrade.

Full yaml below:

###
##
## Konnected Alarm Panel Pro v1.5, v1.6, v1.7 (ESP32)
## Firmware configuration for ESPHome
##
## filename: alarm-panel-pro-esp32.yaml
## GitHub: https://github.com/konnected-io/konnected-esphome
## Buy Konnected hardware: https://konnected.io
## Help & Support: https://[email protected] (support is provided for purchasers of Konnected hardware)
##
## Copyright© 2023 Konnected Inc.
##
## Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 
## files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 
## modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
## is furnished to do so, subject to the following conditions:
##
## The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
##
## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
## OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 
## LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 
## IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
##
####


####
# GENERAL SETTINGS
# Customize these variables to your preferences and needs
# more: https://esphome.io/guides/configuration-types.html#substitutions
substitutions:

  ####
  # NAME
  # By default, the name of the ESPHome device is "konnected-xxxxxx" where xxxxxx is a unique identifier. The device's
  # hostname on your network is also defined by the name, defaulting to "konnected-xxxxxx.local". Edit this variable to
  # customize the name and hostname. Note: only lowercase characters, numbers and hyphen(-) are allowed.
  name: konnected-ab2c3c
  friendly_name: Alarm Panel Pro
  project_name: konnected.alarm-panel-pro-ethernet
  project_version: "0.1.1"

  # ETHERNET CONFIG
  # On the Alarm Panel Pro v1.5, v1.6 and v1.7 use LAN8720. On the v1.8 set this variable to RTL8201.
  ethernet_type: LAN8720
  manual_ip:
    static_ip: 10.66.131.134
    gateway: 10.66.131.1
    subnet: 255.255.255.0

  sensor_debounce_time: 200ms
  warning_beep_pulse_time: 100ms
  warning_beep_pause_time: 130ms
  warning_beep_internal_only: "false"
  warning_beep_shared: "false"
  blink_on_state: "true"

  ####
  # ZONE MAPPING
  # Do not edit this section.
  zone1: GPIO4
  zone2: GPIO2
  zone3: GPIO15 
  zone4: GPIO13 
  zone5: GPIO18
  zone6: GPIO14
  zone7: GPIO33
  zone8: GPIO32
  zone9: GPIO36  # working
  zone10: GPIO39 # working
  zone11: GPIO34 # not tested
  zone12: GPIO35 # working
  alarm1: GPIO12
  alarm2: GPIO5
  out1: GPIO23
  out2: GPIO5
  status_led: GPIO3


  ####
  # CONNECTION MAPPINGS
  warning_beep_pin: $out1


####
# PACKAGES
# Each package includes the alarm panel feature
# Remove or comment out any packages that you do not need or want.
# If you're developing/installing locally, replace the github package line with the local package include above it.
packages:

  remote_package:
    url: https://github.com/konnected-io/konnected-esphome
    ref: master
    refresh: 5min
    files:

      ####
      # CORE
      # This package is required and sets up core features.
      - packages/core-esp32.yaml

      ####
      # ETHERNET
      # Enables ethernet connectivity.
      - packages/ethernet.yaml

      ####
      # MDNS
      # Enables the _konnected MDNS/zeroconf service advertisement needed for the Konnected App
      - packages/mdns.yaml

      ####
      # STATUS LED
      # Enables the onboard blue status LED as an activity/error indicator
      - packages/status-led.yaml

      ####
      # INPUT ZONES
      - packages/alarm-panel/zone1.yaml



      ####
      # WARNING BEEP
      # Enables a 'Warning Beep' entity, intended to be used with a piezo buzzer or other pulsing.
      # binary output This is implemented using the light component with strobe effect to create a 
      # repeated beeping sound or pulsing action that can be turned on via the _strobe_ effect.
      - packages/warning-beep.yaml



dashboard_import:
  package_import_url: github://konnected-io/konnected-esphome/alarm-panel-pro-esp32-ethernet.yaml@master
  import_full_config: false

####
# WEB SEVER
# Enables the built-in web server for viewing the device state, internals and controls via web browser
# on the same local network as the device.
web_server:
  include_internal: true

#### 
# LOGGER
# more: https://esphome.io/components/logger.html
logger:

####
# NATIVE API for HOME ASSISTANT
# Enables the native API for Home Assistant
# more: https://esphome.io/components/api.html
api:
  encryption:
    key: [key]

#ota:
#  - platform: esphome
#    port: 8266
#    password: "password"

binary_sensor:

#2
  - platform: gpio
    id: sitting_room_pir
    name: Sitting Room PIR
    device_class: motion
    pin:
      number: $zone2
      mode: INPUT_PULLUP
    filters:
      - delayed_on_off: $sensor_debounce_time
    on_state:
      - if:
          condition:
            lambda: return id(blink_on_state);
          then:
            - script.execute: blink_status_led
      
#3
  - platform: gpio
    id: front_door
    name: Front Door
    device_class: door
    pin:
      number: $zone3
      mode: INPUT_PULLUP
    filters:
      - delayed_on_off: $sensor_debounce_time
    on_state:
      - if:
          condition:
            lambda: return id(blink_on_state);
          then:
            - script.execute: blink_status_led
      
#4
  - platform: gpio
    id: drawing_room_pir
    name: Drawing Room PIR
    device_class: motion
    pin:
      number: $zone4
      mode: INPUT_PULLUP
    filters:
      - delayed_on_off: $sensor_debounce_time
    on_state:
      - if:
          condition:
            lambda: return id(blink_on_state);
          then:
            - script.execute: blink_status_led
      
#5
  - platform: gpio
    id: kitchen_door
    name: Kitchen Door
    device_class: door
    pin:
      number: $zone5
      mode: INPUT_PULLUP
    filters:
      - delayed_on_off: $sensor_debounce_time
    on_state:
      - if:
          condition:
            lambda: return id(blink_on_state);
          then:
            - script.execute: blink_status_led
      
#6
  - platform: gpio
    id: study_pir
    name: Study PIR
    device_class: motion
    pin:
      number: $zone6
      mode: INPUT_PULLUP
    filters:
      - delayed_on_off: $sensor_debounce_time
    on_state:
      - if:
          condition:
            lambda: return id(blink_on_state);
          then:
            - script.execute: blink_status_led
      
#7
  - platform: gpio
    id: upstairs_pir1
    name: Upstairs PIR 1
    device_class: motion
    pin:
      number: $zone7
      mode: INPUT_PULLUP
    filters:
      - delayed_on_off: $sensor_debounce_time
    on_state:
      - if:
          condition:
            lambda: return id(blink_on_state);
          then:
            - script.execute: blink_status_led
      
#8
  - platform: gpio
    id: upstairs_pir2
    name: Upstairs PIR 2
    device_class: motion
    pin:
      number: $zone8
      mode: INPUT_PULLUP
    filters:
      - delayed_on_off: $sensor_debounce_time
    on_state:
      - if:
          condition:
            lambda: return id(blink_on_state);
          then:
            - script.execute: blink_status_led
      
#9
#9, 10, 11 and 12 are all INPUT not INPUT_PULLUP
  - platform: gpio
    id: utility_room_pir
    name: Utility Room PIR
    device_class: motion
    pin:
      number: $zone9
      mode: INPUT
    filters:
      - delayed_on_off: $sensor_debounce_time
    on_state:
      - if:
          condition:
            lambda: return id(blink_on_state);
          then:
            - script.execute: blink_status_led
      
#10
  - platform: gpio
    id: kitchen_pir
    name: Kitchen PIR
    device_class: motion
    pin:
      number: $zone10
      mode: INPUT
    filters:
      - delayed_on_off: $sensor_debounce_time
    on_state:
      - if:
          condition:
            lambda: return id(blink_on_state);
          then:
            - script.execute: blink_status_led
      
#11
  - platform: gpio
    id: panic
    name: Panic Alarm
    device_class: tamper
    pin:
      number: $zone11
      mode: INPUT
    filters:
      - delayed_on_off: $sensor_debounce_time
    on_state:
      - if:
          condition:
            lambda: return id(blink_on_state);
          then:
            - script.execute: blink_status_led
      
#12
  - platform: gpio
    id: tamper
    name: Tamper
    device_class: tamper
    pin:
      number: $zone12
      mode: INPUT
    filters:
      - delayed_on_off: $sensor_debounce_time
    on_state:
      - if:
          condition:
            lambda: return id(blink_on_state);
          then:
            - script.execute: blink_status_led
      
  - platform: homeassistant
    id: ha_test
    name: HA Test
    entity_id: input_boolean.test_switch

switch:
  - platform: gpio
    id: siren1
    name: Siren 1
    icon: mdi:alarm-bell
    pin: $alarm1

#  - platform: gpio
#    id: buzzer
#    name: Buzzer
#    icon: mdi:bell-ring-outline
#    pin: $out1

alarm_control_panel:
  platform: template
  name: Alarm Panel
  id: acp1
  codes:
    - "1234"
  requires_code_to_arm: false
  arming_away_time: 0s
  arming_home_time: 0s
  pending_time: 15s
  trigger_time: 1min
 
  binary_sensors:
    - input: sitting_room_pir
      bypass_armed_home: true
      trigger_mode: instant

    - input: front_door
      trigger_mode: delayed

    - input: drawing_room_pir
      trigger_mode: instant

    - input: kitchen_door
      chime: true
      trigger_mode: instant

    - input: study_pir
      trigger_mode: instant

    - input: upstairs_pir1
      bypass_armed_night: true
      trigger_mode: instant

    - input: upstairs_pir2
      bypass_armed_night: true
      trigger_mode: instant

    - input: utility_room_pir
      bypass_armed_home: true
      bypass_armed_night: true
      trigger_mode: instant

    - input: kitchen_pir
      bypass_armed_home: true
      trigger_mode: instant

    - input: panic
      trigger_mode: instant_always

    - input: tamper
      trigger_mode: instant_always
    
  on_state:
    then:
      - lambda: !lambda |-
          ESP_LOGD("TEST", "State change %s", alarm_control_panel_state_to_string(id(acp1)->get_state()));
  on_triggered:
    then:
      - switch.turn_on: siren1
  on_cleared:
    then:
      - switch.turn_off: siren1
  on_ready:
    then:
     - lambda: !lambda |-
         ESP_LOGD("TEST", "Sensor ready change to: %s",
           (id(acp1).get_all_sensors_ready()) ? (const char *) "True" : (const char *) "False");
  on_chime:
    then:
     - lambda: !lambda |-
         ESP_LOGD("TEST", "Zone with chime mode set opened");

Is this the first time install? A private 10.0.0.0 address with that subnet mask is valid and not that unusual, but if you converted this from an example yaml and just substituted those addresses it may not match your network config.

The other usual response for these issues is “do you have mDNS configured?” - crossing subnet boundaries and VLANs etc will break mDNS.

Set a use_address if mdns not working

Yeah that works but that’s not what use_address: is for - it’s for temporary repointing of a device when changing names.

If mDNS isn’t working because of “network reasons” that you can’t fix then you are best off:

  • using static addresses
  • setting mdns: - disabled: true
  • enable the ping for status option in ESPHome add-on

This:

was just patched in the 2025.10.3 ESPHome update - it could also be the cause of your issues…

I’m using the 10.66.131.x subnet for my LAN. I wanted to try to have a unique subnet due to separate issues I was having with wireguard.

tomato tomato :slightly_smiling_face:

Your right however. I set static IP at router so for me it may be no difference

EDIT
Had time at lunch. Decided to fix mdns on my network. opnsense appends /32 to multicast address in firewall rules. create alias >> add alias to rule >> mdns working

So with that.
If mdns doesnt work you should probably fix that.
you can add static IP or use_address as a quick fix til you get mdns working. :rofl: