I’m trying to get a script built. I want to check if a variable exist and include it if it does. Just really struggling to figure out the formatting. Something like

script:
  sequence:
    target:
      entity_id: "{{ entity }}"
    {% if variable is defined %}
      data: "{{ variable }}"
    {% endif %}
  • Otkaz@lemmy.worldOP
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    1 year ago

    To give more context I’m working on a media control dashboard. The script or rather scripts I have to send commands to kodi is as follows

    kodi_control:
      sequence:
      - service: kodi.call_method
        target:
          entity_id: '{{ kodi_entity }}'
        data:
          method: '{{ kodi_method }}'
    
    kodi_control_playback:
      sequence:
      - service: kodi.call_method
        target:
          entity_id: '{{ kodi_entity }}'
        data:
          method: '{{ kodi_method }}'
          playerid: '{{ kodi_playerid }}'
    
    kodi_control_subtitles:
      sequence:
      - service: kodi.call_method
        target:
          entity_id: '{{ kodi_entity }}'
        data:
          method: '{{ kodi_method }}'
          action: '{{ kodi_action }}'
    
    kodi_control_seek:
      sequence:
      - service: kodi.call_method
        target:
          entity_id: '{{ kodi_entity }}'
        data:
          method: '{{ kodi_method }}'
          playerid: '{{ kodi_playerid }}'
          value: '{{ kodi_value }}'
    
    kodi_control_playlist:
      sequence:
      - service: kodi.call_method
        target:
          entity_id: '{{ kodi_entity }}'
        data:
          method: '{{ kodi_method }}'
          window: '{{ kodi_window }}'
          parameters: '{{ [ kodi_parameters ] }}'
    

    I would like to condense all of this down to a single script using “is defined” to omit the parts not needed for certain commands so something like

    kodi_control:
      sequence:
      - service: kodi.call_method
        target:
          entity_id: '{{ kodi_entity }}'
        data: >-
          method: '{{ kodi_method }}'
          {% if kodi_playerid is defined %}
            playerid: '{{ kodi_playerid }}'
          {% endif %}
          {% if kodi_action is defined %}
            action: '{{ kodi_action }}'
          {% endif %}
          {% if kodi_value is defined %}
            value: '{{ kodi_value }}'
          {% endif %}
          {% if kodi_window is defined %}
            window: '{{ kodi_window }}'
          {% endif %}
          {% if kodi_parameters is defined %}
            parameters: '{{ [ kodi_parameters ] }}'
          {% endif %}
    

    Problem with the above is I get “result is not a dictionary”

    • bob_wiley@lemmy.world
      link
      fedilink
      English
      arrow-up
      3
      ·
      1 year ago

      Ok, I think I got you. With your current setup, you’re not going to get the proper data structure, as it’s going to return all your key/value pairs as one big string. What you need to do here is create your empty dictionary, then add the key/value pairs, based on your logic, then return the resulting dictionary at the end.

      Something like this…

      kodi_control:
      sequence:
      - service: kodi.call_method
        target:
          entity_id: '{{ kodi_entity }}'
        data: >-
          {% set my_dict = {} %}
          {% set x=my_dict.__setitem__("method", {{ kodi_method }}) %}
          {% if kodi_playerid is defined %}
            {% set x=my_dict.__setitem__("playerid", {{ kodi_playerid }}) %}
          {% endif %}
          {% if kodi_action is defined %}
            {% set x=my_dict.__setitem__("action", {{ kodi_action }}) %}
          {% endif %}
          {% if kodi_value is defined %}
            {% set x=my_dict.__setitem__("value", {{ kodi_value }}) %}
          {% endif %}
          {% if kodi_window is defined %}
            {% set x=my_dict.__setitem__("window", {{ kodi_window }}) %}
          {% endif %}
          {% if kodi_parameters is defined %}
            {% set x=my_dict.__setitem__("parameters", {{ [ kodi_parameters ] }}) %}
          {% endif %}
          {{ my_dict }}