Health Spa

Charly's Column – XMLStarlet

Article from Issue 199/2017
Author(s):

Charly and XML have never been best friends. However, because it was vital for him to have an excellent climate indoors, he plucked up his courage and considered XMLStarlet.

A few smart home components from the HomeMatic system are permanent guests in my bathroom – they are for controlling the temperature in the room. A radiator thermostat and three sensors detect whether doors and windows are open. I use a central unit called CCU2 to set the climate I want and in which scenario. Their web interface seriously tests my patience. If, for example, I name a window contact Bathroom_Window_North instead of NEQ1651969 – because that's what it's called – I can't rely on the web interface to use the new name in all views (Figure 1).

Figure 1: Window with a poor view: CCU2 cannot remember the name of window sensors.

The issue of security is another low point: The user interface is not password protected by default. I may be able to set one, but because CCU2 does not speak HTTPS, the password would fall into the clutches of the next sniffer anyway. Access to the script engine on port 8181 is also completely insecure. Nevertheless, the benefit is great because it allows me to use HTTP requests to read out the status of HomeMatic components and even set values.

Given this information, however, it should be clear that nobody is allowed to simply put the CCU2 onto the Internet via port forwarding, at least not anyone who doesn't want to invite all hackers to play poltergeist in their own home. Anyone wanting to view their home heating system from Jamaica will need a good VPN.

XML Instead of a GUI

So, I have a tool at hand for operating the CCU2 without its web interface. To receive the status of a window contact, I type the following into the console:

wget http://10.0.0.231:/x.exe?Response=dom.GetObject(%27BidCos-RF.NEQ1651559:1.STATE%27).Value()

The CCU2 responds very quickly with (brrr!) XML:

<xml>
  <exec>/x.exe</exec>
  <sessionId/>
  <httpUserAgent>
    User Agent: wget
  </httpUserAgent>
  <Response>true</Response>
</xml>

I will suppress my XML aversion to help machines communicate with other machines – because that's just what XML is designed for. The true between the Response tags means that the window is closed. I can also retrieve the thermostat using similar commands and then set new temperature values. This means I can set up my own CCU2 GUI-free control using a few Bash scripts. Now I'm still missing an XML parser for the command line – with which I can finally angle for the XMLStarlet [1].

I previously had the output of the wget command above written to the bathwindow.xml file. In this way,

xmlstarlet sel -T -t -m xml -v Response $WDIR/bathwindow.xml

I now get the value between the Response tags. Fancy a ride through the hell of parameters? Just read the 17-page (!) PDF document [2].

Charly Kühnast

Charly Kühnast manages Unix systems in the data center in the Lower Rhine region of Germany. His responsibilities include ensuring the security and availability of firewalls and the DMZ.

Buy this article as PDF

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy Linux Magazine

SINGLE ISSUES
 
SUBSCRIPTIONS
 
TABLET & SMARTPHONE APPS
Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

  • The sys admin's daily grind: colorls

    The first time in our lives we got to a black-and-white Linux or Unix shell, most of us probably typed ls first. In a mixture of nostalgia and the knowledge that life is colorful, columnist Charly Kühnast plays a colorful trump card with colorls.

  • The sysadmin's daily grind: Pi-hole

    A strange rule seems to dictate that the most useless products and services have the most annoying online advertising. Columnist Charly blocks the garish advertising for all computers on his network centrally with the Pi-hole tool, which is not only for Raspberry Pi devices.

  • Charly's Column: Corkscrew

    Sys admin columnist Charly never takes a vacation from the Internet. A beach bar with WiFi is quickly found, but it runs a forced proxy, which thinks that the SSH port (22) is in league with the devil and blocks the connection. Time to drill a tunnel.

  • The sys admin's daily grind: systemd-analyze

    In sys admin columnist Charly's case, no fumbled system startup goes undetected. This was already the case with SysVinit and has not changed with systemd. In terms of the his analysis tools, no stopwatch goes unturned.

  • Charly's Column – Mi Flora

    Columnist Charly Kühnast recently attached Mi Flora humidity sensors to his potted plants. At first, they only transmitted junk on Bluetooth, but armed with the right tools and a Rasp Pi, Charly now reaps a rich harvest of data.

comments powered by Disqus
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters

Support Our Work

Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.

Learn More

News