Introducing Climaduino - The Arduino-Based Thermostat You Control From Your Phone!

Picture of Introducing Climaduino - The Arduino-Based Thermostat You Control From Your Phone!

There is a new version of the Climaduino and the Climaduino Controller with some very significant changes.

  • Supports multiple zones
  • Uses the Arduino Yún
  • Works with Central A/C
  • Communicates using the MQTT protocol (can integrate with other systems besides the Climaduino Controller)
  • Does not have an LCD or temperature setting buttons (they will need to be added back at some point)

For more information, visit the develop branch of both projects Git in the git repo:


Not everyone lives somewhere with central air, or is willing to pay for a Nest or similar "smart" thermostat. The Climaduino is a DIY Arduino-based thermostat designed to control a wall unit A/C. I incorporated both temperature and humidity sensors in order to optimize comfort and reduce energy usage. I then developed a Raspberry Pi-based web interface to control the Climaduino from my phone.

This is still a work in progress, but is definitely functional. I am posting this instructable so others can both build their own smart thermostats, and hopefully build on this project with their Climaduino improvements.

Here are the features so far:

Climaduino thermostat

  • Arduino-based
  • temperature and humidity sensors
  • Relay to control A/C
  • LCD Display
  • Buttons to control temperature
  • Controls both temperature and humidity
  • Settings stored in EEPROM and survive power failures
  • Short cycle protection for efficiency and compressor protection

Climaduino Controller

  • Raspberry Pi-based
  • Wifi-enabled
  • Mobile-optimized web interface to control Climaduino settings
  • Historical temperature and humidity graphs
  • Programmable temperature and humidity changes

Why did I want to build this? Mainly because it was fun to do and I've always been very interested in climate control. (I know that sounds weird, but it's true.) It's also because humidity is a huge issue in my area, South Florida. I designed the Climaduino Thermostat to take this into account. The A/C will stay on just a little bit longer when it's humid to wring more moisture out of the air. I also added a humidity control mode. It can save a significant amount of power and prevent coming home to a mold-infested house. Humidity control mode ignores temperature and only runs the A/C when things get too humid. It's useful when going out of town or when the house is empty (of people and pets).

Obligatory warning
If you perform any of the steps in this instructable, you assume all risk for the outcome. Working with high voltage can be extremely dangerous. Improperly altering your A/C unit could lead it to malfunction or completely break. Please be careful.

Electrical Safety: Safety and Health for Electrical Trades Student Manual

1-40 of 72Next »
lzu1 year ago
Very cool!!!
I thought of something very similar. Obviously using my open source java library control. Actually there is still no web interface (you can just control Arduino from network) but it works very well with Raspberry. If you are interested check it at www.ardulink.org
bbustin (author)  lzu1 year ago
Izu, that looks very intriguing. It is an extremely cool project that I would love to experiment with at some point. Thanks for letting me know about it.
lzu bbustin1 year ago
Thank you. Give me a feedback when you'll try it.
deekaylol5 months ago

Dear bbustin, could you provide for me Raspberry pi controller code if I want to use raspberry pi and arduno uno over usb please?

I did everything as was mentioned in this tutorial, but I get error message if I try to click on submit or on settings or history for example, I can´t get the readings too :/

Help me please, thank you :)

I used this for Arduino:


And this one for pi:


bbustin (author)  deekaylol5 months ago
Hi Deekaylol,

The code you used should work for that; however, I think that the problem here is that there is a new version of Django that was released in the interim. The old code is not working with the new version of Django.

Maybe you could try uninstalling Django and then installing the older version:
pip install Django==1.6.10

If that works, please let me know and I will update this instructable so others do not run into the problem.
deekaylol bbustin5 months ago

Dear bbustin,

That did the trick ! I was able to uninstall Django with pip uninstall, and install the version you mentioned, the reading is working, great :) Thank you,you are the king bro ! ;)

I got two more questions, I hope you could help me:

1, I see Heating option, but I in the Arduino code, I just see one relay output "const int pinRelay = 10; // pin for relay" , could you provide some information about this ? I would be really thankful, If you coud edit the code for second relay, which could control the heating.

2, Could you provide some information how the temperature could be changed to SI ? I mean to Celsius, since I´d like to use that code to control heating/cooling system in our bungallow (AC and Heating is connected to 220V so the relay shoud do the trick.)

I look forward to hear from you.

Best regards, deekaylol

bbustin (author)  deekaylol5 months ago

Hi Deekaylol,

The original code currently only handles one relay for cooling. I had put the heating in there for the future. The current code handles heating as well; however, it works in a completely different way and has different requirements.

Changing the code to display Celsius should be easy. Change line 216 in the code from

"float readingTemp = dht.readTemperature(true);"


"float readingTemp = dht.readTemperature(false);"

deekaylol bbustin5 months ago

Dear bbustin,

I was ablet to edit the code, second powerstate and pinrelay did the trick, it´s a bit buggy at the moment, but working. But I was stucked with the F to C converting, that was so easy. Thank you very much !

Have a nice day ;-)


bbustin (author) 5 months ago
Hi Tom,

I think that about the init script not following the LSB standards may be ok. One way to tell is to see if the rest of the steps work. If they do not, let me know and I will try my best to come up with some steps that should work.

I'm sorry this has been so difficult. The code you are using is the newest and best, but I have not had time to polish things up or write an install guide yet.
TomL5 bbustin5 months ago

hi bbustin. We got it, the fact you told us to reset the Yun distro actually worked. I guess this is a valuable experience. We continue to work on it as adding more features like controlling washer too. But your help is so great and we want to say thank you..

actually, we have to change a tiny bit in mqtt_bridge.py

mqtt_connect('climaduino.local') with our Pi's address. then it started collecting data.

wget mqtt_bridge.py and send_setting.py is another experience. we actually did wget whole html file instad of python file.

bbustin (author)  TomL55 months ago

Hi Tom,

I am really happy it is working now. I updated the README file to now tell others to first update their Yún. If I can help with anything else, let me know.

TomL5 bbustin5 months ago

thank you for your respond.

First, we uploaded sketch to arduino Yun and tried to see how data be transmitted, (no shield yet). even though, we used

ssh root@yourYunsName.local 'telnet localhost 6571'

tried to get data but the error : telnet bad address "localhost" stopped this happening.

how we can define the Yun hostname is big thing

Second, at the same time, we installed develop code controller for Raspberry pi but cannot understand how Raspberry pi able to communicate with Yun, we understood that MQTT bridge does that part but how Pi is able to load the data from Arduino Yun is a big challenger. All steps were followed.

but the question is : should we install MQTT into Pi as well? most of other projects we saw MQTT been installed to all machines it communicates with. how can MQTT in Yun able to communicate with Pi if the receiver doesn't have the same program to receive the message?

I would like to hear you back soon, we tried many steps but not going anywhere further yet. the data is not transmitted. no communicate between Yun and Pi .

bbustin (author)  TomL55 months ago
Hi Tom,

The code in the Develop branch of the controller has instructions for installing MQTT on the Pi. What you have is an MQTT broker server on the Pi. Then you have the MQTT bridge component on the Pi that talks to the MQTT broker. The Yún has an MQTT bridge component as well which communicates with the MQTT broker on the Pi.

For some reason the Yún does not seem to support MDNS, so I had to add instructions in the README about adding the Raspberry Pi's IP to the hosts file until I can figure out how to get MDNS working properly on the Yún.

So the communication is from each component to the MQTT broker server. The Yún puts messages on the MQTT broker and the Climaduino Controller software picks them up. This information is stuff like current temperature and humidity, whether the system is on or not, whether the fan is on or auto. The Climaduino Controller software subscribes to those types of messages with the MQTT broker. Whenever the Yún sends one of these messages out to the MQTT broker, the MQTT broker sends the message to the Climaduino Controller.

The process also works in reverse. When the Climaduino Controller needs to ask the Climaduino to change a setting (such as changing the temperature set point), it sends this information to the MQTT broker. The Yún is subscribed to those kinds of messages with the MQTT broker. So whenever the broker gets one of the setting messages, it sends it to the Yún.

The MQTT broker is what handles all of the data receiving, storing, sending. The MQTT Bridge components on the Yún and the Pi are the ones that interface with the MQTT broker.

The MQTT bridge on the Yún is different code than the MQTT bridge on the Pi. So the Pi should have the Climaduino Controller code from the Develop branch and the Yún should have the Climaduino code from its Develop branch. Both have README files that are not great (remember the Develop branch is very much a work in progress), but give a general idea of some of the steps that are needed to get it up and running.

Time-permitting I really want to make this a lot easier to deploy. Maybe some sort of installer routine and better documentation. If you see any areas where a specific type of documentation would help or something is very unclear, let me know. That way I can improve those parts and we can work together to make this project even better and easier for anyone to use.
hahmim5 months ago

Hi Brian

It worked we updated the version of the yun to be compatible with the software and the readings made it to the local.

we did however modifi the mqtt_bridge.py on the mqtt_connect = "climaduino.local" to mqtt_connect = ''our raspberry pi IP " and it panned out.

also in the /etc/rc.local the latest version we believe that the mDNS is working because it showed localhost

so we didn't have to add anything else to that file. thought you should know as an update.

hahmim5 months ago

Hi Bbustin

The information you sent to us
about checking the status of the mosquitto on the pi came back with the message

[ok] mosquitto is running

I also apt-get mosquitto and it
said that the latest version is already installed.

so we are still stuck with the
same problem which is when we telnet from the pi through the command:

telnet localhost 5700

it comes back with:



telnet: unable to connect to
remote host: Address family not supported by protocol.

Also we studied the
mqtt_bridge.py script and saw that the /tmp/climaduino_mqtt_bridge socket file
is plugged in the socket_address variable however I don't see anything in that
file and I believe that there is a discrepancy there. also the screen -r gave
us no screen to be resumed.

we are also available today at
anytime for the virtual conference call just replie to me in a personal message

hahmim5 months ago

Hi Bbustin,

in the raspberry pi I telnetted : telnet localhost 5700 this spitted out the following respons

telnet: unable to connect to remote host: address family not supported by protocol.

I also ettmpted to just telnet through the following command:

telnet 5700

it came back with the following message:

telnet: unable to connect to remote host: connection refused

when typing

netstat -an | egrep 'Proto|LISTEN'

it return with

TCP listening on port 22, 23, and 1883 but no instance for 5700

i also tried telnetting on the yun

telnet climaduino.local 5700

it didn't work so I found the ip of the pi and telnetted

telnet 5700 and the response was

telnet: unable to connect to remote host: connection refused

I am not sure what is wrong.

also you mentioned a virtual conference call. please let me know when and how we can do that if you still up for it.

bbustin (author)  hahmim5 months ago
It sounds like the MQTT broker may not be running on the Raspberry Pi. On the Pi, try typing 'service mosquitto status' to see if it is up. If it does not exist, try making sure it is installed by running 'sudo apt-get install mosquitto'. If it was not installed, this last command will install it and start it.

I will send you a private message about setting up a conference call in case that does not work...
hahmim5 months ago
Hi Bbustin,
I am TomL5 Partner working on the same project. So I in turn would like to ask you a couple of questions. Firstly, after following your instructions to the Tee, are we supposed to get data from the sensor into the WUI (Web User Interface) or is that still a work in progress . Second are we suppose to configure the Telnet. And if so how can we get it to point to the proper place to fetch data from the Yun. As it seems the MQTT protocol is not establishing any connection with the local host because when running a shell command line
Found in the arduino Yun documentation http://arduino.cc/en/Guide/ArduinoYun : telnet localhost 6571. We get the telnet bad address 'localhost'. I did find that the port that you specified on the MQTT_bridge.py to communicate with the local host is 5700 do we need to specify that anywhere else in the micro controllers configuration. I have a felling that there is something missing in that regard. Because I have tested and successfully received data from the DHT22 from an Uno but no data from the Yun. We also tried to remove the Seed shield to see if the discrepancy is in that structure of the work however to no avail. Please point us to the right direction so we can be on the same page as the latest and greatest
bbustin (author)  hahmim5 months ago
Hi. The test of telnetting to port 6571 on the Arduino Yún is not a good test. The reason is because the MQTT broker is not running on the Arduino Yún. If you want to test MQTT, then on the Raspberry Pi, try telnetting to localhost port 5700. If that works, then the next step is to test is the Arduino Yún has connectivity to the MQTT broker running on the Raspberry Pi. Try telnetting from the Yún to climaduino.local port 5700. If that does not work, find the IP of the Raspberry Pi. Then go back to the Yún and try telnetting to the Pi's IP port 5700. If that works, then the issue is the hosts file.

If everything checks out, then we can continue the troubleshooting. The first thing to do on the Yún is to type 'screen -r'. This should give you the console output of the Yún's MQTT broker. If it is working, it should say it is sending settings. If it is not, there may be an error there. To get out of there without killin the MQTT bridge, press Ctrl + A, then let go of both and press D.

If everything looked fine there, then we can continue with troubleshooting steps on the Pi. I'm not home on my computer (everything above is from memory), but if those steps do not find the prolem I can come up with more when I get home.

If needed, we can also set up a virtual online conference call where you can show me what is happening. I really want to help you guys to get this working...
TomL56 months ago

hi bbustin. we uploaded the code and script as you mentioned in your steps with Yun. but when we go the web, we dont have any reading from DHT22 and when we type new temperature or humidity values they dont get send in the thermostat display Is this the file send_reading.py installation somehow affected to collect data. we using honeywell trueIAQ connected with relay shiled. we connected the NOs 2 and 3 into the Heating pin and the Fan pin op thermostat. we also dont have a HVAC system hooked.

bbustin (author)  TomL56 months ago
Hi Tom,

It sounds like you are using the code in my development repository. This code works significantly differently than the code in the instructable.

The key difference is using the Arduino Yúns WiFi and Linux processor. The communications between the controller and the Climaduino code on the Yún is also vastly different. The MQTT pub/sub protocol is used. The Yún's Linux processor runs the mqtt_bridge.py file. This reads any settings for the device. It also opens a file-based socket for the send_readings.py file to be able to set the readings on the MQTT broker.

For this to work, it must be paired with the development branch of the Coimaduino controller code. Since this is all. Dry experimental, there are bound to be some rough edges. I am glad to help you to get this up and running and am ecstatic that someone else will be using this new code.
TomL5 bbustin6 months ago

thanks a lot my friend. We try to understand the concept and idea how all connected wireless.we using all news board Yun and Pi B+; plus all the developing code. i guessed we messed up with connection since we try to hook Arduino Yun board and Raspberry Pi B+ by USB cable. and somehow DHT22 not able to collect data. Also, when we tried to add device on Django admin page, about adding informatioi of Yun Hostname and Zonenumber. i used root for hostname and .climaduino for zonename. but i believe this step maynot be right then it may affected to Pi communicates with Yun to load data? your information is so great and we should be careful since begining. Thank you very much

best regard


bbustin (author)  TomL55 months ago

Hi Tom,

First make sure that you are using the develop branch for both the Climaduino and Climaduino Controller parts of the project. The Climaduino code in develop, for instance, will not work with the master branch of the Climaduino controller. It sounds like you are not using the develop branch for the controller as zone number has been removed.

Each of those repositories had a README file as part of the develop branch that gives some initial steps for how to set everything up. I've not had a chance to polish things up much as it is still very much a work in progress. (It does work though as I am using it to control a central AC at the house for the last month.)

The steps at a high level are:

- Follow the README steps to get the Climaduino-web-controller code in the develop branch running on your Raspberry Pi and the MQTT broker set up.

- Get Arduino Yún on your WiFi network or connected through ethernet

- Get code loaded onto the Arduino AVR portion of the Arduino Yún (upload the sketch).

- Get the mqtt_bridge.py and send_readings.py components installed on the Linux part of the Arduino Yún. There are details how to do this in README file in the mqtt_yun_bridge folder.

At this point when browsing to climaduino.local, you should see a zone that was added automatically. If you click on the button, you should see the readings and settings for your climaduino.

Note: Do not give the Yún the hostname climaduino. Only the Raspberry Pi should have a hostname of climaduino. The Yún's hostname can reflect where it is or be an arbitrary name depending on your preferences.

Hope this helps. Please let me know. I'm glad to help.

TomL5 bbustin5 months ago

I got this problem since I run the command in Pi. Do you have an idea?

i just follow the same steps like you posted. I thought maybe file in develop may corrupt the work?

pi@climaduino ~/climaduino $ python manage.py syncdb

Operations to perform:

Synchronize unmigrated apps: history

Apply all migrations: admin, contenttypes, settings, auth, sessions

Synchronizing apps without migrations:

Creating tables...

Installing custom SQL...

Installing indexes...

Running migrations:

No migrations to apply.

pi@climaduino ~/climaduino $ sudo cp ~/climaduino/startup_script\ for\ Debian/climaduino-controller /etc/init.d

pi@climaduino ~/climaduino $ sudo update-rc.d climaduino-controller defaults

update-rc.d: using dependency based boot sequencing

insserv: Script climaduino-controller is broken: incomplete LSB comment.

insserv: missing `Required-Start:' entry: please add even if empty.

insserv: missing `Required-Stop:' entry: please add even if empty.

insserv: missing `Default-Start:' entry: please add even if empty.

insserv: missing `Default-Stop:' entry: please add even if empty.

insserv: Default-Start undefined, assuming empty start runlevel(s) for script `climaduino-controller'

insserv: Default-Stop undefined, assuming empty stop runlevel(s) for script `climaduino-controller'

kbarkhau16 months ago


I am having a nightmare of a time getting rrdtool to install. I am using a raspberry Pi 2 and have tried the steps in your instructable with both the latest version of wheezy with the adafruit tools installed and also with the occidentalis v0.2 distro. In both cases I am getting the following error when executing the easy_install python-rrdtool command above:

(pi)pi@raspberrypi ~ $ easy_install python-rrdtool

Searching for python-rrdtool

Reading https://pypi.python.org/simple/python-rrdtool/

/home/pi/local/lib/python2.7/site-packages/pkg_resources/__init__.py:2512: PEP440Warning: 'python (rrdtool-1.4.7)' is being parsed as a legacy, non PEP 440, version. You may find odd behavior and sort order. In particular it will be sorted as less than 0.0. It is recommend to migrate to PEP 440 compatible versions.


Best match: python-rrdtool 1.4.7

Downloading https://pypi.python.org/packages/source/p/python-...

Processing python-rrdtool-1.4.7.tar.gz

Writing /tmp/easy_install-wPVPRm/python-rrdtool-1.4.7/setup.cfg

Running python-rrdtool-1.4.7/setup.py -q bdist_egg --dist-dir /tmp/easy_install-wPVPRm/python-rrdtool-1.4.7/egg-dist-tmp-yrYogk

checking build system type... armv7l-unknown-linux-gnueabi

checking host system type... armv7l-unknown-linux-gnueabi

checking target system type... armv7l-unknown-linux-gnueabi

checking for gcc... gcc

checking for C compiler default output file name... a.out

checking whether the C compiler works... yes

checking whether we are cross compiling... no

checking for suffix of executables...

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether gcc accepts -g... yes

checking for gcc option to accept ISO C89... none needed

checking how to run the C preprocessor... gcc -E

checking for grep that handles long lines and -e... /bin/grep

checking for egrep... /bin/grep -E

checking for ANSI C header files... yes

checking for sys/types.h... yes

checking for sys/stat.h... yes

checking for stdlib.h... yes

checking for string.h... yes

checking for memory.h... yes

checking for strings.h... yes

checking for inttypes.h... yes

checking for stdint.h... yes

checking for unistd.h... yes

checking minix/config.h usability... no

checking minix/config.h presence... no

checking for minix/config.h... no

checking whether it is safe to define __EXTENSIONS__... yes

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for a thread-safe mkdir -p... /bin/mkdir -p

checking for gawk... no

checking for mawk... mawk

checking whether make sets $(MAKE)... yes

checking for style of include used by make... GNU

checking dependency style of gcc... gcc3

checking whether to enable maintainer-specific portions of Makefiles... no

Audit Compilation Environment

checking how to run the C preprocessor... gcc -E

checking for gcc... (cached) gcc

checking whether we are using the GNU C compiler... (cached) yes

checking whether gcc accepts -g... (cached) yes

checking for gcc option to accept ISO C89... (cached) none needed

checking whether gcc and cc understand -c and -o together... yes

checking for a sed that does not truncate output... /bin/sed

checking for fgrep... /bin/grep -F

checking for ld used by gcc... /usr/bin/ld

checking if the linker (/usr/bin/ld) is GNU ld... yes

checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B

checking the name lister (/usr/bin/nm -B) interface... BSD nm

checking whether ln -s works... yes

checking the maximum length of command line arguments... 1572864

checking whether the shell understands some XSI constructs... yes

checking whether the shell understands "+="... yes

checking for /usr/bin/ld option to reload object files... -r

checking for objdump... objdump

checking how to recognize dependent libraries... pass_all

checking for ar... ar

checking for strip... strip

checking for ranlib... ranlib

checking command to parse /usr/bin/nm -B output from gcc object... ok

checking for dlfcn.h... yes

checking for objdir... .libs

checking if gcc supports -fno-rtti -fno-exceptions... no

checking for gcc option to produce PIC... -fPIC -DPIC

checking if gcc PIC flag -fPIC -DPIC works... yes

checking if gcc static flag -static works... yes

checking if gcc supports -c -o file.o... yes

checking if gcc supports -c -o file.o... (cached) yes

checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes

checking whether -lc should be explicitly linked in... no

checking dynamic linker characteristics... GNU/Linux ld.so

checking how to hardcode library paths into programs... immediate

checking whether stripping libraries is possible... yes

checking if libtool supports shared libraries... yes

checking whether to build shared libraries... yes

checking whether to build static libraries... yes

checking if gcc likes the -Werror flag... yes

checking if gcc likes the -fno-strict-aliasing flag... yes

checking if gcc likes the -Wall flag... yes

checking if gcc likes the -std=gnu99 flag... yes

checking if gcc likes the -pedantic flag... yes

checking if gcc likes the -Wundef flag... yes

checking if gcc likes the -Wshadow flag... yes

checking if gcc likes the -Wpointer-arith flag... yes

checking if gcc likes the -Wcast-align flag... yes

checking if gcc likes the -Wmissing-prototypes flag... yes

checking if gcc likes the -Wmissing-declarations flag... yes

checking if gcc likes the -Wnested-externs flag... yes

checking if gcc likes the -Winline flag... yes

checking if gcc likes the -Wold-style-definition flag... yes

checking if gcc likes the -W flag... yes

Checking for Header Files

checking for ANSI C header files... (cached) yes

checking for dirent.h that defines DIR... yes

checking for library containing opendir... none required

checking langinfo.h usability... yes

checking langinfo.h presence... yes

checking for langinfo.h... yes

checking for stdint.h... (cached) yes

checking for inttypes.h... (cached) yes

checking libgen.h usability... yes

checking libgen.h presence... yes

checking for libgen.h... yes

checking features.h usability... yes

checking features.h presence... yes

checking for features.h... yes

checking for sys/stat.h... (cached) yes

checking for sys/types.h... (cached) yes

checking fcntl.h usability... yes

checking fcntl.h presence... yes

checking for fcntl.h... yes

checking fp_class.h usability... no

checking fp_class.h presence... no

checking for fp_class.h... no

checking malloc.h usability... yes

checking malloc.h presence... yes

checking for malloc.h... yes

checking for unistd.h... (cached) yes

checking ieeefp.h usability... no

checking ieeefp.h presence... no

checking for ieeefp.h... no

checking math.h usability... yes

checking math.h presence... yes

checking for math.h... yes

checking sys/times.h usability... yes

checking sys/times.h presence... yes

checking for sys/times.h... yes

checking sys/param.h usability... yes

checking sys/param.h presence... yes

checking for sys/param.h... yes

checking sys/resource.h usability... yes

checking sys/resource.h presence... yes

checking for sys/resource.h... yes

checking signal.h usability... yes

checking signal.h presence... yes

checking for signal.h... yes

checking float.h usability... yes

checking float.h presence... yes

checking for float.h... yes

checking stdio.h usability... yes

checking stdio.h presence... yes

checking for stdio.h... yes

checking for stdlib.h... (cached) yes

checking errno.h usability... yes

checking errno.h presence... yes

checking for errno.h... yes

checking for string.h... (cached) yes

checking ctype.h usability... yes

checking ctype.h presence... yes

checking for ctype.h... yes

checking for an ANSI C-conforming const... yes

checking whether time.h and sys/time.h may both be included... yes

checking whether struct tm is in sys/time.h or time.h... time.h

Test Library Functions

checking for acos... no

checking for acos in -lm... yes

checking for strftime... yes

checking for vprintf... yes

checking for _doprnt... no

checking whether byte ordering is bigendian... no

checking for nl_langinfo... yes

checking for tzset... yes

checking for round... yes

checking for rint... yes

checking for fsync... yes

checking for mbstowcs... yes

checking for opendir... yes

checking for readdir... yes

checking for chdir... yes

checking for chroot... yes

checking for getuid... yes

checking for strerror... yes

checking for snprintf... yes

checking for vsnprintf... yes

checking for vasprintf... yes

checking for fpclass... no

checking for class... no

checking for fp_class... no

checking for isnan... yes

checking for memmove... yes

checking for strchr... yes

checking for mktime... yes

checking for getrusage... yes

checking for gettimeofday... yes

checking whether strerror_r is declared... yes

checking for strerror_r... yes

checking whether strerror_r returns char *... yes

Map/Fadvis/Madvise checking

checking for fdatasync... yes

checking for fsync... (cached) yes

checking for socket... yes

checking for getaddrinfo... yes

checking sys/mman.h usability... yes

checking sys/mman.h presence... yes

checking for sys/mman.h... yes

checking for stdlib.h... (cached) yes

checking for unistd.h... (cached) yes

checking for getpagesize... yes

checking for working mmap... yes

checking for mmap... yes

checking for munmap... yes

checking for msync... yes

checking whether madvise is declared... yes

checking for madvise... yes

checking whether posix_fadvise is declared... yes

checking for posix_fadvise... yes

Libintl Processing

checking whether NLS is requested... yes

checking for msgfmt... /usr/bin/msgfmt

checking for gmsgfmt... /usr/bin/msgfmt

checking for xgettext... /usr/bin/xgettext

checking for msgmerge... /usr/bin/msgmerge

checking for ld used by GCC... /usr/bin/ld

checking if the linker (/usr/bin/ld) is GNU ld... yes

checking for shared library run path origin... done

checking for CFPreferencesCopyAppValue... no

checking for CFLocaleCopyCurrent... no

checking for GNU gettext in libc... yes

checking whether to use NLS... yes

checking where the gettext function comes from... libc

IEEE Math Checks

checking for fpclassify... no

checking for fpclassify with <math.h>... yes

checking for isinf... yes

checking whether isfinite is broken... no

checking if IEEE math works out of the box... yes

Resolve Portability Issues

checking tm_gmtoff in struct tm... yes

checking __tm_gmtoff in struct tm... no

checking if msync with MS_ASYNC updates the files mtime... yes

checking for _NL_TIME_WEEK_1STDAY... no

checking for nl_langinfo(_NL_TIME_WEEK_1STDAY) with langinfo.h... yes

checking for opterr... yes

checking for getopt_long... yes

checking if realloc can deal with NULL... yes

checking if ctime_r need special care to act posixly correct... no

checking for the pthreads library -lpthreads... no

checking whether pthreads work without any flags... no

checking whether pthreads work with -Kthread... no

checking whether pthreads work with -kthread... no

checking for the pthreads library -llthread... no

checking whether pthreads work with -pthread... yes

checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE

checking if more special flags are required for pthreads... no

checking for cc_r... gcc

checking do we need malloc/malloc.h... nope, works out of the box

checking the type of time_t... checking size of time_t... 4

time_t is 32 bit

Find 3rd-Party Libraries

checking dbi/dbi.h usability... no

checking dbi/dbi.h presence... no

checking for dbi/dbi.h... no

checking tcpd.h usability... no

checking tcpd.h presence... no

checking for tcpd.h... no

checking for cairo_font_options_create in -lcairo... yes

checking cairo.h usability... no

checking cairo.h presence... no

checking for cairo.h... no

checking for pkg-config... pkg-config

checking for cairo_font_options_create in -lcairo... yes

checking cairo.h usability... yes

checking cairo.h presence... yes

checking for cairo.h... yes

checking for cairo_svg_surface_create in -lcairo... yes

checking cairo-svg.h usability... yes

checking cairo-svg.h presence... yes

checking for cairo-svg.h... yes

checking for cairo_pdf_surface_create in -lcairo... yes

checking cairo-pdf.h usability... yes

checking cairo-pdf.h presence... yes

checking for cairo-pdf.h... yes

checking for cairo_ps_surface_create in -lcairo... yes

checking cairo-ps.h usability... yes

checking cairo-ps.h presence... yes

checking for cairo-ps.h... yes

checking for pango_cairo_context_set_font_options in -lpangocairo-1.0... yes

checking pango/pango.h usability... no

checking pango/pango.h presence... no

checking for pango/pango.h... no

checking for pkg-config... (cached) pkg-config

checking for pango_cairo_context_set_font_options in -lpangocairo-1.0... yes

checking pango/pango.h usability... yes

checking pango/pango.h presence... yes

checking for pango/pango.h... yes

checking for glib_check_version in -lglib-2.0... yes

checking glib.h usability... yes

checking glib.h presence... yes

checking for glib.h... yes

checking for xmlParseFile in -lxml2... yes

checking libxml/parser.h usability... yes

checking libxml/parser.h presence... yes

checking for libxml/parser.h... yes

Prep for Building Language Bindings

checking for perl... /usr/bin/perl

checking for pod2man... /usr/bin/pod2man

checking for pod2html... /usr/bin/pod2html

checking for the perl version you are running... 5.14.2

checking for the C compiler perl wants to use to build its modules... cc

checking for cc... /usr/bin/cc

checking Perl Modules to build... perl_piped perl_shared

checking for ruby... no

checking if ruby modules can be built... No .. Ruby not found or disabled

checking for lua... /usr/bin/lua

checking for lua >= 5.0... 5.1 found

checking lua51/lua.h usability... no

checking lua51/lua.h presence... no

checking for lua51/lua.h... no

checking lua5.1/lua.h usability... no

checking lua5.1/lua.h presence... no

checking for lua5.1/lua.h... no

checking lua.h usability... no

checking lua.h presence... no

checking for lua.h... no

checking for library containing lua_call... no

Lua headers found but not the libraries! Please reinstall the dev packages for Lua 5.1

checking for tclConfig.sh in /usr/lib... no

checking for tclConfig.sh in /usr/lib64... no

checking for tclConfig.sh in /usr/local/lib... no

checking for tclConfig.sh in /usr/lib/tcl8.4... no

checking for tclConfig.sh in /usr/lib/tcl8.3... no

configure: WARNING: tclConfig.sh not found - Tcl interface will not be built

checking for a Python interpreter with version >= 2.3... python

checking for python... /home/pi/bin/python

checking for python version... 2.7

checking for python platform... linux2

checking for python script directory... ${prefix}/lib/python2.7/site-packages

checking for python extension module directory... ${exec_prefix}/lib/python2.7/site-packages

checking for headers required to compile python extensions... found

checking for gnroff... no

checking for nroff... /usr/bin/nroff

checking for groff... /usr/bin/groff

Apply Configuration Information

configure: creating ./config.status

config.status: creating examples/shared-demo.pl

config.status: creating examples/piped-demo.pl

config.status: creating examples/stripes.pl

config.status: creating examples/bigtops.pl

config.status: creating examples/minmax.pl

config.status: creating examples/4charts.pl

config.status: creating examples/perftest.pl

config.status: creating examples/Makefile

config.status: creating examples/rrdcached/Makefile

config.status: creating doc/Makefile

config.status: creating po/Makefile.in

config.status: creating src/Makefile

config.status: creating src/librrd.sym.in

config.status: creating src/librrd.pc

config.status: creating bindings/Makefile

config.status: creating bindings/tcl/Makefile

config.status: creating bindings/tcl/ifOctets.tcl

config.status: creating Makefile

config.status: creating bindings/lua/Makefile

config.status: creating rrd_config.h

config.status: executing depfiles commands

config.status: executing libtool commands

config.status: executing po-directories commands

config.status: creating po/POTFILES

config.status: creating po/Makefile

config.status: executing default commands

checking in... and out again

ordering CD from http://tobi.oetiker.ch/wish .... just kidding ;-)


Config is DONE!

With MMAP IO: yes

Build rrd_getopt: no

Build rrd_graph: yes

Static programs: no

Perl Modules: perl_piped perl_shared

Perl Binary: /usr/bin/perl

Perl Version: 5.14.2

Perl Options: PREFIX=/opt/rrdtool-1.4.7 LIB=/opt/rrdtool-1.4.7/lib/perl/5.14.2

Ruby Modules:

Ruby Binary: no

Ruby Options: sitedir=/opt/rrdtool-1.4.7/lib/ruby

Build Lua Bindings: no

Build Tcl Bindings: no

Build Python Bindings: yes

Build rrdcgi: yes

Build librrd MT: yes

Use gettext: yes

With libDBI: no

With libwrap: no

Libraries: -lxml2 -lglib-2.0 -lcairo -lcairo -lcairo -lm -lcairo -lpng12 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0

Type 'make' to compile the software and use 'make install' to

install everything to: /opt/rrdtool-1.4.7.

... that wishlist is NO JOKE. If you find RRDtool useful

make me happy. Go to http://tobi.oetiker.ch/wish and

place an order.

-- Tobi Oetiker <tobi@oetiker.ch>


In file included from /usr/include/python2.7/Python.h:8:0,

from rrdtool-1.4.7/bindings/python/rrdtoolmodule.c:44:

/usr/include/python2.7/pyconfig.h:1161:0: warning: "_POSIX_C_SOURCE" redefined [enabled by default]

/usr/include/features.h:163:0: note: this is the location of the previous definition

/usr/include/python2.7/pyconfig.h:1183:0: warning: "_XOPEN_SOURCE" redefined [enabled by default]

/usr/include/features.h:165:0: note: this is the location of the previous definition

/usr/bin/ld: cannot find -lrrd

collect2: ld returned 1 exit status

error: Setup script exited with error: command 'gcc' failed with exit status 1

(pi)pi@raspberrypi ~ $


I have tried loading the apt-get install libpango1.0-dev libxml2-dev as noted in the comments, but it did not help.

Any help in what I am doing wrong and how to fix would be greatly appreciated


bbustin (author)  kbarkhau16 months ago

Hi Keith,

Can you try running the following and see if it helps?

sudo apt-get install -y build-essential python-dev python-setuptools libcairo2-dev libpango1.0-dev libxml2-dev rrdtool librrd-dev

16ThGoD7 months ago

sir what is climaduino sketch?
in step 4?

BryanS59 months ago

Bbustin I have fixed some code up to work on arduino mega

I was also going to add code for a heater relay instead of JUST AC

at least how I read it is that you only have AC toggle otherwise I would assume you need 2x relay outputs and also a setup for heat rather than Just cold :D Some of us live in a cold climate and want efficient heating rather than cooling :D or actually I planned on both

BryanS5 BryanS59 months ago

I also updated code to work with RGB lcd from adafruit and give feedback via colors based on wether the climaduino was heating or cooling

Now to figure out how to get code inserted for it to my heating / cooling using a 2nd relay :D

LeeJ1 BryanS58 months ago

Could you share the code for heater only? Or give me a hint on what to change? I am going to use this to run a pellet stove in Oregon, so I won't need any of the cooling function

BryanS59 months ago

apt-get install libpango1.0-dev libxml2-dev
For people getting problems with python-rrdtool setup

trane.depriest10 months ago

I would love to use this to control a Trane Electric Furnace and AC Compressor combo. Any thoughts or advice before I dive in?

This looks brilliant - exactly what I want to do. The only addition I need is hot water control. Do you think the arduino is capable of controlling that as well?

Thanks, Duncan

afalzon1 year ago
i am stuck @ step six - setup the controller unit.

i Run:
pi@raspberrypi ~/climaduino $ python manage.py syncdb
And Get:

Traceback (most recent call last):
File "manage.py", line 8, in
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

any thoughts?
I just realised that django was not installing it says i don't have enough space. :(

I will get myself another SD card and try again.

bbustin (author)  afalzon1 year ago
Hi afalzon. Let us know how it works when you get the bigger SD card. Can't wait to have another person running this so we can work together to improve it.
Hi bbustin,
I have now tried a 16 gig card and im getting the same issue. any thoughts?
bbustin (author)  afalzon1 year ago
Hi afalzon, try running:
sudo raspi-config

then choose to auto-expand the installation.

If this works, let me know and I'll ad it into the steps to make sure no one else has the same problem.

hi bbustin, i had already done that.

i made a new temp folder on my main partition and that fixed that issue. i still cant get it to work though.

i have a feeling the versions of everything have changed since these instructions were written and therefore some things may need different steps

bbustin (author)  afalzon1 year ago

I found the following steps here http://www.raspberrypi.org/forums/viewtopic.php?f=.... Maybe they would help?

mkdir tmp
export TMPDIR=/home/pi/tmp

(I know this response is very late, but I want to put it here to help others as well.)

1-40 of 72Next »