Markdown source

#OpenHab Modbus

<abstract>
In questo articolo sarà descritta la modalità di funzionamento dell'Energy Meter SDM120 come esempio di interfacciamento di un dispositivo RS485 tramite Modbus sotto Openhab.
</abstract>

<img src="./CS-428_9AT-ISO.JPG" class="img-responsive center-block" width="30%"/>

##Hardware
Nella [CM3-Home](http://www.tanzolab.it/openhab) (figura seguente)

<img src="./cm3-home.jpg" class="img-responsive center-block" width="40%"/>

il bus RS485 è interfacciato al Compute Module 3 tramite un [FTDI FT4232](http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT4232H.pdf), che permette di ottenere 4 porte seriali complete da una interfaccia USB. Due di queste porte sono dedicate a due bus distinti RS485, con tanto di segnale di controllo TX enable, sui quali usare il protocollo Modbus e DMX512. Per questo esempio sarà usato un convertitore USB/RS485 [CS-428_9AT-ISO](http://sysbas.com/modules/catalogue/detail.php?inoGood_no=104&ino_code=18&list_change=&field=&keyword=&page=1) collegato ad una delle USB di una Raspberry PI3. Il dispositivo da collegare è l'[Eastron SDM120](http://eastrongroupco.hk02.057321.com/productsview/42.html)

<img src="./rs485_left.jpg" class="img-responsive center-block" width="40%">
<img src="./rs485_right.jpg" class="img-responsive center-block" width="40%"/>


##Configurazione
Per i particolari sulle modalità di base di installazione e gestione di un servizio sotto Openhab, 
fare riferimento all'articolo: @article='openhab_knx'.

Una volta installato il binding avremo i soliti tre file da configurare

###Service
La configurazione dell'SDM120 non è stata modificata, i parametri sono quindi quelli di default. Per i particolari sulla configurazione e sui registri esposti dal dispositivo fare riferimento ai link a fondo pagina.

Una volta collegato l'adattatore alla porta USB troveremo il nuovo device /dev/ttyUSB0

/etc/openhab2/services/modbus.cfg

<pre class="terminal">
#l'oggetto  serial è stato collegato all'adattatore USB/RS485 /dev/ttyUSB0
#l'SDM120 è a default a 2400bps
#Il colloquio con il dispositivo avviene in modalità RTU
serial.Voltage.connection=/dev/ttyUSB0:2400:8:none:1:rtu:35:1500:none:none

#il device è di tipo input
serial.Voltage.type=input

#l'ID del device è 1
serial.Voltage.id=1

#il registro di partenza del dispositivo per la variabile Voltage è lo 0 (ovviamente dipende dal device)
serial.Voltage.start=0

#La variabile è lunga due world da 16bit (4 byte)
serial.Voltage.length=2

#la variabile va interpretata come una float32
serial.Voltage.valuetype=float32

#per ogni ulteriore variabile va creato un pacchetto di configurazione simile al precedente

serial.Current.connection=/dev/ttyUSB0:2400:8:none:1:rtu:35:1500:none:none
serial.Current.type=input
serial.Current.id=1
serial.Current.start=6
serial.Current.length=2
serial.Current.valuetype=float32

serial.Power.connection=/dev/ttyUSB0:2400:8:none:1:rtu:35:1500:none:none
serial.Power.type=input
serial.Power.id=1
serial.Power.start=12
serial.Power.length=2
serial.Power.valuetype=float32
</pre>

In questo esempio sono letti solamente i parametri di tensione, corrente e potenza attiva della prima fase dai registri 0, 6 e 12.

###Item
A questo punto occorre associare gli item a queste configurazioni, la chiave è il nome dell'oggetto che è stato creato in modbus.cfg.
Si creano quindi gli item relativi ai valori desiderati con una formattazione di printout simile alla printf.

/etc/openhab2/items/modbus.items

<pre class="terminal">
Number L1V "Tensione [%.1f V]" {modbus="Voltage:0"}
Number L1A "Corrente [%.1f A]" {modbus="Current:0"}
Number L1P "Potenza A [%.1f W]" {modbus="Power:0"}
</pre>

###Sitemap
Per mostrare i valori sulla pagina di controllo del nostro sito occorre associarli al sitemap. L'associazione avviene tramite il nome che è stato assegnato all'item

/etc/openhab2/sitempas/nome del tuo site.sitemap

<pre class="terminal">
sitemap knx label="GUIOTT home" 
{
      ...
    
		Frame label="Modbus"
        {  
          Text item=L1V
          Text item=L1A
          Text item=L1P
        }

}
</pre>

Ora il servizio comincia a prendere i dati in polling dal device, con l'intervallo configurato su services.cfg. Si vedranno i led di TX e RX lampeggiare e i valori saranno aggiornati sulla pagina in questo modo:

<img src="./SDM120data.jpg" class="img-responsive center-block" width="40%"/>

Dettagli su come usare la console di Openhab, riavviare i servizi e abilitare un debug più dettagliato si trovano nell'[articolo su KNX](http://www.tanzolab.it/openhab_KNX).


## Links
* [Modbus binding](http://docs.openhab.org/addons/bindings/modbus1/readme.html)
* [Eastron SDM120](http://eastrongroupco.hk02.057321.com/productsview/42.html) 
* [Flavio Anesi, esempi di utilizzo](http://www.flanesi.it/blog/2015/02/13/contatore-eastron-sdm120c-modbus-per-monitoraggio-energetico/)
* [Brochure SDM120](./SDM120C.pdf)  
* [HTTP interface to SDM120](https://github.com/gonium/gosdm630)
* [Simply Modbus, librerie Modbus](http://www.simplymodbus.ca/)
* [Esempio di configurazione](https://community.openhab.org/t/modbus-energy-meter-reading-float-registers/14051/20)
* [SDM120 data, registri esposti e protocollo](http://www.flanesi.it/blog/download/sdm120c/SDM120-Modbus_protocol_V2.1.pdf?dl=0)

@include='bio_guido_ottaviani'
@include='bio_massimiliano_casini'
@include='bio_salvatore_imparato'



Le attività del TanzoLab si svolgono ogni mercoledi sera, salvo casi speciali, dalle ore 18:30 presso i locali della Acme Systems srl e consistono in:

  • Talk monotematici a cura di professionisti in vari settori tecnologici
  • Workshop pratici su elettronica embedded, produzione e informatica
  • Progettazione e realizzazione di nuovi prodotti embedded per l'IT

Le attività vengono coordinate tramite questo sito, in cui vengono pubblicati tutti i lavori svolti o in via di sviluppo, e tramite un gruppo Telegram con cui per interagire direttamente via chat con gli altri membri.