Arlo: dialogare con il sistema tramite Python e IFTTT

| |

Ma scusa, non sei tu (cioè me) che hai detto di voler escludere dall’equazione IFTTT? Sì, sono io, l’ho detto eccome, l’ho ripetuto pure nell’ultimo articolo di questa “non voluta serie” (Arlo: dialogare con il sistema tramite Python) però c’è un ma, come spesso accade. Il “ma” è dovuto da un temporaneo problema con l’account Gmail utilizzato per automatizzare l’accesso al sistema Arlo via web. Fino a risoluzione, ho scelto di passare tramite IFTTT ma con delle chiamate Web (Webhooks) che posso continuare a gestire via script Python, ti spiego rapidamente di cosa si tratta.

Lo script modificato

Partendo dal presupposto che ho inizialmente lavorato su uno script separato (creando ulteriore copia di backup di quello fino a qualche giorno fa funzionante), ho poi portato le modifiche nello script “in produzione“, saltando a piè pari l’uso della libreria Python Arlo e rivolgendomi direttamente a IFTTT, in questa maniera:

from dotenv import load_dotenv, find_dotenv
import datetime
import requests
import base64
import os
import sys

load_dotenv(find_dotenv())
IFTTT_KEY = os.environ.get("IFTTT_KEY")
BOT_TOKEN = os.environ.get("BOT_TOKEN")
CHAT_ID = os.environ.get("CHAT_ID")

MSG_ARLO_ARM = "Arlo ARMATO. Rilevo i movimenti in casa 🔒 (%s)" % datetime.datetime.now().strftime("%d/%m/%Y alle %H:%M:%S") # https://stackoverflow.com/a/7999977
MSG_ARLO_DISARM = "Arlo DISARMATO. Smetto di rilevare i movimenti in casa 🔓 (%s)" % datetime.datetime.now().strftime("%d/%m/%Y alle %H:%M:%S")

def ifttt_maker(event,access_token):
    url = "https://maker.ifttt.com/trigger/%s/json/with/key/%s" % (event, access_token)
    headers = {
       "Content-Type": "application/json"
    }
    response = requests.post(url, headers=headers)
    return response

def sendtotelegram(token,chatid,message):
    url = "https://api.telegram.org/bot%s/sendMessage?chat_id=%s&text=%s" % (token, chatid, message)
    response = requests.post(url)
    return response

try:
    if IFTTT_KEY is None:
        print("Environment variables have not been loaded!")
        sys.exit(1)

    basemode = str(sys.argv[1])

    if basemode == "Arm":
        print("Arlo: Arm")
        sendtotelegram(BOT_TOKEN,CHAT_ID,MSG_ARLO_ARM)
        ifttt_maker("arm",IFTTT_KEY) # Arm Arlo
    elif basemode == "Disarm":
        print("Arlo: Disarm")
        sendtotelegram(BOT_TOKEN,CHAT_ID,MSG_ARLO_DISARM)
        ifttt_maker("disarm",IFTTT_KEY) # Disarm Arlo
    else:
        print("Arlo: Invalid parameter specified")

    # Debug Crontab
    with open('/home/pi/Scripts/Arlo/debug.txt', 'w') as f:
        f.write(datetime.datetime.now().strftime("%d/%m/%Y alle %H:%M:%S"))

except Exception as e:
    print(e)

Cosa è cambiato

Nel file .env sarà ora necessario specificare la chiave privata per collegarsi al servizio di IFTTT e permettere ai Webhooks di funzionare correttamente (la recuperi dalla pagina maker.ifttt.com/use, facendo clic su Documentation), vanno via username e password per il sistema Arlo:

Arlo: dialogare con il sistema tramite Python e IFTTT

IFTTT_KEY=IFTTT-Token
BOT_TOKEN=MyTelegramBotToken
CHAT_ID=-000000000

Chiaramente IFTTT_KEY diventa adesso un parametro obbligatorio. All’interno dello script Python trovi poi una funzione che contatta IFTTT per scatenare un evento tramite maker.ifttt.com:

def ifttt_maker(event,access_token):
    url = "https://maker.ifttt.com/trigger/%s/json/with/key/%s" % (event, access_token)
    headers = {
       "Content-Type": "application/json"
    }
    response = requests.post(url, headers=headers)
    return response

Dovrai tu creare su IFTTT due nuove Applet che tramite Webhook digeriscano una richiesta (specificando il nome dell’evento, che in questo script trovi come arm e disarm) e a quel punto contattino Arlo per eseguire il comando desiderato. Nulla invece cambia nello script principale di controllo tado° che si occuperà della verifica della presenza dei dispositivi conosciuti in casa e quindi richiamerà – all’occorrenza – l’Arm o il Disarm della stazione base Arlo.

L’articolo si conclude qui. Se vuoi – come sempre – l’area commenti è a tua totale disposizione per dubbi, ulteriori informazioni o suggerimenti riguardo possibili miglioramenti.

#StaySafe

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Commenti
Oldest
Newest Most Voted
Inline Feedbacks
View all comments