diff --git a/homeassistant/components/zwave_js/helpers.py b/homeassistant/components/zwave_js/helpers.py
index 737b8deff34beaebfaba370af76b25a68a87e4b3..5885527e01c33af22ce997f289e7937b0ff1ba2e 100644
--- a/homeassistant/components/zwave_js/helpers.py
+++ b/homeassistant/components/zwave_js/helpers.py
@@ -343,20 +343,18 @@ def async_get_nodes_from_area_id(
         }
     )
     # Add devices in an area that are Z-Wave JS devices
-    for device in dr.async_entries_for_area(dev_reg, area_id):
-        if next(
-            (
-                config_entry_id
-                for config_entry_id in device.config_entries
-                if cast(
-                    ConfigEntry,
-                    hass.config_entries.async_get_entry(config_entry_id),
-                ).domain
-                == DOMAIN
-            ),
-            None,
-        ):
-            nodes.add(async_get_node_from_device_id(hass, device.id, dev_reg))
+    nodes.update(
+        async_get_node_from_device_id(hass, device.id, dev_reg)
+        for device in dr.async_entries_for_area(dev_reg, area_id)
+        if any(
+            cast(
+                ConfigEntry,
+                hass.config_entries.async_get_entry(config_entry_id),
+            ).domain
+            == DOMAIN
+            for config_entry_id in device.config_entries
+        )
+    )
 
     return nodes
 
diff --git a/homeassistant/components/zwave_js/services.py b/homeassistant/components/zwave_js/services.py
index e5c0bd64781aa24a0119b46191fe81ce6347561d..969a235bb414ea47e5aabdd08f3632eb2b4feff8 100644
--- a/homeassistant/components/zwave_js/services.py
+++ b/homeassistant/components/zwave_js/services.py
@@ -48,6 +48,12 @@ _LOGGER = logging.getLogger(__name__)
 
 type _NodeOrEndpointType = ZwaveNode | Endpoint
 
+TARGET_VALIDATORS = {
+    vol.Optional(ATTR_AREA_ID): vol.All(cv.ensure_list, [cv.string]),
+    vol.Optional(ATTR_DEVICE_ID): vol.All(cv.ensure_list, [cv.string]),
+    vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
+}
+
 
 def parameter_name_does_not_need_bitmask(
     val: dict[str, int | str | list[str]],
@@ -261,13 +267,7 @@ class ZWaveServices:
             schema=vol.Schema(
                 vol.All(
                     {
-                        vol.Optional(ATTR_AREA_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_DEVICE_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
+                        **TARGET_VALIDATORS,
                         vol.Optional(const.ATTR_ENDPOINT, default=0): vol.Coerce(int),
                         vol.Required(const.ATTR_CONFIG_PARAMETER): vol.Any(
                             vol.Coerce(int), cv.string
@@ -305,13 +305,7 @@ class ZWaveServices:
             schema=vol.Schema(
                 vol.All(
                     {
-                        vol.Optional(ATTR_AREA_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_DEVICE_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
+                        **TARGET_VALIDATORS,
                         vol.Optional(const.ATTR_ENDPOINT, default=0): vol.Coerce(int),
                         vol.Required(const.ATTR_CONFIG_PARAMETER): vol.Coerce(int),
                         vol.Required(const.ATTR_CONFIG_VALUE): vol.Any(
@@ -356,13 +350,7 @@ class ZWaveServices:
             schema=vol.Schema(
                 vol.All(
                     {
-                        vol.Optional(ATTR_AREA_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_DEVICE_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
+                        **TARGET_VALIDATORS,
                         vol.Required(const.ATTR_COMMAND_CLASS): vol.Coerce(int),
                         vol.Required(const.ATTR_PROPERTY): vol.Any(
                             vol.Coerce(int), str
@@ -391,13 +379,7 @@ class ZWaveServices:
             schema=vol.Schema(
                 vol.All(
                     {
-                        vol.Optional(ATTR_AREA_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_DEVICE_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
+                        **TARGET_VALIDATORS,
                         vol.Optional(const.ATTR_BROADCAST, default=False): cv.boolean,
                         vol.Required(const.ATTR_COMMAND_CLASS): vol.Coerce(int),
                         vol.Required(const.ATTR_PROPERTY): vol.Any(
@@ -428,15 +410,7 @@ class ZWaveServices:
             self.async_ping,
             schema=vol.Schema(
                 vol.All(
-                    {
-                        vol.Optional(ATTR_AREA_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_DEVICE_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
-                    },
+                    TARGET_VALIDATORS,
                     cv.has_at_least_one_key(
                         ATTR_DEVICE_ID, ATTR_ENTITY_ID, ATTR_AREA_ID
                     ),
@@ -453,13 +427,7 @@ class ZWaveServices:
             schema=vol.Schema(
                 vol.All(
                     {
-                        vol.Optional(ATTR_AREA_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_DEVICE_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
+                        **TARGET_VALIDATORS,
                         vol.Required(const.ATTR_COMMAND_CLASS): vol.All(
                             vol.Coerce(int), vol.Coerce(CommandClass)
                         ),
@@ -483,13 +451,7 @@ class ZWaveServices:
             schema=vol.Schema(
                 vol.All(
                     {
-                        vol.Optional(ATTR_AREA_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_DEVICE_ID): vol.All(
-                            cv.ensure_list, [cv.string]
-                        ),
-                        vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
+                        **TARGET_VALIDATORS,
                         vol.Required(const.ATTR_NOTIFICATION_TYPE): vol.All(
                             vol.Coerce(int), vol.Coerce(NotificationType)
                         ),
diff --git a/homeassistant/components/zwave_js/services.yaml b/homeassistant/components/zwave_js/services.yaml
index 81809e3fbeb745912d5c7387ef7debc2316c3e10..1e521ddbe2d362997ba61bc7b6f673dbdae52d01 100644
--- a/homeassistant/components/zwave_js/services.yaml
+++ b/homeassistant/components/zwave_js/services.yaml
@@ -89,10 +89,28 @@ set_lock_configuration:
         boolean:
 
 set_config_parameter:
-  target:
-    entity:
-      integration: zwave_js
   fields:
+    area_id:
+      example: living_room
+      selector:
+        area:
+          device:
+            - integration: zwave_js
+          multiple: true
+    device_id:
+      example: "8f4219cfa57e23f6f669c4616c2205e2"
+      selector:
+        device:
+          filter:
+            - integration: zwave_js
+          multiple: true
+    entity_id:
+      example: sensor.living_room_temperature
+      selector:
+        entity:
+          filter:
+            - integration: zwave_js
+          multiple: true
     endpoint:
       example: 1
       default: 0
@@ -127,10 +145,28 @@ set_config_parameter:
           max: 3
 
 bulk_set_partial_config_parameters:
-  target:
-    entity:
-      integration: zwave_js
   fields:
+    area_id:
+      example: living_room
+      selector:
+        area:
+          device:
+            - integration: zwave_js
+          multiple: true
+    device_id:
+      example: "8f4219cfa57e23f6f669c4616c2205e2"
+      selector:
+        device:
+          filter:
+            - integration: zwave_js
+          multiple: true
+    entity_id:
+      example: sensor.living_room_temperature
+      selector:
+        entity:
+          filter:
+            - integration: zwave_js
+          multiple: true
     endpoint:
       example: 1
       default: 0
@@ -169,10 +205,28 @@ refresh_value:
         boolean:
 
 set_value:
-  target:
-    entity:
-      integration: zwave_js
   fields:
+    area_id:
+      example: living_room
+      selector:
+        area:
+          device:
+            - integration: zwave_js
+          multiple: true
+    device_id:
+      example: "8f4219cfa57e23f6f669c4616c2205e2"
+      selector:
+        device:
+          filter:
+            - integration: zwave_js
+          multiple: true
+    entity_id:
+      example: sensor.living_room_temperature
+      selector:
+        entity:
+          filter:
+            - integration: zwave_js
+          multiple: true
     command_class:
       example: 117
       required: true
@@ -208,10 +262,28 @@ set_value:
         boolean:
 
 multicast_set_value:
-  target:
-    entity:
-      integration: zwave_js
   fields:
+    area_id:
+      example: living_room
+      selector:
+        area:
+          device:
+            - integration: zwave_js
+          multiple: true
+    device_id:
+      example: "8f4219cfa57e23f6f669c4616c2205e2"
+      selector:
+        device:
+          filter:
+            - integration: zwave_js
+          multiple: true
+    entity_id:
+      example: sensor.living_room_temperature
+      selector:
+        entity:
+          filter:
+            - integration: zwave_js
+          multiple: true
     broadcast:
       example: true
       required: false
@@ -248,9 +320,28 @@ multicast_set_value:
         object:
 
 ping:
-  target:
-    entity:
-      integration: zwave_js
+  fields:
+    area_id:
+      example: living_room
+      selector:
+        area:
+          device:
+            - integration: zwave_js
+          multiple: true
+    device_id:
+      example: "8f4219cfa57e23f6f669c4616c2205e2"
+      selector:
+        device:
+          filter:
+            - integration: zwave_js
+          multiple: true
+    entity_id:
+      example: sensor.living_room_temperature
+      selector:
+        entity:
+          filter:
+            - integration: zwave_js
+          multiple: true
 
 reset_meter:
   target:
@@ -258,6 +349,30 @@ reset_meter:
       domain: sensor
       integration: zwave_js
   fields:
+    area_id:
+      example: living_room
+      selector:
+        area:
+          entity:
+            - integration: zwave_js
+              domain: sensor
+          multiple: true
+    device_id:
+      example: "8f4219cfa57e23f6f669c4616c2205e2"
+      selector:
+        device:
+          entity:
+            - integration: zwave_js
+              domain: sensor
+          multiple: true
+    entity_id:
+      example: sensor.living_room_temperature
+      selector:
+        entity:
+          filter:
+            - integration: zwave_js
+              domain: sensor
+          multiple: true
     meter_type:
       example: 1
       required: false
@@ -270,10 +385,28 @@ reset_meter:
         text:
 
 invoke_cc_api:
-  target:
-    entity:
-      integration: zwave_js
   fields:
+    area_id:
+      example: living_room
+      selector:
+        area:
+          device:
+            - integration: zwave_js
+          multiple: true
+    device_id:
+      example: "8f4219cfa57e23f6f669c4616c2205e2"
+      selector:
+        device:
+          filter:
+            - integration: zwave_js
+          multiple: true
+    entity_id:
+      example: sensor.living_room_temperature
+      selector:
+        entity:
+          filter:
+            - integration: zwave_js
+          multiple: true
     command_class:
       example: 132
       required: true
@@ -296,10 +429,28 @@ invoke_cc_api:
         object:
 
 refresh_notifications:
-  target:
-    entity:
-      integration: zwave_js
   fields:
+    area_id:
+      example: living_room
+      selector:
+        area:
+          device:
+            - integration: zwave_js
+          multiple: true
+    device_id:
+      example: "8f4219cfa57e23f6f669c4616c2205e2"
+      selector:
+        device:
+          filter:
+            - integration: zwave_js
+          multiple: true
+    entity_id:
+      example: sensor.living_room_temperature
+      selector:
+        entity:
+          filter:
+            - integration: zwave_js
+          multiple: true
     notification_type:
       example: 1
       required: true
diff --git a/homeassistant/components/zwave_js/strings.json b/homeassistant/components/zwave_js/strings.json
index 4bba3e0538cf8b33605e9c34d114936f19d615da..ca7d5153e6e0ba9f0c9f094d3711a820ffe8e3b9 100644
--- a/homeassistant/components/zwave_js/strings.json
+++ b/homeassistant/components/zwave_js/strings.json
@@ -265,10 +265,22 @@
     "bulk_set_partial_config_parameters": {
       "description": "Allows for bulk setting partial parameters. Useful when multiple partial parameters have to be set at the same time.",
       "fields": {
+        "area_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::area_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::area_id::name%]"
+        },
+        "device_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::device_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::device_id::name%]"
+        },
         "endpoint": {
           "description": "[%key:component::zwave_js::services::set_config_parameter::fields::endpoint::description%]",
           "name": "[%key:component::zwave_js::services::set_config_parameter::fields::endpoint::name%]"
         },
+        "entity_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::entity_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::entity_id::name%]"
+        },
         "parameter": {
           "description": "[%key:component::zwave_js::services::set_config_parameter::fields::parameter::description%]",
           "name": "[%key:component::zwave_js::services::set_config_parameter::fields::parameter::name%]"
@@ -293,14 +305,26 @@
     "invoke_cc_api": {
       "description": "Calls a Command Class API on a node. Some Command Classes can't be fully controlled via the `set_value` action and require direct calls to the Command Class API.",
       "fields": {
+        "area_id": {
+          "description": "The area(s) to target for this service. If an area is specified, all zwave_js devices and entities in that area will be targeted for this service.",
+          "name": "Area ID(s)"
+        },
         "command_class": {
           "description": "The ID of the command class that you want to issue a command to.",
           "name": "[%key:component::zwave_js::services::set_value::fields::command_class::name%]"
         },
+        "device_id": {
+          "description": "The device(s) to target for this service.",
+          "name": "Device ID(s)"
+        },
         "endpoint": {
           "description": "The endpoint to call the API on. If an endpoint is specified, that endpoint will be targeted for all nodes associated with the target areas, devices, and/or entities. If an endpoint is not specified, the root endpoint (0) will be targeted for nodes associated with target areas and devices, and the endpoint for the primary value of each entity will be targeted.",
           "name": "[%key:component::zwave_js::services::set_config_parameter::fields::endpoint::name%]"
         },
+        "entity_id": {
+          "description": "The entity ID(s) to target for this service.",
+          "name": "Entity ID(s)"
+        },
         "method_name": {
           "description": "The name of the API method to call. Refer to the Z-Wave JS Command Class API documentation (https://zwave-js.github.io/node-zwave-js/#/api/CCs/index) for available methods.",
           "name": "Method name"
@@ -315,6 +339,10 @@
     "multicast_set_value": {
       "description": "Changes any value that Z-Wave JS recognizes on multiple Z-Wave devices using multicast, so all devices receive the message simultaneously. This action has minimal validation so only use this action if you know what you are doing.",
       "fields": {
+        "area_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::area_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::area_id::name%]"
+        },
         "broadcast": {
           "description": "Whether command should be broadcast to all devices on the network.",
           "name": "Broadcast?"
@@ -323,10 +351,18 @@
           "description": "[%key:component::zwave_js::services::set_value::fields::command_class::description%]",
           "name": "[%key:component::zwave_js::services::set_value::fields::command_class::name%]"
         },
+        "device_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::device_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::device_id::name%]"
+        },
         "endpoint": {
           "description": "[%key:component::zwave_js::services::set_value::fields::endpoint::description%]",
           "name": "[%key:component::zwave_js::services::set_config_parameter::fields::endpoint::name%]"
         },
+        "entity_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::entity_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::entity_id::name%]"
+        },
         "options": {
           "description": "[%key:component::zwave_js::services::set_value::fields::options::description%]",
           "name": "[%key:component::zwave_js::services::set_value::fields::options::name%]"
@@ -348,11 +384,37 @@
     },
     "ping": {
       "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.",
+      "fields": {
+        "area_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::area_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::area_id::name%]"
+        },
+        "device_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::device_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::device_id::name%]"
+        },
+        "entity_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::entity_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::entity_id::name%]"
+        }
+      },
       "name": "Ping a node"
     },
     "refresh_notifications": {
       "description": "Refreshes notifications on a node based on notification type and optionally notification event.",
       "fields": {
+        "area_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::area_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::area_id::name%]"
+        },
+        "device_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::device_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::device_id::name%]"
+        },
+        "entity_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::entity_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::entity_id::name%]"
+        },
         "notification_event": {
           "description": "The Notification Event number as defined in the Z-Wave specs.",
           "name": "Notification Event"
@@ -381,6 +443,18 @@
     "reset_meter": {
       "description": "Resets the meters on a node.",
       "fields": {
+        "area_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::area_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::area_id::name%]"
+        },
+        "device_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::device_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::device_id::name%]"
+        },
+        "entity_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::entity_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::entity_id::name%]"
+        },
         "meter_type": {
           "description": "The type of meter to reset. Not all meters support the ability to pick a meter type to reset.",
           "name": "Meter type"
@@ -395,14 +469,26 @@
     "set_config_parameter": {
       "description": "Changes the configuration parameters of your Z-Wave devices.",
       "fields": {
+        "area_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::area_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::area_id::name%]"
+        },
         "bitmask": {
           "description": "Target a specific bitmask (see the documentation for more information). Cannot be combined with value_size or value_format.",
           "name": "Bitmask"
         },
+        "device_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::device_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::device_id::name%]"
+        },
         "endpoint": {
           "description": "The configuration parameter's endpoint.",
           "name": "Endpoint"
         },
+        "entity_id": {
+          "description": "[%key:component::zwave_js::services::set_value::fields::entity_id::description%]",
+          "name": "[%key:component::zwave_js::services::set_value::fields::entity_id::name%]"
+        },
         "parameter": {
           "description": "The name (or ID) of the configuration parameter you want to configure.",
           "name": "Parameter"
@@ -477,14 +563,26 @@
     "set_value": {
       "description": "Changes any value that Z-Wave JS recognizes on a Z-Wave device. This action has minimal validation so only use this action if you know what you are doing.",
       "fields": {
+        "area_id": {
+          "description": "The area(s) to target for this service. If an area is specified, all zwave_js devices and entities in that area will be targeted for this service.",
+          "name": "Area ID(s)"
+        },
         "command_class": {
           "description": "The ID of the command class for the value.",
           "name": "Command class"
         },
+        "device_id": {
+          "description": "The device(s) to target for this service.",
+          "name": "Device ID(s)"
+        },
         "endpoint": {
           "description": "The endpoint for the value.",
           "name": "[%key:component::zwave_js::services::set_config_parameter::fields::endpoint::name%]"
         },
+        "entity_id": {
+          "description": "The entity ID(s) to target for this service.",
+          "name": "Entity ID(s)"
+        },
         "options": {
           "description": "Set value options map. Refer to the Z-Wave JS documentation for more information on what options can be set.",
           "name": "Options"