Tutti gli articoli di Alberto

LetMeIn Project – Particle

Come anticipato nel post iniziale, mi sono avventurato nell’utilizzo di Particle.

E’ una piattaforma IoT che ho trovato molto semplice, intuitiva e completa, soprattutto per gli esperimenti che stavo facendo.
Sostanzialmente quello che mette a disposizione è un ecosistema già predisposto con un chip HW a basso costo per poter:

  • Programmare la logica di gestione e controllare 8 porte digitali e 8 analogiche
  • Una connessione WiFi, che permette al dispositivo di essere sempre connesso e gestito tutto remotamente
  • La possibilità di esporre le funzioni del codice applicativo tramite REST API
  • Un modello di sicurezza e autenticazione definito
  • Un ambiente integrato con il cloud che fornisce un IDE di sviluppo WEB e la possibilità di controllare il device tramite internet (anche di reinviargli una immagine aggiornata del sw

Con queste presupposti ho sostanzialmente realizzato un primo prototipo per la gestione remota del cancello di casa e del cancello  🙂

Il primo passo è stato di prendere confidenza con l’IDE e con la logica di programmazione, che è C++ (reminiscenze degli studi al’Elis
J)

Sostanzialmente è il classico approccio a Setup e Loop, dove il loop continua ad eseguire ciclicamente una routine di codice, controllando lo stato di variabili, input digitali o analogici e decidendo cosa eseguire

void setup () {

}

void loop() {

}

E’ inutile che spieghi io come si utilizza Proton (il chip particle): è possibile trovare una descrizione estremamente esaustiva e aggiornata sul suo sito
https://docs.particle.io/guide/getting-started/intro/photon/

Tornando a noi, parallelamente ho iniziato a prototipare il mio circuito di gestione che doveva:

  • Controllare un sensore di contatto per il garage
    per controllare apertura e chiusura
  • Comandare alcuni rele per controllare l’apertura di cancello e garage
  • Integrare un display LCD per poter visualizzare dei messaggi distatus

Ho ordinato praticamente tutti i componenti da Adafruit, che ha uno store fantastico e dei tutorial molto utili.
Dove quindi ho ordinato i componenti base (oltre ovviamente al particle)

Descrizione Product ID
Magnetic contact switch (door sensor) PID: 375
Full sized breadboard PID: 239
Monochrome 128×32 I2C OLED graphic display PID: 931
Terminal Block – 2-pin 3.5mm – pack of 5! PID: 724
Breadboarding wire bundle PID: 153
Particle Photon with Headers PID: 2721

L’unico piccolo problema, è che i costi di spedizione dagli stati uniti sono comunque abbastanza rilevanti e incidono (circa €20) quindi alla fine uno esce a comprare una serie di altre cose inexpensive ma di diverso tipo, ad es:

product id product name
64 Half-size breadboard
153 Breadboarding wire bundle
157 IR (Infrared) Receiver Sensor
160 Piezo Buzzer
165 TMP36 – Analog Temperature sensor
258 Lithium Ion Polymer Battery – 3.7v 1200mAh
373 Breadboard-friendly 2.1mm DC barrel jack
387 Super-bright 5mm IR LED
400 Extra-long break-away 0.1″ 16-pin strip male header (5 pieces)
434 Large Modular Snap Box – SMD component storage
725 Terminal Block – 3-pin 3.5mm – pack of 5!
848 Diffused RGB (tri-color) 10mm LED (10 pack)
1603 BMP180 Barometric Pressure/Temperature/Altitude Sensor- 5V ready
1608 Adafruit Perma-Proto Quarter-sized Breadboard PCB – Single
1739 Large Enclosed Piezo Element w/Wires

[Update]

Un altro sito di ecommerce italiano dove comprare componenti è Robot Italy, ha praticamente tutto quello che serve, importato dagli US e China, ma in magazzino italiano, quindi con costi e tempi di spedizione accettabili

[/Update]

 

In ogni caso, alla fine ho assemblato il mio circuito in una breadboard creando il prototipo. Come si vede nella prossima figura

Per il codice, ovviamente mi sono basato su uno dei molti sample disponibili online su particle.io, l’SDK è ben descritto e si riesce a iniziare rapidamente.
In sintesi tutto il gioco è stato nell’esporre end-point REST da poter invocare remotamente, i quali secondo una logica di controllo andavano a comandare il relè.
La cosa carina di Particle, è che con veramente qualche riga di codice, è possibile dire al firmware che una particolare funzione, va esposta come REST end-point; quindi voi scrivere la vostra funzione c++, e poi gli direte: questa esponimela rest J

Un piccolo esempio estratto dal mio codice:

const int pinRelayGarage = D3;

void setup() {
	// Initialize Screen
	SetupScreen();

	//pin initializations
	pinMode(pinRelayGarage, OUTPUT);
	digitalWrite(pinRelayGarage, LOW);


	// Initialize GateOp function as REST endpoint named GateOpen
	Spark.function("GateOp", GateOpen);

}



int GateOp(String args) {
	int status_code = -1;

	if (args == "OPEN" ) {
		UpdateScreen("Opening,Garage...");

		digitalWrite(pinRelayGarage, HIGH);
		delay(doorButtonDelay);
		digitalWrite(pinRelayGarage, LOW);

        	Particle.publish("Letmein","GarageOpen,Alberto");

	status_code = 1;

	}
}

La cosa  interessante che si nota è la funzione Particle.publish, che permette di alzare un evento dalla piattaforma particle. Questa può essere intercettata da un qualsiasi WebHook per essere notificato dell’evento.
Nel mio caso, ho intercettato questo evento tramite IFTTT, e tramite una mia custom receipt ho salvato in un file excel una entry ogni volta che viene aperto il garage, in modo da avere anche un log fisico di quando veniva aperta

Intrigante anche che Particle è aperta all’integrazione con diversi altri mondi, incluso Microsoft Azure 🙂

Questo era già chiaro dagli annunci di qualche anno fa, ma ora è disponibile

Insomma, solo con questa parte devo dire che mi sono affascinato a questo mondo dell’IoT, e sono riuscito a creare in veramente poco tempo e con competenze di base i elettronica e reminiscenze di C++ una circuito funzionante.

Alla prox puntata
Alberto

Articoli della serie:

LetMeIn Project – Intro

Ho deciso di riattivare  il mio blog, con la voglia di condividere alcune piccole esperienze che sto facendo, un po’ per gioco, un po’ per esperimento e un po’ per mentene viva la passione della tecnologia che mi ha sempre accompagnato nella mia vita.

Da un breve serata al Fablab di Torino, dove Roberto Chinelli mi ha invitato a passare una serata dove Roberto Nocera presentava quello che all’epoca si chiamava Spark, ed ora Particle in breve un piccolo microchip programmabile IoT con WiFi inegrata.

Da li, l’idea di giocare un po’ ho iniziato a creare un piccolo progettino per il controllo remoto dell’accesso al cancello e garage di casa, semplicemente per evitarmi la pigrizia di portarmi le chiavi di casa quando esco per correre ma, semplicemente avendo con me il telefono, avere la possibilità di tornare a casa.

Nei prossimi post pubblicherò alcuni riferimenti agli esperimenti fatti nello scorso annetto e mezzo, che in sintesi sono stati:

  • La programmazione di base di particle
  • L’interfacciamento con un display LCD per la visualizzazione messaggi
  • Il controllo di relè di comando
  • L’integrazione con il telecomando cancello garage
  • Lo sviluppo dell’applicazione cliente su Windows UWP x Phone
  • Lo sviluppo di un APP sullo smartwatch Garmin Fenix2
  • L’integrazione con i servizi voce di Microsoft Cortana
  • L’integrazione con il citofono promelit per il comando del cancelletto di casa.

Chissà che prima di completare tutto, non abbia ulteriormente evoluto l’applicazione, tra le prossime idee ci sarebbe quello di integrare tutto su Azure IoT… ma vedremo un po’

Stay tuned
Alberto

[update]

Articoli della serie:

Termostato Netatmo – CasaCasu Build Log

Recentemente ho dovuto anche io cedere e aggiornare qualche pezzo di tecnologia in casa.

Ho comprato un NetAtmo (Termostato gestibile via Wifi). Dopo solo qualche settimana di utilizzo, sono già estrememante soddisfatto del cambio: siamo passati dal dire quando il termostato doveva accendersi per ragionavolmente avere la temperatura desiderata, al dire a che ora vogliamo una certa temperatura, e lasciare a lui il calcolo di quanto prima partire; per non parlare della possibilità di gestirlo via mobile 🙂

Avendo ricevuto una discreto interesse da amici e colleghi, posto di seguito alcune foto relative alla mia esperienza di installazione dello stesso, incluso l’adattamento ad una presa italiana.

WP_20150210_005 WP_20150210_007

Il Termostato BTicino precedente, dove mi sono diligentemente fotografato la connessione prima di iniziare qualunque tipo di danno. I cavi da collegare al netatmo sono C e NO; gli altri due li ho isolati.

WP_20150210_009WP_20150210_008

Come si può vedere, il nuovo termostato è più grande della scatola standard

WP_20150214_002 WP_20150214_003

A questo punto serve un minimo di DIY, prima di tutto ho comprato un (come si chiama? da noi si chiama “castelletto” non so il nomer corretto); l’ho ritagliato, perché essendo fatto per essere posizionato sopra la scatola avevo bisogno di ridurre la dimensione e far si che si incastrasse a “filo” del muro all’interno della scatola.

WP_20150214_004 WP_20150214_006 WP_20150214_007

Successivamente ho fatto un paio di buchi con un trapano, per poter montare il retro di netatmo.

WP_20150214_008

WP_20150214_009

Ovviamente al primo giro, mi ero dimenticato di  montare il lamierino che è presente all’interno del kit, per poter coprire il contorno del termostato, e voilà!

WP_20150214_010 WP_20150214_011

Infine, come alternativa, segnalo che si sarebbero potuti usare dei Fisher appositi, che permettono questo tipo di connessione. Nel caso del mio muro, ero nel dubbio ci fossero vicino dei tubi, e volevo evitare qualunque tipo di problema

WP_20150215_001

Xbox One e VodafoneStation2

XboxLogoHo appena completato il passaggio verso Vodafone della mia linea telefonica di casa.
Tutta la procedura è andata a buon fine senza problemi tranne la connessione a Xbox Live.

Il problema risiede su una procedura automatica che la Vodafone Station fa partire ai dispositivi connessi tramite cavo ethernet.
Infatti mi ero accorto di questa modalità durante la prima configurazione, dove una volta collegato il computer via cavo, il browser si era aperto su una pagina di configurazione della VS.

Per risolvere il problema sulla Xbox, è sufficiente aprire Internet Explorer dalla console, e navigare verso un sito qualsiasi. Il browser della Xbox viene rediretto verso la procedura di configurazione della VodafoneStation così come avviene per il pc. E’ necessario annullare la procedura e uscire dal wizard di configurazione.

Una volta effettuato questo piccolo passagio, xbox riesce a collegarsi correttamente al servizio xbox live.

Per maggiori info, segnalo questo thread nel forum Vodafone

http://lab.vodafone.it/forum/viewtopic.php?f=25&t=42125&start=15&sid=762bc803751c9a2d2d8e815ec6dfbf1b

HTH,
Alberto

ZuCopter – FullAuto Test #1 including copter flyaway – recovered :)

I’d like to share my experience with my copter (aka ZuCopter) during my first full test using AUTO mode. My quad is ArduCopter, 3DRobotics Quad-C frame using APM 2.5 Firmware 2.9.1b

The plan was to go around the house, full automated, including takeoff and landing. This was executed quite smoothly at the first run J, Then I said… let’s try that again; I relaunched the same mission without turning the copter off or resetting, and…. something didn’t go so well: the quad decided to go full throttle without following strictly the programmed waypoints. I was good to have RTL mode programmed on my radio, so I was able to recover the flight back to manual mode.

You can see the recorded video from the GoPro installed on the quad.

 

 

This was the original plan:

 

The first run was quite well done I would say. Only thing I noticed is that arducopter do not strictly reach the altitude set at the waypoint. When it reaches the waypoint, it doesn’t matter if the altitude is lower, in contibue both increasing altitude and continue to the next waypoint.
From the data extraced from the LOG, you can see the waypoint altitude was reached only after waypoint 3.
Blu data are altitude requested by WayPoint Command, and the green is the barometric measurement.

This is the first run importing the .gpx information from the arducopter datalogger to Google earth.

As for the second run, I executed it using the same mission, without changing the mission nor switching off the quad. From the video you can see the strange behaviour:

  • Copter not heading straight (camera, which is the head of the copter, was instead on side)
  • Throttle-out was 100% most of the time during auto.
  • Waypoints were passed very large

Then I prefere to engage RTL to bring the copter back home.

This was the first run from another angle:

And this is the second run where you can see the different copter modes I set. The yellow below was the original AUTO mode, blue STABILIZE, red RTL

 

As you can see from the datalogger, most of the yellow line (throttle-out) during the first part of the flight is set flat to 1000. So full motors.

The image below was merged to the mission mode sequence: yellow area is the lower graph is the AUTO MODE (graph below is gathered by importing to excel the logs and trying to align them as much as possibile to verify what happened in what mode; it is not perfect).

The last thing I do not understand, is:

  • why during the RTL the altitude decreased from 50mt to 10mt and I had to switch manual again to bring it back to a correct altitude?

I am attaching my log to this just in case somebody have any idea.

 

Overall I had quite fan, and was pretty happy I did program the RTL mode easy to be selected from my Radio switch.

–Alberto

 

2013-04-26 10-50 4-log.zip

2013-04-26 10-50 4_Analysis.xlsx

ZuCopter – My Arduino UAV

I had this post there since ages, and I thought to just share it as some friends were asking me for one of my (somehow hidden… but not really) passion about this Gadget.
Since several months, I am a proud owner of an arduino based quadricopter. I started following this topic since some years, and got more and more interesting when Chris Anderson (editor in chief of Wired US), founded his social network DIYDRONES http://www.diydrones.com/

I started chasing my wife to be able to spare, month after month, some budget for this project (every family has its own board of director, where the wife controls 9 out of 10 seats J). But at the end, I was able to get it approved and funded!

Here are some picture of the work and some video result so far.
(some more will come later with the nice season)

 

The Arducopter Kit

Assempling the Frame

Assembling and soldering the power distribution

 

Soldered the main flight control board and testing all the sensors (magnetometer, barometer, Compass, 6DOF, GPS, ….) with the telemetry on the pc.
(recognize the bing maps embedded on the mission planner sw, where you can program waypoint for the gps)

 

Assembly and testing with the TX

 

And here is the result:

 

Finally I also added a Gimbal Camera Mount, to stabilize the camera orientation compensating on the quadricopter pan and tilt

 

 

 

Some Recorded Videos

 

 

SharePoint 2010 Organization Profiles

As I reported on one of my first posts about SP2010, one nice thing that has been implemented within the new User Profile Service Application, is the presence of the Organization Profiles.

I was browsing for some info about it (since today I was discussing on the usage of this component with Marco Rizzi); there is not yet much information around this topic and I came across this post by Peter Gerritsen which reports some nice information.

The whole idea is to have a new type of Profile for “Organizational” needs: Using the Organization Profile (and also beeing able to extend it using Using Sub-types) this feature can be used in order to create several type of organizational aggregations, depending on your company needs. In example: Divisions, Departments or even Legal-Entities (in case of a multi-company group).

image

 

Main issue when you were implementing this using Moss2007 is that all your hierarchy logic was build around the “Manager” property of users, but: what happen if your manager change job, and your office or department do not have a new manager assigned in time? Or what if a manger have two different role inside two organizations? You’ll end up having a broken/unclear hierarchy.

This component try to address this need.

 

image

Every organization can have defined who is the “leader” of this organization and who are the members.

Members can be included also by automatically include direct reports of the leader so based on the company hierarchy.

The members could also be associated by ActiveDirectory groups.

image

 

The nice nice thing about it is… that you will need to develop all the UI and end-user functionality by yourself 🙂

As far as I found so far, currently there is no any impact on the User Profile page and this information, although present, won’t be displayed. Peter in his post refer that MS did not make it to complete this feature since it has many different interesting approaches and evolution path.

As always, what we can do is to leverage on this infrastructure to build our logic if we need to include this type of information. The Object Model exposes all information from the class Microsoft.Office.Server.UserProfiles.OrganizationProfile 

As far as I analyzed it. It is currently not that stable yet: some components do not work 100% correctly, but we know it has not been release yet (so there is always time for some bugfixing)

HTH

Alberto

Live Online SharePoint Saturday EMEA

image As far as I know, this will be the first SharePoint Saturday held in EMEA Region.
This formula of events held on Saturday, is pretty famous in the US, but not as much in Europe. We’ll see how it goes.
This version is an online one. It wouldn’t have been possible to organize an in presence event like it is for the SPSatrurday in the US.

Though, It would be nice to have one in italy too. Claudio Brotto, one of the italian mvp, is already a speker of the current emea chapter.

Follow the buzz on twitter: #SPSEMEA

I’ll be joining online sometime on Jannuary 23rd, 2010 (there’s a conflict with the italian UGIAL.NET 5th conference, which for the second time is on my own company’s offices).

We’ll see how it goes.

Graffiti CMS – Remove Google Analytics tracking for selected users

As I posted on this “warm-up” post I am running my personal blog using Telligent Graffiti CMS, main reason: I like telligent’s products and approach, and I wanted to test this product of them on my shoulder.

I am very happy about it, set it ip and customezed it very quickly; the bad thing is that its future is not clear yet (is it sometime it is not updated). Anyhow, for the time been, I keep using it and sometime I need to implement some changes.

 

This time I wanted to stop Google analytics, which I implemented on the site, to track my own site access (or generally speaking, any access from an administrator)

To accomplish this, I found this article by google “How do I exclude my internal traffic from reports?” , which reports how to set-up a custom filter to exclude traffic coming with special conditions.

Among this, there is the option to set a variable, using a JavaScript call

pageTracker._setVar(‘siteadmin_access’);

This variable is set within the Analytics cookie, which last for some time (but since cookie can be reset, I wanted to be set for all admin sessions)

Having understood that, I then needed to define how, within Graffiti CMS, to execute this javascript call: it needs to be executed only from the users which I wanted to exclude.
I then went through the “Graffiti CMS” official documentation (read: I went through someone else code to find out stuff similar to mine 🙂

The result is the following: to modify the layout page of the theme you are using (in my case SleepyBlue) which can be found here: Home > files >themes > SleepyBlue > layout.view

On the bottom of the page, befor the </html> closure, I added the following code:

#if ($macros.IsNotNull($user))
#if($macros.CanViewControlPanel($user))
<script type="text/javascript">pageTracker._setVar(‘siteadmin_access’);</script>
#end  
#end

Note: Since this call needs the pageTracker object to be instantiated, it require the Analytics call to he executed before.
Within Graffitics CMS, there is a specific call to include a generic analytics plug in, which is:

$!data.Site.WebStatistics

This call, in my customized-theme case, is called within the <head> section of the page.
(if you’re wondering where the Goolge js need to be defined in graffiti: go to the “Control Panel > Site Options > Settings > Web Statistics”)

 

 

Now all I needed to to, is from the Analytics Settings to create a filter:

From the Analytics Profile, add a new Filter.

 

image

 

Using IE8 Developer Toolbar, I verified that the cookie was corretly setup

image

 

As you can see, the cookie expires is in two year 🙂

HTH,
Alberto