Approaches to room aware voice commands for Alexa with Node-Red

Has anyone noticed that the message payload has changed using this method?

For me the msg.payload.description.summary is now blank, which means I can’t use this approach for room aware voice commands anymore. :frowning:

yup its doing it to me as well but it seems its just for on/off commands total bummer

I can confirm.
“What is the time”:
alexa time Screen Shot 2020-07-27 at 10.52.59 PM

“Turn on device_name”:
turn on x Screen Shot 2020-07-27 at 10.53.36 PM

I have zigbee buttons configured to trigger the same automations, so I can live without Alexa. Maybe amazon is no longer providing this data? I have not changed anything related to alexa or node red, so I suspect amazon has decided to withhold this data.

I have a dumb workaround: Instead of switching on “Turn on device_name”, i changed it to switch on “What is device_name”.
There may be a better phrase to switch on, but that’s what I came up with in 5 minutes.
“initiate” and “terminate” seem to work too. ok for me, but not other members of the house.

That’s a cunning workaround. What is lights does indeed show up in the payload summary, but it also starts Alexa on a rant about light pollution! :slight_smile:

I’m going to try a more complicated approach by monitoring payload.name, and using a switch to fire off an MQTT event for that room, which will enable an EventGhost folder with that room name for 10 seconds, and then disable it. The same device event ( lights, fan, aircon et cetera) will be retriggered after a few seconds with a off/on, but only the enabled folder for that room will do anything.

So that when it gets a lights payload, it only runs in that room. Such a hassle though. There’s probably some way to do this in node red using triggers with delays and cancels perhaps, but I’m not au fait with it enough to manage.

The issue seemed to have resolved itself, with the payload now being displayed.

As an aside to this, if you use https://red.cb-net.co.uk/ you can create a device which has both a range, (so you can choose low medium high, open/close), and power, ( turn on/off) without that particular error message above.

There are some cons, in that it needs a skill, and an extra node to be installed, but it’s easier than creating lots of different routines.

Well I decided to have a go at it through node red, rather than sending it to EventGhost. The following seems to work pretty well, no matter whether you say, Alexa, (wait for the beep), and then issue the command, or if you just say it in one continuous command.

It relies on the use of virtual switches in home Assistant, which can be added by adding this to the configuration.yaml

input_boolean:

  rumpus_alexa:
    name: Rumpus Alexa
    icon: mdi:motion-sensor
  
  bedroom_alexa:
    name: Bedroom Alexa
    icon: mdi:motion-sensor

  alexa_idle:
    name: Alexa Idle
    icon: mdi:motion-sensor

I just did 2 rooms in the example, but obviously you would need to make a virtual switch for each room you intend to use it for.

https://i.imgur.com/Ev36y3Q.png

[
    {
        "id": "2d30d6f8.0bb382",
        "type": "tab",
        "label": "Room Aware Alexa",
        "disabled": false,
        "info": ""
    },
    {
        "id": "b2e86d16.b61b08",
        "type": "alexa-remote-event",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "account": "34",
        "event": "ws-device-activity",
        "x": 110,
        "y": 340,
        "wires": [
            [
                "b67bca26.943068"
            ]
        ]
    },
    {
        "id": "b67bca26.943068",
        "type": "switch",
        "z": "2d30d6f8.0bb382",
        "name": "Alexa hears payload.name",
        "property": "payload.name",
        "propertyType": "msg",
        "rules": [
            {
                "t": "cont",
                "v": "Rumpus Room",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "Bedroom",
                "vt": "str"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 2,
        "x": 380,
        "y": 340,
        "wires": [
            [
                "9f8b010c.35537"
            ],
            [
                "841b89fa.48a9b8"
            ]
        ]
    },
    {
        "id": "d2c5388f.4c433",
        "type": "api-call-service",
        "z": "2d30d6f8.0bb382",
        "name": "Turn on input_boolean.rumpus_alexa",
        "version": 1,
        "debugenabled": false,
        "service_domain": "input_boolean",
        "service": "turn_on",
        "entityId": "input_boolean.rumpus_alexa",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 1230,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "27b8a0c2.738c5",
        "type": "api-call-service",
        "z": "2d30d6f8.0bb382",
        "name": "Turn on input_boolean.bedroom_alexa",
        "version": 1,
        "debugenabled": false,
        "service_domain": "input_boolean",
        "service": "turn_on",
        "entityId": "input_boolean.bedroom_alexa",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 1240,
        "y": 360,
        "wires": [
            []
        ]
    },
    {
        "id": "9e37d879.0d3",
        "type": "mqtt out",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "topic": "Home/Rumpus/Device",
        "qos": "",
        "retain": "",
        "broker": "692dea2e.02145c",
        "x": 1360,
        "y": 563,
        "wires": []
    },
    {
        "id": "d337b25d.ae39e",
        "type": "amazon-echo-device",
        "z": "2d30d6f8.0bb382",
        "name": "Device",
        "topic": "",
        "x": 130,
        "y": 680,
        "wires": [
            [
                "998f437c.67e52"
            ]
        ]
    },
    {
        "id": "7495f658.7d8a08",
        "type": "switch",
        "z": "2d30d6f8.0bb382",
        "name": "on / off",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "on",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "off",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 1158,
        "y": 600,
        "wires": [
            [
                "9e37d879.0d3"
            ],
            [
                "39e987bc.dc16b"
            ]
        ]
    },
    {
        "id": "cf00428b.abeae",
        "type": "api-current-state",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "input_boolean.rumpus_alexa",
        "state_type": "str",
        "state_location": "",
        "override_payload": "none",
        "entity_location": "",
        "override_data": "none",
        "blockInputOverrides": true,
        "x": 884,
        "y": 600,
        "wires": [
            [
                "7495f658.7d8a08",
                "619744d5.5b09ec",
                "f87782ad.2dd568"
            ],
            []
        ]
    },
    {
        "id": "39e987bc.dc16b",
        "type": "mqtt out",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "topic": "Home/Rumpus/Device",
        "qos": "",
        "retain": "",
        "broker": "692dea2e.02145c",
        "x": 1358,
        "y": 641,
        "wires": []
    },
    {
        "id": "ae53b3ff.983038",
        "type": "mqtt out",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "topic": "Home/Bedroom/Device",
        "qos": "",
        "retain": "",
        "broker": "692dea2e.02145c",
        "x": 1381,
        "y": 738,
        "wires": []
    },
    {
        "id": "96c9345a.d1fda",
        "type": "switch",
        "z": "2d30d6f8.0bb382",
        "name": "on / off",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "on",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "off",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 1158,
        "y": 780,
        "wires": [
            [
                "ae53b3ff.983038"
            ],
            [
                "612704b4.74f2b4"
            ]
        ]
    },
    {
        "id": "e74e6680.719d4",
        "type": "api-current-state",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "input_boolean.bedroom_alexa",
        "state_type": "str",
        "state_location": "",
        "override_payload": "none",
        "entity_location": "",
        "override_data": "none",
        "blockInputOverrides": false,
        "x": 882,
        "y": 780,
        "wires": [
            [
                "96c9345a.d1fda",
                "a01adb7b.af38a",
                "5eae98dc.381268"
            ],
            []
        ]
    },
    {
        "id": "612704b4.74f2b4",
        "type": "mqtt out",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "topic": "Home/Bedroom/Device",
        "qos": "",
        "retain": "",
        "broker": "692dea2e.02145c",
        "x": 1381,
        "y": 829,
        "wires": []
    },
    {
        "id": "ba8bea22.fa235",
        "type": "api-current-state",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "input_boolean.alexa_idle",
        "state_type": "str",
        "state_location": "",
        "override_payload": "none",
        "entity_location": "",
        "override_data": "none",
        "blockInputOverrides": false,
        "x": 520,
        "y": 680,
        "wires": [
            [],
            [
                "cf00428b.abeae",
                "e74e6680.719d4"
            ]
        ]
    },
    {
        "id": "1121c148.4586cf",
        "type": "api-call-service",
        "z": "2d30d6f8.0bb382",
        "name": "Turn Off alexa_idle",
        "version": 1,
        "debugenabled": false,
        "service_domain": "input_boolean",
        "service": "turn_off",
        "entityId": "input_boolean.alexa_idle",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 886,
        "y": 360,
        "wires": [
            [
                "27b8a0c2.738c5"
            ]
        ]
    },
    {
        "id": "288d3431.5f9b24",
        "type": "api-call-service",
        "z": "2d30d6f8.0bb382",
        "name": "Turn Off alexa_idle",
        "version": 1,
        "debugenabled": false,
        "service_domain": "input_boolean",
        "service": "turn_off",
        "entityId": "input_boolean.alexa_idle",
        "data": "{}",
        "dataType": "jsonata",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 890,
        "y": 300,
        "wires": [
            [
                "d2c5388f.4c433"
            ]
        ]
    },
    {
        "id": "63330662.bcd4c",
        "type": "mqtt out",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "topic": "Home/InputBoolean/Reset",
        "qos": "",
        "retain": "",
        "broker": "692dea2e.02145c",
        "x": 1380,
        "y": 420,
        "wires": []
    },
    {
        "id": "619744d5.5b09ec",
        "type": "trigger",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "op1": "",
        "op2": "",
        "op1type": "nul",
        "op2type": "payl",
        "duration": "1",
        "extend": false,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 1180,
        "y": 420,
        "wires": [
            [
                "63330662.bcd4c"
            ]
        ]
    },
    {
        "id": "f70b05f.8f1bbf8",
        "type": "mqtt out",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "topic": "Home/InputBoolean/Reset",
        "qos": "",
        "retain": "",
        "broker": "692dea2e.02145c",
        "x": 1380,
        "y": 960,
        "wires": []
    },
    {
        "id": "a01adb7b.af38a",
        "type": "trigger",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "op1": "",
        "op2": "",
        "op1type": "nul",
        "op2type": "payl",
        "duration": "1",
        "extend": false,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 1182,
        "y": 960,
        "wires": [
            [
                "f70b05f.8f1bbf8"
            ]
        ]
    },
    {
        "id": "9f8b010c.35537",
        "type": "change",
        "z": "2d30d6f8.0bb382",
        "name": "set msg.payload to empty",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 650,
        "y": 300,
        "wires": [
            [
                "288d3431.5f9b24"
            ]
        ]
    },
    {
        "id": "841b89fa.48a9b8",
        "type": "change",
        "z": "2d30d6f8.0bb382",
        "name": "set msg.payload to empty",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 650,
        "y": 360,
        "wires": [
            [
                "1121c148.4586cf"
            ]
        ]
    },
    {
        "id": "69b7d8b1.4fb038",
        "type": "api-call-service",
        "z": "2d30d6f8.0bb382",
        "name": "Turn on alexa_idle",
        "version": 1,
        "debugenabled": false,
        "service_domain": "input_boolean",
        "service": "turn_on",
        "entityId": "input_boolean.alexa_idle",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 910,
        "y": 40,
        "wires": [
            []
        ]
    },
    {
        "id": "db19af72.f03728",
        "type": "api-call-service",
        "z": "2d30d6f8.0bb382",
        "name": "Turn off input_boolean.bedroom_alexa",
        "version": 1,
        "debugenabled": false,
        "service_domain": "input_boolean",
        "service": "turn_off",
        "entityId": "input_boolean.bedroom_alexa",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 980,
        "y": 160,
        "wires": [
            []
        ]
    },
    {
        "id": "4885c283.e319ac",
        "type": "api-call-service",
        "z": "2d30d6f8.0bb382",
        "name": "Turn off input_boolean.rumpus_alexa",
        "version": 1,
        "debugenabled": false,
        "service_domain": "input_boolean",
        "service": "turn_off",
        "entityId": "input_boolean.rumpus_alexa",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 970,
        "y": 100,
        "wires": [
            []
        ]
    },
    {
        "id": "25d0673a.f13de",
        "type": "mqtt in",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "topic": "Home/InputBoolean/Reset",
        "qos": "2",
        "datatype": "auto",
        "broker": "692dea2e.02145c",
        "x": 650,
        "y": 100,
        "wires": [
            [
                "69b7d8b1.4fb038",
                "4885c283.e319ac",
                "db19af72.f03728"
            ]
        ]
    },
    {
        "id": "9cd8d1c6.cbce88",
        "type": "inject",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "5",
        "topic": "",
        "payload": "",
        "payloadType": "str",
        "x": 90,
        "y": 100,
        "wires": [
            [
                "1a017e98.224c11"
            ]
        ]
    },
    {
        "id": "1a017e98.224c11",
        "type": "mqtt out",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "topic": "Home/InputBoolean/Reset",
        "qos": "",
        "retain": "",
        "broker": "692dea2e.02145c",
        "x": 280,
        "y": 100,
        "wires": []
    },
    {
        "id": "dfeb3444.169d98",
        "type": "comment",
        "z": "2d30d6f8.0bb382",
        "name": "Reset Virtual Switches on Startup",
        "info": "",
        "x": 190,
        "y": 40,
        "wires": []
    },
    {
        "id": "f87782ad.2dd568",
        "type": "mqtt out",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "topic": "Home/Alexa/Trigger/Cancel",
        "qos": "",
        "retain": "",
        "broker": "692dea2e.02145c",
        "x": 1380,
        "y": 480,
        "wires": []
    },
    {
        "id": "f865de51.0cf7",
        "type": "mqtt in",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "topic": "Home/Alexa/Trigger/Cancel",
        "qos": "2",
        "datatype": "auto",
        "broker": "692dea2e.02145c",
        "x": 140,
        "y": 580,
        "wires": [
            [
                "365ce9ee.bbe946"
            ]
        ]
    },
    {
        "id": "998f437c.67e52",
        "type": "trigger",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "op1": "",
        "op2": "",
        "op1type": "pay",
        "op2type": "payl",
        "duration": "3",
        "extend": false,
        "units": "s",
        "reset": "cancel",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 264,
        "y": 679,
        "wires": [
            [
                "ba8bea22.fa235"
            ]
        ]
    },
    {
        "id": "365ce9ee.bbe946",
        "type": "trigger",
        "z": "2d30d6f8.0bb382",
        "name": "send cancel",
        "op1": "",
        "op2": "cancel",
        "op1type": "nul",
        "op2type": "str",
        "duration": "1",
        "extend": false,
        "units": "ms",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 370,
        "y": 580,
        "wires": [
            [
                "998f437c.67e52"
            ]
        ]
    },
    {
        "id": "5eae98dc.381268",
        "type": "mqtt out",
        "z": "2d30d6f8.0bb382",
        "name": "",
        "topic": "Home/Alexa/Trigger/Cancel",
        "qos": "",
        "retain": "",
        "broker": "692dea2e.02145c",
        "x": 1387,
        "y": 893,
        "wires": []
    },
    {
        "id": "22d94418.12cbec",
        "type": "comment",
        "z": "2d30d6f8.0bb382",
        "name": "Reset Virtual Switches after Event",
        "info": "",
        "x": 640,
        "y": 40,
        "wires": []
    },
    {
        "id": "15abc1e7.e77a66",
        "type": "comment",
        "z": "2d30d6f8.0bb382",
        "name": "Remove Payload",
        "info": "",
        "x": 660,
        "y": 260,
        "wires": []
    },
    {
        "id": "1cf471e.1bf080e",
        "type": "comment",
        "z": "2d30d6f8.0bb382",
        "name": "Cancel trigger if already fired",
        "info": "",
        "x": 220,
        "y": 540,
        "wires": []
    },
    {
        "id": "692dea2e.02145c",
        "type": "mqtt-broker",
        "z": "",
        "name": "Home Assistant",
        "broker": "",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    }
]
1 Like

Big thanks for posting this up - @zkniebel

I have been looking to switch from google home to alexa devices and was surprised how dumb alexa’s ‘smart home’ skills are…
I wanted to have the command ‘Turn on/off the light’ only control the ‘main’ light in each room, and not every single light in the room - thanks to this thread, I can now do that :slight_smile:

I ended up using a slightly different approach and didn’t use emulated hue, but set a template light device (called ‘light’) and exposed it alongside all my other bulbs using HA alexa integration.

@zkniebel GREAT WRITE-UP! I did something similar but simpler using Node Red, node-red-contrib-alexa-remote2, and Hubitat about 6 weeks ago and just found your post today. I used “Contains” in my Switch Nodes because I don’t know how to use Regex. Your flow definitely helps to transition to using Regex and will make my flows much more user-friendly (AKA more wife friendly). Thank you.

@123 - I have everything setup using the flow you posted, and have made some alterations to the parse function to support different wording I use to control brightness.

I’m also attempting to added support for some basic colour control, but I’m having a problem with the ‘Create Payload’ node - it doesn’t seem to treat the colour as a string and prints '“Unexpected token b in JSON at position 64”
(“b” changes with the first character of whatever colour I’ve asked Alexa to set…)

Can you see where I’ve gone wrong in the modified code? - https://pastebin.com/80uq7JqU

Just realised that it also adds ‘per / percent’ into the 2nd capture group too if the brightness only contains one word too… back to the drawing board :stuck_out_tongue:

This device isn’t showing up for me in Alexa. Is that because I’m filtering devices that Alexa can see through Nabu Casa? If so, how do I get this to show up?

edit: So one issue is that my Echos were on a different wifi network than my HA box. I moved one of them over to my internal network. Should that be enough, or do all of them have to be moved over?

edit2: Figured it out. I needed to check ‘Device Discovery in the hub node’.

I just learned from the Node Red forum that you can use

Alexa, Simon says <any_words_here>

and she will repeat any_words_here back to you (she won’t say “I don’t know what to do with that”).
Well, turns out you can use this as an alternate/expansion to “Alexa, turn off my_device” and with no changes to the flow here in this thread.

The message (as shown in a debug node):
node red alexa simon says garage temp Screen Shot 2020-11-16 at 3.37.24 PM

Use a switch node to parse the simon-says “command”:
node red switch contains Screen Shot 2020-11-16 at 3.38.49 PM

Thanks for this post, did it last night

For this to work for me, I had to add a function node with

msg.payload="1";
return msg;

Before the call to the HA node that turns on my light.
Otherwise the call to the HA node returned an error (API I think)

I’m also trying to figure out what to do if I say “turn on light” and two dots hear it. I have dots in connected rooms so sometimes the one in the other room responds.

This is an amazing write up. I can’t wait to dig into it, and try it out. Quick question - did you consider using Almond or Ada to process the commands? (I can’t remember which does the processing). That way, you can combine the room awareness, but not reinvent the wheel on the language processing.

b

I found a way to get this working with the sentences: “Set the fan to high”, “Set fan to level medium”, “turn on fan to low”, “Turn fan to 1”, “set the fan to 2”, “Turn fan to level 3”, “Turn fan on to level 2”, “turn the fan on to 1”, “Put fan at 3” etc etc etc… 1 low, 2 medium, 3 high. It should also allow saying set to minimun, maximum, middle, low, medium, high, 1, 2, 3, spelling level or not… pretty flexible I believe, let me know please, I can’t test it out in english.

Alexa won’t complain, at least in Spanish, and you can set colours, white temperatures, increse/drecrease and set%'s of brightness/speed and turn on/off of course

Catch the first section from here:

Get the Fan example from here:

1 Like

FWIW, this ability was described several posts ago. A function node converts text to numbers. For example, the ‘twenty-five’ in the command ‘Set light to twenty five’ is converted to 25. It uses a map so it’s trivial to add other phrases like high, medium, low or pretty much anything like super bright, extra dim, night time, etc.

Within the received phrase, Alexa reports the brightness level using words , not numbers. The first function node (“Parse”) converts the words to numbers (because the command to set a light’s level requires a numeric value). The conversion is performed using a map. It’s possible to enhance the map by adding words like “low”, “medium”, and “high”, or even “night time”, with corresponding numeric values. Otherwise, there’s no need for the end-user to change anything within the first function node.

oh ok sorry, every time I come across a function node I just don’t read it :smiley:

and when you say, set the light night time, doesn’t alexa complain? Isn’t there any situation where alexa complains?

Been playing around with this flow as well as another one in hope of creating a room aware echo setup…While setting this up I ran into a snag while trying to set my Fan percentage levels in their respective nodes. I use a Homeseer FC200+ switch and although the Alexa app shows the 4 stages of power levels:
off
1
2
3
NR won’t let me add a percentage?! Any thoughts?

Imgur: The magic of the Internet is how I approach it. I also have two Alexa accounts combined, but because they share the same household, it ends up in duplicate messages, unless you use something like dropping a message.

[{"id":"7d72b9e8.14de78","type":"tab","label":"Drop Message","disabled":false,"info":""},{"id":"f073080b.a7cae","type":"change","z":"7d72b9e8.14de78","name":"Strip Wake Word","rules":[{"t":"change","p":"payload.description.summary","pt":"msg","from":"^(alexa )?","fromt":"re","to":"","tot":"str"},{"t":"change","p":"payload.description.summary","pt":"msg","from":"^(amazon )?","fromt":"str","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":945,"y":199,"wires":[[]]},{"id":"7cde2905.64fb2","type":"delay","z":"7d72b9e8.14de78","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"2","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":745,"y":139,"wires":[["f073080b.a7cae"]]},{"id":"940bae50.427d4","type":"switch","z":"7d72b9e8.14de78","name":"Alexa hears","property":"payload.description.summary","propertyType":"msg","rules":[{"t":"regex","v":"alexa|amazon","vt":"str","case":true},{"t":"regex","v":"^(?:(?!amazon|alexa).)+$","vt":"str","case":true}],"checkall":"false","repair":false,"outputs":2,"x":525,"y":179,"wires":[["7cde2905.64fb2"],["9d206b72.b9ddd"]],"outputLabels":["Turn on",""]},{"id":"9d206b72.b9ddd","type":"delay","z":"7d72b9e8.14de78","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"2","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":745,"y":239,"wires":[["f073080b.a7cae"]]}]