JeeNodes… beautiful piece of DIY hardware.

image

Advertisements

Ardumote: Handy als Gamecontroller und andere Spielereien

Ihr erinnert euch an Ardumote? Auch wenn das ganze noch nicht das Beta-Stadium erreicht hat geht es doch langsam voran. Zuhause nutze ich es inzwischen sogar schon produktiv zum Licht schalten und Türen öffnen. Ursprünglich wollte ich ja nur eine Fernbedienungs-App auf dem Handy haben, inzwischen kristalisiert sich aus der Grundidee die ultimative virtuelle Schaltzentrale heraus: An dem Webinterface auf dev.ardumote.com kann man verschiedenste Arten von Geräten anmelden und je nach Zustand der Eingabegeräte (z.B. Temperatursensor oder Button auf der Handy-App) Befehle an andere (Ausgabe-)Geräte (z.B. Servomotor der den Knopf am Türsummer drückt) senden. Das ganze ist nicht mal an physikalische Geräte gebunden, man könnte auch genauso gut über einen virtuellen Ardumote-Controller einen Tweet auf Twitter absetzen (was übrigens auch schon geht).

Interessant wird das ganze dann auch mit einem Smartphone, welches ja schon von Haus aus mit einer Netzwerkverbindung ausgestattet und über und über mit Sensoren vollgestopft ist. Man könnte z.B. automatisch Schlaglöcher Twittern, die Tür abschließen wenn die Geokoordinaten der Schwiegermutter näher kommen, eine Highscore für einen Autobahnabschnitt implementieren oder ganz schnöde die Heizung aufdrehen wenn die Temperatur unter 18° sinkt…

Hier als Nebenprodukt und Proof of Concept eine Spielsteuerung mit den Bewegungssensoren eines Android Smartphones. Nicht hübsch und es fehlt jeglicher Feinschliff, aber vom Grundsatz her eine ziemlich coole Sache wie ich finde.

http://dev.ardumote.com/suat_test/JavaSocketBridge/demo3/

Hinweise:

  •  Java-Sicherheitswarnung: Das Spiel selbst läuft mit JavaScript (mit bestem Dank an gamequeryjs.com wo es aus dem Tutorial stammt), weshalb keine persistente Datenverbindung möglich wäre. Hierfür verwende ich ein Java Applet (mit bestem Dank an Stephen Ware) als Brücke zwischen JavaScript und dem IRC-Server, über den App und Spiel letzendlich miteinander kommunizieren. Die Sicherheitswarnung liegt daran, dass das Applet nicht signiert ist.
  • QR-Code oben rechts: Zum runterladen der notwendigen Android-App
  • QR-Code unten rechts: Muss mit der gerade installierten App eingescannt werden, um App und Spiel zu verbinden.

 

Request for testing / RCSwitch Release Candidate 1.3

Hi there,

I’ve refactored the RCSwitch library regarding the use of String types. All String type variables are changed to char arrays and in this way the compiled sketch (and hopefully also the memory usage) is much smaller than before. I’ve tested it with my DIP switch configured outlets and it worked fine while having a compiled size of only 5296 bytes instead of 7524 before. Also now it works more or less with Ardumote on a Duemilanove.

You can do me a favour and test it and post your result in the forum 🙂 Especially if you are using this library with TypeC_Intertechno or TypeA_TypeB_WithRotaryOrSlidingSwitches outlets.

Download here

Thanks a lot

Suat

Ardumote

I’m proud to present what I’m currently working on: a Arduino home automation framework and a corresponding webservice. I call it Ardumote, because when I started working on this, all I wanted to have is a simple remote control app for my mobile phone.

the idea

The basic idea is to use a arduino only for operating actors, requesting sensor values and communicate all this stuff to another device. To make things flexible we have ActorModule-, SensorModule- and CommunicationModule classes with a common interface and thus said you simply attach actor objects, sensor objects and communication objects to your Ardumote instance which handles everything in this manner:

//pseudocode
loop {
  if (command available from any communication module) {
    process command / operate specified actor;
  }
  if (value available from any sensor module) {
      send value to all attached communication modules;
  }
}

The communication protocol is kept human readable and very simple. You can find more details at wiki.ardumote.com

The „other device“ could be a application on your computer/smartphone using the (bluetooth) serial communication module, a webapplication on your home or remote webserver or – what I personally focus on – a webservice at dev.ardumote.com using the ethernet IRC module.

What is ready for now:

  • The basic ardumote library using plaintext (recommended for Duemilanove/Uno) or md5 (recommended for Mega) authentification
  • A analog and a digital sensor module -> just read a analog/digital pin in a defined interval, useful for LDR or LM35 temperature sensors for example
  • A analog (PWM) and digital actor module -> just write a analog/digital pin, useful for switching LEDs for example
  • A RCSwitch actor module -> just a wrapper for the RCSwitch library to operate RC power sockets, only works on Arduino Mega
  • A serial communication module -> test & debug in serial monitor, useful for eventually processing or android apps via bluetooth
  • A ethernet IRC communication module -> connects to dev.ardumote.com
  • A ugly basic web interface at dev.ardumote.com giving the ability to register a Ardumote controller, operate actors and log sensor values.
    This is what it looks like:

What I want to have in near future is:

  • Refactoring to minimize the RAM consumption (hope to get the RCSwitch module running on a Duemilanove/Uno)
  • A RCSwitch sensor module -> use a simple remote control
  • Set event based actions at the webservice -> if (LDR < threshold) { switch on lights; }
  • A fancy web interface with the possibility to compose customized fancy remote control interfaces
  • A Android app to use the fancy remote control interfaces 🙂

Quickstart if you want to try the pre alpha (ethernet shield needed):

  • Get yourself the RCSwitch and Time libraries
  • Sign up at dev.ardumote.com, login and add a new Ardumote controller.
  • Get the library
  • Take the example sketch which comes along with the library, change the following lines according to the Ardumote controller you’ve created in step 1 and your local network settings:
    #define ARDUMOTE_CONTROLLER_ID 11
    #define ARDUMOTE_SHARED_SECRET "2d520b8f5ea2cf6113a578f57b45201c"
    
    byte mac[]     = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    byte ip[]      = { 192,168,0,11 };
    

    Btw: As the arduino connects via IRC and keeps being connected, there is no need to setup anything on your router 🙂

  • Plug in a ethernet shield, a LED to pin #5 and pin #6, plug in a analog sensor to analog pin #0
  • Upload and wait until the LED at pin #13 switchs on (which indicates that the Arduino is connected to the IRC server)
  • Now you should be able to control the LEDs at the dev.ardumote.com webinterface

Feel free to share your toughts in the project forum (no registration required)

Svn post-commit auto update hook ohne Rechteprobleme (mal etwas anders)

Ein typisches Szenario im Webdevelopement ist ein Subversion Repository und ein Entwicklungsserver der automatisch geupdated werden soll, sowie ein Entwickler etwas committed. Das hierfür notwendige post-commit hook läuft mit den Rechten des committenden Users, so dass alle neuen Dateien von den anderen nicht mehr geschrieben werden dürfen… Keine Ahnung, wieso es dafür keine elegante Lösung gibt. Im Netz findet man häufig als Workaround ein compiliertes C Programm, welches immer als gleicher User ausgeführt wird. Es geht aber auch anders, und zwar so:

Voraussetzung:
– SVN Repository (hier /var/svn/project/trunk), Zugriff mit svn+ssh://
– Webserver (hier mit DocumentRoot in /var/www/project/dev)
– Eine Gruppe für SVN, der alle Entwickler angehören (hier subversion)

Für das Update benötigen wir einen eigenen User mit SSH Schlüsselpaar und Berechtigungen für das entsprechende DocumentRoot, im post-commit hook loggen wir uns einfach per SSH als Update-User auf die lokale Maschine ein und führen das Update durch. Klingt irgendwie nach „von hinten durch’s Auge“, hat aber sogar den Vorteil, dass das ganze auch dann funktioniert, wenn Repository und Webserver tatsächlich auf unterschiedlichen physikalischen Maschinen laufen.

1. User anlegen und SSH Schlüsselpaar erzeugen (ohne Passphrase)

  adduser updater
  addgroup subversion updater
  su updater
  cd ~
  mkdir .ssh
  chmod 700 .ssh
  ssh-keygen -t rsa

2. Public Key zu den authorisierten SSH Schlüsseln hinzufügen

  cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys2
  chmod 600 ~/.ssh/authorized_keys2

3. Private Key für alle Entwickler (= alle User in der Gruppe subversion) zugänglich machen

  cp ~/.ssh/id_rsa /var/svn/hooks/id_rsa
  chmod 640 /var/svn/hooks/id_rsa_updater
  chown updater:subversion /var/svn/hooks/id_rsa_updater

4. Document Root anlegen und Projekt erstmalig auschecken

  su root
  mkdir /var/www/project/dev
  chown updater /var/www/project/dev

  su updater
  cd /var/www/project/dev
  svn checkout file:///var/svn/project/trunk/ ./

5. post-commit hook anlegen

   mv /var/svn/hooks/post-commit /var/svn/hooks/post-commit.bak
   echo '#!/bin/sh' > /var/svn/hooks/post-commit
   echo 'ssh -i /var/svn/hooks/id_rsa_updater updater@127.0.0.1 svn up /var/www/project/dev' >> /var/svn/hooks/post-commit
   chmod 755 /var/svn/hooks/post-commit

6. Da beim erstmaligen Ausführen der RSA key fingerprint in den known_hosts abgelegt werden muss, muss das post-commit Script zunächst einmalig von jedem Entwickler in der Konsole ausgeführt werden.

  su sui
  /svn/hooks/post-commit

  The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
  RSA key fingerprint is 81:7c:e0:bd:7a:c8:e5:56:0a:c8:7f:95:0c:b1:6a:d0.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts.
  At revision 74.

Fertig 🙂

RFM01 (RFM12) auf’s Breadboard

Dieses äußerst beliebte Funkmodul hat tragischerweise ein Rastermaß von 2mm und passt daher nicht auf ein Standardbreadboard mit 2.54mm. Auf eine Lochrasterplatine legen und verkabeln ist nichts für Grobmotoriker (boah, was hab‘ ich geflucht), deshalb hier mein – wie ich finde – eigentlich ganz guter Lösungsweg:

Beinchen von geopferten Widerständen ranlöten, in die Lochrasterplatine stecken und ganz konventionell festlöten.

Fail! Dummerweise ist das jetzt eine Spalte breiter als mein Breadboard und passt daher immer noch nicht rein. Hab‘ echt die Lust dran verloren, aber der Lösungsansatz war an sich schon ganz gut, oder? 🙂