Subscribe: Advogato blog for DV
Added By: Feedage Forager Feedage Grade B rated
Language: English
arduino  code  control  didn  fedora  good  led  libvirt  libxml  lot  new  project  release  remote  support  time  year 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: Advogato blog for DV

Advogato blog for DV

Advogato blog for DV

Published: Fri, 28 Oct 2016 06:36:35 GMT


29 Nov 2012

Thu, 29 Nov 2012 11:14:52 GMT

Wandering in embedded land: part 2, Arduino turned remote controlNow with the Midea AC remote control being mostly deciphered, the next step is to emulate the remote, with an arduino since it's the system I use for that embedded greenhouse control. While waiting for my mail ordered IR LED (I didn't want to solder off one from my existing AC controllers), I started doing a bit of code and looking at the integration problems.The hardware sideOne of the challenge is that the Arduino system is already heavy packed, basically I use all the digital Input/Output except 5 (and 0 and 1 which are hooked to the serial support), and 2 of the 6 analog inputs, as the card already drives 2 SHT1x temp/humidity sensors, 2 light sensors, an home made 8 way relay board, and a small LCD display, there isn't much room left physically or in memory for more wires or code ! Fortunately driving a LED requires minimal resources, the schematic is trivial:I actually used a 220 Ohms resistance since I didn't had a 100 Ohms one, the only effect is how far the signal may be received, really not a problem in my case. Also I initially hooked it on pin 5 which shouldn't had been a problem, and that's the free slot I have available on the ArduinoThe software sideMy thinking was: well I just need to recreate the same set of light patterns to emulate the remote control and that's done, sounds fairly simple and I started coding royines which would switch the led on or off for 1T, 3T and 4T durations. Thus the core of the code was like: void emit_midea_start(void) { ir_down(T_8); ir_up(T_8); } void emit_midea_end(void) { ir_down(T_1); ir_up(T_8); } void emit_midea_byte(byte b) { int i; byte cur = b; for (i = 0;i < 8;i++) { ir_down(T_1); if (cur & 1) ir_up(T_3); else ir_up(T_1); cur >>= 1; } cur = ~b; for (i = 0;i < 8;i++) { ir_down(T_1); if (cur & 1) ir_up(T_3); else ir_up(T_1); cur >>= 1; } } where ir_up() and ir_down() were respectively activating or deactivating the pin 5 set as OUTPUT for the given duration defined as macros.Playing with 2 arduinos simultaneouslyOf course to test my code the simplest was to set up the new module on another arduino positioned in front of the Arduino with the IR receptor and running the same code as used for decoding the protocol.The nice thing is that you can hook up the arduinos on 2 different USB cables connected to the same machine, they will report as ttyUSB0 and ttyUSB1 and once you have looked at the serial output you can find which is which. The only cumbersome part is having to select the serial port to the other one when you want to switch box either to monitor the output or to upload a new ersion of the code, so far things are rather easy.Except it just didn't worked !!!Not the arduino, I actually replaced the IR LED by a normal one from time to time to verify it was firing for a fraction of a second when emitting the sequence, no the problem was that the IR receiver was detecting transitions but none of the expected duration, or order, nothing I could really consider a mapping of what my code was sending. So I tweaked the emitting code over and over rewriting the timing routines in 3 different ways, trying to disable interrupts, etc... Nothing worked!Clearly there was something I hadn't understood ... and I started searching on google and reading, first about timing issues on the Arduino but things ought to be correct there, and then on existing remote control code for Arduino and others. Then I hit Ken Shirriff's blog on his IR library for the Arduino and realized that the IR LED and the IR Receiver don't operate at the same level. The LED really can just be switched on or off, but the IR Receiver is calibrated for a given frequency (38 KHz in this case) and will not report if it gets the IR light, but report if it gets the 38 KHz pulse carried by the IR light. In a nutshell the IR receiver was decoding my analo[...]

26 Nov 2012

Mon, 26 Nov 2012 10:58:54 GMT

Wandering in embedded land: part 1, Midea 美的 aircon protocolI have been a user of Arduino's for a few years now, I use them to control my greenhouse (I grow orchids). This mean collecting data for various parameters (temperature, hygrometry, light) and actionning a collection of devices in reaction (fan, misting pump, fogging machine, a heater). The control part is actually done by an NSLU2 which also collects the data, export them as graph on the internet and allows me to manually jump in and take action if needed even if I'm far away using an ssh connection.This setup has been working well for me for a few years but since our move to China I have had an airon installed in the greenhouse like in other parts of the home. And that's where I have a problem, this AC of brand Midea (very common home appliance brand in China) can only be controlled though a remote control. And until now that meant I had no way to automtate heating or cooling, which is perfectly unreasonnable :-)After some googling the most useful reference I found about those is the Tom's Site page on building a remote adapter for those. It explained most parts of the protocol but not all of them, basically he stopped at the core of the interface but didn't went into details, for example didn't explained the commands encoding. The 3 things I really need are:Start cooling to a given temperatureStart heating to a given temperatureStop the ACI don't really need full fan speed control, low speed is quite sufficient for the greenhouse.Restarting the Arduino developmentI hadn't touched the Arduino development environment for the last few years, and I remember it being a bit painful to set up at the time. With Fedora 17, things have changed, a simpleyum install arduinoand launching the arduino tool worked the first time, actually it asked me the permission to tweak groups to allow me as the current user to talk through the USB serial line to the Arduino. Once done, and logging in again everything worked perfectly, congratulation to the packagers, well done ! The only sowtware annoyance is that is often take a dozen seconds between the time an arduino is connnected or powered and when it appears in the ttyUSB? serial ports options in the UI, but that's probably not arduino's fault.The arduino environment didn't really change in all those years, the two notable exception is the very long list of different boards supoorted now, and the fact that arduino code files are renamed from .pde to .ino !Learning about the data emitted The first thing needed was to double check the result from Tom with our own hardware, then learn about the protocol to be able to construct the commands above. To do this I hooked a IR receptor to the Arduino on digital pin 3, the graphic below show the logic, it's very simple:Then I loaded a modified (for IRpin 3) version of Walter Anderson's IRanalyzer.pde onto the Arduino and started firing the aircon remote control at the receiver and looked at the result: total garbage ! Whatever the key pressed the output had no structure and actually looked as random as input without any key being pressed :-\It took me a couple of hours of tweaking to find out that the metal enclosure of the receiver had to be grounded too, the GRD pin wasn't connected, and not doing so led to random result !Once that fixed, the data read by the Arduino started to make some sense and it was looking like the protocol was indeed the same as the one described in Tom's site.The key to the understanding of how the remote work is that it encodes a digital input (3 Bytes for Midea AC protocol) as a set of 0 and 1 patterns each of them being defined by a 0 analogic duration followed by a short anlogic pulse at 38KHz to encode 0, or a long analogic pulse at 38KHz to encode 1:Each T delay correspond to 21 pulses on a 38KHz signal, this is then a variable lenght encodingAs I was making progresses on the recognition of the patterns sent by the aircon I was modifying the program to give a more synthetic view of the resulting received frames, you can use m[...]

28 May 2012

Mon, 28 May 2012 14:39:34 GMT


Finally ! Last release was 18 months ago, and after a good week of testing the new libxml2 is out. I tried to process all pending patches fom GNOME bugzilla, most of them went in, after more or less massaging :) . There is also a new feature, transparent support for lzma compression, which is quite efficient in terms of squeezing the input without taking too much cycles compressing (and decompressing). Still this is mostly a bugfix release, but with enough changes that it is worth bumping the middle version. Get it from

libvirt 0.9.12

Libvirt flow of releases continues, the current version is 0.9.12 and I try to keep a release cycle close to one per month. I extracted the following graph of commits activity using gitstats:


The project had a peak of activity one year ago and this is slowly decreasing now, maybe the poject finally reached the main goals that contributors were looking for and while there is still a number of things left to do we are finally entering the stabilization phase of the project. Hard to tell, but maybe I will start to decrease the rate of the release, but that need discussion on the list first :-)

LinuxCon Japan

I have been invited t talk again at LinuxCon Japan next week. Last year was very interesting, with good discussions in many areas, and I hope this will be the case again this year. It is also good to meet with some users face-to-face as oral communication is so different from the way we proceed when using email. For me this is also a way to get different perspectives and look at the project and the whole ecosystem to try to get a more complete picture.

Fedora 17

I usually update my systems only every other Fedora release but I think this time I'm gonna upgrade earlier to play with OpenVSwitch which sounds like a good way to solve a number of annoyances with networking setups :-)

21 Nov 2011

Mon, 21 Nov 2011 02:49:19 GMT

Whoops: water resilient Linux

I forgot my motorola android phone in my pocket while sitting in the hot spring pool yesterday, I quickly realized
though, rushed it out of the water, disassembled, removed the battery in a hurry. Funilly the display did stay on as "normal" but the system didn't like this. Dried it and kept the pieces overnight on the UPS to dry out thoroughly, and replugged SIM and battery this morning ... working :-) . Except for that incident the hot spring trip was great, and Cheng definitely loves playing in the water !


In the category of stable software, libxml2 is relatively quiet though I need to do a release incorporating various XPath bugs. I'm quite slow at the maintenance those days (which I think is fine considering the project is really in maintenance mode), but I should get that release out ! Someone kick me :-)


In contrast libvirt development is *not* slowing down as I was expected. We still roll a release a month, each incorporating 300+ patches, and the trend is that the patch number is still increasing, leading to more volume on-list. I was naively thinking that since most APIs were done, the volume would start to decrease around one year ago, but nope, people still want more features, better hypervisors support, etc... and that's just fine :-)


One of the new library project I am looking at now is libStorageMgmt the goal is to provide management APIs for those external storages arrays like SANs. Right know they each have their own specific ways to manage partitionning, provisionning, etc... and we hope to be able to improve that, but it will take a while. The project is starting and currently looking at design options, if that field interrest you, get on the list and provide some feedback, it may be more useful to you when it gets usable :-)

15 Apr 2010

Thu, 15 Apr 2010 09:31:25 GMT

Ouch, it seems I didn't wrote any blog entry for nearly 2 years, since our wedding. Well I would say that I have been fairly busy :-) !

Baby Cheng 程

Our son is born end of last august, so obviously this tends to keep the parents busy, but it's such a pleasure too ! (image)

libvirt project

this has been a wild ride ! The project has grown a lot, in community and contributor size, as well as code and features during the last couple of years. It acquired support for most well known virtualization hypervisors (QEmu/KVM, Xen, ESX, VitualBox, ...) the only notable exception being Microsoft Hyper-V I think. Our latest release is 0.8.0 so we are not at 1.0 yet, but we are really getting closer, for example this release now adds snapshotting support which was a big feature request.

About updates to Fedora

There was a discussion last month about forbidding direct built to the stable branches, and I really think this makes sense, except for security erratas, one really should not push directly an updated build onto the users without some testing. But on the other hand we entered beta on Fedora 13 and apparently it's too late to push libvirt latest release and features, meaning users who don't try to update either via the virt-preview special repository or by rebuilding from the source rpm, will see libvirt features when Fedora 14 is being released i.e around the end of the year. I see people bouncing between both extreme of the features vs. stability tradeoff, and I wonder if there isn't a better way than building absolute rules. Maybe a general profile per machine where the user indicates whether he want updates, just bug fixes or just security errata, and let him do the picking. This would require some policy from package builders, and some changes at the repo level I guess, but having the user ultimately in control might be worth it.

13 Jun 2008

Fri, 13 Jun 2008 13:36:30 GMT

A new release: libvirt-0.4.3

After two months a lot of patches had accumulated, including a lot of improvements for Xenner and Linux container support. But this release brings a massive set of code cleanup, and just looking at the patches there there is a lot of obscure case failures which should now be properly handled (or at least better handled, like out of memory situations). I'm pushing testing updates for F-8 and F-9 if you have time and use virtualisation please review them, thanks !

A new name ?

I got married to Miss Wei LI last saturday, it was kept a simple family event with just a few close friends, everything went well except for a bit of rain ! For the name I wouldn't mind being called Mr Li, but it's probably not very practical at this point (ah and good luck getting the domain, and I guess hijacking would not be well accepted either ;-)

A very simple picture, people interested for more should know where to look for already. Oh it also made me fight with the Panasonic HDC-SD9 'new' MPEG-4 output, to get videos to render properly on that other OS, I didn't expect to learn so much about video format so quickly. I will post recipe and scripts later.


10 Apr 2008

Thu, 10 Apr 2008 09:57:35 GMT


I pushed a bunch of releases on Tuesday, trying to catch the Fedora-9 train (I nearly missed it, it led to a not so fun curl_is_failing_to_upload debug session which led to nss3 for firefox3 is not compatible with nss3 for fedora8 curl), thanks to everybody who helped catch that train !

The releases are mostly bugfixes, libvirt-0.4.2 leading the pack, but libxml2-2.6.23 has a lot of fixes too thanks to various people reporting bug and giving patches, notably the Huawei team. Libxslt-1.1.23 includes the dozen or so fixes since last summer.


Clearly libxml2 and libxslt are in maintance mode, the focus is on libvirt, maybe I will just add support for the latest Proposed Recommendation of XML-1.0 in libxml2 before the Summer.

For libvirt, clearly we need to extend the number of hypervisor supported, maybe update and clean up the OpenVZ support too. IBM is actively contributing the Linux Container driver, I just commited a second set of patches today, you can expect good support in Fedora 10 I guess. On the high end side Sun just posted the patches for the lDOM virtualization on their Niagara based machines, lot of patch reviews those days. I also want to get a complete set of bindings for Java integrated, and now that Fedora java packaging guidelines are out, this is a good opportunity to add this.

History meme

that one is interesting, here is my contribution, as you can see I'm an old fashionned old fart, main workstation at home:

paphio:~ -> history | awk '{a[$2]++ } END{for(i in
a){print a[i] " " i}}'|sort -rn|head
319 vi
257 ssh
255 cd
156 cvs
130 make
125 ls
79 svn
60 scp
48 su
43 ping
paphio:~ ->

and on my second workstation in Annemasse:

wei:~ -> history | awk '{a[$2]++ } END{for(i in
a){print a[i] " " i}}'|sort -rn|head
362 vi
263 cd
262 make
136 cvs
115 svn
105 ssh
78 ls
67 scp
40 xmllint
38 grep
wei:~ ->

5 Feb 2008

Tue, 5 Feb 2008 11:13:26 GMT

Happy new Year

yeah it's either really late or a bit too early for Chinese New year, proof that I should blog more often !


I have been away for the last month and a half, first vacation in China, and then in Paris for Solution Linux expo. As a result an awful lot of mail piled up in various folders that I didn't really had time to process, I am slowly trying to go though them, so if you get replies from a mail in November that's normal, or if you didn't get a reply, it's probably a good idea to ask again !

libvirt and Co.

libvirt development is progressing fast thanks to DanB, Rich, Jim and the many people porting, testing and using it. I really hope we will soon have easy support for most platform - including Windows and OS-X - at least as a client to remotely access the virtualization servers, Rich did most of the work. The development of the CIM provider seems to be progressing nicely thanks to DanS and the IBM'ers :-). During last week Solution Linux i got asked a few times about P2V tools i.e. tools allowing to automatically save the state of a server to allow to start it as a virtualized domain, Rich just released virt-p2v 0.9.1, it is still experimental, what it needs now is a wider range of testing to find and remove limitations, give it a try and provide feedback, thanks !

For libvirt core we still have a number of pending extensions, like support for new hypervisors, adding APIs for storage management which have been worked on by DanB, we also need to finalize a good XML scheme for 'partition' based virtualization, probably update OpenVZ, and add sound and more USB support. I will post on the list soon to try to clarify the roadmap, much work ahead !

Solution Linux

SL 08 was last week, it's the Linux event of the year where I'm sure to go, it was good seeing people around the Fedora and Gnome booth, and of course Red Hat one. My presentation on virtualization went well, even if it was more than 2 hour long, the PDF is available and a lot of people seems to have fetched it already, I assume it's a positive feedback from the audience :-)


I was for a month in China, what a blast! It's impossible to try to describe in just a few lines, but we went from the very cold Dalian and Beijing to tropical Xishuanbanna, most of the time within the chinese family and environment, picking only a few selected tourist spot. Things like Shanghai museum, the Great Wall or the Forbidden city are definitely must-go, but to me the most amazing was to stay and live with the chinese inside the family. The cultural gap is huge, there is so much to learn, too bad mandarin is so hard to an occidental brain (and ears), very challenging, but also very fun and enjoyable !

29 Jul 2007

Sun, 29 Jul 2007 08:33:01 GMT

coral bleach

ncm, I think this may be an error of interpretation, the coral turns white when it dies, I mean when the organism dies. They form a symbiosis with alguaes and those give the color, white coral appears when the animal dies, you just have the skeletton left. White coral (with a few exceptions which are naturally white) is just like the bones left from a dead animal, it may result from increased acidity of water, but also from any other deadly condition. For example when overheating, if water temp reaches around 42 degrees, the coral rejects the alguae then dies, it can be quite dramatic because suddenly very large areas whithen suddenly, it's all dead and will take maybe half a century to get back in proper shape :-(

libvirt progresses

libvirt development progresses rapidly, as the traffic on the list can testify, we now have native secure remote operations, and there is ongoing work to add OpenVZ support. I hope to increase coverage of more virtualization engine, so far it looks good, we don't seems to have serious API design problems.


I made a new release 0.1.9 last week with some bug fixes and portability improvements.

19 Jun 2007

Tue, 19 Jun 2007 16:08:12 GMT

One year in review

I didn't blogged for a year precisely. No I didn't hide in a hole or something but I just didn't really feel the need. I still did a few things:

  • the libvirt project is my main work item, 15 releases in the last year, now supports QEmu and KVM, many contributors and well people are using it, so that's good.
  • the libxml2 and libxslt libraries have seen their development slowing down, partly because they are mature enough, partly because I have less time, and Kasimier one of the main contributor lost his job and left the project. But Bill is still around and helps a lot !
  • travelling, I had the opportunity to travel for work and also for vacations, went to Singapore twice, also Malaysia, had some fantastic time in Borneo, visited Bangkok, but didn't like Manilla too much. Also spent some vacations in Costa Rica, and went to USA and Canada for work. I really enjoy going to Asia and meet people there.
  • I am getting crazy about orchids, my collection is growing fast, maybe a bit too fast, but I'm rewarded by fantastic flowers, and I'm trying more and more to travel to places where I can see them growing in their natural habitat, unfortunately they are seriously endangered, and it can be fairly hard to still find them in the wild.
  • I also went to badminton training again this year but competition is really getting a bit too hard, and my body disagrees at time, I think I will slow this down a bit next year.

Overall quite a bit happened but no revolution, the most scary thing is that time flies faster and faster, so no promise about increase of blogging frequency !