Visualizzazione post con etichetta raspberrypi. Mostra tutti i post
Visualizzazione post con etichetta raspberrypi. Mostra tutti i post

giovedì 14 maggio 2015

JarvisPHP - Il tuo maggiordomo personale in Php!


JarvisPhp è la mia ultima creazione. In breve si tratta di un sistema REST API scritto in Php che permette una interazione diretta con l'utente attraverso dei comandi. Questi comandi possono essere vocali, pronunciati e riconosciuti da un STT (Speech to text) come ad esempio una applicazione Android mediante le funzioni Android STT,  e successivamente inviati (in stringa) alle API di JarvisPHP.
Lo scenario è il seguente: l'utente (il padrone di casa) parla attraverso un auricolare bluetooth collegato con uno smartphone, premendo il bottone dell'auricolare. Il comando viene interpretato dal riconoscitore vocale della app ed inviato a JarvisPHP, che tenta di comprenderlo ed eseguire qualche azione.
JarvisPHP è stato pensato per un Raspberry PI vista la sua comodità e dimensione, ma può essere usato su qualsiasi sistema *nix.


Download

E' possibile scaricare l'ultima versione di JarvisPHP su Github a questo indirizzo:
https://github.com/bianchins/JarvisPHP


Documentazione

Potete fare riferimento al wiki per tutta la documentazione:
https://github.com/bianchins/JarvisPHP/wiki/


Architettura del sistema

Come può JarvisPHP eseguire una azione? Come riesce ad interagire con l'ambiente? Semplicemente, utilizza dei plugins per eseguire il comando che ha interpretato. Per esempio, chiedendo "Chi sei?" il sistema attiverà il plugin "Info plugin" che risponderà "Il mio nome è...".
Un plugin (è semplicissimo scrivere un proprio plugin, basta seguire queste istruzioni) può fare qualsiasi cosa: per esempio, interagire con l'interfaccia GPIO di un Raspberry Pi (http://www.raspberrypi.org), suonare musica, interrogare API pubbliche meteo, leggere email, connettersi a facebook e leggere le notifiche, e così via.

venerdì 9 gennaio 2015

Il meteo con Php e le API di Yahoo Weather

A tempo perso sto preparando una sveglia con Raspberry PI, che al momento di suonare si colleghi ad un sistema meteo, scarichi le informazioni e le pronunci tramite un sintetizzatore vocale.


Il primo passo è quindi quello di sviluppare un sistema che possa comprendere le condizioni meteo esterne. Ho trovato il servizio di API Yahoo Weather e me ne sono innamorato!
Di seguito è mostrato il codice dello script php che ho sviluppato: utilizza le funzioni curl per interfacciarsi con le API che rispondono in JSON, ho mappato i codici delle condizioni meteo in italiano (come da documentazione ufficiale) e ho scovato su stackoverflow una funzione per tradurre la direzione del vento da gradi alle classiche direzioni da rosa dei venti.
<?php

//Tradotto in php dall'originale 
//http://stackoverflow.com/questions/7490660/converting-wind-direction-in-angles-to-text-words
function degToCompass($num) {
    $val=floor(($num/22.5)+.5);
    $arr=["N","NNE","NE","ENE","E","ESE", "SE", "SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"];
    return $arr[($val % 16)];
}


$condizioni = array(
"0"=>  "tornado",
"1"=>  "tempesta tropicale",
"2"=>  "uragano",
"3"=>  "forti temporali",
"4"=>  "temporali",
"5"=>  "pioggia mista a neve",
"6"=>  "pioggia mista a nevischio",
"7"=>  "neve mista a nevischio",
"8"=>  "pioviggine gelata",
"9"=>  "pioggerella",
"10"=>  "pioggia gelata",
"11"=>  "rovesci",
"12"=>  "rovesci",
"13"=>  "raffiche di neve",
"14"=>  "rovesci di neve leggeri",
"15"=>  "soffia neve",
"16"=>  "neve",
"17"=>  "grandinare",
"18"=>  "nevischio",
"19"=>  "polvere",
"20"=>  "nebbioso",
"21"=>  "foschia",
"22"=>  "foschia",
"23"=>  "ventoso",
"24"=>  "ventoso",
"25"=>  "freddo",
"26"=>    "nuvoloso",
"27"=>  "Sereno",
"28"=>  "Sereno",
"29"=>  "parzialmente nuvoloso",
"30"=>  "parzialmente nuvoloso",
"31"=>  "Sereno",
"32"=>  "soleggiato",
"33"=>  "Sereno",
"34"=>  "Sereno",
"35"=>  "pioggia mista e grandine",
"36"=>  "caldo",
"37"=>  "isolati temporali",
"38"=>  "temporali sparsi",
"39"=>  "temporali sparsi",
"40"=>  "Rovesci sparsi",
"41"=>  "tormenta di neve",
"42"=>  "rovesci di neve sparsi",
"43"=>  "tormenta di neve",
"44"=>  "parzialmente nuvoloso",
"45"=>  "rovesci temporaleschi",
"46"=>  "rovesci di neve",
"47"=>  "Temporali isolati",
"3200"=>  "non disponibile"
);

$BASE_URL = "http://query.yahooapis.com/v1/public/yql";

$yql_query = 'select * from weather.forecast where woeid in (select woeid from geo.places(1) where text="Rimini, Italy") and u="c"';
$yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json";

$session = curl_init($yql_query_url);
curl_setopt($session, CURLOPT_RETURNTRANSFER,true);
$json = curl_exec($session);
$phpObj =  json_decode($json);
echo "\nMeteo per Rimini\n";
echo "----------------\n";
echo "Temperatura:      ";
echo $phpObj->query->results->channel->item->condition->temp."° C\n";
echo "Condizioni meteo: ";
echo $condizioni[$phpObj->query->results->channel->item->condition->code]."\n";
echo "Alba:             ";
echo $phpObj->query->results->channel->astronomy->sunrise."\n";
echo "Tramonto:         ";
echo $phpObj->query->results->channel->astronomy->sunset."\n";
echo "Umidità:          ";
echo $phpObj->query->results->channel->atmosphere->humidity."%\n";
echo "Pressione:        ";
echo $phpObj->query->results->channel->atmosphere->pressure." millibar\n";
echo "Previsioni:       ";
echo $condizioni[$phpObj->query->results->channel->item->forecast[0]->code];
echo ", t. max ".$phpObj->query->results->channel->item->forecast[0]->high;
echo "° C, t. min ".$phpObj->query->results->channel->item->forecast[0]->low." °C \n";

echo "Vento:            ";
echo $phpObj->query->results->channel->wind->speed." km/h ";
echo degToCompass($phpObj->query->results->channel->wind->direction)."\n";

domenica 4 agosto 2013

Come far parlare il Raspberry Pi tramite php


Qualche tempo fa ho cominciato a divertirmi con il mio Raspberry Pi. Una delle prime cose che ho voluto fare è stata quella di far parlare il raspPi attraverso il sintetizzatore vocale. In che modo? Con una pagina php richiamata dall'utente.
Per realizzare il tutto, basta installare un webserver (lighttpd nel mio caso) con interprete php5 e il sintetizzatore vocale (espeak), configurando i diritti della www-root:

sudo apt-get install lighttpd
sudo apt-get install php5-common php5-cgi php5
sudo lighty-enable-mod fastcgi-php
sudo service lighttpd force-reload
sudo chown www-data:www-data /var/www
sudo chmod 775 /var/www
sudo apt-get install espeak
Facciamo una prova, poi eseguiamo visudo per dare i diritti di esecuzione all'utente www-data attraverso visudo
espeak -vit "Prova di testing"
sudo visudo
Lo so che è un incredibile errore di sicurezza, ma tanto il mio RaspberryPi sta solo in casa e quindi per facilità ho abilitato l'utente a poter eseguire con sudo e senza password qualsiasi comando. Aggiungiamo quindi la seguente riga nel visudo
www-data ALL=(ALL) NOPASSWD: ALL
Creiamo una pagina php sotto la cartella /var/www con il seguente contenuto:
<?php 
echo exec(" sudo /usr/bin/espeak -vit \"Questo messaggio viene riprodotto ogni volta che si visita la pagina da un browser\"", $out, $out2);
?>
Questo ovviamente apre uno scenario fantastico relativo alla domotica :-)