Node-RED google home integration

Comments/Thoughts about openPercent in Blinds:

This is really about absolute vs relative open/close amounts.
Initially, I was confused about how Nora/Google was interpreting my spoken commands. Then I realized that it interpreted "Open green blind 20%" to mean "Open green blind BY 20%".
And, I could specify absolute (open to 20%) or relative (open by 20%).

IMHO, it should default to absolute rather than relative. I think this would be less confusing. But I understand there are no right answers for this.

FYI - My experience with gBridge so far: it does only absolute.

The command nora receives from google always contains the absolute value. Google automatically handles relative changes. That's not something I can change.
https://developers.google.com/assistant/smarthome/traits/openclose.html#device-commands

Ah, useful info. Thanks. I'll poke around a bit more.
...and thanks for the quick replies.

Hi @andrei-tatar,

I'm seeing an issue with the NORA Thermostat that is different to all the other NORA nodes. When Deploying a change in Node-Red (unrelated to the NORA Thermostat), the redeployment breaks the Thermostat node.

To fix the problem, I go into the Google Home settings, unlink the NORA account and relink it. This consistently fixes the issue. All the other NORA nodes are unaffected by redeployments.

I see some other comments above about the Thermostat node being 'fickle' - @pico563.

@pico563 - Can you test an unlink/relink of the NORA account to see if your symptoms match?

Hello,
I've been experimenting greatly with NORA and it works great, but now.... I have a problem that suddenly some lights appears twice in Google Home. One functioning and one not, both have the same name.

Additionaly when I use Google Assistant to switch on/off the lights.. The Google Assistant actually does switch the lights, give a message that it will switcht the associated light off, it actually does it and then Google Assistant tells me that the specific lights looks not available???

Very strange, any ideas?

When I unlink NORA from google home and link it again... it shows me lights that do not even exist in my node-red flows anymore.... so something is wrong here... But it can't fix it.

I don't have any issues with my thermostats. Might be Google related.

Probably google issue. I haven't encountered this until now.

Did you use different groups?

I added a new feature to see your own devices/states as they are reported to google. Accessing https://node-red-google-home.herokuapp.com/ will give you a JSON of all your devices by group name with their corresponding state. So now you can check if the devices are the same, states are correct, etc.

Later Edit: Found the issue with humidity, should be fixed now in the latest version 0.0.25. Also merged PR to add support for garage doors (thanks to @rgerrans).

Hello, the problem with duplicat lights was fixed using the following:

  1. unlinked NORA from google home and relink --> Did not fix the problem

  2. Revoke and renew NORA key --> Did not fix the problem

  3. Removed NORA-CONFIG from Node-Red and
    Removed all NORA nodes from flow and reassign ALL the NORA nodes to the flow
    That actually fixed the problem.

I don't know if it has something to do with it, but I build some of the nodes by copying and pasting new NORA nodes, perhaps that was part of the problem.

I don't really have an explanation, but this is how it got fixed.
If others have comparable problem, method 3 could potentially fix it.

Hold off on upgrading to the latest nodes, I was working on Locks and accidentally included some of the code in the last build which is causing issues. I've sent the change to @andrei-tatar so it should get updated soon.

It looks like it is now fixed. If you installed the previous version, make sure to restart node-red when you update to the latest

I have a question for the thermostat feature. Is there a chance to extend configuration to extend the max temperature range. Now I'm using this bloc to set temperature in my house and it is fine. But when I tried to use the same block to set heaters temperature or hot water I'm limited to 32C. Another nice feature will be extended precision for displaying temperature.

Hi, i'm new to Nora, just switched from gBridge. Excellent project, but i have one problem.
The setting "send msg if state doesn't change after command" is not working for me. It should execute command even if nora thinks device is already in this state or am i missing something? Thanx

Do you mean in the Google Home app? Not in my control... All Google's

Yes, you should basically get the same output from the node even if it's already in that state. For example having the light off and turning it on would give you an "on" output message. If you ask google to turn the light on again, by default, it won't output the same message again. Having that option enabled would allow for the message to come again.
If it's not working for you, please give more details. Flow you use, exact steps you follow, what's the result/expected result after each step, etc.

OK, it started working when i changed group name, it was empty before. Now for some reason if i change group name to "home" google says the device isn't available right now, but works fine with different name, "home2" for example.

You should just leave group name to either value... it doesn't really matter (empty or not).
The problem you can get into is that you get the same node ids in different groups so the service is unable to identify exactly each device (this is a limitation of nora). That's why it says the device isn't available, because it's now defined in 2 different groups.
Once a day the service restarts so the unused groups will just disappear.

Hi there. I tried NORA and found some possible improvement - is it possible to revert Blind output? E.g. so that 0 could mean fully closed or fully open and 100 vice versa.

I have the problem with NORA after changing token. I can't see on Google Assistant any devices from NORA and NORA as service. I doing relink the Nora from GA but without any results. In nodered I have this message after any deploy :"nora: sync error (invalid object for sync)" but all node are okey.

You can do this with a node specific to your case. Feel free to create a PR if you want this as an option in the blinds node.

Can you post a flow that does this? The sync error means the devices don't actually get synced with NORA because of some invalid state/property.

After deleting connection and create new one with new token the error not show. If I create new connection and switched all module to this new one but the old one are not deleted the error stay. Only work delete old one and create new.

But I have new messaage :frowning: only displayed on deploy moment.

28.11.2019, 17:49:37
msg : string[49]
"nora (KMdc8): disconnected (io client disconnect)"

but all work fine.

Example of my flow:

[
    {
        "id": "afdcbda3.a9446",
        "type": "tab",
        "label": "SAT",
        "disabled": false,
        "info": ""
    },
    {
        "id": "5afe9c8c.a732e4",
        "type": "switch",
        "z": "afdcbda3.a9446",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "cont",
                "v": "false",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "true",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 690,
        "y": 180,
        "wires": [
            [
                "11a25fa4.9147c"
            ],
            [
                "38c0ce3c.a950b2"
            ]
        ]
    },
    {
        "id": "da00ea5e.6b62f8",
        "type": "mqtt in",
        "z": "afdcbda3.a9446",
        "name": "HC2",
        "topic": "home/command/#",
        "qos": "2",
        "datatype": "auto",
        "broker": "3629b28a.9a237e",
        "x": 130,
        "y": 60,
        "wires": [
            []
        ]
    },
    {
        "id": "89a46413.2b00a8",
        "type": "nora-switch",
        "z": "afdcbda3.a9446",
        "devicename": "TV",
        "roomhint": "",
        "name": "",
        "passthru": true,
        "nora": "df7a24c4.66de68",
        "topic": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "offvalue": "false",
        "offvalueType": "bool",
        "x": 390,
        "y": 360,
        "wires": [
            [
                "3db62e78.e64a32"
            ]
        ]
    },
    {
        "id": "ea782773.ce8968",
        "type": "switch",
        "z": "afdcbda3.a9446",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            },
            {
                "t": "false"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 550,
        "y": 360,
        "wires": [
            [
                "d8610977.a29678"
            ],
            [
                "749ae28d.93107c"
            ]
        ]
    },
    {
        "id": "d8610977.a29678",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT On",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/powerstate?newstate=4",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 720,
        "y": 320,
        "wires": [
            [
                "579f68fe.a43c48"
            ]
        ]
    },
    {
        "id": "749ae28d.93107c",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Off",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/powerstate?newstate=5",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 720,
        "y": 380,
        "wires": [
            [
                "579f68fe.a43c48"
            ]
        ]
    },
    {
        "id": "2107a91c.d72156",
        "type": "inject",
        "z": "afdcbda3.a9446",
        "name": "",
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 250,
        "y": 340,
        "wires": [
            [
                "89a46413.2b00a8"
            ]
        ]
    },
    {
        "id": "f4e0c143.065f6",
        "type": "inject",
        "z": "afdcbda3.a9446",
        "name": "",
        "topic": "",
        "payload": "false",
        "payloadType": "bool",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 250,
        "y": 400,
        "wires": [
            [
                "89a46413.2b00a8"
            ]
        ]
    },
    {
        "id": "34938bc3.b47f14",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Status",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/powerstate",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 550,
        "y": 200,
        "wires": [
            [
                "5afe9c8c.a732e4"
            ]
        ]
    },
    {
        "id": "11a25fa4.9147c",
        "type": "change",
        "z": "afdcbda3.a9446",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "true",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 860,
        "y": 160,
        "wires": [
            [
                "89a46413.2b00a8"
            ]
        ]
    },
    {
        "id": "38c0ce3c.a950b2",
        "type": "change",
        "z": "afdcbda3.a9446",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 860,
        "y": 200,
        "wires": [
            [
                "89a46413.2b00a8"
            ]
        ]
    },
    {
        "id": "579f68fe.a43c48",
        "type": "delay",
        "z": "afdcbda3.a9446",
        "name": "",
        "pauseType": "delay",
        "timeout": "2",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 380,
        "y": 200,
        "wires": [
            [
                "34938bc3.b47f14"
            ]
        ]
    },
    {
        "id": "563b4673.7372c8",
        "type": "inject",
        "z": "afdcbda3.a9446",
        "name": "",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "10",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 180,
        "wires": [
            [
                "579f68fe.a43c48"
            ]
        ]
    },
    {
        "id": "3db62e78.e64a32",
        "type": "rbe",
        "z": "afdcbda3.a9446",
        "name": "",
        "func": "rbei",
        "gap": "",
        "start": "",
        "inout": "out",
        "property": "payload",
        "x": 440,
        "y": 460,
        "wires": [
            [
                "ea782773.ce8968"
            ]
        ]
    },
    {
        "id": "9778bffa.544bb",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Vol Up",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/remotecontrol?command=115",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 710,
        "y": 800,
        "wires": [
            [
                "8516d6f2.c10e58",
                "b7ea5d9e.df965",
                "89ebb28e.992e1"
            ]
        ]
    },
    {
        "id": "5fbd81eb.86ccd",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Vol Dw",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/remotecontrol?command=114",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 710,
        "y": 960,
        "wires": [
            [
                "947afb07.eee5b8",
                "3c01d4d9.eaeefc",
                "884e7240.e1c4e"
            ]
        ]
    },
    {
        "id": "a50714db.df9658",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Vol Mute",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/remotecontrol?command=113",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 720,
        "y": 620,
        "wires": [
            []
        ]
    },
    {
        "id": "f578101f.9078a",
        "type": "nora-switch",
        "z": "afdcbda3.a9446",
        "devicename": "Silence",
        "roomhint": "",
        "name": "",
        "passthru": true,
        "nora": "df7a24c4.66de68",
        "topic": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "offvalue": "false",
        "offvalueType": "bool",
        "x": 410,
        "y": 620,
        "wires": [
            [
                "b10a33b8.c7eee"
            ]
        ]
    },
    {
        "id": "984e6990.ca3c38",
        "type": "change",
        "z": "afdcbda3.a9446",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 420,
        "y": 720,
        "wires": [
            [
                "f578101f.9078a"
            ]
        ]
    },
    {
        "id": "b10a33b8.c7eee",
        "type": "switch",
        "z": "afdcbda3.a9446",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 570,
        "y": 620,
        "wires": [
            [
                "a50714db.df9658",
                "984e6990.ca3c38"
            ]
        ]
    },
    {
        "id": "60099893.3ba2c8",
        "type": "nora-switch",
        "z": "afdcbda3.a9446",
        "devicename": "Voice Up",
        "roomhint": "",
        "name": "",
        "passthru": true,
        "nora": "df7a24c4.66de68",
        "topic": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "offvalue": "false",
        "offvalueType": "bool",
        "x": 400,
        "y": 800,
        "wires": [
            [
                "5f697f04.8112d"
            ]
        ]
    },
    {
        "id": "be90b6df.685a18",
        "type": "change",
        "z": "afdcbda3.a9446",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 410,
        "y": 900,
        "wires": [
            [
                "60099893.3ba2c8"
            ]
        ]
    },
    {
        "id": "5f697f04.8112d",
        "type": "switch",
        "z": "afdcbda3.a9446",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 560,
        "y": 800,
        "wires": [
            [
                "9778bffa.544bb",
                "be90b6df.685a18"
            ]
        ]
    },
    {
        "id": "d2921067.04c09",
        "type": "nora-switch",
        "z": "afdcbda3.a9446",
        "devicename": "Voice Down",
        "roomhint": "",
        "name": "",
        "passthru": true,
        "nora": "df7a24c4.66de68",
        "topic": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "offvalue": "false",
        "offvalueType": "bool",
        "x": 410,
        "y": 960,
        "wires": [
            [
                "623d7ba8.820c44"
            ]
        ]
    },
    {
        "id": "635d17dd.e91fc8",
        "type": "change",
        "z": "afdcbda3.a9446",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 410,
        "y": 1060,
        "wires": [
            [
                "d2921067.04c09"
            ]
        ]
    },
    {
        "id": "623d7ba8.820c44",
        "type": "switch",
        "z": "afdcbda3.a9446",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 560,
        "y": 960,
        "wires": [
            [
                "5fbd81eb.86ccd",
                "635d17dd.e91fc8"
            ]
        ]
    },
    {
        "id": "d910adb1.08721",
        "type": "inject",
        "z": "afdcbda3.a9446",
        "name": "",
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 620,
        "wires": [
            [
                "f578101f.9078a"
            ]
        ]
    },
    {
        "id": "8b9d5661.d61e48",
        "type": "inject",
        "z": "afdcbda3.a9446",
        "name": "",
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 800,
        "wires": [
            [
                "60099893.3ba2c8"
            ]
        ]
    },
    {
        "id": "859089ae.b525a8",
        "type": "inject",
        "z": "afdcbda3.a9446",
        "name": "",
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 960,
        "wires": [
            [
                "d2921067.04c09"
            ]
        ]
    },
    {
        "id": "9c443524.f79758",
        "type": "debug",
        "z": "afdcbda3.a9446",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "x": 1090,
        "y": 720,
        "wires": []
    },
    {
        "id": "ff9fd1cc.97234",
        "type": "switch",
        "z": "afdcbda3.a9446",
        "name": "Programy",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 1020,
        "y": 440,
        "wires": [
            []
        ]
    },
    {
        "id": "8083adc7.306e4",
        "type": "nora-light",
        "z": "afdcbda3.a9446",
        "devicename": "number",
        "lightcolor": false,
        "brightnesscontrol": true,
        "passthru": false,
        "statepayload": true,
        "brightnessoverride": "",
        "roomhint": "",
        "name": "",
        "nora": "df7a24c4.66de68",
        "topic": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "offvalue": "false",
        "offvalueType": "bool",
        "x": 900,
        "y": 620,
        "wires": [
            [
                "4e628663.af28f8"
            ]
        ]
    },
    {
        "id": "4e628663.af28f8",
        "type": "function",
        "z": "afdcbda3.a9446",
        "name": "kanal",
        "func": "msg.payload = msg.payload.brightness\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 890,
        "y": 720,
        "wires": [
            [
                "9c443524.f79758",
                "b83150ed.e807"
            ]
        ]
    },
    {
        "id": "b83150ed.e807",
        "type": "exec",
        "z": "afdcbda3.a9446",
        "command": "/home/pi/.scripts/channel.sh ",
        "addpay": true,
        "append": "",
        "useSpawn": "false",
        "timer": "",
        "oldrc": false,
        "name": "set N program",
        "x": 1100,
        "y": 820,
        "wires": [
            [
                "9c443524.f79758"
            ],
            [
                "9c443524.f79758"
            ],
            [
                "9c443524.f79758"
            ]
        ]
    },
    {
        "id": "da2afc59.1878a",
        "type": "ftp-download",
        "z": "afdcbda3.a9446",
        "server": "4ddcf12c.ac8ca",
        "files": "/etc/enigma2/userbouquet.vh21.tv",
        "directory": "/home/pi/.scripts",
        "name": "",
        "output": "payload",
        "filesType": "str",
        "directoryType": "str",
        "x": 1060,
        "y": 560,
        "wires": [
            [
                "9c443524.f79758"
            ]
        ]
    },
    {
        "id": "5f10ac7a.b75334",
        "type": "inject",
        "z": "afdcbda3.a9446",
        "name": "Refresh channels",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "",
        "crontab": "00 07 * * *",
        "once": false,
        "onceDelay": 0.1,
        "x": 790,
        "y": 560,
        "wires": [
            [
                "da2afc59.1878a"
            ]
        ]
    },
    {
        "id": "182cd0a.703c72f",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Vol Up",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/remotecontrol?command=115",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 870,
        "y": 880,
        "wires": [
            []
        ]
    },
    {
        "id": "fdb77746.4cbb78",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Vol Up",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/remotecontrol?command=115",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 870,
        "y": 840,
        "wires": [
            []
        ]
    },
    {
        "id": "8516d6f2.c10e58",
        "type": "delay",
        "z": "afdcbda3.a9446",
        "name": "",
        "pauseType": "delay",
        "timeout": "2",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 720,
        "y": 840,
        "wires": [
            [
                "fdb77746.4cbb78"
            ]
        ]
    },
    {
        "id": "b7ea5d9e.df965",
        "type": "delay",
        "z": "afdcbda3.a9446",
        "name": "",
        "pauseType": "delay",
        "timeout": "4",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 720,
        "y": 880,
        "wires": [
            [
                "182cd0a.703c72f"
            ]
        ]
    },
    {
        "id": "79100498.601d4c",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Vol Up",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/remotecontrol?command=115",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 870,
        "y": 920,
        "wires": [
            []
        ]
    },
    {
        "id": "89ebb28e.992e1",
        "type": "delay",
        "z": "afdcbda3.a9446",
        "name": "",
        "pauseType": "delay",
        "timeout": "6",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 720,
        "y": 920,
        "wires": [
            [
                "79100498.601d4c"
            ]
        ]
    },
    {
        "id": "1193b3c3.bf674c",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Vol Dw",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/remotecontrol?command=114",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 870,
        "y": 1080,
        "wires": [
            []
        ]
    },
    {
        "id": "d3533f68.d052d",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Vol Dw",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/remotecontrol?command=114",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 870,
        "y": 1040,
        "wires": [
            []
        ]
    },
    {
        "id": "c4e87fda.438dc",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Vol Dw",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/remotecontrol?command=114",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 870,
        "y": 1000,
        "wires": [
            []
        ]
    },
    {
        "id": "947afb07.eee5b8",
        "type": "delay",
        "z": "afdcbda3.a9446",
        "name": "",
        "pauseType": "delay",
        "timeout": "2",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 720,
        "y": 1000,
        "wires": [
            [
                "c4e87fda.438dc"
            ]
        ]
    },
    {
        "id": "3c01d4d9.eaeefc",
        "type": "delay",
        "z": "afdcbda3.a9446",
        "name": "",
        "pauseType": "delay",
        "timeout": "4",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 720,
        "y": 1040,
        "wires": [
            [
                "d3533f68.d052d"
            ]
        ]
    },
    {
        "id": "884e7240.e1c4e",
        "type": "delay",
        "z": "afdcbda3.a9446",
        "name": "",
        "pauseType": "delay",
        "timeout": "6",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 720,
        "y": 1080,
        "wires": [
            [
                "1193b3c3.bf674c"
            ]
        ]
    },
    {
        "id": "a8746438.cebcd8",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Ch Up",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/remotecontrol?command=402",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 710,
        "y": 1140,
        "wires": [
            []
        ]
    },
    {
        "id": "200d4801.4e8f48",
        "type": "http request",
        "z": "afdcbda3.a9446",
        "name": "SAT Ch Dw",
        "method": "GET",
        "ret": "txt",
        "paytoqs": false,
        "url": "http://192.168.1.65/web/remotecontrol?command=403",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 710,
        "y": 1300,
        "wires": [
            []
        ]
    },
    {
        "id": "ee2a14cc.b8cf68",
        "type": "nora-switch",
        "z": "afdcbda3.a9446",
        "devicename": "Channel Up",
        "roomhint": "",
        "name": "",
        "passthru": true,
        "nora": "df7a24c4.66de68",
        "topic": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "offvalue": "false",
        "offvalueType": "bool",
        "x": 410,
        "y": 1140,
        "wires": [
            [
                "fa7eab71.1359a8"
            ]
        ]
    },
    {
        "id": "acd272c6.3dbfd",
        "type": "change",
        "z": "afdcbda3.a9446",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 410,
        "y": 1240,
        "wires": [
            [
                "ee2a14cc.b8cf68"
            ]
        ]
    },
    {
        "id": "fa7eab71.1359a8",
        "type": "switch",
        "z": "afdcbda3.a9446",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 560,
        "y": 1140,
        "wires": [
            [
                "a8746438.cebcd8",
                "acd272c6.3dbfd"
            ]
        ]
    },
    {
        "id": "88bcb5bc.97d208",
        "type": "nora-switch",
        "z": "afdcbda3.a9446",
        "devicename": "Channel Down",
        "roomhint": "",
        "name": "",
        "passthru": true,
        "nora": "df7a24c4.66de68",
        "topic": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "offvalue": "false",
        "offvalueType": "bool",
        "x": 420,
        "y": 1300,
        "wires": [
            [
                "e327bfc0.5c3ca"
            ]
        ]
    },
    {
        "id": "8b84b9f3.01b838",
        "type": "change",
        "z": "afdcbda3.a9446",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 410,
        "y": 1400,
        "wires": [
            [
                "88bcb5bc.97d208"
            ]
        ]
    },
    {
        "id": "e327bfc0.5c3ca",
        "type": "switch",
        "z": "afdcbda3.a9446",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 560,
        "y": 1300,
        "wires": [
            [
                "200d4801.4e8f48",
                "8b84b9f3.01b838"
            ]
        ]
    },
    {
        "id": "e3763f17.c6a45",
        "type": "inject",
        "z": "afdcbda3.a9446",
        "name": "",
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 1140,
        "wires": [
            [
                "ee2a14cc.b8cf68"
            ]
        ]
    },
    {
        "id": "dde3c9bb.86af28",
        "type": "inject",
        "z": "afdcbda3.a9446",
        "name": "",
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 1300,
        "wires": [
            [
                "88bcb5bc.97d208"
            ]
        ]
    },
    {
        "id": "3629b28a.9a237e",
        "type": "mqtt-broker",
        "z": "",
        "name": "pi4",
        "broker": "192.168.1.10",
        "port": "1883",
        "tls": "",
        "clientid": "",
        "usetls": false,
        "compatmode": true,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "df7a24c4.66de68",
        "type": "nora-config",
        "z": "",
        "name": "nora config",
        "group": "",
        "notify": false
    },
    {
        "id": "4ddcf12c.ac8ca",
        "type": "ftp-download-server",
        "z": "",
        "host": "192.168.1.65",
        "port": "21",
        "user": "satinfo",
        "connTimeout": "10000",
        "pasvTimeout": "10000",
        "keepalive": "10000",
        "name": "SAT"
    }
]