Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - markoceri

Pagine: 1 2 [3]
31
Sarebbe dovuto essere qualcosa di stabile ma dopo le prime prove ... ho smontato la parte relativa al controllo del carico.

32
Questa guida riporta il necessario per controllare da remoto OpenWRT con un semplice SMS. Il sistema ? su gi? da un bel po' ma non ? ancora sfruttato appieno e per non farlo rimanere un progetto morto ho pensato di scrivere una PSEUDO guida   :-D  ... ma arriviamo al dunque ... Ho montato il suddetto firmware su una Fonera 2.0g ( che, come ben sappiamo, presenta una porta USB ) alla quale ho collegato una Vodafone Key ( modello ZTE K3765-Z ) e come programma principale per leggere i messaggi ho utilizzato Gnochii (sito ufficiale http://www.gnokii.org/). Gnokii altro non ? che un programma che comunica con dispositivi modem sfruttando i comandi AT.
Per prima cosa bisogna aver installato i pacchetti per la porta usb e per il funzionamento della pennetta, quindi ci assicuriamo di averli installati. In caso non fossero installati bisogna installarli con:

Codice: [Seleziona]
opkg install kmod-usb-core kmod-usb2 libusb usb-modeswitch usb-modeswitch-data usbutils kmod-usb-serial kmod-usb-serial-option
dopo di che possiamo installare Gnokii digitando:

Codice: [Seleziona]
opkg install gnokii
Ora passiamo alla configuranzione del dispositivo. Tutte le pennette usb utilizzate per navigare inizialmente vengono viste dal sistema come dei lettori CD-ROM quindi quando vengono utilizzate come modem bisogna farle letterarmente " switchare " in modalit? modem. Per farlo utilizzeremo usb_modeswitch che va lanciato con i seguenti parametri:

Codice: [Seleziona]
usb_modeswitch -I -c /etc/usb_modeswitch.conf
dove il file " usb_modeswitch.conf " ? il file di configurazione della Key. Esso cambia da modello a modello ... i parametri vanno inseriti a seconda del " DefaultVendor " e " DefaultVendor " pi? altri paramentri ( TargetVendor, TargetProduct ) ... questo ? quello che uso io per il mio modello

Codice: [Seleziona]
root@FonServer:~# cat usb_modeswitch.conf
########################################################
# ZTE K3765-Z
#

DefaultVendor=  0x19d2
DefaultProduct= 0x2000

TargetVendor=   0x19d2
TargetProduct=  0x2002

# only for reference and 0.x versions
MessageEndpoint=0x01

MessageContent="5553424308E0CC852400000080000C85000000240000000000000000000000"
EnableLogging=1

comunque c'? una cartella relativa al programma ( usb_modeswitch.d ) che contiene gi? molti parametri per molte marche e modelli differenti ( per il mio non c'era e l'ho dovuto fare ). Per far passare la pennetta in modalit? modem all'avvio ho messo il comando nel file custom-user-startup cosicch? non debba farlo in un secondo momento. Lanciando il comando lsusb si vede come la pennetta sia passata in modalit? usb modem ... nel mio caso leggo:

Codice: [Seleziona]
root@FonServer:~# lsusb
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 005: ID 19d2:2002 ONDA Communication S.p.A.
Bus 001 Device 002: ID 1a40:0201 TERMINUS TECHNOLOGY INC.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

la pennetta ? collegata ad unn HUB USB 2.0 come si pu? vedere. Ora passiamo alla configurazione di gnokii. Creare ( se non esiste gi? ) un file chiamato gnokiirc nella cartella /etc configurato nel seguente modo:

Codice: [Seleziona]
root@FonServer:/etc# cat gnokiirc
[global]
model = AT
port = /dev/ttyUSB0
connection = serial

Se la pennetta ? collegata da una diversa porta seriale, modificarla. Con Gnokii installato e configurato, proviamo ad identificare il dispositivo lanciando il comando:

Codice: [Seleziona]
gnokii --identify
attendendo un po' ( se ? andato tutto bene ) dovrebbe mostare un messaggio come questo:

Codice: [Seleziona]
root@FonServer:~# gnokii --identify
GNOKII Version 0.6.21
IMEI         : 353679xxxxxxxxxx
Manufacturer : ZTE INCORPORATED
Model        : K3765-Z
Product name : K3765-Z
Revision     : BD_VDFP673A1V1.0.0B

Bene, tutto ? andato a buon fine ... Questo comando va lanciato la prima volta che si vuole utilizzare il dispositivo, io l'ho messo nel file di sturtup " custom-user-startup " cos? non mi devo ricordare di lanciarlo ...  ora non ci resta che il comando per leggere gli sms:

Codice: [Seleziona]
gnokii --getsms SM 0 END
che non fa altro che leggere i messaggi sulla memoria della sim ( SM sta per sim memory ), dalla cella di memoria 0 fino alla fine. La risposta di tale comando ? la seguente:

Codice: [Seleziona]
root@FonServer:~# gnokii --getsms SM 0 END
GNOKII Version 0.6.21
0. Inbox Message (unread)
Date/time: 07/01/2011 02:21:57 +0100
Sender: +39349xxxxxxx Msg Center: +39349xxxxxxx
Text:
Sms ricevuto !
GetSMS SM 1 failed! (The given location is empty.)
GetSMS SM 2 failed! (The given location is empty.)
GetSMS SM 3 failed! (The given location is empty.)
GetSMS SM 4 failed! (The given location is empty.)
GetSMS SM 5 failed! (The given location is empty.)
GetSMS SM 6 failed! (The given location is empty.)
GetSMS SM 7 failed! (The given location is empty.)
GetSMS SM 8 failed! (The given location is empty.)
GetSMS SM 9 failed! (The given location is empty.)
GetSMS SM 10 failed! (The given location is empty.)
GetSMS SM 11 failed! (The given location is empty.)
GetSMS SM 12 failed! (The given location is empty.)
GetSMS SM 13 failed! (The given location is empty.)
GetSMS SM 14 failed! (The given location is empty.)
GetSMS SM 15 failed! (The given location is empty.)
GetSMS SM 16 failed! (The given location is empty.)
GetSMS SM 17 failed! (The given location is empty.)
GetSMS SM 18 failed! (The given location is empty.)
GetSMS SM 19 failed! (The given location is empty.)
GetSMS SM 20 failed! (The given location is empty.)
GetSMS SM 21 failed! (The given location is empty.)
GetSMS SM 22 failed! (The given location is empty.)
GetSMS SM 23 failed! (The given location is empty.)
GetSMS SM 24 failed! (The given location is empty.)
GetSMS SM 25 failed! (The given location is empty.)
GetSMS SM 26 failed! (The given location is empty.)
GetSMS SM 27 failed! (The given location is empty.)
GetSMS SM 28 failed! (The given location is empty.)
GetSMS SM 29 failed! (The given location is empty.)
GetSMS SM 30 failed! (The given location is empty.)
GetSMS SM 31 failed! (The given location is empty.)
GetSMS SM 32 failed! (The given location is empty.)
GetSMS SM 33 failed! (The given location is empty.)
GetSMS SM 34 failed! (The given location is empty.)
GetSMS SM 35 failed! (The given location is empty.)
GetSMS SM 36 failed! (The given location is empty.)
GetSMS SM 37 failed! (The given location is empty.)
GetSMS SM 38 failed! (The given location is empty.)
GetSMS SM 39 failed! (The given location is empty.)
GetSMS SM 40 failed! (The given location is empty.)
GetSMS SM 41 failed! (The given location is empty.)
GetSMS SM 42 failed! (The given location is empty.)
GetSMS SM 43 failed! (The given location is empty.)
GetSMS SM 44 failed! (The given location is empty.)
GetSMS SM 45 failed! (The given location is empty.)
GetSMS SM 46 failed! (The given location is empty.)
GetSMS SM 47 failed! (The given location is empty.)
GetSMS SM 48 failed! (The given location is empty.)
GetSMS SM 49 failed! (The given location is empty.)

Nel mio caso c'era un solo SMS, le altre celle di memoria erano vuote.
Per rendere il tutto pi? intrigante ho creato uno script che legge gli sms, e se riconosce del testo esegue dei comandi. Il file si chiama getsms.sh e l'ho posto nella cartella /root :

Codice: [Seleziona]
root@FonServer:~# cat getsms.sh
####################################
# GetSMS - controlla la presenza di
# nuovi SMS sulla periferica e se
# riconosce dei comandi esegue delle
# operazioni.
####################################

# Variabili
folder=/root/sms # Cartella di destinazione
newsms=$folder/newsms # Nuovi SMS
dbsms=$folder/dbsms # Database SMS
newcmd=$folder/newcmd # Nuovi comandi
dbcmd=$folder/dbcmd # Database comandi

numsms=3 # Numero di SMS da leggere

# Riempie il file newsms
gnokii --getsms SM 0 $numsms -d > $newsms

# Riempie il file newcmd
grep Text -A1 $newsms | grep -v "Text\|--" > $newcmd

# Conta i comandi
numcmd=$(grep -c "^" $newcmd)

# Se non ci sono nuovi comandi non prosegue
if [ $numcmd -eq 0 ]
then
exit 1
fi

# Analizza i comandi
for ancmd in $(cat $newcmd)
do
case $ancmd
in
On) client on            # Comando da eseguire
echo $ancmd >> $dbcmd;;
Off) client off          # Comando da eseguire
echo $ancmd >> $dbcmd;;
*) ;;
esac
done

# Aggiunge gli sms al database SMS
cat $newsms >> $dbsms

# Svuota i file newcmd e newsms
> $newcmd
> $newsms

exit 0

Lo script ? abbastanza commentato e dovrebbe essere comprensibile ... gli sms una volta letti vengono archiviati in appositi file e vengono cancellati dalla memoria della sim. Fruttando Cron ho impostato che questo script venga avviato ogni 2 minuti, ecco come:

Codice: [Seleziona]
root@FonServer:/etc/crontabs# cat root
# WARNING: this is an auto generated file, please use uci to set cron entries
# this file is generated from /etc/config/crontabs

*/2 * * * * sh /root/getsms.sh

E qui si conclude la parte interessante del sistema ... ma non finisce qui ... c'? una parte INTERESSANTISSIMA ( tanto per fare lo sborone  :-D  ) infatti ...

Nel file getsms.sh quando si riceve il comando " On " oppure " Off " viene eseguito rispettivamente il comando " client on " ovvero " client off ". client ? un eseguibile che ho creato in C e crosscompilato appositamente e che rigira il comando ad un'altra fonera situata in un'altra stanza e che controlla un carico. In pratica ho una fonera 2.0g in una stanza, alla quale ho collegato ( tramite hub usb 2 alimentato esternamente ) un hdd e la vodafone key. La fonera 2g ? collegata in modalit? client al router principale e fornisce connettivit? ad un pc desktop e collega in rete una stampante lan. La fonera2 fa il suo lavoro di gateway sms e di scaricare i torrent dall'1 di notte fino alle 10 di mattina ( impostato tramite cron l'avvio e l'uccisione del processo transmission  : Chessygrin :  ). Poi in un'altra stanza ho un'altra fonera+ ( ne sono circondato ... la mia ? una FONcasa  :-D  ) con DD-WRT ( per ora avevo questa disponibile ed ho utilizzato questa ), anch'essa collegata in client al router principaleche che riceve i comandi dalla fonera 2g tramite un programmino compilato appositamente ( il programma si chiama, guarda caso, server !!! ) ed in base al comando controlla uno dei suoi GPIO per accendere o spegnere lo scandabagno attraverso un rel? ottico !!!   :-D
In pratica ... da fuori casa ... invio un sms con scritto "On" alla vodafon key ... questo viene letto ed interpretato dalla fonera 2.0g che invia il comando alla fonera+ che imposta un GPIO a livello HIGH che mi mette in conduzione il rel? ed infine ... mi si accende lo scaldabagno !!!   :-D  La comodit? ? che posso accendere e spegnere un interruttore da fuori casa, ovunque mi trovi ... non devo sacrificare una fonera 2g per tenerla in bagno ma rendo i tutto decentrato e ognuno svolge piccoli compiti !

Questo ? il sorgente del client:

Codice: [Seleziona]
/********************************
 * File: client.c
 ********************************/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdlib.h>

#define IP_FON "192.168.0.253"
#define PORT 1745
 
#define MAX 8192 /* in bytes, 8KB */
 
int main(int argc, char *argv[]) {
if (argc < 2)
{
printf("Usage: %s on|off|close\n",argv[0]);
return 1;
}
int sd; /* Il socket descriptor del client */
struct sockaddr_in server_addr; /* l'indirizzo del server */
char buff[MAX]; /* dati di invio e ricezione */
 
/* Utilizzando la struttura hostent si definisce l'indirizzo del server */
struct hostent *hp;
hp = gethostbyname(IP_FON);
 
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
/* successivamente viene memorizzato nella struttura server_addr */
server_addr.sin_addr.s_addr = ((struct in_addr*)(hp->h_addr)) -> s_addr;
 
/* Viene creato il socket descriptor */
if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
printf("Errore nella creazione della socket\n");
exit(1);
}
 
/* Viene connesso al server */
if(connect(sd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0){
printf("Errore di connessione al server\n");
//exit(1);
}

/* Si inviano alcuni dati */
send(sd, argv[1], strlen(argv[1]), 0);
 
/* Si riceve la risposta */
/*recv(sd, buff, sizeof(buff), 0);
printf("Risposta del server: %s\n", buff);*/
close(sd);
return EXIT_SUCCESS;
}
Questo ? il sorgente del server:

Codice: [Seleziona]
/*************************
 * File: server.c
 ************************/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>

#define PORT 1745
#define MAX 8192 /* in bytes, 8KB */
 
int main()
{
char buff[MAX]; /* dati di invio e ricezione */
struct sockaddr_in server_addr; /* indirizzo del server */
struct sockaddr_in client_addr; /* indirizzo del client */
int sd_server, sd_client; /* i socket descriptor usati per identificare server e client */
 
/*
 * Creazione socket descriptor per il server.
 * AF_INET + SOCK_STREAM --> TCP, utilizzo del protocollo TCP (IPPROTO_TCP)
 */
if((sd_server = socket(AF_INET, SOCK_STREAM, 0)) < 0)
printf("Errore nella creazione del server\n");
return 1;
 
/*
 * Inseriamo nella struttura alcune informazioni
 */
server_addr.sin_family = AF_INET; /* la famiglia dei protocolli */
server_addr.sin_port = htons(PORT); /* la porta in ascolto */
server_addr.sin_addr.s_addr = INADDR_ANY; /* dato che ? un server bisogna associargli l'indirizzo della macchina su cui sta girando */
 
/*
 * Assegnazione del processo alla socket tramite la funzione BIND
 */
if(bind(sd_server, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
printf("Errore di binding\n");
  return 1;
/*
 * Si mette in ascolto con un massimo di 20 connessioni
 */
listen (sd_server, 20);
 while(1)
{
/*
 * Essendo un server monothreading, accetter? una sola connessione per volta
 */
int address_size = sizeof(client_addr); /* dimensione della struttura client_addr */
/* Con opportune modifiche si potrebbe vedere anche l'ip del client */
if((sd_client = accept(sd_server, (struct sockaddr *)&client_addr, &address_size)) < 0)
printf("Errore nella chiamata accept\n");
/* si ricevono i dati dal client */
recv(sd_client, buff, sizeof(buff), 0);
if (strncmp(buff,"on",2) == 0)
{
system("echo 1 > /proc/gpio/4_dir");
system("echo 1 > /proc/gpio/3_dir");
system("echo 1 > /proc/gpio/3_out"); // Strutta i pin 3 e 4
system("echo 1 > /proc/gpio/4_out");
}
if (strncmp(buff,"off",3) == 0)
{
system("echo 1 > /proc/gpio/4_dir");
system("echo 0 > /proc/gpio/4_out");
system("echo 1 > /proc/gpio/3_dir"); // Strutta i pin 3 e 4
system("echo 0 > /proc/gpio/3_out");
}
if (strncmp(buff,"close",5) == 0)
{
close(sd_server);       // chiude il server
return EXIT_SUCCESS;
}
/* chiusura del socket descriptor */
close(sd_client);
}
close(sd_server);
 
return EXIT_SUCCESS;
}

Per scaricare entrambi i file compilati cliccare qui
Entrambi funzionano sia su OpenWRT che su DD-WRT ... Non sono ottimizzati ... anzi sono stati codati in fretta e senza farci poi tanta attenzione ... non appena completo tutto faccia delle foto e le inserisco ... ma ormai il tempo che rimane ? poco, quindi credo proprio che rimarr? un progetto morto e non sfruttato appieno   :-(

33
Realizzazioni personali / [Power Injector + Power Extractor] Simple PoE
« il: Gennaio 12, 2011, 01:48:07 pm »
In occasione della realizzazione del secondo punto del mio link ho creato una guida per la realizzazione di un semplice PoE ( Power Injector + Power Extractor ).

Materiale necessario:
    2x Spezzoni di cavo LAN utp cat 5
    4x Connettori RJ45
    1x Presa alimentazione maschio
    1x Presa alimentazione femmina
    2x Connettori femmina/femmina RJ45



Prendere il primo spezzone di cavo UTP e incidere la guaina protettiva esterna che avvolge le 4 coppie di fili nel seguente modo.



Estrarre dalla guaina protettiva le coppie di fili bianco-marrone/marrone e bianco-blu/blu.



Spellare la parte finale delle coppie in modo da far uscire l'anima di rame e saldare assieme, con una goccia di stagno, le coppie bianco-blu/blu e bianco-marrone/marrone, come da foto:




Saldare la coppia bianco-blu/blu al polo centrale del connettore per l'alimentazione ( assicuriamoci che sia compatibile con l'apparato al quale lo vogliamo collegare ) con una goccia di stagno e la coppia bianco-marrone/marrone alla staffetta che sctringe i cavi, facendo attenzione che i due fili non si tocchino.





Ora passiamo al crimpaggio del connettore RJ45. Allineare i quattro fili rimanenti nel seguente ordine, facendo attenzione che siano ben dritti: Bianco-arancio, Arancio, Bianco-verde e, lasciando un po di spazio, Verde.



Crimpare il connettore e controllare ( qualore fosse possibile ) con un tester il corretto funzionamento dei fili 1,2,3 e 6





Effettuare la stessa operazione con un'altro spezzone di cavo per l'altra presa per l'alimentazione saldando sempre la coppia bianco-blu/blu al centro e la coppia bianco-marrone/marrone sulla staffa esterna, Crimpando il connettore RJ45 e controllando il cavo con il tester.




Per rendere tutto pi? completo, avvolgiamo le coppie di cavo che vanno allo spinotto per l'alimentazione e la giuntura della guaina protettiva con del nastro isolante.



Ed ecco completato un semplicissimo ( anche nella realizzazione ) PoE !!!



34
Elettronica & AP / Linksys WRT54GL inscatolamento + PoE
« il: Gennaio 12, 2011, 01:45:09 pm »
Sto realizzando un link su 3.3km con qualche ostacolo di mezzo, ho fatto qualche prova con il linksys e un'alfa da 500mw e ho visto che la cosa ? fattibile, perci? sto preparando il tutto. Per ora vi mostro come ho reso il linksys WRT54GL immune alle intemperie per metterlo sul terrazzo sotto una bella gregoriana da 24dbi e alimentato con PoE.
Ecco le foto:



Il tubo nero corrugato ? una presa d'aria




Ed ecco il PoE ... Un semplice power injector + power extractor ... naturalmente " homemade "






Vista dall'alto:


E questa ? la modifica dell'ultim'ora ( l'avr? scritto correttamente ???   :-D  ) :


la parte inferiore ... con frontalino linksys  :-D




led Power, WiFi e Internet


Dettaglio led + PoE


A link completo ... se ho voglia e tempo pubblicher? una guida e maggiori dettagli.

35
Presentazione nuovi utenti / Un saluto a tutto il Foro !
« il: Gennaio 12, 2011, 01:42:12 pm »
Salve a tutti, il mio nome ? marko.  :-D

Pagine: 1 2 [3]