For en uges tid siden købte jeg to knapper. Knapperne er store og røde og de kræver batterier og internet og derefter bestemmer man selv, hvad er skal ske.
Det virker bare som en fantastisk idé: Én stor rød panik-knap; verdens simpleste brugerflade - alle kan finde ud af at bruge den. Og så har den forbindelse til omverdenen via WiFi eller mobildata.

Knappen bt.tn i den røde udgave. Projektet blev finansieret via Indiegogo. Andre tænker i samme baner.

Lidt af interfacet fra bt.tn's website.
Knapperne kan via websitet programmeres til forskellige handlinger. Fx sende en email, hvis der bliver trykket. Eller sende en email. hvis der ikke bliver trykket. Eller kontakte andre websites, sende SMS'er eller integrere med IFTTT.
Da knapperne ankom til Kontoret tænkte jeg, at man fx kunne lave en konkurrence, hvor det gælder om at trykke på den ene først og så den anden bagefter hurtigst. Og så selvfølgelig måle tidsforskellen. Indtil videre er den endt med at generere tal mellem 0 og 100, som så vises på storskærmen - hvem skal hente frokost og hvad skal vi ha'?
Derhjemme tænkte jeg først og fremmest, at den kunne bruges af min søn på fem. Vi bor på 3. sal og idéen var, at vi kunne gå i haven og drikke hvidvin og Marvin kunne så trykke, hvis yngste søn vågnede. Det ville så få knappen til at sende en SMS. Jeg har brugt det et par gange, og det fungerer rigtigt godt.
Jeg havde tidligere overvejet, om jeg kunne få mit Sonos til at tale. Det er der heldigvis også andre, der har tænkt på, og det kan fx lade sig gøre via Google Text-to-Speech. Det er en behagelig, autorativ robotkvinde, som mine børn af en eller anden årsag lytter mere til end deres forældre. Jeg startede først med at sende "sjove" opdragende beskeder ud via Sonos ala Terkel og Marvin skal snart i seng og de glæder sig til at sove eller I dag bliver verdens bedste dag.
Jeg ledte lidt efter gode beskeder, som jeg kunne genbruge, men jeg fandt aldrig rigtigt noget zen-agtigt. Derfor endte jeg med at falde for Verdens Bedste Nyheder. Her er der kun gode nyheder, så når man kommer træt og sur og frustreret hjem fra arbejde / skole / børnehavne, så kan man klikke på knappen og få læst en rigtig god nyhed op. Det fungerer på den måde, at Knappen kontakter min router, der derefter retter henvendelse til nyhederne, som så får Google til at lave dem om til lyd, som derefter afspilles over Sonos.
Du kan høre, hvordan det lyder i det lille videoklip her på siden. Hvis man vil undgå den metalliske stemme, kan man måske overveje at bruge bedre tjenester som fx Loquendo TTS. Eller bare gøre knappen til en Tom Waits knap, som en god ven foreslog.
Det tekniske
Min router kan køre en variant af Linux, der kan bruge Entware til at installere pakker. Det betyder blandt andet, at man kan have en fuldt fungerende web server kørende på routeren.
Jeg ledte efter en Sonos-integration og stødte først på SoCo, der kunne styre Sonos via Python. Det virkede fint, men Python eksekverer ekstremt langsomt på min router, så der var altid minimum to sekunders ventetid.
Jeg fandt derefter et library til PHP, som også kan styre Sonos, men jeg fik det aldrig rigtig til at fungere ordentligt. Jeg endte derfor med et andet stykke software til styring af Sonos via PHP. Det tog mig lidt tid at få det installeret på min router, fordi PHP på routeren ikke understøtter PHAR og dermed kunne software ikke bruges via Composer. Det skulle gøres manuelt.
Men derefter var det nemt at få op at køre. Du kan se hele PHP scriptet herunder.
$intmax) { $string_cut = substr($string, 0, $intmax); $last_space = strrpos($string_cut, " "); $strings[$i] = substr($string, 0, $last_space); $string = substr($string, $last_space, strlen($string)); $i++; } $strings[$i] = $string; return $strings; } function http_get_contents($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_TIMEOUT, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); if (FALSE === ($retval = curl_exec($ch))) { error_log(curl_error($ch)); } else { return $retval; } } $BLOGURL = "http://verdensbedstenyheder.dk/feed/?post_type=news"; $NUMITEMS = 10; $TIMEFORMAT = "j F Y, g:ia"; $CACHEFILE = "/opt/tmp/" . md5($BLOGURL); $CACHETIME = 1; $rand = rand(0,9); if (!file_exists($CACHEFILE) || ((time() - filemtime($CACHEFILE)) > 3600 * $CACHETIME)) { if ($feed_contents = http_get_contents($BLOGURL)) { $fp = fopen($CACHEFILE, 'w'); fwrite($fp, $feed_contents); fclose($fp); } } include "./class.myrssparser.php"; $rss_parser = new myRSSParser($CACHEFILE); $feeddata = $rss_parser->getRawOutput(); extract($feeddata['RSS']['CHANNEL'][0], EXTR_PREFIX_ALL, 'rss'); $text = $rss_ITEM[$rand]['TITLE'].". ".$rss_ITEM[$rand]['DESCRIPTION']; $lang = "da"; $text = CutString($text, 100); for ($i = 0; $i < count($text); $i++) { $url = "http://translate.google.com/translate_tts?ie=UTF-8&tl=da&q=".urlencode($text[$i])."&client=sonoscrm"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); curl_setopt($ch, CURLOPT_TIMEOUT, 60); $return[$i] = curl_exec($ch); curl_close($ch); } file_put_contents("/media/USB_DISK/nas/tts/speech.mp3", $return); require_once "vendor/autoload.php"; use duncan3dc\Sonos\Network; $sonos = new Network; /* 192.168.1.204 = Hallway 192.168.1.96 = Living Room2 192.168.1.157 = Living Room */ $localPath = "/media/USB_DISK/nas"; $hostname = "RT-N56U"; $smb = "{$hostname}/USB_DISK/nas"; $directory = new duncan3dc\Sonos\Directory($localPath, $smb, "tts"); use duncan3dc\Sonos\Tracks\Track; $track = new Track("x-file-cifs://RT-N56U/USB_DISK/nas/tts/speech.mp3"); $living = $sonos->getControllerByIp("192.168.1.204"); $living->interrupt($track); ?>
Der er endnu ingen kommentarer...