I bought a smart plug from a local retailer which branded it as a Maginon SP1-E. These can also be found on the market as an Edimax SP-1101W. Originally, they are manufactured by ST&T.
For me, these plugs are very useful as they are a cheap solution for socket based electricity sub-metering and I can enable or disable the power remotely, which can be integrated into my domotics or smart home control center.
In a summary, the functions are:
- Runs embedded Linux
- Able to switch power
- Able to access Wifi networks
- Able to measure V, W, A and kWh
- Can be controlled by a crappy smartphone app
By default, when plugged in, the plug will power-on, allow power consumption from it for 2-3 seconds, switch the breaker (and no longer allow power consumption) and then require that the user switches the breaker (through a command to the device) again to allow power consumption. This behavior can be seen as 'safe', yet it is a dirty way to trigger the breaker at startup. If the breaker would have been normal open by design, the 2-3 seconds power-on at the start, would not happen. Additionally, if you put this plug onto a freezer e.g., and a power disruption happens, your freezer will not be repowered after power restoration, until the user switches the breaker through a command to the device. Later on, we will tackle this short coming in another blog post.
Maginon has released source code for the plug under the GPL: http://gpl.supra-elektronik.com/
The mechanics: outside
The front has 2 buttons and 2 LEDs. The main button (largest one) can be used to HW switch the breaker. When pressing the reset button for more than 8 seconds, the plug will go back to the factory settings.The plug can be opened, using triangle bits.
The mechanics: inside
There are 2 main PCBs inside. The Embedded Linux board (Ralink RT5350F) which is low voltage and the breaker/metering board which runs at 230V.
Below are the images of the Embedded Linux board:
Patch antenna on the left, wired to the Embedded Linux board
Ralink Soc (System on Chip) board
Pins on the edges, to plug the board onto the breaker/metering board.
Here are some images of the breaker/metering board:
Look inside from the top
The breaker
Inside the Embedded Linux OS
Login into the plug can be done by telnet to the plug IP on port tcp/23. The default username/password is: admin/admin.Checking the cpuinfo
# cat /proc/cpuinfo system type : Ralink SoC processor : 0 cpu model : MIPS 24K V4.12 BogoMIPS : 239.61 wait instruction : yes microsecond timers : yes tlb_entries : 32 extra interrupt vector : yes hardware watchpoint : yes ASEs implemented : mips16 dsp VCED exceptions : not available VCEI exceptions : not available
Linux version
# uname -a Linux (none) 2.6.21 #324 Mon Aug 25 16:53:40 CST 2014 mips unknown
# mount rootfs on / type rootfs (rw) proc on /proc type proc (rw) none on /var type ramfs (rw) none on /etc type ramfs (rw) none on /tmp type ramfs (rw) none on /media type ramfs (rw) none on /dev/pts type devpts (rw)
Checking the filesystem
# df / Filesystem 1k-blocks Used Available Use% Mounted on rootfs 0 0 0 0% /
Checking the memory usage
# free total used free shared buffers Mem: 29324 9984 19340 0 0 Swap: 0 0 0 Total: 29324 9984 19340
The available tools within Busybox
# busybox BusyBox v1.12.1 (2014-07-31 06:32:52 CEST) multi-call binary Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko and others. Licensed under GPLv2. See source distribution for full notice. Usage: busybox [function] [arguments]... or: function [arguments]... BusyBox is a multi-call binary that combines many common Unix utilities into a single executable. Most people will create a link to busybox for each function they wish to use and BusyBox will act like whatever it was invoked as! Currently defined functions: [, [[, ash, brctl, cat, chmod, chpasswd, cp, crond, date, dd, df, du, echo, expr, free, grep, halt, ifconfig, init, init, insmod, kill, killall, login, ls, lsmod, mkdir, mknod, mount, ping, poweroff, printf, ps, pwd, reboot, rm, rmmod, route, sed, sh, sleep, syslogd, telnetd, test, tftp, top, touch, tr, udhcpc, udhcpd, umount, uname, uptime, vconfig, wc
The following binaries are available and not from Busybox
# cd /bin # ls -l | grep -v "busybox" -rwxr-xr-x 1 0 0 148244 iperf -rwxr-xr-x 1 0 0 22804 ntpclient -rwxr-xr-x 1 0 0 6208 erase lrwxrwxrwx 1 0 0 11 nvram_set -> ralink_init -rwxr-xr-x 1 0 0 36216 iwpriv -rwxr-xr-x 1 0 0 36508 ralink_init -rwxr-xr-x 1 0 0 79072 rt2860apd -rwxr-xr-x 1 0 0 9032 gpio -rwxr-xr-x 1 0 0 9928 flash -rwxr-xr-x 1 0 0 6864 reg -rwxr-xr-x 1 0 0 173476 miniupnpd lrwxrwxrwx 1 0 0 11 nvram_get -> ralink_init -rwxr-xr-x 1 0 0 9920 ated -rwxr-xr-x 1 0 0 6536 nvram_daemon -rwxr-xr-x 1 0 0 33992 mkfs.jffs2 -rwxr-xr-x 1 0 0 345156 goahead -rwxrwxrwx 1 0 0 381421 RDTServer lrwxrwxrwx 1 0 0 9 rtinicapd -> rt2860apd -rwxrwxrwx 1 0 0 37798 setUID -rwxr-xr-x 1 0 0 170687 GpioForCrond -rwxrwxrwx 1 0 0 37901 writeflash -rwxr-xr-x 1 0 0 88976 iptables -rwxr-xr-x 1 0 0 5264 mii_mgr -rwxr-xr-x 1 0 0 83848 GetInfo -rwxrwxrwx 1 0 0 48789 checksum -rwxr-xr-x 1 0 0 39975 UartForCrond -rwxr-xr-x 1 0 0 12744 mtd_write -rwxr-xr-x 1 0 0 74124 lld2d -rwxr-xr-x 1 0 0 16236 switch -rwxrwxrwx 1 0 0 37798 getUID -rwxr-xr-x 1 0 0 6164 eraseall
The below command will enable the power consumption on the plug.
# /bin/GpioForCrond 1 gpio_set_dir: gpio=2, dir=0 gpio_set_dir: gpio=1, dir=1 InitGpio() success, fd = 3 Get GPIO1 = [01]
The below command will disable the power consumption on the plug.
# /bin/GpioForCrond 0 gpio_set_dir: gpio=2, dir=0 gpio_set_dir: gpio=1, dir=1 InitGpio() success, fd = 3 Get GPIO1 = [00]
Several interfaces are available for connecting. The apcli0 is the WAN interface where the plug acts as a client for. In this case, this is connected to the home Wifi network in the network range 192.168.0.0/24. The br0 is the "server" interface where the plug can give IP leases to other clients (e.g. your laptop), which are accessing the plug's Wifi network. This Wifi network has a SSID which is always named as "Smartplug_XXXXXX" where XXXXXX is the last 6 chars of the plug's br0 MAC address, in this case 11A408.
# ifconfig apcli0 Link encap:Ethernet HWaddr 00:08:ED:11:A4:09 inet addr:192.168.0.235 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) br0 Link encap:Ethernet HWaddr 00:08:ED:11:A4:08 inet addr:10.10.10.254 Bcast:10.10.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:36 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:1512 (1.4 KiB) eth2 Link encap:Ethernet HWaddr 00:0C:43:30:50:77 UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:5345 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:548821 (535.9 KiB) Interrupt:3 eth2.1 Link encap:Ethernet HWaddr 00:0C:43:30:50:77 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) eth2.2 Link encap:Ethernet HWaddr 00:0C:43:30:50:66 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1588 errors:0 dropped:0 overruns:0 frame:0 TX packets:1588 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:191850 (187.3 KiB) TX bytes:191850 (187.3 KiB) ra0 Link encap:Ethernet HWaddr 00:08:ED:11:A4:08 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:70094428 errors:203 dropped:0 overruns:0 frame:0 TX packets:923762 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3887818972 (3.6 GiB) TX bytes:88933398 (84.8 MiB) Interrupt:4
How Can I check if the power consumption is already enable or not?
ReplyDeleteGreat post. Thanks for sharing.
ReplyDeleteWifi Smart Plug
Mounted on the side of the embedded system board lies what you call a "storage device." These storage devices are able to hold information, process information, or in some cases does both.
ReplyDeleteembedded board
hi, is it possible to put edimax software on it so I can use it in Home Assistant?
ReplyDeletehttps://community.home-assistant.io/t/edimax-wi-fi-smart-switch-plug-sp-2101w/9036
https://www.home-assistant.io/integrations/edimax/
Delete