I keep experimenting with the UNIHIKER board by DFRobot and it’s incredibly fast to make things work in it. Today I’ll show you how to set up on-screen real-time temperature display in two minutes using a BMP-280 module and zero programming.
Content
Prerrequisites
Here's the trick. I was expecting you already had a few things working before starting the countdown:
Download and install Mind+, DFRobot's IDE for UNIHIKER. On Linux, it is a .deb file which does take a while to install: https://mindplus.cc/download-en.html
Solder a BMP-280 temperature and pressure module and connect it to the I2C cable. You might need to bend your pins slightly as the connector seems to be 1mm nano JST.
In Mind+, go to the Blocks editor and open the Extensions menu.
Go to the pinpong tab and select the pinpong module (which enables interaction with the UNIHIKER pinout) and the BMP-280 module extension, for interaction with the temperature module.
Go back to the Blocks editor and start building your code block. Just navigate through the different sections on the left hand side and drag all you need below the Python program start block:
pinpong - initialize board.
bmp280 - initialize module at standard address 0x76.
control - forever block (to introduce a while True loop).
unihiker - add objects to the display. I firstly add a filled rectangle object to clear previous text, then add a text object. Specify X,Y coordinates where every object will be displayed on the screen and its color.
bmp280 - read temperature property. Drag this inside the text field of the text object.
python - (optional) add a print to show the data on the terminal. I included all other sensor values.
control - add a wait object and wait for 1 second before next loop. All of it should look something like this (click to enlarge)
Launch
And that's all your program done, without any programming! Press RUN above and see how it loads and displays in your UNIHIKER screen. Touch the sensor with your finger to see how values change with the increase in temperature.
Wasn't that only 2 minutes? Let me know via Twitter ; )
Today I’m bringing you the second chance that I’ll give Shelly. My first Shelly Dimmer blew up for excess temperature inside a connection box, but another Shelly 2.5 controlling two lights is holding fine, also fitted in the wall.
Maybe the difference is the extra 5ºC that they withstand, so I’m going to fit a wall plug with switch and scheduler using a tiny Shelly 1, and just hope it survives.
Apart from the tiny size, Shelly are easy to configure, so we’ll also see how to control them locally via the HTTP API.
Content
Requirements
My goal is to enable a wall plug that I can control and schedule via WIFI, in my case, to manage the electrical water heater. This is what I'll use:
Shelly 1.
Two wire electric cable (line and neutral).
Male plug.
Female plug socket.
Assembling material for a case (3D printer, plywood, etc).
Electric connection
Let's look at Shelly's user manual and see how we need to make the connections:
The idea for this standard schematic is to connect Shelly 1 to a light bulb and its switch, where every symbol means the following:
L: line
N: neutral
SW: switch
I: input
O: output
As I want to enable a plug socket, the schematic will vary slightly, as I will not be using any switch and I can connect the input directly to the line. On the other hand, and for I reason I ignore, there is no cabling inside the connection box, so I bring the electric line from another plug using the cable... In the end, it all ends like this:
TIP! I'd say that I confused the cable color norm, but it is not important in this case as its a closed circuit and it will work anyways.
Assembly
You might see that I made a small 3D support to guide the cabling, as well as a lid to cover the void around the socket. Modelling every part in 3D, with real measures, helps to distribute the space properly and ensure that your solution fits:
I'll leave here the 3D .stl models ready to send to your slider software.
Finally, this is how it all looks crafted in place. It's not the perfect fit, but it does the job I needed.
Internet connection
Let's now see how to bring the Shelly 1 to life and control it locally.
Opposite to Sonoff, Shelly makes it much easier and you just need to follow the user manual.
Power Shelly 1 using the male plug.
This will activate an AP (Access Point) or Wi-Fi network with an SSID looking like "shelly1-01A3B4". Connect to this Wi-Fi network using a smartphone or PC.
Once connected, use a web browser to access the IP at 192.168.33.1 and it will take you to Shelly's web interface for device configuration.
Once in, you must config the device (inside Internet & Security menu) so that it automatically connects to your local Wi-Fi network, as well as it is recommended to restrict access with username and password.
We're all set to communicate with Shelly 1 locally.
Shelly HTTP API usage
To use the command of the HTTP API you must know the device IP in your local network.
Find IP in the router
You can access the network map in your router, usually from the address http://192.168.1.1
The address and the password should be in some sticker in your router. Then you'll see your device with a name like shelly1-XXXXXXXXXXXX:
Find IP using nmap
In a terminal you can use the tool nmap to scan your local network.
Download it if not done yet: sudo apt-get update sudo apt-get install nmap
Scan your network (using sudo you'll get the MAC address, which is useful as the IP could change when restarting the router) sudo nmap -v -sn 192.168.1.0/241.0/24
Send HTTP requests to the device
Shelly's HTTP API is well documented in their website:
The value 0 in the URL matches te number of the relay or internal switch in the Shelly. In this case there is only one, but in the case of Shelly 2.5 you have two relays, so you can call them individually changing this value.
In this case, the URL defines the following schedule rule parameters:
HHMM: hour and minute that activate the rule
0123456: days of the week when the rule is active
on/off: status that the rule triggers
This way, to schedule the on and off of the device (except during weekends), you could send a request like this one:
curl -X GET http://192.168.1.XX/settings/relay/0?schedule_rules=2300-01234-on,0700-01234-off
Obviously you can also configure the schedule rules from the web interface, or just check the commands worked:
And that would cover all of it. Jump off and fill your house with tiny Shellys completely customizable. Any questions or comments on Twitter 🐦 please! (though given what's going on with the X thing, who knows how long I'll last...)
I had a Shelly Dimmer inside a plug box in the wall, but one good day it stopped working (probably because of high temperatures, as it stands up to 35ºC). Looking for an alternative, I found Sonoff had released their equivalent for 1/3 the price of Shelly.
But in the end, cheap turns expensive, as it is much more complicated to configure than Shelly Dimmer and it has a bigger size.
After many tests, and given the poor documentation, here I explain how to configure Sonoff D1 Dimmer to use the local API without depending on the e-weLink app.
Additionally, given its size, you wont find much space for it in your connection boxes, so I’ll give you the idea to craft an external connection expansor.
The previous schematic more or less complies with European norm:
Line (positive): black, brown or grey (red in this case...)
Neutral (negative): blue.
Shelly Dimmer is much more compact and fits easily in a connection box. But not in this case, so I will connect it externally using an extension lead, and I will later detail a simple case for its assembly.
TIP! If you're not experienced in electricity, you should review quite a bit and move forward with caution. It's not nice to have a shock with the domestic network. If you do the connection externally this way you won't be in much danger.
For the moment we can now make it work.
Internet connection
This is the complicated bit, as with so much casing, apparently there was no place for the usual pushbutton to power on/off and restore the device.
If you're lucky, your Sonoff wont be preconfigured and you might be able to connect to it on the first attempt. If it's preconfigured, probably to check its operation in another network, the device is no longer accessible even with the e-weLink app, unless you are in the network where it was configured.
To detect it, you must restore to default settings and for this you have two options:
Restore using e-weLink app from the network where it was configured (very unlikely you have access to it).
Restore using Sonoff RM-433 remote controller (you'll end up buying this extra accessory).
Pairing Sonoff RM-433 remote controller
In the end, the cheap D1 price has doubled with the need to buy the RM-433 remote controller, but the price is still not mad. Here is its manual:
The first thing to do is to pair the controller with the D1:
Connect the D1 to a socket.
Hold button 7 for some 5 seconds, until you hear a beep (this removes the previous radio-frequency assignment).
Unplug and plug the D1 to get it restarted.
Press any button on the controller so it's assigned to the D1.
You'll hear another beep and the controller is now paired and can be used to control the D1.
Restore WIFI network
Now you need to restore the network assigned to the D1.
Hold button 8 for some 5 seconds, or basically, until the led starts blinking this way:
Breathing mode. Two fast blinks, one slow blink.
You removed the previous network. Now set it to pairing mode.
Again, hold button 8 for some 5 seconds, or until the led starts blinking continuously:
Pairing mode. Constant blinking.
This way, the device starts a WIFI Access Point (WIFI AP) with a name in the form ITEAD-XXXXXXXXXX.
Pairing with e-weLink
From here, if you want the easy route, just download the e-weLink app and press the quick pairing button. You'll then have your D1 accessible from this app.
Pairing in DIY mode
But I want the complicated way and enable DIY mode to access the device network and control it using commands from the HTTP API in a web app.
We need to find the WIFI network named ITEAD-XXXXXXXXXX set up by the device and connect to it using the password 12345678.
Now open a web browser and access this address http://10.10.7.1 where you'll find the following screens.
Introduce the name (SSID) and password of your WIFI network, and the device is now linked to it.
Assembly
Before getting into the detail of the HTTP API, I'll show you a 3D printed case design to avoid the cables and connections being completely exposed.
It consists of two PLA pieces (base and top) which can be screwed together and which you can download from this server:
To use the command of the HTTP API you must know the device IP in your local network.
Find IP in the router
You can access the network map in your router, usually from the address http://192.168.1.1
The address and the password should be in some sticker in your router. Then you'll see your device with a name like ESP-XXXX which derives from the WIFI module it holds (I already renamed it here):
Find IP using nmap
In a terminal you can use the tool nmap to scan your local network.
Download it if not done yet: sudo apt-get update sudo apt-get install nmap
Scan your network (using sudo you'll get the MAC address, which is useful as the IP could change when restarting the router) sudo nmap -v -sn 192.168.1.0/24
Send HTTP requests to the D1
Sonoff's D1 HTTP API is documented in their website:
In order to communicate with the device, you need to send HTTP requests using some software like Postman or using curl or wget in a terminal.
The request is sent to the device IP, to the default port 8081, and we also have to include the device id in the request body (this id matches the XXXXXXXXXX coding in the WIFI network name ITEAD-XXXXXXXXXX).
Let's see some use cases with curl and Postman.
Device information
http://[ip]:[port]/zeroconf/info
curl
curl -X POST 'http://192.168.1.34:8081/zeroconf/info' --data-raw '{"deviceid": "XXXXXXXXXX","data": {}}'
curl -X POST 'http://192.168.1.34:8081/zeroconf/switch' --data-raw '{"deviceid": "XXXXXXXXXX","data": {"switch":"on"}}'
Postman
Response
{
"seq": 9,
"error": 0
}
Brightness adjustment
http://[ip]:[port]/zeroconf/dimmable
curl
curl -X POST 'http://192.168.1.34:8081/zeroconf/dimmable' --data-raw '{"deviceid": "XXXXXXXXXX","data": {"switch":"on","brightness":50,"mode":0,"brightmin":0,"brightmax":100}}'
Postman
Response
{
"seq": 14,
"error": 0
}
Now you're ready to program your own app and control your D1 to your like in a completely private way. I hope this was useful, but if you find any doubts or comments, don't hesitate to drop them on Twitter 🐦!