Google Home has been available in ‘straya for a couple of months now, and it works well at controlling new “smart” wifi LED bulbs and power points. What if you want to use it to voice-control your other appliances – the ones that are not wifi-enabled and are too dumb to talk to Google?
Edit 23/2/18 – many months after I first wrote this how-to, Broadlink have released a new app that integrates (sort-of) with Google Home directly via the cloud, with no additional hardware needed.
Called “ihc” on the Android appstore, this app finds your Broadlink emitters, and can be told about your home’s devices. You can teach the on / off command states for each device, and then have to create a “Scene” for each command state. Next, create an account with Broadlink, and then go to the Google Home App -> Home Control -> Devices, press “+”, pick “Broadlink Smart Home” from the list of cloud providers, log in, and your scenes will appear as new devices. To call them, you have to say to Google “Activate <scene name> on”.. If this is too cumbersome, you can make shortcuts under “More Settings” in the Home app.
The plusses for this method are no need to port-forward, do dynamic DNS, register accounts at IFTTT, or use Android hardware. The negative is that the devices themselves are not exposed to Google (only the scenes), so you have to name the scenes carefully to prevent more than one being activated by the same command, (“fan light on” and “fan on” both get called when you say “Turn the fan on”), and you also have to make up shortcuts to operate each device, because Google does not know what kind of device it is. Devices that are exposed natively, such as TPLink LED lights, can be controlled in bulk as “lights”, but scenes, such as what Broadlink does, can’t be treated this way,
This walk-through will show you the step-by-step way to get any IR-controlled appliance to be voice-controlled by Google Home. All you need is a cheap IR-blaster called the RM3 Mini, plus an Android phone/tablet/TV box as a local server, and a number of free web-services.
In summary, you get to teach the RM3 Mini the IR codes once for each button you want to use on any IR remote, and you then make an action for that button using IFTTT on the web – you call the action with a Google Home voice command, and it’s sent through the web and the Android local bridge to the IR blaster.
You’ll need the following hardware:
Google Home (GH) smart speaker, setup and connected to your Google account
Broadlink RM3 Mini (RM3), currently $38.50 delivered next-business-day, and USB power for it
A spare Android (‘Droid) phone/tablet/TV box with wifi that can be left on 24/7
You’ll need access to the following:
A wifi router that you have admin rights to (GH, ‘Droid and RM3 connect to the Internet via the router)
An iOs or Android device (for GH/RM3 Wifi pairing) and a tablet/notebook/PC (for copy-pasting commands)
The original remotes for the appliances you want to control.
You’ll need to setup the following free software / webservices:
An IFTTT account (responds to GH commands by sending text to RM3 via your router)
The RM3 Mini iOS or Android app (to connect the RM3 to your Wifi once only)
A dynamic DNS that gives a permanent IP address mapping to your router’s external IP
The RM Bridge Plugin on a spare ‘Droid
Lets get started!
For all these steps, I am assuming that you know your router’s wifi login SSID and password, have admin access to the router, and that all the devices (PC / Phone / tablet + GH + RM3) are going to be connected to the same router/network in your home. If you have a router with multiple wifi access points, put all these things on one AP by themselves, for better security, as they will be exposed to the web. Links in bold will open in a new tab to pages elsewhere that cover setup of individual devices.
Step 1 – prerequisites:
Get your Google Home connected to your Google account
Setup dynamic DNS for your router. If you have a static external IP, you could skip this step.
Download and install the RM Bridge Plugin to the spare ‘Droid
Step 2 – connecting RM3 to your Wifi:
Open the e-Control RM3 app on your wifi-connected phone/tablet. You don’t need to create an account or sign in, so skip that prompt. Plug the RM3 into a USB power port and wait for it to blink rapidly blue.
Choose “add devices” from the app “+” menu, and give it your wifi password when prompted, then press “configure”. The RM3 should stop blinking when it’s successfully connected. Press “eRemote” on this screen to select the RM3 you just added.
Now update the RM3 firmware (press the cog, then settings, device info, firmware update). The app is not needed any more after this point, and can be uninstalled unless you want to pair more RM3s to your wifi.
Step 3 – setup the local bridge: Open the RM Bridge app on the spare ‘Droid, start the server, press the three dots to enter settings, and tick the option to make it run at boot, and specify a username/password if you want (this makes any outside sites/queries require the user/pass to manage it’s command codes). The app’ll display the IP and port number you can use to access it remotely.
Make sure the ‘Droid doesn’t turn off it’s wifi when sleeping (Android Settings-Wifi-Advanced). Test that you can get to RM Bridge by putting the webaddress:port number from RM Bridge’s opening screen in another local device’s browser – it should return a blank page with “invalid request” at the top if it’s working. FYI, the app stores all the raw codes, and lets you refer to the commands by using just a shortcut URL, as you’ll see later on.
Step 4 – Configure the router: Now, go to the Wifi Clients page of your router and find the entries for the RM3 and ‘Droid running RM Bridge, it should look something like this:
You need to reserve the IP addresses of the RM3 and the ‘Droid running RM Bridge as static IPs, so that they won’t change if they get powered-off. In the screenshot below, the first line is the ‘Droid and the next two are RM3s.
Now go to the port-forward page of the router. Setup the port-forward for the RM Bridge port on your external IP to the ‘Droid’s local IP and port. This way, requests sent to your router’s external IP / dynamic DNS IP and RM Bridge’s port number will be forwarded on to the internal IP:port held by the ‘Droid.
Step 5 – Find the RM3 online and make it ready to learn codes: Open a browser, click here go to fun2code.de and do Step 1. Paste in your external IP / dynamic DNS name and port number for RM Bridge, and then fill in the section below with the RM3 name and mac address (from your router’s client list), type RM2 in the “Type” box, and press “Add manually”. Your RM3 should appear in the dropdown where you can select it in Step 2.
Step 6 – Teach the codes: Type in the name of the first IR command you want to learn, point the old remote at the top of the RM3, press “Learn Code” in the browser, then press the button on the old remote that you want to learn – the RM3’s led should turn white during the “learn code” period, and the server prints a response below if successful. Press the Test button – RM3 should respond with a white led flash, and the device should operate just as if you had used it’s remote.
In the screenshot above, I’ve named the button for turning-on a Samsung aircon, and the returned info includes that as part of the URL so you can identify this function. This website doesn’t store your details, and is used only to generate and display the codes for your RM Bridge. Copy the contents of “Shortcut URL” and leave this page for now.
Step 7 – build the webservice for the learned code: In a new tab, open IFTTT, click “My Applets”, then “New Applet”, and then click the blue “+this”. You can also get to New Applet from your username on the top-right.
Type “google” or “ass” in the box, click on “Google Assistant” (you should have configured this once beforehand, see here).
Choose “Say a simple phrase”, the left-most option.
Fill in the fields for what you want to say to your GH, and press “Create trigger”.
Now click the blue “+THAT”
Type “web”, click “Webhooks” (if you haven’t used this before, it’ll prompt you to click “Connect” first).
Then click “Make a web request”.
Paste the Shortcut URL from your fun2code.de results, as in the screenshot below:
Method is GET, and Content Type is Application/JSON. If you enabled the password option in RM Bridge, you need to modify the URL to make it in the form of http://username:password@ipaddress:port/code/xxxxx
Press “Create action”, then “Finish”, and you are done here. If you need to revisit the commands, press the cog on the top-right of your applet to edit it.
Step 9 – test it out: Give GH your command phrase and wait for the response – it can take 3-4 seconds (this delay comes from IFTTT, as the response from testing the codes at fun2code.de is instant. Again, the RM3 should blink white as it sends the command, and your device should respond.
Step 10: Repeat steps 6->9 for additional remote buttons you want to learn, making a new IFTTT recipe for each one.
Once you get the hang of this, the fastest way to do this is teach all your device IR codes in a batch at fun2code.de, then go to the “Manage Codes” page, which displays all the IR codes stored by your RM Bridge, and build all your IFTTT applets in one hit by copy/pasting from just those two pages.
Update 21/09: I’ve tried this with the Broadlink RM Pro RF and IR blaster, and it works just as well learning the codes at Fun2Code.De for an RF-controlled Arlec fan.
Simple devices like heaters and lights may use the same IR command for on/off (you can tell by comparing the text strings when you teach their codes), so you could get away with only one command recipe to switch them.
However, some aircon remote controllers send a command that is a snapshot of the current remote state (power+temperature+mode+fan speed) rather than a simple “power” command. You’ll know if yours is one of these, as testing the “On” command will not power the unit off when you trigger it a second time. For those, you will have to teach the On and Off commands separately at fun2code.de, and make separate IFTTT recipes for each On and Off press of the button.
If Google says “I don’t know what to do with that” in response to your command, give it some time to sync with IFTTT.
If the applet fails to run (click it’s cog and then the View Activity link to see it’s log), try editing and saving it again, to prompt a sync. If the log says “there was an problem with the webhooks service”, the RM Bridge is not externally accessible/responding, or you have enabled authentication and not included the username/password in your Webhooks URL.
If Fun2code.de returns “404/error” on the top-right when you are adding the RM3, it can’t get to the RM Bridge, so check RM Bridge is running, server is started, and you can get to it from another device on your network. If that’s all fine, try to get to it from a device outside your network (eg a phone browser connected to your Telco, not wifi). if that fails, there is a problem with your port-forward or your dynamic DNS (if configured).
If Fun2code.de says “failed to study code”, update the firmware in the RM3. If you have already done this, try repositioning the remote / RM3 so that there are no other IR sources interfering (nearby TV, bright sun etc). You have only a 4-5 second window to press the remote button after pressing “Learn Code”.