SDK Python – Iottly Docs

SDK Python

L’SDK Python di Iottly gira sul device accanto al codice della tua applicazione. Comunica con l’Iottly Agent locale tramite un socket Unix, quindi non apre mai una connessione di rete diretta.

Installazione

pip install iottly-sdk

Richiede Python ≥ 3.8. L’SDK non ha dipendenze esterne oltre alla libreria standard.

Inizializzazione

from iottly import IottlySDK

sdk = IottlySDK(
    socket_path='/var/run/iottly/agent.sock',  # percorso default
    reconnect=True,                            # riconnetti automaticamente se l'agent si riavvia
)
sdk.start()

Chiama sempre sdk.start() prima di usare qualsiasi altro metodo. Stabilisce la connessione locale con l’agent.

Pubblicare telemetria

import time

while True:
    temp_cpu = leggi_temperatura_cpu()  # la tua funzione

    sdk.send({
        'stream': 'temperatura',
        'value': temp_cpu,
    })

    time.sleep(1)

Pubblicazione a batch

sdk.send_batch([
    {'stream': 'cpu',         'value': 18.4},
    {'stream': 'memoria',     'value': 312},
    {'stream': 'temperatura', 'value': 47.2},
])

Tutti i frame di un batch condividono lo stesso timestamp lato server.

Ricevere comandi

Registra un handler per i comandi a cui la tua applicazione vuole rispondere:

@sdk.on_command('riavvia_worker')
def gestisci_riavvio(params, reply):
    # params: dict ricavato dal payload del comando
    ferma_worker()
    avvia_worker()
    reply(ok=True, message='Worker riavviato')

Il callback reply invia una risposta strutturata all’operatore che ha emesso il comando.

Handler wildcard

Se vuoi gestire tutti i comandi:

@sdk.on_command('*')
def gestisci_tutti(nome_comando, params, reply):
    print(f'Comando ricevuto: {nome_comando}', params)
    reply(ok=False, message=f'Comando sconosciuto: {nome_comando}')

Integrazione logging

L’SDK include un handler logging standard che inoltra i record di log Python come frame di telemetria:

import logging
from iottly.logging import IottlyHandler

logger = logging.getLogger('miaapp')
logger.addHandler(IottlyHandler(sdk))
logger.setLevel(logging.INFO)

logger.info('Applicazione avviata')
# → pubblicato come { stream: '__logs__', level: 'info', message: 'Applicazione avviata' }

Questi frame vengono visualizzati automaticamente nel tab Log della dashboard Iottly.

Shutdown graceful

import signal

def su_sigterm(signum, frame):
    sdk.stop()
    raise SystemExit(0)

signal.signal(signal.SIGTERM, su_sigterm)

Esempio completo

import time
import signal
from iottly import IottlySDK
import logging
from iottly.logging import IottlyHandler

sdk = IottlySDK()
sdk.start()

log = logging.getLogger('demo')
log.addHandler(IottlyHandler(sdk))
log.setLevel(logging.INFO)

@sdk.on_command('ping')
def pong(params, reply):
    reply(ok=True, message='pong')

def su_sigterm(signum, frame):
    sdk.stop()
    raise SystemExit(0)

signal.signal(signal.SIGTERM, su_sigterm)
log.info('Demo avviata')

while True:
    sdk.send({'stream': 'heartbeat', 'value': 1})
    time.sleep(10)