14. July 2018

How to install Brother DCP-1610W on Linux Mint

Brother DCP-1610W and DCP-1610WE are laser printers with WiFi support. The problem is that configuration files for printing are not part of common distributions like Linux Mint.

You can try to use Foomatic driver for DCP-1200, but the result won’t be great. It’s necessary to install drivers from Brother.

There is one gotcha. If you install just a CUPS Wrapper from Brother, it won’t work. You need to install LPR and CUPS packages.

Download two deb files:

LPR printer driver (deb package)

CUPSwrapper printer driver (deb package)

Install them:

dpkg -i dcp1610wlpr-3.0.1-1.i386.deb
dpkg -i dcp1610wcupswrapper-3.0.1-1.i386.deb

The last command should add a printer to your system. CUPS should be also able to discover the printer on WiFi using mDNS. The important part of the configuration is:

Maker and Model which is set to: Brother DCP-1610W for CUPS

1. December 2016

ESP8266 WiFiManager gotchas

Thanks to PlatformIO it is very easy to add further functionality from libraries to the code for ESP8266. When you need to install library, just start Library Manager from ide and type:

pio lib install WiFiManager

PlatformIO will resolve dependencies and download all necessary stuff. Even better option is to add dependency to platformio.ini file:

[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino
lib_deps =
  ArduinoJson
  esp8266_mdns
  PubSubClient
  WiFiManager

PlatformIO will manage the installation after you save the file. That is very neat.

Then new problems occurred when I started with integration of WiFiManager. Do not take me wrong. WiFiManager is very handy library, but you may experience some tricky issues.

The first problem that I hit was that WiFiManager interface was not visible at 192.168.4.1 port 80. ESP was apparently running in AP mode for configuration, but there was no web interface. This issue was caused by this line in my code:

ESP8266WebServer server(80);

I had web server in the main code before I merged the code from WiFiManager. Web server was serving simple REST API for controlling relay. Unfortunately this construct blocked the port so the AutoConnect web server. The server was not able to bind the port. Solution was simple. It was sufficient to instantiate web server after WiFi was working.

The second problem was that AutoConnect from WiFiManager was always turning in AP mode. I was hunting the problem for several hours without any result. One idea was that WiFiManager is not saving the password. That was not true. Other idea was that the memory is corrupted and reformat would help. Unfortunately it didn’t. I gave up.

That solved the problem. Seriously. I gave up and that solved the problem. I let the device running and then ding. It was online. For some strange reason ESP8266 was not able to establish connection with particular WiFi router at first shot. Then it turned on AP mode and after timeout of Config Portal it connected to the WiFi network. Remedy? Just shorten ConfigPortalTimeout:

wifiManager.setConfigPortalTimeout(60);

The third problem was that Config Portal was not displaying information stored as extra custom parameters. I stored there host name of MQTT broker and other options so they won’t be hardcoded. The problem was caused by WiFiManagerParameter constructed in global scope. Issue was similar the first problem with web server.

Solution was to move construction of WiFiManagerParameter to the method after loading configuration values from file config.json stored on file system.

File configFile = SPIFFS.open("/config.json", "r");
...
WiFiManagerParameter custom_mqtt_host("mqtt_host", "MQTT host", configMqttHost, 40);

After resolving these issues WiFiManager is working and it is possible to set values for configuration via Config Portal and there is no need to hardcode them anymore.

Original code is stored at GitHub – LampESP branch v0.1. The new version is at Github – LampESP branch master. I made also small refactoring and the functionality was divided into smaller files which resembles modules for better code maintenance.

22. November 2016

IoT and waiting for the sun

It took me some time to implement all features to ESP8266 controlling relay of my lamp.

smart-home-lidl-salt-lamp

Thanks to examples from PlatformIO I was able to use all neat features in one code:

You can find complete code at github repo LampESP. Just replace HOST_NAME_HERE and ROOM_NAME_HERE with your MQTT server and your room name.

Once you deploy code to ESP8266 you can use Over-the-air update (OTA). Just change the value in platformio.ini and set upload_port to IP address of your device.

The implementation allows control via simple GET API by accessing the web of device or LampAndroidApp.

As I wrote few weeks ago, my goal was to add MQTT. I’ve installed Mosquitto and connected the device to the server.

It is possible to watch states of device is possible via MQTT client:

mosquitto_sub -v -h HOST_NAME_HERE -t '/#'

Here is example how to change states of relay:

mosquitto_pub -h HOST_NAME_HERE -t '/home/ROOM_NAME_HERE/command' -m 'on'
mosquitto_pub -h HOST_NAME_HERE -t '/home/ROOM_NAME_HERE/command' -m 'off'

I had an idea about next cool feature: turn on/off lamp based on sunset and sunrise. I found very simple and elegant solution that I would like to share with you.

Download Sunwait and compile it. The program just starts and waits until the time of sunrise or sunset based on geographic coordinates. You can also specify offset (how long before or after event) should program end.

Now you can put the sunwait into your local cron table and chain it with command that should be executed after sunrise/sunset occurs.

Here is example how to configure cron to turn on the lamp 15 minutes before sunset and turn it off 15 minutes after sunrise.

crontab -e
10 15 * * * /usr/bin/sunwait sun down -0:15:00 49.230738N, 16.576802E; /usr/bin/mosquitto_pub -h HOST_NAME_HERE -t /home/ROOM_NAME_HERE/command -m "on"
4 15 * * * /usr/bin/sunwait sun up +0:15:00 49.230738N, 16.576802E; /usr/bin/mosquitto_pub -h HOST_NAME_HERE -t /home/ROOM_NAME_HERE/command -m "off"

The lamp is now working. The only problem is the Android app. I thought that adding MQTT client to Android app will be as easy as adding it to ESP8266, but it’s far from truth. There are still some challenges 😉

23. October 2016

Smart Home in 2016 – Overview for beginners

So. You want to start with Smart Home?

Good.

I spent a weekend researching about this topic. Here you can find extract with several links that might save you some time.

My goal was very simple. I’ve got Salt lamp with 15W light bulb and I would like to control it from mobile phone.

Before we embark on the journey I recommend to read RFC 1925 at least two points:

  • (1) It has to work.
  • (8) It is more complicated than you think.

Keep that in mind. Our journey can begin.

Group #1: Devices which do not care about net

The first group that I discovered were devices which has no integration with network.

Solight

It is simple and cheap hardware which allows time based control of power socket for the lamp: Solight time switch.

smart-home-solight

Price: 339 Kč / 12 EUR

Solight does not support remote control.

RSL2

Similar solution, but with remote control is RSL2. You can control several sockets with one remote control. The neat feature of this solution is ability to dim the light.

Price: 459 Kč / 17 EUR

The downside for this and several other sockets described in the article is that they’re targeted at German/Western market and you need to buy reduction to Czech/Slovak power plug.

smart-home-de-cz-reduction

Price: 71 Kč / 3 EUR

PowerCube

Then I found socket with interesting design which has support for remote control and you can turn it on just by pressing button: PowerCube. The button does not require any extra batteries. That’s very useful feature. Just some people on the internet complained that sometimes thay had to push the button twice. The button can be paired with more PowerCubes or more buttons can be paired one PowerCube.

smart-home-powercube

Price: 659 Kč / 24 EUR

Group #2: Devices which do not care about cloud

I found this group at the end of my search.

Ubiquiti mFi mPower

Wow! mFi mPower! It has everything, because it is running on Linux. Wifi and even SSH interface. Android app or any script can interact with the device. The price is very reasonable.

smart-home-mfi

Unfortunately the software development for this platform was placed on hold early this year. That is not good. Just two days ago there was another huge DDOS attack at Dyn which knocked out even GitHub. I’m not saying that it was caused by mFi devices. I just want to stress out that security patches are very important for smart devices.

Price: 1020 Kč / 42 EUR

BeeWi Bluetooth Smart Plug

Another device which is able to operate without cloud is BeeWi socket which communicates via Bluetooth with mobile phone. It is also possible to connect BeeWi to cloud, which requires special gateway from the same vendor.

smart-home-beewi

Price: 1099 Kč / 45 EUR

Group #3: Devices addicted to cloud

There is large group of devices which operates on WiFi, but these devices are dependent on cloud. The dependency is not necessary bad thing, but you should be aware of it. It might very easy happen that the cloud is not accessible and you won’t be able to control the devices.

Isn’t it strange that with every flip of switch you need to generate some command and operation on remote server in the cloud?

TP-LINK HS110

The best match for the solution controlled via WiFi seems to be TP-LINK HS110. Android app has very high reviews. Just the iPad version is missing, so you have to use iPhone.

smart-home-tplink-hs110

Price: 1079 Kč / 44 EUR

D-Link DSP-W215 SmartPlug

I found very alarming reviews of D-Link DSP-W215. Users were complaining that the device violates Czech electrical standards.

smart-home-dlink-dsp-w215

Price: 1399 Kč / 58 EUR

Belkin – WeMo Insight Switch

WeMo solutions seems to be popular, but I found large number of very negative reviews of control app for Android. It reminds me on old bloated Samsung Kies. This solutions works via WiFi and requires connection to the cloud.

smart-home-belkin

Price: 1561 Kč / 65 EUR

Group #4: Devices which talks together

This is the most complex group. These devices implements protocols like Z-Wave or Zigbee which does not operate with the same protocols as BlueTooth or WiFi. It means that you often need a server which controls behavior of devices and which is able to relay instructions from your mobile app to the protocol implemented by devices.

FIBARO – Wall Plug

FIBARO has simply great design, neat functions. Little bit more expensive, but where is the catch?

smart-home-fibaro-plug

Price: 1799 Kč / 74 EUR

FIBARO – Home Center 2

Here is the catch. You need FIBARO Home Center 2 to be able to communicate with FIBARO Wall Plug. The device allows you to control and gather report from your smart home network. The only problem is that the price is little bit higher than you would expect.

smart-home-fibaro-home-center-2

Price: 16499 Kč / 687 EUR

There is also FIBARO Home Center Lite which has little bit simple HW configuration and it is about half the prices of Home Center 2.

Aeon Labs Z-WAVE USB Z-STICK GEN5

It is possible to use your own server instead of FIBARO Home Center, but you’ll need USB dongle like Aeon Z-Wave which is able to communicate via Z-Wave protocol.

smart-home-aeon-zwave

Price: 1320 Kč / 55 EUR

OpenHAB

Once you’ve got USB dongle you can set up your own home automation server like OpenHAB. Just unzip the file, copy configuration. Start the Java server and connect to web interface. Then you can use application on your mobile phone to control your home network. OpenHAB is very flexible and authors received Duke’s choice award in 2013.

It is also possible to connect devices described in group “Addicted to cloud” and control these devices just from your own server. There are several other open source home automation systems. You can find the list at OpenSource.com.

Price: 0 Kč / 0 EUR

Zigbee

Zigbee is similar protocol to Z-Wave. It operates in 2.4 Ghz like WiFi or BlueTooth. You need also separate dongle to talk to this network of devices. Zigbee has been adopted also by Samsung Smartthings.

There are also other protocols, but the idea is always the same. You need dongle or special bridge to talk to your network of devices. These devices are often able to talk with each other.

Summary

As you can see the market is quite diverse and complex. We started with very simple solutions and gradually continued to very complex server controlled solutions. It is often confusing for beginners to spot difference between socket using WiFi or Z-Wave. I hope that this article shed some light to the topic.

Thank you for reading. If you see that something in article is not correct or misleading, let me know. I’ll be happy to fix it.

And what was my decision after weekend analysis of Smart Home? I will buy just a simple flash light and I will turn the switch manually 😉

9. June 2011

Connect Android to Internet via PC with WiFi

Imagine situation: you have only PC or Notebook with Windows connected to the Internet and you also need to connect Android device to net. There is no WiFi device arround.

First approach is to create just ad-hoc wifi network. The only problem is that Android does not support ad-hoc networks.

Some folks suggest to use VirtualRouter. Unfortunately I had some problems to connect to the network created by this software. This solution doesn’t work for me.

Then I found solution that works like a charm – Connectify.me.

Just turn-on sharing on the device connected to the Internet and choose Home network with virtual interface.

Then start Connectify.me and set up network.

I found another issue related to Lenovo Internet Connection tools. WiFi was shutting down after few minutes. It is quite easy to fix it, when you know where to find right checkbox.

Just open “Lenovo – Internet Connection”, go to Tools. Open Global Settings. Uncheck “Allow wireless radios to be turned off when inactive”. Click ok.

Enjoy WiFi and Android 🙂