Tag Archives: Telekom Tropo

Texting a Bubble Gun (SMS with Arduino)

I wanted to demonstrate the usage of texting (SMS) for IoT (Internet of Things) and M2M (Machine to Machine communication). Therefore I disassembled a cheap bubble gun (usually less than 5 euros).

bubble_gun_step1
These are the places where soldering is needed.

In the next step I bypassed the batteries and the trigger with soldering two cables directly to the gun’s electronic circuit. That’s the fiddly part.

bubble_gun_step2
The relay on the left acts like a switch for the toy, on the right are the cables to the toy’s electric circuit.

The rest is just using an Arduino with a GSM shield, connecting it to a relay and plugging in the cables from the bubble gun.

Still one issue: The mechanism needs initial a mechanical created film for the bubbles. This would be possible with little effort, but the costs for the extra parts would exceed the gun’s price. Therefore I skipped this and did it manually. A different mechanic as used by the Gazillion Bubble Machine might solve this. By the way, the liquid seems to be very special, because the gun does not work with the standard bubble liquid from my kids.

Controlling this via phone is only one option. You also can use an API with any of your applications like Global SMS API or combine it with voice via Telekom Tropo.

But one tricky thing is still missing: The code for receiving the message. In this case the Arduino frequently checks only for patterns in all received messages.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void loop() {
   checkForInboundMessages();	
}
 
void checkForInboundMessages() {
   char inchar; // Will hold incoming character from the Serial Port  
   String pattern = "+CMT"; 
   String result;
 
   while(mySerial.available()!=0) {
      inchar = gsm.read();
      result = result + inchar;
   }
 
   result.toUpperCase();
   if (result.indexOf(pattern)>-1) {
 
      gsm.print("AT+CMGD=1,0\r");
 
      if (result.indexOf("ON")>-1) {
         digitalWrite(RELAY, HIGH);
      } else if (result.indexOf("OFF")>-1) {
         digitalWrite(RELAY, LOW);
      }
   }
 
}

Once you have built something like this, you are basically able to control every toy with an on-off switch – and not only toys. You only need to bypass the switch with a relay connected to a computer (e.g. Arduino or Raspberry Pi). I am looking forward to your ideas…

Transkription: Anrufe als Emails erhalten

Für die natürliche Nutzung eines Systems ist Spracherkennung in vielen Szenarien eine Option. Ganz egal ob auf Schlüsselwörter gelauscht oder vordefinierten Grammatiken zum Einsatz kommen. Daneben gibt es auch noch die Transkription, welche gesprochene Sprache als lesbaren Text darstellt. Der Developer Garden bietet hier gleich mehrere Lösungen, wie unter http://www.wolter.biz/?p=1368 beschrieben. Neu ist, dass für die Transkription zum einen der in dem Artikel erwähnte Trick nicht mehr notwendig ist und dass zum anderen nun mehr als 40 Sprachen, darunter auch Deutsch, unterstützt werden:

  • English (AUS): en_AU
  • English (UK): en_GB
  • English (US): en_US
  • Arabic (Egypt): ar_EG
  • Arabic (Saudi): ar_SA
  • Arabic (UAE): ar_AE
  • Cantonese Chinese: zh_HK
  • Catalan (Spain): ca_ES
  • Croatian: hr_HR
  • Czech: cs_CZ
  • Danish: da_DK
  • Dutch: nl_NL
  • Finnish: fi_FI
  • French (CAN): fr_CA
  • French (EU): fr_FR
  • German: de_DE
  • Greek: el_GR
  • Hebrew: he_IL
  • Hungarian: hu_HU
  • Indonesian: id_ID
  • Italian: it_IT
  • Japanese: ja_JP
  • Korean: ko_KR
  • Malay: ms_MY
  • Mandarin Chinese: cn_MA
  • Taiwanese Mandarin: zh_TW
  • Norwegian: no_NO
  • Polish: pl_PL
  • Portuguese (BR): pt_BR
  • Portuguese (EU): pt_PT
  • Romanian: ro_RO
  • Russian: ru_RU
  • Slovak: sk_SK
  • Spanish (EU): es_ES
  • Spanish (MX): es_MX
  • Spanish (US): es_US
  • Swedish: sv_SE
  • Thai: th_TH
  • Turkish: tr_TR
  • Ukranian: uk_UA
  • Vietnamese: vi_VN

Die Programmierung gestaltet sich wie gewohnt sehr einfach. In der Scripting API von Tropo sieht das dann mit Angabe des transcriptionLanguage Parameters so aus:

1
2
3
4
5
6
7
8
record("Sag uns bitte, wie es Dir geht!", {
   voice: "Katrin",    
   beep: true,    
   maxTime: 600,
   transcriptionID: currentCall.callerID,
   transcriptionLanguage: "de_DE",   
   transcriptionOutURI: "mailto:me@mymail.com"
});

Nur eine Rufnummer, aber viele Empfänger

Das Weiterleiten einer zentralen Rufnummer an mehrere Empfänger geht mit Telekom Tropo und ein wenig JavaScript ganz einfach. Beispielsweise für eine einfache Art von Support- oder Business-Kontakt auf einer Website, bei der der Mitarbeiter, der gerade Zeit hat, den Anruf entgegen nimmt. Dafür sollte aber sichergestellt werden, dass die Rufnummer des Anrufers in jedem Fall gemerkt wird. Eine einfache Lösung bietet das folgende JavaScript für die Scripting API von Telekom Tropo. So ist kein weiterer Aufwand in Form von Hosting oder einer Datenbank oder so notwendig. Selbst das Merken der Rufnummer erledigt dieses Skript ohne weitere Hilfe, indem einfach eine SMS mit den Details gesendet wird.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var callerID = "+" + currentCall.callerID;
var calledID = "+" + currentCall.calledID;
 
// All receiver get the call transferred, but the first one wins
var transferToID = ["+4912345", "+493012345"];
var sendNotificationToID = "+4912345";
 
// Notify at least one person in case nobody answers the call
message("Received voice call to Tropo business contact (" + calledID + ") from " + callerID, {
    to:sendNotificationToID,
    network:"SMS"
});
 
say("Welcome to Developer Garden!", {
   voice: "Simon"
});
say("Herzlich Willkommen!", {
   voice: "Katrin"
});
say("For support or general questions please go to our website.", {
   voice: "Simon"
});
say("Nutzen sie fuer allgemeine Fragen bitte unsere Website.", {
   voice: "Katrin"
});
say("Dont hang up, you will be connected!", {
   voice: "Simon"
});
say("Bitte legen sie nicht auf, sie werden verbunden!", {
   voice: "Katrin"
});
 
transfer(transferToID, {
   callerID: calledID,
   playvalue: "http://www.phono.com/audio/holdmusic.mp3" /* only in case there is no ring tone */,
   answerOnMedia: true,
   voice: "Simon"
});