Node-RED google home integration


Use different groups in the nora config node with the same token. It allows you to have up to 3 connections to the same user profile. There's no change in deployment...


@Flixm there is no otficial support for blinds. There already is an issue on github about this.


Any way to find the token from google profile? I have a raspberry pi in another city, with no access to it online, which uses the token I originally generated.


You don't need the exact same token. Just login and copy a new one. The difference between them is the salt.


Thanks for your work Andrei. It works quite well!

In the beginning of this ( massive) thread you mentioned something about setting it up as a subscription based service. Is that still the case ?



No, it's free.


Then please buy a beer from my donation and enjoy it! Thanks again.


Great! That worked!

At first I tried with a new token, without setting any group, and I had the user already connected error. But setting the group made it connect alright!

Thanks a lot!


The backend service is now open source on github. Feel free to contribute :slight_smile:


Thank you for everything! Donated 10€


What does the 'Speaker' node do? I can't see it documented anywhere.
Not even in



It seems there's a list of unofficial devices:
Speaker supports on/off and volume traits. I didn't write yet the documentation in the nora-node as it's just in testing.


Have you looked at ngrok or pagekite? I've used ngrok but it's kind of expensive at $10/month.


@christl You don't need tunneling with NORA. That's the whole point.


Hey! I am surprised how easy the setup was!
But I keep getting an exception when my Google Home sends a command to the NORA devices:
TypeError: device.setState is not a function
at _loop_1 (/data/node_modules/node-red-contrib-nora/build/nora-connection.js:48:24)
I run Node-RED inside a Docker container on a RPi3B+
Node-RED version: v0.19.5
Node.js version: v6.11.0
Linux 4.14.79-v7+ arm LE
Maybe I missed something since I have not really an idea of Docker and only little knowledge about Linux...
Greetz, Robert


Installed node-red directly on the RPi and i works! :slight_smile:
Thanks for your great work!

EDIT: ok... still the same problem. I can read device states but not set anything. The whole node-red stops working and restarts....


That's a weird bug. Right before setState there's a check if the device is found. Can you try installing the lastest node.js, node-red and node-red-contrib-nora? (You didn't mention the node-red-contrib-nora version you are using).


I'm using version 0.0.23 of node-red-contrib-nora, and every thing else is up to date as well.
Yeah, i saw in the .js file what is happening there, but I don't know how to attach a debugger, to see what's stored in the found device.


You could just console.log the objects. Does it work in some other environment (on your laptop or something else)?


And where and how can I console.log them? I have no idea about development with node.js :see_no_evil:
I tried it on my laptop and the same error occurres. Maybe it is not working since i use Google Home in German? May the German Actions API be different or not up to date?

EDIT: Okay, now i understand I can add consol.log right inside your .js file :sweat_smile:
The object device is -1.
The passed id matches the one below.
The object devices contains:
[NoraDevice { id: '3f7e8703.c86ea8', config: { type: 'light', brightnessControl: false, colorControl: false, name: 'Licht', roomHint: 'Wohnzimmer', state: [Object] }, connection: NoraConnection { socket: [Socket], 'destroy$': [Subject], 'deviceEvents$': [Subject], 'devices$': [AnonymousSubject], connected: [BehaviorSubject], errors: [Subject], 'connected$': [Observable], 'errors$': [Observable] }, _stateChanged: Subject { _isScalar: false, observers: [Array], closed: false, isStopped: false, hasError: false, thrownError: null }, _activateScene: Subject { _isScalar: false, observers: [], closed: false, isStopped: false, hasError: false, thrownError: null }, 'state$': Observable { _isScalar: false, source: [Subject] }, 'activateScene$': Observable { _isScalar: false, source: [Subject] }, 'errors$': Observable { _isScalar: false, source: [Observable], operator: [MapOperator] } }]
Hope this helps!