Posts

Fun with SteelCase RoomWizard II

On vient de déménager dans un nouveau bureau où tout le mobilier est fourni par SteelCase, une compagnie qui se spécialise dans le mobilier d’entreprise. Une des nombreuses nouveautés: des RoomWizard pour chaque salle de rencontre. Il s’agit d’un appareil qui gère la disponibilité des salles en temps réel.

Officiellement, nous avons trois façons de réserver une salle:

  1. Utiliser le site web de réservation de salle prévu à cet effet
  2. Communiquer avec la réception
  3. Utiliser l’appareil directement (maximum de 2h)

Officieusement, il existe une quatrième façon: les appareils ont des adresses IP accessibles du même réseau que les employés.

Comment trouver l’adresse IP d’un RoomWizard? Le bouton “Details” sur l’écran.

Interface web

En effet, les appareils exposent une jolie interface web qui permet de visualiser l’occupation de toutes les salles.

Aucun mot de passe n’est requis pour l’accès en lecture seule, mais il existe un panneau d’administration accessible en ajoutant /admin/ à l’URL. Intéressant.

L’appareil effectue ses opérations avec le serveur du système directement dans le navigateur du client en envoyant un POST à un API exposé par l’appareil.

Il n’est pas possible de créer, modifier ou annuler des réservations avec l’interface graphique ou web. Mais ça l’est en communiquant directement avec l’API

On sait ce qui arrive quand on expose des services qui n’ont pas besoin d’authentification.

Communiquer directement avec l’API

Une combinaison de rétro-ingénierie, de google-fu et d’essais aveugles m’a permis de tester avec succès les appels suivants:

get_bookings

Retourne les réservations d’une salle pour une période de temps donnée.

Paramètredescriptionnotes
room_idID de la salleOptionnel. La salle par défaut est celle à qui on envoie la requête
range_start_date range_start_timeDébut de la période de temps pour laquelle on veut avoir les réservations.Format: YYYYMMDD et HHMMSS
range_end_date range_end_timeFin de la période de temps pour laquelle on veut avoir les réservations.Format: YYYYMMDD et HHMMSS

Exemple

http://rwdevice/Connector?command=get_bookings&format=json&range_start_date=20140114&range_start_time=080000&range_end_date=20140114&range_end_time=170000

Réponse du serveur

add_booking

Ajoute une réservation au système. Cet appel permet de contourner la limite maximale de 2h par réservation.

Paramètredescriptionnotes
room_idID de la salleOptionnel. La salle par défaut est celle à qui on envoie la requête
start_date start_timeDate et heure du début de la réservationFormat: YYYYMMDD et HHMMSS
end_date end_timeDate et heure de la fin de la réservation.Format: YYYYMMDD et HHMMSS
purposeRaison de la réservationCe texte sera affiché sur l’appareil

Exemple

http://rwdevice/Connector?command=add_booking&start_date=20140114&start_time=080000&end_date=20140114&end_time=170000&purpose=HACK%20THE%20PLANET

Réponse du serveur

edit_booking

J’imagine que ça sert normalement à modifier les réservations, mais j’ai seulement été capable de m’en servir pour supprimer une réservation.

Paramètredescriptionnotes
room_idID de la salleOptionnel. La salle par défaut est celle à qui on envoie la requête
booking_idID de la réservation qu’on veut modifier.Cet identifiant est retourné par get_bookings.
operationCode d’opérationC = Cancel

Exemple

http://rwdevice/Connector?command=edit_booking& booking_id=2776708&operation=C

Réponse du serveur

Bonus: La liste de tous les appareils RoomWizard du réseau

L’appareil expose également une méthode qui retourne tous les autres RoomWizard du même groupe. Utile pour avoir l’adresse IP de tous les appareils de l’étage!

http://rwdevice/getGroupTimeLineJSON.action?date=20140114

Mot de la fin

J’espère qu’il s’agit ici d’un problème de configuration mais j’en doute. SteelCase ne devrait tout simplement pas utiliser le navigateur du client pour faire ses opérations et tout faire côté serveur.

Entre temps, je ne devrais pas non plus avoir accès à ces appareils à partir du réseau des employés. Les RoomWizard devraient au moins avoir leur propre VLAN isolé, tout comme les téléphones IP et les photocopieurs.

Je ne suis pas le premier qui s’intéresse à ces choses.

Je suis convaincu que quelque part, une réceptionniste est en train de devenir folle parce que quelqu’un s’amuse à faire disparaitre toutes les réservations de l’étage aléatoirement sans raison apparente ou en faisant afficher du texte douteux sur les appareils.

Maintenant que vous savez, ne le faites pas et gardez ça en tête lors de votre prochain déménagement.

Home Server Adventure

While servers are at the center of most businesses, there is also one a at the center of our digital lifestyle. A server that can store an ungodly amount of data, automatically backup all the PCs in the house, allow remote access to our files, play any kind of video file, hook up in the television, play video games, stream video files over the web to our mobile devices and make coffee (well, maybe not the latter).

Building and operating such a complex system is an adventure.

I compared solutions such as Drobo (expensive, missing features), Unix-based OS (complicated) and pre-built WHS machines (not scalable). In the end, only a custom WHS PC had the features, ease of use and scalability I wanted in a server.

Geek porn

Hardware

  • Case: Fractal Design Define R3 (a cool, silent and classy-looking case with plenty of room for hard drives and fans)
  • Motherboard: ASUS P8H67-M PRO (built-in HDMI output)
  • CPU: Intel Core i3 2100 3.1GHZ Sandy Bridge 3MB (enough for 1080p encoding)
  • RAM: Corsair 1X4GB DDR3-1333
  • Power: Coolermaster Extreme Power Plus 500W
  • Additional SATA Controller

I already had 8 hard drives totalling 12 TB worth of storage.

OS: Windows Home Server

WHS is really a file server at its core. The users, folders, permissions, backups and remote access components are all accessible from a nice dashboard that’s available via an application that you install on your laptop or desktop PCs.

That same client will handle the backup process for you. On the server side, you specify when you want the backups to be done, and it’ll turn on, perform a differential backup and turn off the machines every night. If you lose something, you can restore files individually or do a full machine restore. The machine restore is done by booting on a USB stick that you create through the dashboard. I’ve actually done it twice and it worked better than I expected.

The server can be configured to send you email alerts when there’s something wrong or needs your attention. Those alerts can range from “this machine is late on its updates” to “3 of my hard drives are melting” and everything in between. Of course, you can choose to ignore some of the alerts. To know I’ll be notified when something breaks puts my mind at ease.

stay-at-home-servers3

Additional software

While the OS already does all the filesharing heavy lifting, there is additional software required in order to transform this file server into a media server.

First and foremost, XBMC. This free, open-source, multi-platform and extensible media center application is the choice of geeks and enthusiasts since 2003. Boxee is based on it. It was the only logical choice.

StableBit DrivePool combines the free space of any number of hard drives into one big virtual pool drive. Additionally, it can duplicate data from one drive to another and integrates in the WHS dashboard much like the now deprecated Drive Bender feature of the previous version of WHS. Thanks to this, I’m not living in constant fear of my data becoming corrupt if I have a hard drive catastrophically failing.

With all those hard drives running constantly all day long, it can get hot in there. That’s why I also use StableBit Scanner to monitor the temperatures and SMART data of the HDDs. It hooks into Bit Flock (a hard drive health analysis tool) to inform you that your drives are unhealthy before they break. I recently installed additional fans in the case because I kept receiving emails telling me the temperature of the hard drives was too damn high. If not for that add-on, things might have gone ugly.

StableBit Scanner for all your HDD monitoring needs

Since I use my iPad a lot, I also found some applications that add iOS “friendliness” to the server:

  • XBMC can receive AirPlay content
  • AirPrint printing with FingerPrint from Collobos Software
  • AirVideo for streaming media files on the iDevices locally and across the Interwebs
  • The XBMC Constellation app for iPhone and iPad is a great way to browse files and doubles as a remote.
  • Having iTunes installed allows me to backup my phone and tablet wirelessly on the server instead of my PC (those backups can take a considerable amount of space, up to 64 GB in my case)

Remote control

I bought a Logitech wireless keyboard that proved unreliable because of the 10′ distance between the television (where the receiving dongle is) and the sofa.

After much trial and error, I finally found a Microsoft Media Center Keyboard on eBay which use an IR receiver that works great… with a little bit of tinkering. By default, you can’t use that IR transceiver in Windows Home Server because it’s based on Windows Server 2008 R2 and the drivers are not available for that OS. Fortunately, they are for Windows 7 x64 and the easiest way to make this work is by following the instructions on this site.

On top of this, I used LM Remote KeyMap and XBMC custom keyboard.xml to assign the multimedia keys of the keyboard to functions that are actually useful.

Automatic content download

Having a PC to play all kinds of files is nice, but it’s no fun if you have to constantly feed it with new files manually. That’s why I tried to automate the content download process as much as I could.

Most Torrent clients have the ability to use RSS feeds to download files. uTorrent has a great tutorial on how to do this and showRSS is a good place to get the feeds. That way I can watch my TV shows when I want, as soon as they are available.

If you’re more into podcasts, using Juice would be the way to go.

Gaming features

I have installed a SNES emulator and the games can be launched directly from XBMC. I can use my Xbox 360 controllers with the help of the Xbox 360 Wireless Gaming Receiver I have. It’s a bit of a pain to install though because the drivers for this thing are not available for the Servers edition of Windows.

Offsite backup

While I’m protected against loss of data in the case of a hard drive crash, the important data to be stored elsewhere if I want protection against fire or natural disasters. CrashPlan is a service that can securely store an unlimited amount of data in the cloud. In my case, unlimited really means 6.5 TB of data but with my 2 Mbps upload bandwidth, it might take some time to do so I’ll be sending the most important data such as my pictures and documents in there first.

Any minute now

Conclusion

That server is still a wonderful ongoing adventure: I try to add a new feature every month or so. For those who are wondering, its name is Spock (you know, because he holds a lot of data and is half file server, half media center) and while it’s not making coffee yet, I’m working on it. 😉

Portfolio Items