FutureTense / keymaster

Home Assistant integration for managing Z-Wave enabled locks
MIT License
239 stars 45 forks source link

ISSUE: fresh install not working due to package file not being mergable #331

Open psarossy opened 1 year ago

psarossy commented 1 year ago

Describe the bug

I have just set up keymaster on 2023.3.5 from HACS. Added one of my Yale locks, and able to set/delete codes from the developer tools but the generated config appears malformed

The PIN status stays Disconnected, and Desired PIN State as Off. If I enable a code via the zwavejs console it immediately puts it back to available instead of enabled, and it doesn't read or set the pin from the lovelace interface, while the Enabled box is set to on.

Environment (please complete the following information):

Logs The logs just repeat this:

2023-03-21 23:04:46.051 ERROR (MainThread) [homeassistant.config] Package frontdoor_keymaster_common setup failed. Integration script cannot be merged. Dict expected in main config. (See /config/packages/keymaster/frontdoor/frontdoor_keymaster_common.yaml:9).

Screenshots

I already had the packages folder importing

Screenshot 2023-03-21 at 23 56 00

Config is invalid

Screenshot 2023-03-21 at 23 56 37
firstof9 commented 1 year ago

Please verify the file is created and not blank.

psarossy commented 1 year ago

The file exists and has the contents I think I'm supposed to have (same for the numbered ones): Screenshot 2023-03-22 at 18 19 40

My hunch is that maybe packages don't handle inclusions properly for nested imports?

I already import a file for binary_sensors etc: Screenshot 2023-03-22 at 10 22 08

But with those imports I have to format them to be compliant with the json parsing (note the indentation and '-'): Screenshot 2023-03-22 at 18 22 25

firstof9 commented 1 year ago

At a glance it looks fine here's mine:

homeassistant:
  customize: !include customize.yaml
  packages: !include_dir_named packages
  auth_providers:
    - type: homeassistant
psarossy commented 1 year ago

Mine is the same.

I'e tested removing my script imports by commenting out the include in cofiguration.yaml, then it parses properly, so my hunch was correct.

This means if anyone has input_boolean, script, automation, timer or input_text yamls already, this integration can't work

firstof9 commented 1 year ago

I also have an extensive list of includes and it works fine:

## INCLUDES ##
light: !include light.yaml
media_player: !include media_player.yaml
group: !include groups.yaml
script: !include_dir_merge_named scripts/
input_select: !include input_select.yaml
sensor: !include_dir_merge_list sensors
device_tracker: !include device_tracker.yaml
# mysensors: !include mysensors.yaml
camera: !include cameras.yaml
alarm_control_panel: !include alarm.yaml
automation: !include automations.yaml
automation old: !include_dir_merge_list automation
notify: !include notify.yaml
alert: !include alerts.yaml
input_boolean: !include input_boolean.yaml
image_processing: !include image_processing.yaml
switch: !include switches.yaml
shell_command: !include_dir_merge_named shell_commands/
#panel_iframe: !include_dir_merge_named panel_iframe/
binary_sensor: !include binary_sensor.yaml
utility_meter: !include utility_meter.yaml
proximity: !include proximity.yaml
input_datetime: !include input_datetime.yaml
template: !include templates.yaml

It may be an order of operations things, all my includes are at the bottom. Nothing mixed in them.

psarossy commented 1 year ago

Any hints on how to further debug?

I moved my imports to the bottom, but if I reenable the script include the config will no longer parse...

Screenshot 2023-03-23 at 11 30 10

configuration.yaml:

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:
homeassistant:
  packages: !include_dir_named packages
  auth_mfa_modules:
    - type: totp

# Text to speech
tts:
  - platform: google_translate

http:
  use_x_forwarded_for: true
  trusted_proxies:
#    - 127.0.0.1
#    - ::1
    - 172.16.0.0/12
    - 10.0.0.0/8

###
# Configs
###
speedtestdotnet:

system_health:

garbage_collection:
  sensors:
  - name: "Regular waste" # Each week on Monday and Wednesday. No collection on Christmas, added extra collection on the 27th
    frequency: "weekly"
    collection_days:
    - wed
    expire_after: '12:00'
    move_country_holidays: "US"
  - name: "Recycling" # Bi-weekly (odd weeks) on Thursday. Between March and November
    frequency: "even-weeks"
    collection_days: "wed"
    move_country_holidays: "US"

wake_on_lan:

calendar:
  - platform: todoist
    token: xxx

input_datetime:
  anova_timer:
    name: Anova Recipe Timer
    has_date: false
    has_time: true

owntracks:
  mqtt_topic: "owntracks/owntracks/#"

###
# Includes
### 
group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
switch: !include switches.yaml
recorder:
  db_url: mysql://home-assistant:xxx@10.0.0.213/home-assistant-ext?charset=utf8mb4
  exclude:
    entity_globs:
      - sensor.gaen*
      - sensor.ms_cdp*
      - sensor.tpms*
sensor: !include sensors.yaml
binary_sensor: !include binary_sensors.yaml
bloomsky: !include bloomsky.yaml
camera: !include cameras.yaml
light: !include lights.yaml
climate: !include climate.yaml
input_select: !include input_selects.yaml
plant: !include plants.yaml

scripts.yaml

- showtime_peters_office:
    sequence:
    - service: fan.turn_on
      target:
        device_id: a916d0ee7954d2e96d7180561266b0a1
      data: {}
    - service: light.turn_on
      target:
        entity_id: light.peter_office_desk_lights
    - service: switch.turn_on
      target:
        device_id: 7590eebdb4cbe40161a2441611150c3e
    mode: single
    alias: Showtime - Peter's office

- anova_cook_recipe:
    alias: Anova - Cook Recipe
    sequence:
      - service: climate.set_temperature
        data_template:
          entity_id: climate.anova
          temperature: >-
            {% if is_state("input_select.anova_recipe", "Egg - Soft Boiled (00:45)") %} 63.3
            {% elif is_state("input_select.anova_recipe", "Lamb Steak (03:00)") %} 55
            {% elif is_state("input_select.anova_recipe", "Pork Tenderloin (02:00)") %} 57.2
            {% elif is_state("input_select.anova_recipe", "Steak (00:30)") %} 54
            {% elif is_state("input_select.anova_recipe", "Tuna Steak (00:45)") %} 43.3
            {% elif is_state("input_select.anova_recipe", "Venison Steak (01:30)") %} 54
            {% endif %}
          hvac_mode: 'heat'
      - delay:
          seconds: 15
      - wait_template: "{{ is_state('climate.anova', 'heat') }}"
        timeout: '00:00:15'
      - service: mqtt.publish
        data:
          topic: anova/command/timer
          payload_template: '{{(states("input_select.anova_recipe").split("(")[1].split(")")[0].split(":")[0] | int * 60) + (states("input_select.anova_recipe").split("(")[1].split(")")[0].split(":")[1] | int)}}'
      - wait_template: '{{ state_attr("climate.anova","temperature") | int -  state_attr("climate.anova","current_temperature") | int < 1}}'
        timeout: '00:00:15'
      - service: switch.turn_on
        entity_id: switch.anova_timer
firstof9 commented 1 year ago

Check the actual error message in the home-assistant.log file