# Describes the format for available Z-Wave services

clear_lock_usercode:
  name: Clear a usercode from a lock
  description: Clear a usercode from a lock
  target:
    entity:
      domain: lock
      integration: zwave_js
  fields:
    code_slot:
      name: Code slot
      description: Code slot to clear code from
      required: true
      example: 1
      selector:
        text:

set_lock_usercode:
  name: Set a usercode on a lock
  description: Set a usercode on a lock
  target:
    entity:
      domain: lock
      integration: zwave_js
  fields:
    code_slot:
      name: Code slot
      description: Code slot to set the code.
      required: true
      example: 1
      selector:
        text:
    usercode:
      name: Code
      description: Code to set.
      required: true
      example: 1234
      selector:
        text:

set_config_parameter:
  name: Set a Z-Wave device configuration parameter
  description: Allow for changing configuration parameters of your Z-Wave devices.
  target:
    entity:
      integration: zwave_js
  fields:
    parameter:
      name: Parameter
      description: The (name or id of the) configuration parameter you want to configure.
      example: Minimum brightness level
      required: true
      selector:
        text:
    value:
      name: Value
      description: The new value to set for this configuration parameter.
      example: 5
      required: true
      selector:
        text:
    bitmask:
      name: Bitmask
      description: Target a specific bitmask (see the documentation for more information).
      advanced: true
      selector:
        text:

bulk_set_partial_config_parameters:
  name: Bulk set partial configuration parameters for a Z-Wave device (Advanced).
  description: Allow for bulk setting partial parameters. Useful when multiple partial parameters have to be set at the same time.
  target:
    entity:
      integration: zwave_js
  fields:
    parameter:
      name: Parameter
      description: The id of the configuration parameter you want to configure.
      example: 9
      required: true
      selector:
        text:
    value:
      name: Value
      description: The new value(s) to set for this configuration parameter. Can either be a raw integer value to represent the bulk change or a mapping where the key is the bitmask (either in hex or integer form) and the value is the new value you want to set for that partial parameter.
      example:
        "0x1": 1
        "0x10": 1
        "0x20": 1
        "0x40": 1
      required: true
      selector:
        object:

refresh_value:
  name: Refresh value(s) of a Z-Wave entity
  description: Force update value(s) for a Z-Wave entity
  fields:
    entity_id:
      name: Entity
      description: Entity whose value(s) should be refreshed
      required: true
      example: sensor.family_room_motion
      selector:
        entity:
          integration: zwave_js
    refresh_all_values:
      name: Refresh all values?
      description: Whether to refresh all values (true) or just the primary value (false)
      default: false
      selector:
        boolean:

set_value:
  name: Set a value on a Z-Wave device (Advanced)
  description: Allow for changing any value that Z-Wave JS recognizes on a Z-Wave device. This service has minimal validation so only use this service if you know what you are doing.
  target:
    entity:
      integration: zwave_js
  fields:
    command_class:
      name: Command Class
      description: The ID of the command class for the value.
      example: 117
      required: true
      selector:
        text:
    endpoint:
      name: Endpoint
      description: The endpoint for the value.
      example: 1
      required: false
      selector:
        text:
    property:
      name: Property
      description: The ID of the property for the value.
      example: currentValue
      required: true
      selector:
        text:
    property_key:
      name: Property Key
      description: The ID of the property key for the value
      example: 1
      required: false
      selector:
        text:
    value:
      name: Value
      description: The new value to set.
      example: "ffbb99"
      required: true
      selector:
        object:
    options:
      name: Options
      description: Set value options. Refer to the Z-Wave JS documentation for more information on what options can be set.
      required: false
      selector:
        object:
    wait_for_result:
      name: Wait for result?
      description: Whether or not to wait for a response from the node. If not included in the payload, the integration will decide whether to wait or not. If set to `true`, note that the service call can take a while if setting a value on an asleep battery device.
      required: false
      selector:
        boolean:

multicast_set_value:
  name: Set a value on multiple Z-Wave devices via multicast (Advanced)
  description: Allow for changing any value that Z-Wave JS recognizes on multiple Z-Wave devices using multicast, so all devices receive the message simultaneously. This service has minimal validation so only use this service if you know what you are doing.
  target:
    entity:
      integration: zwave_js
  fields:
    broadcast:
      name: Broadcast?
      description: Whether command should be broadcast to all devices on the networrk.
      example: true
      required: false
      selector:
        boolean:
    command_class:
      name: Command Class
      description: The ID of the command class for the value.
      example: 117
      required: true
      selector:
        text:
    endpoint:
      name: Endpoint
      description: The endpoint for the value.
      example: 1
      required: false
      selector:
        text:
    property:
      name: Property
      description: The ID of the property for the value.
      example: currentValue
      required: true
      selector:
        text:
    property_key:
      name: Property Key
      description: The ID of the property key for the value
      example: 1
      required: false
      selector:
        text:
    value:
      name: Value
      description: The new value to set.
      example: "ffbb99"
      required: true
      selector:
        object:

ping:
  name: Ping a node
  description: Forces Z-Wave JS to try to reach a node. This can be used to update the status of the node in Z-Wave JS when you think it doesn't accurately reflect reality, e.g. reviving a failed/dead node or marking the node as asleep.
  target:
    entity:
      integration: zwave_js