Dopo un buon periodo di inattività delle rilevazioni meteo causate dal malfunzionamento della vecchia stazione meteo, Cinzia mi regala un sistema completo nuovo sotto il 150 Euro una La Crosse Technology WS1640
Dopo aver installato la stazione sul balcone arriva la parte più interessante ovvero creare una app web e collegarci in tempo reale i risultati della stazione.
L'uscita usb della stazione è connesso ad un raspberry in wifi e alimentato da rete.
La stazione utilizza il cavo usb del raspberry per alimentarsi
Per prelevare i dati dalla stazione attraverso una piccola app in java sul Raspberry PI utilizzo questa libreria comoda e senza tanti fronzoli. La app in java preleva i dati e li invia ad una web-app sul server in formato json ogni tot minuti, oltre che alla sera scaricare tutto l'archivio sul dispositivo e rispedirlo al server in modo da prevedere eventuali buchi di rete durante la giornata.
La app è sul github.
Per la parte server il sitarello è realizzato con NodeJs compreso il servizio in ascolto del posto da parte del Raspberry PI qui il sorgente.
Seconda applicazione presente sul server è un piccolo batch per la generazione dei grafici con jfreechart. Visto che i dati sono molto non è possibile renderizzare tutto in tempo reale in javascript.
Naturalmente i dati sono tutti archiviati su MongoDB.
Questo è il sorgente del batch per i grafici.
Visualizzazione post con etichetta nodejs. Mostra tutti i post
Visualizzazione post con etichetta nodejs. Mostra tutti i post
giovedì 25 giugno 2015
Integrazione app Meteo con La Crosse Technology WS1640
Ubicazione:
13048 Santhià VC, Italia
giovedì 30 gennaio 2014
NodeJs - Oracle - No Bind Variables - "Error: ORA-01756: quoted string not properly terminated"
il problema della codifica con nodejs + oracle npm.
La soluzione è sempre quella di utilizzare le Bind Variables.
In alcuni casi dove non è possibile si procede con turn around:
var query = "UPDATE test SET DESC_RISPOSTA = 'á';
oracle.connect(dbOracleConnection, function(err, connection) {
connection.execute(query, [], function(err, results) {
console.log(err);
console.log(results);
});
});
si ottiene questo errore : Error: ORA-01756: quoted string not properly terminated
la soluzione più semplice è quella di utilizzare due funzionalità js per encodare correttamente la stringa
var query = unescape(encodeURIComponent("UPDATE test SET DESC_RISPOSTA = 'á'));
Ubicazione:
13048 Santhià VC, Italia
giovedì 16 gennaio 2014
Rover + Nodejs + Socket.io
Prosegue la parte di sviluppo del piccolo rover con Raspberry Pi + Arduino e Dagu 5.
Nella prossima fase prevede l'integrazione del giroscopio MPU5060
La parte di gestione da browser adesso utilizza Express.io appunto con le chiamate in socket. Molto più veloce rispetto alle classiche chiamate ajax.
Sulla sinistra i comandi principali per muovere il rover sulle 4 ruote motrici. In basso a sinistra il controllo del Tilt pannel della RaspiCam
Sulla destra lo stream della camera.
tutti i sorgente e le foto sul gitHub
Nella prossima fase prevede l'integrazione del giroscopio MPU5060
La parte di gestione da browser adesso utilizza Express.io appunto con le chiamate in socket. Molto più veloce rispetto alle classiche chiamate ajax.
Sulla sinistra i comandi principali per muovere il rover sulle 4 ruote motrici. In basso a sinistra il controllo del Tilt pannel della RaspiCam
Sulla destra lo stream della camera.
tutti i sorgente e le foto sul gitHub
Etichette:
arduino,
nodejs,
RaspberryPI,
socket.io
Ubicazione:
13048 Santhià VC, Italia
lunedì 13 gennaio 2014
Encoding - NodeJs + Oralce
Qualche problem sulle codifiche di Encoding con NodeJS + Oracle utilizzano la npm oracle ?
Su debian (il server dove è installato il client Oracle e la app di NodeJs) risolto inserendo nel file /etc/environment la stringa
NLS_LANG=.UTF8
naturalmente il db di riferimento è in UTF8.
[via github]
Su debian (il server dove è installato il client Oracle e la app di NodeJs) risolto inserendo nel file /etc/environment la stringa
NLS_LANG=.UTF8
naturalmente il db di riferimento è in UTF8.
[via github]
Ubicazione:
13048 Santhià VC, Italia
lunedì 23 dicembre 2013
Arduino + Raspberry PI + Dagu 5 Rover + Node.js
Dopo un lungo periodo di esperimenti e di fatica finalmente sono arrivato alla prima fase del piccolo progetto.
Dai questo video il rover che muove i suoi primi passi in casa... con qualche problema..
L'hw è un mix di arduino per il controllo dei motori edella tilt pan per la Cam, Raspberry che gestisce lo streaming della cam sulla rete, e la parte web con node.js. Mancano alcuni dettagli che sistemerò a giorni.
Tutti i sorgenti, le specifiche e l'hw potete trovarlo sul GitHub


link on GitHub Site
Etichette:
arduino,
Dagu,
nodejs,
RaspberryPI
Ubicazione:
13048 Santhià VC, Italia
martedì 25 settembre 2012
Import Geonames DB on MongoDB with NodeJs and Query
Continuo a pensare che le prestazioni di MongoDB siano veramente buone, ancora meglio se unite ad un linguaggio di scripting come NodeJs.
Ecco un esempio di utilizzo su moli di dati consistenti (testato con server MongoDB in locale quindi con poche risorse di sistema).
Resources:
Installare i seguenti moduli
MongoDB ODM Mongoose
npm install mongoose
Modulo per leggere file di grosse dimensioni
npm install carrier
Lib per il calcolo delle query
npm install moment
definiamo la struttura della collection, poi si prosegue con l'inserimento delle info.
var mongoose = require('mongoose');
var databaseName = 'geonames';
var connection_string = 'mongodb://localhost/'+databaseName;
var db = mongoose.connect(connection_string);
var schema_geonames = mongoose.Schema({
geonameid : Number,
name : String,
asciiname : String,
alternatenames : String,
loc : [Number],
feature_class : String,
feature_code : String,
country_code : String,
alternatenames : String,
cc2 : String,
admin1 : String,
admin2 : String,
admin3 : String,
admin4 : String,
population : String,
elevation : Number,
dem : String,
timezone : String,
modification_date : String
});
schema_geonames.index ({
loc : "2d",
asciiname : 1,
name : 1
});
var Geonames = db.model('Geonames', schema_geonames);
var carrier = require('carrier');
var fs = require('fs');
var filename = '/path/of/file/allCountries.txt';
var inStream = fs.createReadStream(filename, {flags:'r'});
carrier.carry(inStream)
.on('line',
function(line) {
var fields = line.split('\t');
var geonames = new Geonames({
geonameid : fields[0],
name : fields[1],
asciiname : fields[2],
alternatenames : fields[3],
loc : [fields[4],fields[5]],
feature_class : fields[6],
feature_code : fields[7],
country_code : fields[8],
alternatenames : fields[9],
cc2 : fields[10],
admin1 : fields[11],
admin2 : fields[12],
admin3 : fields[13],
admin4 : fields[14],
population : fields[15],
elevation : fields[16],
dem : fields[17],
timezone : fields[18],
modification_date : fields[19]
});
geonames.save(function (err) {
if (err)
console.log('Error save geonames');
});
}
)
.on('end',
function(){
console.log('end');
process.exit(1);
}
);
db.geonames.find().count();
8309522
Dopo aver aspettato che a procedura di import abbia concluso possiamo eseguire qualche semplice query es di $near:
GeonamesModel.find({ feature_class: 'P', loc : { $near : [45.32306, 8.41533] }} ,{},{ limit: 20 }, function(err, docs){
if (err) {
console.log("error in finding near", err);
throw err;
}
console.log('docs.length : ' , docs.length);
docs.forEach(function(doc)
{
console.log( doc.asciiname + ' (' + doc.admin1 + ')');
}
)
})
Risultato:
docs.length : 20
Vercelli (VC) 45.32306,8.41533
Larizzate (VC) 45.3,8.38333
Caresanablot (VC) 45.35736,8.39203
Torrione (VC) 45.31667,8.46667
Borgo Vercelli (VC) 45.35786,8.46303
Scavarda (NO) 45.33218,8.47477
Asigliano Vercellese (VC) 45.26146,8.40853
Villata (VC) 45.38776,8.43263
Prarolo (VC) 45.28206,8.47814
Desana (VC) 45.26966,8.35973
Quinto Vercellese (VC) 45.37966,8.36173
Lignana (VC) 45.28606,8.34393
Oldenico (VC) 45.40276,8.38103
Sali Vercellese (VC) 45.30986,8.32893
Pertengo (VC) 45.23556,8.41754
Casalvolone (NO) 45.40096,8.46463
Pezzana (VC) 45.26206,8.48504
Costanzana (VC) 45.23816,8.36813
Collobiano (VC) 45.39686,8.34833
Stroppiana (VC) 45.23026,8.45384
Tot time 205ms
[Sorgenti completi]
Etichette:
geonames,
mongodb,
mongoosejs,
nodejs,
odm
Ubicazione:
13048 Santhia' VC, Italia
Iscriviti a:
Post (Atom)

