Using MQTT to send the IP address from a Raspberry PI

Docker is all the rage nowadays. I am privileged to use it daily, though not on a RasPI. Recently, I was about to give a demo illustrating the span of devices that it supports. The clever Docker Pirates have even made a Raspberry PI kernel complete with a Docker container, so I installed it on a spare SD card. Only to discover that the kernel doesn’t support the new and shiny 7″ touchscreen, leaving my RasPi headless in every respect. (Update: It does now. Support became available the day after… But I hope this post is relevant if you want to run the RasPI headless)

The instructions on the pirate website suggest to use nmap (the port scanner) to find the IP. Even used carefully, it is not  a very popular tool in a corporate IT environment. I could have used it, but risked setting off an alarm somewhere.

I gambled on being able to fix the display in the remaining hours, but…

The journalist was arriving in five minutes, and I had no idea how to SSH to the box so that I could demonstrate the one-line «docker run» command and get a web server running. The helpful guys at corporate IT located the IP-address after I asked for help. But there should be an easier way!

The Interview and demo went fine. But I am no stranger to this situation: I have given a ton of IoT-related demos with Raspberry Pi the last couple of years, and I always had to carry with me a small HDMI display and keyboard/mouse just to obtain the IP address at a new site.

My shiny new touch-screen. With the docker kernal it was ptich black

My shiny new RasPI touchscreen. With the docker kernel it was pitch black!

I could make a script that sends the IP address as an email, no? Well. I don’t like to leave my username and password on the PI. Neither do I want to have the mailbox spammed with IP addresses.

..what to do?

MQTT to the rescue!  MQTT is a IoT-friendly protocol with a lightweight footprint. The clue here is to use a public MQTT broker – in my case mqttdashboard.com – so that both the RasPi and my mac could reach it.

I found a rather decent solution by San Bergman where he solves the trickery of getting the IP address for an interface and mails it. So I changed it to use MQTT:

1. Install Mosquitto on your Raspi and PC/Mac

Mosquitto is an obvious choice here, with excellent community support.

On the PI it is pretty easy:

sudo apt-get install mosquitto mosquitto-clients 

To get clients for Mac and PC, please refer to the instructions on the mosquitto website

2. Make a script that posts the IP address to MQTT

First, test and select  a public MQTT broker that you can reach from both the PI and your laptop.

Create a folder /home/pi/bin and edit the file mqttmyip.sh:

#! /bin/bash

# mqttmyip.sh
# Posts the IP address of an interface to an MQTT queue
#
# Use: mqttmyip [interfacename]
# Author: Simen Sommerfeldt, based on work by San Bergmans (www.sbprojects.net)

# Configuration variables
RPINAME="RaspberryPi"

#MQTT broker. If this isn´t up check https://github.com/mqtt/mqtt.github.io/wiki/public_brokers
MQTTHOST="iot.eclipse.org"

# Change this to become something unique, so that you get your own topic path
MQTTPREFIX="yourname"

# Get interface name from parameters
if [ $# -eq 0 ]
then
 IFC="eth0"
else
 IFC="$1"
fi

ifconfig $IFC &> /dev/null
if [ $? -ne 0 ]
then
 exit 1
fi

# Get current private IP address for the selected interface
PRIVATE=$(ifconfig $IFC | grep "inet addr:" | awk '{ print $2 }')
PRIVATE=${PRIVATE:5}
# Exit if IP address is empty
if [ -z $PRIVATE ]
then
 exit 0
fi

/usr/bin/mosquitto_pub -h $MQTTHOST -t "$MQTTPREFIX/$RPINAME/$IFC/ip" -m "$PRIVATE"

Remember to make it executable:

chmod +x mqttmyip.sh

3. Make it run when the RasPI boots

The /etc/rc.local script allows you to insert commands that run after a reboot. I added three lines at the end, so that it reports the address of the interfaces that I can think of. Remember to use «sudo» when you edit it..

/home/pi/bin/mqttmyip.sh wlan0 &
/home/pi/bin/mqttmyip.sh wlan1 &
/home/pi/bin/mqttmyip.sh eth0 &
exit 0

4. Reboot, and get the IP

Having installed the Mosquitto client, do the following from your PC/mac before you power the RasPI:

 mosquitto_sub -v -h <<MQTT BROKER OF CHOICE>> -t "yourname/#"

NB! Of course you have to replace the topic with whatever you chose in the script

In my case, it looked like this:

Skjermbilde 2015-10-10 kl. 21.10.14

Voila! I no more need to drag a keyboard and mouse around for demos. This small hack really illustrates the versatility of the MQTT protocol

En huskeliste for å lykkes med Google Hangouts on Air

IMG_3602

Det er godt å ha et hvitt tre når en skal få et kult webcam-perspektiv!

«Google Hangouts on air» er et utrolig bra verktøy for å drive en transparent organisasjon som Lær Kidsa Koding!

Og så har jeg alltid dårlig tid. Det er noe å gjøre hjemme, på jobb, og overalt ellers. Så derfor hadde jeg ikke tid til å ordne meg svart belte i hangouts før vi startet. Jeg satt litt på nåler..

En bør lykkes. Folk følger med der hjemme, vi har deltagere fra hele landet, og det skader saken om vi går oss helt vill

Det gikk ganske bra! (Se referatet her) Jeg hadde blant annet lest denne artikkelen først (LES DEN!) og kjørt en liten generalprøve. Men her er altså noen erfaringer som jeg kan dele med deg… Les videre

Frivillige organisasjoner og behov for byråkrati – hva vi gjør i Lær Kidsa Koding!

Denne (redigerte) artikkelen ble opprinnelig publisert på bloggen til Lær Kidsa Koding! i august med tittelen «Hva slags forening er vi? Lunchprat med Vegard Kolbjørnsrud». Hensikten var å gi folk en mulighet til å utfordre oss.

Jeg har en hypotese om at mange frivillige organisasjoner sliter fordi de ble skapt i en tid da det ikke fantes “digitale allmenninger”. Her gjøres mye av seg selv:

  • Folk deler og finner informasjon enkelt
  • Nettstedet kobler de som kan med de som trenger å kunne
  • Nettstedet kobler og mobiliserer de som kan skape eller løse noe sammen

Meetup.com er et eksempel på en slik allmenning. Dette har vært en «disruptive event» i organisasjonslivet.

 
Les videre

Hvordan jeg lærte sønnen min å programmere

Denne artikkelen ble ført publisert hos NRK Beta 9. april 2013

Sønn på 11: «Pappa, mange i klassen har Mac. Det må jeg også ha!»
Jeg: «Nei, gutter på 11 må ikke ha Mac. Det er noen få barn med rike foreldre i klassen din som har, men det betyr ikke at det er riktig.»
Sønn: «Ååå…»
Pause.
Jeg: «Den dagen du klarer å skrive en plugin til Minecraft — en stein som skyter piler på folk som nærmer seg — da skal du få en Mac.»
Sønn: «Jippiiii!»
Jeg: «Men du skal fortelle meg hvordan det virker, hvordan du tenkte og hvordan den samspiller med Minecraft. Det holder ikke å kopiere noe fra nettet!»
Sønn: «Okey da…»

Les videre

Nødvendigheten av god digital kunnskap blant barn

Dette skrev jeg i november 2012 for å prøve å få dannet et lokalt programmeringskurs for barn. Ingen nappet, men det dannet spiren til «Lær Kidsa Koding!» Mye har gått anderledes enn hva jeg tenkte her. Blant annet ble vi ikke en del av Dataforeningen, men ble dannet med «fadderskap» derfra og fra IKT-Norge. Diskusjonen om programmeringsspråk var riktig for en faggruppe, men prematur for en bevegelse.

Spillprogrammerer-skole for barn?

Av Simen Sommerfeldt (@sisomm, simen.sommerfeldt@bouvet.no simen.sommerfeldt@gmail.com)

Opprinnelig versjon November 2012

Les videre