Libreria Java Edge Agent Ar4k

Premessa, contesto di utilizzo della libreria

In Rossonet realizziamo soluzioni software personalizzate utilizzando prodotti Open Source. La definizione commerciale dell’attività che svolgiamo è “software factory” o “system integrator” a seconda dei progetti in cui siamo coinvolti.

Negli ultimi anni le modalità di analisi, progettazione e realizzazione dei prodotti software si sono evolute passando da un processo di produzione e mantenimento nel tempo simile a quello utilizzato nelle catene di montaggio, definito “a cascata”, verso nuove metodiche denominate “Metodologia Agile”.

Nell’organizzazione classica, “a cascata”, del lavoro di sviluppo software, la prima fase è un’ accurata analisi dei requisiti che, successivamente, devono essere implementati con le tecnologie scelte. Segue una attività di collaudo e mantenimento nel tempo per tutta la durata del “ciclo di vita del software”.

La Metodologia Agile, formalizzata nel 2001 con il “Manifesto Agile”, propone un modello di sviluppo in cui più cicli composti da analisi, realizzazione e collaudo si susseguono nel tempo. Ogni ciclo ha una durata temporale molto limitata e si conclude con la pubblicazione del prodotto realizzato.

DevOps, un esempio di Metodologia Agile

Nella pratica, l’adozione del modello di sviluppo Agile ha mutato le modalità con cui gli sviluppatori “costruiscono” le soluzioni software per i propri clienti. La diffusione di Internet, l’adozione di paradigmi di programmazione ad oggetti, le licenze Open Source e l’attenzione all’interoperabilità tra codice scritto da attori differenti sono tutti fattori che hanno creato le condizioni per lo sviluppo di una grande quantità di componenti software specializzati. Il lavoro degli sviluppatori è conoscere, utilizzare correttamente e assemblare componenti di questo ecosistema per costruire le soluzioni richieste dai clienti finali.

Nel nostro lavoro integriamo tra di loro componenti software per la maggior parte finanziati da RedHat, dalla Fondazione Apache e Eclipse. Non ha senso “reinventare la ruota” ogni volta, le funzionalità dei prodotti finiti che ci vengono richieste possono essere composte integrando software specializzati e focalizzando l’attenzione al dato che passa da un componente all’altro. Per questo crediamo che nello sviluppo applicativo la parte di lavoro più impegnativa è il collaudo; pensiamo che il valore di un software è nella sua affidabilità, nella quantità di errori corretti nel tempo applicandolo a scenari molteplici. Riscrivere funzionalità già disponibili e collaudate è una dannosa perdita di tempo.

I framework utilizzati coprono determinate funzionalità e vengono programmati con specifici linguaggi di dominio che possono essere maneggiati da specialisti competenti con semplicità. Per esempio, utilizziamo Processmaker per realizzare elaborazioni di dati organizzati per processo dando così la possibilità ai responsabili operativi di esprimere i flussi di lavoro con un linguaggio specializzato, BPMN, utilizzando un interfaccia grafica apposita.

Interfaccia di sviluppo di ProcessMaker

Dove possono funzionare i nostri software

Le soluzioni software che realizziamo sono agnostiche rispetto all’architettura hardware su cui vengono eseguite, possono funzionare in un cloud provider come:

Ma possono operare anche su macchine dedicate del cliente.

La nostra libreria, EdgeAgent (disponibile anche in GitHub), è sviluppata con un linguaggio di programmazione Java utilizzando il framework Spring ampiamente diffuso negli ambienti aziendali e industriali.

Architettura framework Ar4k

La libreria è composta da un modulo principale, ar4k-core, che gestisce le funzionalità di configurazione dinamica (in runtime), monitoraggio e gestione dell’infrastruttura su cui opera. La libreria è completamente compatibile con il framework Spring e i suoi componenti accessori.

Il modulo ar4k-activemq integra le funzionalità del broker ActiveMQ per lo scambio di messaggi in contesti IoT, tramite i protocolli di comunicazione MQTT (ISO/IEC PRF 20922) e AMQP.

Il componente ar4k-industrial gestisce l’integrazione dati in contesti IIoT, implementando le comunicazioni verso dispositivi industriali via OPC-UA (IEC 62541) e MODBUS.

ar4k-ai integra la capacità di eseguire “ragionamenti” sui dati con il motore a regole Drools e classificare, con algoritmi di “intelligenza artificiale”, usando le funzionalità della libreria Deeplearning4j.

Interfaccia di programmazione motore a regole Drools

Le classificazioni delle informazioni in formato testuale sono gestite con la libreria Apache OpenNLP nel modulo ar4k-ai-nlp.

Quando si presenta la necessità di coordinare il lavoro di più componenti per ottenere un cluster computazionale, il componente ar4k-hazelcast integra nel framework Ar4k la libreria Hazelcast. Hazelcast implementa le funzionalità base per coordinare più agenti che cooperano tra di loro nella stessa rete locale.

Per l’elaborazione, la trasformazione e il caricamento di dati (ETL), il componente ar4k-kettle integra la capacità di esecuzione della runtime di Hitachi Pentaho Kettle. Originalmente pensata per svolgere le funzioni di trattamento dati in un contesto di data warehouse, la libreria Kettle si presta ottimamente, nei paradigmi di programmazione degli ultimi anni, ad un utilizzo in qualità di micro-servizio.

Interfaccia di programmazione flussi dati di Pentaho Kettle

Il componente ar4k-video permette l’acquisizione dati da varie tipologia di telecamere connesse via USB o rete IP.

Le comunicazioni seriali sono gestite dal componente ar4k-serial-comm. Il modulo fornisce facilitazioni per lo scambio dati con macchine CNC via G-Code (DIN 66025/ISO 6983). La comunicazione verso Marlin, il software maggiormente usato per il controllo delle stampanti 3D, è particolarmente curata.

ar4k-pcap permette il monitoraggio del traffico di rete tramite l’interfaccia Pcap del sistema operativo ospitante. Tramite questo componente è possibile acquisire dati dai segmenti di rete per analisi di sicurezza, monitoraggio od ottimizzazione delle configurazioni dei protocolli di routing dinamico.

Il componente ar4k-watson permette l’integrazione con Watson Assistant motore di intelligenza artificiale di IBM.

ar4k-terminal e ar4k-vaadin implementano le interfacce utente testuali e grafiche della libreria. Entrambi i componenti sono estendibili. Le funzionalità da riga di comando sono realizzate utilizzando Spring Shell, le funzionalità grafiche tramite Vaadin.

Infine, il componente ar4k-seed permette al framework di operare installato in vari tipologie di sistemi:

Il modulo permette anche l’installazione automatica di apparati hardware tramite protocollo PXE e di eseguire la runtime 4Diac Forte (IEC61499). Le funzionalità di installazione automatica permettono la drastica diminuzione del tempo necessario per distribuire soluzioni software complesse; l’implementazione IEC61499 permette alla libreria di operare come controllore PLC su apparati embedded quali la scheda Raspberry PI o i PLC prodotti da UniPi.

Interfaccia di programmazione 4Diac ( IEC 61499 )
Scheda Raspberry PI 4 model B
PLC UNIPI Axon S105

Esercizi