To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
My first attempt to create an animation in OpenSCAD: How the modules will fit into the enclosure:
As I'm thinking further, it become obvious that I want to create a modular system. Something like a backplane, with equaly sized modules, the sensors, the actuators, the MCU, and the power source also reside on separate modules.
Even I went further. Designed a box, the backplane and the module form factor already. The modules will be implemented in 5x5cm form factor. Why? Because this can be cheaply ordered from the Chinese PCB factories - ~$10 for 10pcs.
The planed module connector has 1 SPI, 1 I2C and 8 GPIO connections. This is 17 pins together with the two power rails (3.3V and 5V). A 17 pin 0.1" single row header fits onto the 5cm edge of the board.
As I'm going further with it, I came up with quite a few modules, I want to implement. The list isn't complete, and the modules are subject to change:
In addition I plan to design Backplane for 4, 6 and 8 modules. The backplane will have an additional connector, what is able to connect the whole thing to a BeagleBone CAPE. This means, I'll able to use this modular system for the BBG based OpenHAB central also.
I also adding parametric 3D printable enclosure for it.
Some of the modules already designed. Although it can be ordered from a fab, but all of the designs ready until today uses single sided board, what can be easily created at home with toner transfer. Most (not all) of the designs uses exclusively trough hole components, what make the life easier.
No, I don't want to measure the mains voltage (yet) here.
I want to build my garage lamp switch as minimally invasive to our current setup, as I can.
What does that mean?
The lamp today is switched by two wall switches (one inside the garage, one in the house at the garage door) in alternating configuration. I want to keep the possibility to operate the lamp with this switches. As I'm not an electrician, I not really want to touch the wires, switches inside the wall (it would be a dirty job anyways). Fortunately I've continuous mains source also at the lamp itself.
So the plan is to connect the remote switching unit to the uninterrupted source and sense if the switches are on or off. This signal will be used to alternate the lamp and not to determine the status. Every time it change (from on to off or off to on), will change the light state.
For the sensing I need some electronics. The mains is not a child play so the proper isolation is crucial.
I want to stick to the simplest circuit possible:
A capacitive non-isolated power supply (two caps, two resistors, a diode and a zener) plus an optoisolator. The whole thing cost around $1.
Here is the design:
As I mentioned earlier I've several Conrad (ELV) FHT80B thermostats, with radio controlled valves, and I've a CUL v3.2 device. Now I'm try to connect these devices to my OpenHAB.
Before I started to work on this project I updated the firmware in the CUL to the one suggested for OpenHAB from here:
The references for the connection can be find here:
https://github.com/openhab/openhab/wiki/FS20-Binding
https://github.com/openhab/openhab/wiki/CUL-Binding
Setting up the binding:
1. Copy the required addons into the /opt/openhab/addons folder:
org.openhab.io.transport.cul-1.8.1.jar org.openhab.binding.fht-1.8.1.jar
If you have other devices than the heating from the FS20 family you may need the
org.openhab.binding.fs20-1.8.1.jar
also.
2. Edit the configuration file /opt/openhab/configurations/openhab.cfg. Add the following to the end:
fht:device=serial:/dev/ttyACM0 fht:baudrate=38400 fht:parity=0 fht:husecode=XXXX
The housecode is your choice. It is a four digit hexadecimal code. And it is absolutely necessary. If you don't provide it here, your system will not start without even a sign of the problem. You can just see the error message when you switch on the debug logging.
This code will be the code of your CUL device and has no connection with the codes of the FHT80b devices. In addition if you want to get readings from your devices, you have to be sure, that the "CEnt" setting in each of FHT80B devices is set to "nA".
3. You have to create some items in your items file for your FHT80B device. Something like this:
Number fhtRoom1Desired "Desired-Temp. [%.1f °C]" { fht="housecode=552D;datapoint=DESIRED_TEMP" } Number fhtRoom1Measured "Measured Temp. [%.1f °C]" { fht="housecode=552D;datapoint=MEASURED_TEMP" } Number fhtRoom1Valve "Valve [%.1f %%]" { fht="housecode=552D;address=00;datapoint=VALVE" } Switch fhtRoom1Battery "Battery [%s]" { fht="housecode=552D;datapoint=BATTERY" } Contact fhtRoom1Window "Window [MAP(en.map):%s]" { fht="housecode=52FB;address=7B;datapoint=WINDOW" }The housecode in the example is the code of the FHT80B device itself. You can read it from the device, the code1 is the first part, the code2 is the second part, and you must convert your readings to hexadecimal.
4. Now you have to insert the read values into your sitemap:
Frame label="Heating" { Setpoint item=fhtRoom1Desired minValue=6 maxValue=30 step=0.5 Text item=fhtRoom1Measured Text item=fhtRoom1Valve Text item=fhtRoom1Battery Text item=fhtRoom1Window }The result is something like this:
Sorry for the Hungarian text, as this is a real data from my house, I'll translate the whole frontend to Hungarian to my family.
One thing to add: Be patient. Getting the data is a time consuming task. Some of the data will just arrive when changed. So it can take several minutes, or even hours, to get your data.
Going further. This is just a copy-paste programming.
I grabbed the Arduino code from here:
http://iot-playground.com/blog/2-uncategorised/40-esp8266-wifi-relay-switch-arduino-ide
Changed the SSID and the password, connected a 150ohm resistor and the first LED I found in my junk box to the corresponding pins of the ESP8266. Downloaded the code, and fired the serial monitor in the Visual Studio:
When I connect to the web server from a browser, I can switch the LED on and off.Now integrate it to the OpenHAB.
We don't need anything else just modify the previously created rules. First I just added the http calls into the previously created rule, but the result wasn't satisfactory. I was able to control the LED from the remote, but not from the web browser. So I modified it a bit more.
Here is the result:
import org.openhab.core.library.types.*
import org.openhab.core.persistence.*
import org.openhab.model.script.actions.*
rule "GarageLightRemote"
when
Item KeeLoq_Remote_B changed from CLOSED to OPEN
then
if(Garage_Light.state == ON)
{
sendCommand(Garage_Light, OFF)
}
else
{
sendCommand(Garage_Light, ON)
}
end
rule "GarageLightOffAction"
when
Item Garage_Light changed from ON to OFF
then
sendHttpGetRequest("http://10.1.2.129/gpio/0")
end
rule "GarageLightOffAction"
when
Item Garage_Light changed from OFF to ON
then
sendHttpGetRequest("http://10.1.2.129/gpio/1")
end
Here is the circuit:
I'm not a big fan of the whole Arduino ecosystem. The hateful IDE, and the lack of the debug-ability kept far from it.
On the other side I must admit that it is evolved since my first encounter, and it looks like something unavoidable.
I need some remote sensors, actuators, for my OpenHAB system. I want to build most of them. As I looked around, I seen two easily usable solution:
ESP8266 based WiFi modules
MySensors.org NRF24L01+ and Arduino based mesh network
I want to try both of them. As I not really have Arduinos on hand yet (actually I've few but different manufacturers, different hassles, and not really fits into this project), so I want to start to play with the ESP8266.
As I heard the LUA interpreter of it not really fits into bigger project, so I chosen the Arduino framework for it. Actually I'm just learning it, so I don't know where this lead to.
My first goal to be able to switch a GPIO of the ESP8266 via a HTTP REST API interface.
As I mentioned above I really hate the Arduino IDE. I run into various problems with it when I tried to configure and compile the Marlin firmware for my 3D printer. Then I found that you can use the trusted Microsoft Visual Studio (I'm using it for my daily work and a few contract projects) with this addon:
for the task.
Putting together the environment:
1. Install an Arduino IDE. Can be downloaded from here: https://www.arduino.cc/download_handler.php?f=/arduino-1.6.8-windows.exe
2. Install the Microsoft Visual Studio 2015. I'm using the Professional version, but there is a free version, can be downloaded from here: https://go.microsoft.com/fwlink/?LinkId=615448&clcid=0x409
Make sure that you enable the C++ component
3. Start the Visual Studio. Go into the Tools/Extensions and Updates menu. Select the Online in the left pane. Search for Arduino
Download the Arduino IDE for Visual Studio
Install it, and restart Visual Studio as instructed.
4. After restart the Arduino configuration will appear. You should set the Arduino IDE location and add the ESP8266 Board Manager URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Press OK5. On the menu bar next to the Arduino board selector click on the magnifying glass icon
select the Manage Boards tab
Expand the esp8266 and click on the Version 2.1.0
On the popup dialog Click OK for the installation
And this is the point where I run into a great trouble. My machine is part of a domain, I'm running things as a regular user, means I've limited permissions (of course I'm admin on the other side, but I should specify it when I need it). It looks like the installer have a bug. Because I'm domain member and when I installed the machine at the beginning the user name I gave is the same I use in the domain. The result of this, that my profile name in the c:\Users folder is looks like this: <username>.<domainname>. This caused no problems in the past, but not here. The installer converted the dot between the name and the domain to underscore in some places and gave me an access denied error - yes because the folder in question didn't exists and I've no right to create it.
So I created the folder as admin and granted permission for me. After this the install run smoothly, but when I wanted to compile my first code, it failed. The error message wasn't too informative. After several trials, even using Process Monitor (Microsoft, formally Sysinternals tool), I was able to copy the files left in the temp folder under the underscore user folder I created, back into its place. Now it works, several hours wasted.
6. Try this out
I wanted to have a fast test, so I just created a demo project. The blink from the Visual Studio project list.
After selecting the correct board (NodeMCU v0.9 in my case) and the serial port, just uploaded the code and it started to work.
It looks like the ESP8266 environment is ready for more complicated tasks.
To be able to use the rolling code receiver in my OpenHAB, the first thing we need to enable the GPIO binding in the OpenHAB. There is a fairly good documentation of it in the OpenHAB wiki:
https://github.com/openhab/openhab/wiki/GPIO-Binding
I mostly done, what is in it, but some modifications were needed.
1. Install the native JNA library:
apt-get install libjna-java
2. Modify /opt/openhab/start.sh
Add -Djna.boot.library.path=/usr/lib/jni into the list of java command line parameters
3. Modifiy the /etc/init.d/openhab
Add -Djna.boot.library.path=/usr/lib/jni into the DAEMON_ARGS parameters
and add the commands to unexport the gpio pins on stopping the daemon
4. From the previously downloaded distribution-1.8.1-addons.zip (part of the OpenHAB downloads) expand the following files:
org.openhab.io.gpio org.openhab.binding.gpiointo the /opt/openhab/addons directory
5. Restart openhab:
/etc/init.d/openhab restart
Now the OpenHAB is ready to handle the GPIO. We need to make the configuration changes, to be able to use it.
6. Add the required items
The GPIO inputs can be represented by Contacts in the OpenHAB, so edit one of the files in the /opt/openhab/configurations/items directory (I already dropped the demo config from here, so I've the config of my house) and add the following:
Contact KeeLoq_Remote_A "Remote A [MAP(en.map:%s]" (<ID of your Group>, Windows) { gpio="pin:66"}
Contact KeeLoq_Remote_B "Remote B [MAP(en.map:%s]" (<ID of your Group>, Windows) { gpio="pin:67"}
Contact KeeLoq_Remote_C "Remote C [MAP(en.map:%s]" (<ID of your Group>, Windows) { gpio="pin:69"}
Contact KeeLoq_Remote_D "Remote D [MAP(en.map:%s]" (<ID of your Group>, Windows) { gpio="pin:68"}
When everything is fine you should see the following after the OpenHAB reload the configuration:
And when you push a button on the remote, the closed text change to open, and back when you release.
7. For the lighting it will not be enough
We need to keep the status of the light, as it switched on or off. So I added a Switch into the items config:
Switch Garage_Light "Garage Light" (<ID of your Group>, Lights)
This is only a regular switch, so if you want to control it from the remote you need some rules. You can add it to a rules file in the /opt/openhab/configurations/rules folder:
rule "GarageLightToggle" when Item KeeLoq_Remote_B changed from CLOSED to OPEN then if(Garage_Light.state == ON) { sendCommand(Garage_Light, OFF) } else { sendCommand(Garage_Light, ON) } endAfter this, when you push the B button on the remote, it will switch the web control, on and off
This still not change the physical light. I have to create/buy some actor for this.
[2016.04.16]: When I wrote this article didn't realized, that I used the old location of the cape manager slots file. Corrected.
When you sit in your car and try to enter to your garage, I know it is not fancy, but the most convenient device is the tiny remote you can hang on your keyring (something integrated into your car would be better and fancier, I may add something like this later on).
To be able to remote control the OpenHAB and the garage door/lights through it, I bought this rolling code receiver on the aliexpress:
My plan is to use it for switching the lights in the garage, control the garage doors and a few more (as it has two more buttons - exactly two) tasks.
First I put this onto a breadboard, powered up, and tried out if it works.
It was working for the first try, finding out the different channels for the buttons was easy like a child's play.
The only problem with the device, that it has 5V logic outputs and I want to connect to my BeagleBone Greens GPIO what isn't 5V safe.
I decided to use the simplest level shifter on earth possible. A resistor divider. A 39K and a 68K resistor does its job like champ, if you measure it with a multimeter.
The next part is to setup the GPIO on the BeagleBone. The OpenHAB uses the Linux GPIO Sysfs interface, what is supereasy to use (https://www.kernel.org/doc/Documentation/gpio/sysfs.txt).
First I tried to read the data from the command line. Connected one channel to the GPIO_60 (P9 pin 12) of the BBG.
On the console the following commands are needed:
echo '60' > /sys/class/gpio/export echo 'in' > /sys/class/gpio/gpio60/direction
After this you can read the pin value by the following command:
cat /sys/class/gpio/gpio60/value
The commands went well, but doesn't matter if I push the button on the remote or not, always get back a 1.
Measured the input with a multimeter. It gives 1.6V even the pin of the receiver is on 0V. This means, that the BBG input pin is pulled up.
From this point I've two choice:
1. Switch of the pull up somehow
2. Use some active circuit as level shifter instead of the resistors.
I went for the first one.
Looked around and it clearly turned out, that changing the pull-up is not part of the linux GPIO framework. Read many things and found that BBG uses Cape Manager Overlays for this task. It was sometimes there, sometimes not, but on the 4.1.x kernel what I'm using is already part of the mainline kernel.
Here are some articles about it:
https://github.com/jadonk/validation-scripts/blob/master/test-capemgr/README.md
http://www.thing-printer.com/cape-manager-is-back-baby/
http://www.valvers.com/embedded-linux/beaglebone-black/step04-gpio/
The overlay repository (you can learn from it, but not necessary for the task here):
https://github.com/RobertCNelson/bb.org-overlays
The most useful of my findings was this online tool:
http://kilobaser.com/blog/2014-07-28-beaglebone-black-devicetreeoverlay-generator
It is able to create the overlay you need.
So for switching off the pull-up on Gpio 60 above you have to do the following things:
1. Save this file into the /lib/firmware under the name bspm_p9_12_2f-00A0.dts
/* * This is a template-generated file from BoneScript */ /dts-v1/; /plugin/; /{ compatible = "ti,beaglebone", "ti,beaglebone-black"; part_number = "BS_PINMODE_P9_12_0x2f"; exclusive-use = "P9.12", "gpio1_28"; fragment@0 { target = <&am33xx_pinmux>; __overlay__ { bs_pinmode_P9_12_0x2f: pinmux_bs_pinmode_P9_12_0x2f { pinctrl-single,pins = <0x078 0x2f>; }; }; }; fragment@1 { target = <&ocp>; __overlay__ { bs_pinmode_P9_12_0x2f_pinmux { compatible = "bone-pinmux-helper"; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&bs_pinmode_P9_12_0x2f>; }; }; }; };2. Compile it:
dtc -O dtb -o /lib/firmware/bspm_P9_12_2f-00A0.dtbo -b 0 -@ /lib/firmware/bspm_P9_12_2f-00A0.dts3. Load it:
echo bspm_P9_12_2f > /sys/devices/platform/bone_capemgr/slots...Read more »
Now here I install OpenHAB as the home automation controller, the brain of the whole system.
The OpenHAB is a java based system, so first we need an Oracle Java. To achieve this you have to add a PPA repository to the system:
BTW. I know that the sudo voodoo is absolutely necessary to keep the security. Even I'm working on my windows machine as a standard user and not admin since XP when the UAC wasn't even planed. But when I put together something on linux or windows and what I'm doing is clearly administrative task, I'm doing it as admin. So the first thing when I install several things, packages, etc. on linux I start with
sudo su
And don't bother to write sudo at beginning of every single line.
1. Add PPA repository of the Oracle Java and install it.
apt-get install software-properties-common add-apt-repository ppa:webupd8team/java apt-get update apt-get install oracle-java8-installe
2. Download OpenHAB files. You will need this ones:
https://bintray.com/artifact/download/openhab/bin/distribution-1.8.1-runtime.zip
https://bintray.com/artifact/download/openhab/bin/distribution-1.8.1-addons.zip
https://bintray.com/artifact/download/openhab/bin/distribution-1.8.1-demo.zip
Actually I usually download the files on my Windows machine and transfer them to the linux via WinSCP
3. Extract the files, create configuration
mkdir /opt/openhab unzip distribution-1.8.1-runtime.zip -d /opt/openhab/ unzip distribution-1.8.1-demo.zip -d /opt/openhab/ cp /opt/openhab/openhab_default.cfg /opt/openhab/openhab.cfg
4. As we still in sudo mode we can start the OpenHAB server to test the functionality of our system:
/opt/openhab/start.sh
After waiting for a while, we can test in a browser if it works:
http://<ip address>:8080/openhab.app?sitemap=demo
OK. Our server works, but we not yet finished. Just stop it now.First: you may realized that I didn't created any specific user for the openhab. There is a reason why.
The Ubuntu not really designed for embedded systems. Therefore no mechanism (what I'm aware of) for regular user to access GPIO (if you know a simple method for it please don't keep inside). On the next part I want to use GPIO. Based on this I plan to run OpenHAB as root.
Second: I need a method to run OpenHAB as daemon So..
5. Download the daemon script from here:
Save as openhab into the /etc/init.d folder
Configure it:
chmod a+x /etc/init.d/openhab update-rc.d openhab defaults
Edit the file with your favorite editor. Most probably you only need to change the RUN_AS from openhab to root
Start it:
/etc/init.d/openhab startNow you can check it again if it still works via a web browser, and you can check the /var/log/openhab.log for errors.
Ok. So let start:
I'm not a linux guru. There are many favors of linux distribution, but I've just some experience with Ubuntu and Debian. In addition I usually not using any linux GUI.
So when I start a linux based project, it means to install an Ubuntu.
As I decided, this project will be based on a Beaglebone Green. Let start to install a 14.04 LTS to it.
The basic information reside here: http://elinux.org/BeagleBoardUbuntu
1. You need to download the image from here: https://rcn-ee.com/rootfs/2016-02-11/flasher/BBB-eMMC-flasher-ubuntu-14.04.3-console-armhf-2016-02-11-2gb.img.xz
(today the 16.04 image already exists, but I stick to the older as it seems more stable), download the image writing tool (Win32DiskImager): https://sourceforge.net/projects/win32diskimager/files/latest/download
And you need an empty minimum 2GB uSD card.
2. Expand the image to a folder in you machine. For example the 7-Zip will do it. Install the Win32DiskImager.
3. Write the image to a uSD card with the Win32DiskImager
4. When the writing is finished, insert the uSD card into the Beaglebone. Press and hold the boot select button (the one close to the uSD slot) while powering up the board. After short booting sequence you will see the "knight rider pattern" on the LEDs. Wait until it finish and the leds turn on.
5. Connect the board to the ethernet network. If you can figure out the address get by DHCP the steps from 6-8 are optional. Just reboot the board by power cycling it.
6. Install the PC driver for the board (if you have a BeagleBone Green, this is absolutelly necessary as you don't have HDMI connector to connect monitor). The windows driver can be downloaded from here:
64 bit: http://beagleboard.org/static/beaglebone/latest/Drivers/Windows/BONE_D64.exe
32 bit: http://beagleboard.org/static/beaglebone/latest/Drivers/Windows/BONE_DRV.exe
This is NOT a serial driver as you expect, but a virtual ethernet driver. You will need an SSH terminal to connect to Beaglebone.
7. Connect the Beaglebone to your PC. If it is was connected already, just cycle the power on it with removing and reconnecting the USB cable, when you disconnect the cable you can remove the uSD card, as you don't need it anymore.
8. If you run ipconfig on your machine a new ethernet interface will appear:
You'll get 192.168.7.1 as a new interface on your machine, the Beaglebone will appear on the 192.168.7.2. You can connect to it with an SSH terminal like PuTTY
9. If you didn't used the USB/Ethernet to log in, just login via the DHCP provided IP address. If you need static IP address edit the /etc/network/interfaces file and setup the address.
10. If you check the DNS settings of the system it is probably not working. Just by editing the /etc/resolv.conf will not resolve the problem, as it gets overwriten on the next reboot.
Edit the /etc/resolvconf/interface-order file and put eth* to the first on the list. This will give you the correct DNS settings.
11. Reboot the board.
12. Install the updates with:
apt-get update
apt-get upgrade
Create an account to leave a comment. Already have an account? Log In.
Sure, many things have been done, just not posted. I put this project aside for a while. I think it is just the time to reanimate it, for many reason:
1. Your project
2. Still missing Home Automation in my house
3. Knowledge I collected since on ESP8266
4. Ready made ESP8266 firmwares
5. New OpenHAB version
6. Acting as Amazon AWS consultant interested in IoT.
Hi, looks like it is going to be a very cool home automation project. I am also trying wireless devices with CC3200 wireless Cortex 4 MCU. Lets share ideas, though I have none at this point :).
Yea, cool.
Actually this project already advanced a bit further than the things you can see in the log. I made that mistake, not documenting everything right from the begining, so a few things will be recreated and documented, to be able to advance the logs until the current status.
Become a member to follow this project and never miss any updates
This looks amazing buddy!
Did you get as far as fabricating the backplane at all? I really like that idea. In terms of what I'm thinking of a DIN rail enclosure could be made with a backplane installed and perhaps reqork my idea regarding using RJ45 connectors to link them all up... :-)