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:
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
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! :-)