Dopo aver pubblicato il tutorial relativo all’invio di SMS con il chip ESP32, ho ricevuto diversi commenti tramite il sito web da parte di utenti che chiedevano un modo di inviare notifiche gratuite. Oggi vi mosterò una possibile soluzione; sarà anche l’occasione per parlarvi di IFTTT e dello sviluppo di componenti custom per il framework esp-idf.
IFTTT
IFTTT (IF This Then That – Se questo allora quello) è un servizio web che consente di realizzare applets collegando in modo semplice dei servizi secondo la logica di se accade questo, allora esegui quello.
Per capire meglio di cosa si tratta, citiamo alcune applets già pronte:
- inviami una mail se per domani è prevista pioggia
- condividi automaticamente su Facebook le foto che posto su Instagram
- attiva la modalità silenziosa del telefono quando arrivo al lavoro
Il vantaggio di IFTTT è proprio la grande disponibilità di servizi già pronti: da quelli che interrogano siti di previsioni meteo, a quelli che si interfacciano con i social networks più famosi, fino a servizi per dialogare con dispositivi hardware come braccialetti FitBit o i termostati Nest.
Oltre al sito web, IFTTT è disponibile via app Android e iOS: per questo tutorial andremo infatti ad utilizzare una funzionalità delle app, le notifiche.
Maker Webhooks
Tra i tanti servizi che IFTTT mette a disposizione, uno è particolarmente comodo per integrazioni con dispositivi IoT: il servizio Maker Webhooks. Come indica anche il suo nome, tale servizio consente di dialogare con le applet via web. Se aggiunto come This (trigger, ovvero fonte dell’evento che attiva l’applet), il servizio consente di inviare alla applet un evento tramite chiamata web (GET o POST), mentre se aggiunto come That (action, ovvero azione che compie l’applet), il servizio consente alla applet di effettuare una chiamata web:
Il servizio Maker Webhooks sarà il primo “mattone” della nostra applet: grazie ad esso potremo attivare l’applet con una chiamata web effettuata dal chip ESP32, passando anche dei parametri opzionali.
Notifications
Il secondo servizio che ci servirà si chiama Notifications: tramite tale servizio la applet potrà inviare notifiche al nostro cellulare. Unico requisito è che sul cellulare sia installata l’app di IFTTT e sia stato effettuato il login con lo stesso account IFTTT che crea l’applet.
Applet
Vediamo come costruire l’applet. Dopo aver effettuato la registrazione al sito, clicchiamo su New Applet.
Clicchiamo su this:
Inseriamo qualche lettera del nome “Maker Webhooks” per cercare il servizio, quindi clicchiamo sulla sua icona:
Selezioniamo l’unico trigger che il servizio mette a disposizione:
Inseriamo il nome dell’evento che attiverà l’applet. Possiamo scegliere un nome a piacere che dovremo utilizzare in seguito per effettuare la chiamata web:
Clicchiamo ora su that:
Cerchiamo e selezioniamo il servizio Notifications:
Clicchiamo ora sull’unica action che il servizio mette a disposizione:
Personalizziamo il messaggio visualizzato come notifica. Possiamo inserire anche dei parametri che saranno ricevuti, insieme al nome dell’evento, tramite la chiamata web:
Terminiamo la creazione dell’applet con Finish:
Chiave personale
Per poter effettuare una chiamata al servizio Maker Webhooks, dobbiamo conoscere la nostra chiave personale. Colleghiamoci alla pagina del servizio e clicchiamo su Settings:
Prendiamo nota della chiave che si trova dopo /use/ nella URL del servizio:
esp32_ifttt_maker component
Per semplificare l’interazione con il servizio Maker Webhooks, ho preparato un componente pronto per l’utilizzo con il framework esp-idf. Possiamo paragonare i componenti a librerie, elementi di codice riutilizzabili nei propri programmi. Sarà sufficiente infatti copiare la cartella che contiene il componente nella sottocartella components del nostro progetto per averlo a disposizione:
Il componente esp32_ifttt_maker è disponibile in un repository Github e il suo utilizzo è spiegato per esteso in una pagina dedicata del mio sito.
Demo
Ho preparato un programma di esempio che invia alcune notifiche tramite applets IFTTT; il sorgente si trova su Github.
Ecco un filmato che lo mostra all’opera (disponibili i sottotitoli in italiano):
Ciao Luca, ho provato questo esempio, all’inizio funziona correttamente ma dopo il quinto evento inviato mi da errore 4 per 10 invii e poi sempre errore 2.
questo è l’output:
Button pressed, sending events…
Sending HELLO event without values… success 🙂
Sending ALARM event with a value… success 🙂
Button pressed, sending events…
Sending HELLO event without values… success 🙂
Button pressed, sending events….. success 🙂
Sending HELLO event without values… success 🙂
Sending ALARM event with a value… error (4) 🙁
Button pressed, sending events…
Sending HELLO event without values… error (4) 🙁
Sending ALARM event with a value… error (4) 🙁
Button pressed, sending events…
Sending HELLO event without values… error (4) 🙁
Sending ALARM event with a value… error (4) 🙁
Button pressed, sending events…
Sending HELLO event without values… error (4) 🙁
Sending ALARM event with a value… error (4) 🙁
Button pressed, sending events…
Sending HELLO event without values… error (4) 🙁
Sending ALARM event with a value… error (4) 🙁
Button pressed, sending events…
Sending HELLO event without values… error (4) 🙁
Sending ALARM event with a value… error (2) 🙁
Ho abilitato il debug, l’errore 4 è MBEDTLS_ERR_SSL_BAD_INPUT_DATA -0x7100 , ma la request mi sembra corretta, mentre l’errore 2 è MBEDTLS_SSL_ALERT_MSG_BAD_CERT .
Sai dove potrebbe essere il problema? Grazie Andrea