Vai al contenuto
PLC Forum


Interfacciare OpenHab ad impianto domotico DUEMMEGI tramite ModBus


omar1971

Messaggi consigliati

Ciao, ragazzi... ho,le idee un pò confuse, ma soprattutto non ho le basi....per mettere in funzione ciò che vorrei realizzare

Si tratta di gestire completamente o quasi parte dell'impianto domotico di casa realizzato con una nota marca Milanese DUEMMEGI con il software OpenHab. 

Tale prodotto comunica mediante il protocollo modbus su porta seriale 19200 baud; No parity; 8 data bits; 1 stop bit

Si può interagire mediante le word e bit es: 

word 1 bit 1 = uscita 1 

word 1 bit 2 = uscita 2 

word 1 bit 3 = uscita 3 

word 1 bit 4 = uscita 4

 oppure 

word 100 = temperatura ambiente.

Mi piacerebbe avere la possibilità di storicizzare dei dati e poterli visualizzare su di un grafico come nel demo di OpenHab

Ho installato OpenHab su Windows 7 ed il demo funziona, ho installato anche OpenHab Designer, ma non capisco il funzionamento.

Chiedo: esiste un esempio di ciò che ho espresso? chi mi può aiutare a capire come muovermi...

A progetto ultimato... vorrei utilizzare un RasberryPi come web server

ciao... grazie per l'aiuto

Link al commento
Condividi su altri siti


  • Risposte 141
  • Created
  • Ultima risposta

Top Posters In This Topic

  • smoothhands

    73

  • omar1971

    65

  • electricb

    2

  • Ivan Botta

    1

Ciao omar1971,

il problema principale è quello di interfacciare il pc (o altro) su cui hai installato openHAB

e il sistema della DUEMMEGI.

Ho dato un'occhiata al sito e al catalogo: se sei in possesso dell'unità DFCP 4 avresti

anche la porta LAN e in questo modo potresti sfruttare l'addon Modbus Tcp di openHAB.

Se hai puntato direttamente sul modbus RTU probabilmente hai la DFCP cha ha solo

RS232 e RS485 e a questo punto è un pò più complicato.

C'è un addon per openHAB che permette di inviare array di caratteri su porta seriale.

Prima di avventurarsi sulla RS485 e modbus RTU potresti provare ad interfacciare

il sistema domotico direttamente con la RS232.

Hai un pò più limitazioni ma per fare delle prove può essere un bon inizio.

Link al commento
Condividi su altri siti

Ciao grazie per l'attenzione

 Purtroppo la compnentistica installato non l'ultimo midello ... Ora mi con netto al sistema domotico tramite il modulo DFTS della DUEMMEGI con comunicazione seriale modbus rtu

 

Link al commento
Condividi su altri siti

Beh comunque da manuale sembra che il DFTS ha comunque la RS232

e c'è scritto proprio che anche sulla RS232 ci vuole

o il protocollo proprietario o il modbus RTU.

Fortunatamente leggendo meglio le info sul binding modbus pare che

sia possibile configurarlo anche per lavorere con modbus rtu su seriale.

A questo punto dovresti connettere con cavo seriale (crossed) il pc

con il DFTS, che ha un connettore frontale, e poi un pò alla volta tentiamo

di impostare openhab assieme. 

Non l'ho mai fatto però ci possiamo provare.

Link al commento
Condividi su altri siti

Impossibile.... Sul dfrs non puoi avere un collegamento mater slave modbus perché non è implementato.

Sul dfrs puo solo collegarti tramite 232 con protocollo 2mg dxp+

Per utilizzare il protocollo modbus rtu devi utilizzare il dfts o il dfcp attraverso il canale 232 o 485 o il dfcp4 con 232 485 e eth

Link al commento
Condividi su altri siti

Si ragazzi DFTS confermo Rs232 protocollo MODBUS RTU

Mentre il DFRS sull'unica porta seriale si ha il protocollo proprietario

 

Modificato: da omar1971
Link al commento
Condividi su altri siti

Si ragazzi :.. Scusate.. 

Devo aver letto male.!!!! I vapori dell'alcol bevuto durante le feste ... 

Scusate ancora !!!!!!!!!!!!

Modificato: da electricb
Link al commento
Condividi su altri siti

Allora direi di cominciare.

Come puoi leggere in questa discussione vanno scaricati alcuni file di archivio con quello che serve.

Se hai già installato il demo io fossi in te ricomincerei da capo per avere una installazione pulita.

Magari tieni l'installazione vecchia cambiando di nome alla directory.

Estrai il pacchetto runtime e quello addon (in una directory separata) di cui useremo solo qualche file.

Copi i file:

  • org.openhab.persistence.rrd4j-1.7.1.jar
  • org.openhab.binding.modbus-1.7.1.jar

nella cartella addon della directory di openHAB e questo dovrebbe essere tutto ciò che ti serve.

Poi va creata una copia del file openhab_default.cfg rinominandola openhab.cfg che diventerà

il file di configurazione di openHAB.

Visto che avevi già installato openHAB Designer lo apri e gli fai puntare la directory configuration

della nuova installazione di openHAB che hai appena fatto.

 

Schermata%202016-01-12%20alle%2018.54.31

 

Devi utilizzare l'icona a forma di cartelletta arancione che vedi nell'immagine qui sopra.

Direi che se ti porti a questo punto siamo pronti veramente per partire. Fammi sapere.

 

Questa, a parte i due addons, è la base di ogni nuova installazione di openHAB versione 1.x.

openHAB Designer è utile inizialmente perchè è dotato in alcuni casi di autocompletamento

e quindi semplifica l'inserimento di codice. Inoltre evita che, in alcuni casi, vi sia qualche

problema di codifica di carattere nei file di configurazione.

Modificato: da smoothhands
Link al commento
Condividi su altri siti

Ti ringrazio immensamente... per l'aiuto...

stasera non riesco a provare, presumo di non incontrare problemi eseguendo ciò che mi hai indicato

e spero che tu possa accompagnarmi per mano in questa nuova esperienza.

Grazie

Link al commento
Condividi su altri siti

A questo punto va collegato il pc al DFTS e va configurato il binding modbus.

Apriamo da Designer il file openhab.cfg che era stato copiato da openhab_default.cfg.

La parte che ci interessa è questa...

############################### Modbus Binding ########################################
#
# sets refresh interval to Modbus polling service. 
# Value in milliseconds (optional, defaults to 200)
#modbus:poll=

# host (mandatory)
#modbus:slave1.host=

# The data type, can be "coil" "discrete" "holding" "input"
#modbus:slave1.type=

# the TCP port (optional, defaults to '502')
#modbus:slave1.port=

# The slave id (optional, defaults to '1')
#modbus:slave1.id=

# The slave start address (optional, defaults to '0')
#modbus:slave1.start=

# The number of data item to read
# (optional, defaults to '0' - but set it to something meaningful)
#modbus:slave1.length=

# Value type, required for combined registers (details: http://www.simplymodbus.ca/FAQ.htm#Types)
# Can be "bit", "int8", "uint8", "int16", "uint16", "int32", "uint32", "float32"
# (optional, defaults to 'uint16')
#modbus:slave1.valuetype=

Come vedi ci sono delle cose opzionali e che quindi, se ti vanno bene così, puoi lasciare commentate.

Ad esempio l'intervallo di refresh impostato a 200msec.

La pagina web a cui fare sempre riferimento è https://github.com/openhab/openhab/wiki/Modbus-Tcp-Binding

La prima cosa a cui prestare attenzione è questa...

Remark : in "openhab_default.cfg", the modbus binding section has a wrong key "host", this doesn't work if you put your slave ip address here. So you have to replace "host" by "connection" witch is the right key as mentioned above.

Quindi, visto che tutti i parametri sono commentati con #, potremmo lasciarli dove sono per

prenderli come riferimento e aggiungere le righe che ci servono...

modbus:serial.slave1.connection=COM2:19200:8:even:1:rtu

Questa è la prima in cui il significato è quello seguente:

modbus:<slave-type>.<slave-name>.<slave-parameter>

dove <slave-type> può essere tcp oppure serial

<slave-name> è un nome scelto da te... ho messo slave1 e...

<slave-parameter> nel tuo caso è connection (al posto di host) con ulteriori

parametri [:baud:dataBits:parity:stopBits:encoding] 

La le altre righe che inserirei sono queste...

modbus:serial.slave1.lenght=4
modbus:serial.slave1.type=coil

Mancherebbero i parametri id e start.

Il parametro <id> è l'indirizzo dello slave in quanto openHAB agirebbe come master

iniziando le richieste sul bus (ma non hai indicato nulla nel tuo primo post) e il default è 1.

Il parametro <start> indica l'indirizzo di partenza dal quale estrarre un totale di <lenght> coils.

Visto che avevi indicato la word 1 e il binding imposta il valore 0 come default secondo

me potrebbe funzionare (di solito si usa un offset=1 dal valore indicato).

Non ti resta che avviare openHAB e vedere cosa succede.

Ti consiglio di utilizzare start_debug.bat in modo da vedere a console cosa sta

combinando openHAB.

Modificato: da smoothhands
Link al commento
Condividi su altri siti

grazie, ho provato a realizzare quanto hai descritto impostando il file configurazione mediante il Designer come segue, aggiungendo start 400 (presumo che sia la word che dovrei andare a leggere) visto che:

dalla word  001 alla 255 vengono riportati lo stato degli ingressi dal modulo 001 al 255

dalla word 257 alla 511 vengono riportati lo stato delle uscite dal modulo 001 al 255

quindi volendo monitorare il modulo uscita 144 uscita 1-2-3-4 ho pensato che il parametro start lo devo impostare a 400

ho avviato start debug ma vedo a schermo scorrere una valanga di stringhe e verso la fine del caricamento leggo si diverse righe modbus--- [ERROR] ---- read

quindi presumo ci siano problemi di comunicazione..

Domani riprovo con più calma..

############################### Modbus Binding ########################################

#

# sets refresh interval to Modbus polling service.

# Value in milliseconds (optional, defaults to 200)

#modbus:poll=

 

# host (mandatory)

#modbus:slave1.host=

 

# The data type, can be "coil" "discrete" "holding" "input"

#modbus:slave1.type=

 

# the TCP port (optional, defaults to '502')

#modbus:slave1.port=

 

# The slave id (optional, defaults to '1')

#modbus:slave1.id=

 

# The slave start address (optional, defaults to '0')

#modbus:slave1.start=

 

# The number of data item to read

# (optional, defaults to '0' - but set it to something meaningful)

#modbus:slave1.length=

 

# Value type, required for combined registers (details: http://www.simplymodbus.ca/FAQ.htm#Types)

# Can be "bit", "int8", "uint8", "int16", "uint16", "int32", "uint32", "float32"

# (optional, defaults to 'uint16')

#modbus:slave1.valuetype=

 

#Questa è la prima in cui il significato è quello seguente:

#modbus:<slave-type>.<slave-name>.<slave-parameter>

#dove:

#<slave-type> può essere tcp oppure serial

#<slave-name> è un nome scelto da te... ho messo slave1 e...

#<slave-parameter> nel tuo caso è connection (al posto di host) con ulteriori

#parametri [:baud:dataBits:parity:stopBits:encoding]

modbus:serial.slave1.connection=COM2:19200:8:even:1:rtu

 

#La le altre righe che inserirei sono queste...

modbus:serial.slave1.start=400

modbus:serial.slave1.lenght=4

modbus:serial.slave1.type=coil

Link al commento
Condividi su altri siti

Non ti preoccupare della valanga di stringhe... è normale.

Se metti la finestra a tutto schermo rimane tutto un pò più ordinato.

Il ragionamento che hai fatto sul coil penso sia corretto però io

metterei 399 per via dell'offset usuale.

Poi un appunto... io ho scritto COM2 ma bisogna trovare la

com esatta che utilizzi in questo momento.

 

Poi non sò quante uscite ha il modulo fisico per cui avevo

messo 4 come valore ma potrebbe essere anche di più.

Sto andando per tentativi.

Quando riprovi ad avviare openHAB ci ricopi le scritte di errore 

così proviamo a vedere se ci dice qualcosa che può aiutarci?

Alla prossima.

Modificato: da smoothhands
Link al commento
Condividi su altri siti

Ciao la porta COM2 è corretta, perchè la usco per interfacciarmi al software di programmazione della DUEMMEGI

i punti di uscita in questo caso (word 400) sono 4

per il riferimento word provo con 399 (anche se il manuale riporta una tabella di comparazione fra ID modulo e word)

per copiare le  stringhe di errore non so come fare perchè le righe sono sempre in rotazione quindi impossibile fare un copia ed incolla .. e nemmeno facile leggere / trascrivere correttamente l'errore. 

Comunque ci provo...

Link al commento
Condividi su altri siti

A un certo punto comunque lo sbrodolo di scritte dovrebbe fermarsi.

A quel punto puoi tornare indietro con il mouse e riuscire a fare copia e incolla.

Oppure nella directory logs di openHAB dovresti avere un file con tutti log di sistema.

Nel tuo caso, che hai appena iniziato, non dovrebbe essere particolarmente grande.

Quale id di partenza utilizzare è un problema minore... prima bisogna capire

perchè non riesce a comunicare.

 

Modificato: da smoothhands
Link al commento
Condividi su altri siti

eccoti ciò che ho copiato ...

---18:55:26.217 [DEBUG] [.p.internal.PersistenceManager:147  ] - Initializing rrd4j
 persistence service.
18:55:26.503 [DEBUG] [c.internal.ModelRepositoryImpl:64   ] - Configuration mode
l 'rrd4j.persist' can not be found
18:55:26.510 [DEBUG] [p.r.i.charts.RRD4jChartServlet:118  ] - Starting up rrd ch
art servlet at /rrdchart.png
18:55:27.611 [INFO ] [.service.AbstractActiveService:169  ] - Modbus Polling Ser
vice has been started
18:55:28.118 [ERROR] [i.modbus.io.ModbusRTUTransport:166  ] - Last request: 01 0
1 01 90 00 00 3d db
18:55:28.120 [ERROR] [i.modbus.io.ModbusRTUTransport:167  ] - failed to read: Er
ror reading response
18:55:28.121 [ERROR] [w.m.io.ModbusSerialTransaction:197  ] - execute try 1 erro
r: I/O exception - failed to read
18:55:29.124 [ERROR] [i.modbus.io.ModbusRTUTransport:166  ] - Last request: 01 0
1 01 90 00 00 3d db
18:55:29.125 [ERROR] [i.modbus.io.ModbusRTUTransport:167  ] - failed to read: Er
ror reading response
18:55:29.127 [ERROR] [w.m.io.ModbusSerialTransaction:197  ] - execute try 2 erro
r: I/O exception - failed to read
18:55:30.130 [ERROR] [i.modbus.io.ModbusRTUTransport:166  ] - Last request: 01 0
1 01 90 00 00 3d db
18:55:30.131 [ERROR] [i.modbus.io.ModbusRTUTransport:167  ] - failed to read: Er
ror reading response
18:55:30.134 [DEBUG] [.b.modbus.internal.ModbusSlave:342  ] - ModbusSlave:I/O ex
ception - failed to read
18:55:30.141 [INFO ] [.b.modbus.internal.ModbusSlave:310  ] - ModbusSlave error
getting responce from slave
18:55:30.344 [DEBUG] [b.m.internal.ModbusSerialSlave:117  ] - connection was nul
l, going to create a new one
18:55:30.854 [ERROR] [i.modbus.io.ModbusRTUTransport:166  ] - Last request: 01 0
1 01 90 00 00 3d db
18:55:30.855 [ERROR] [i.modbus.io.ModbusRTUTransport:167  ] - failed to read: Er
ror reading response
18:55:30.857 [ERROR] [w.m.io.ModbusSerialTransaction:197  ] - execute try 1 erro
r: I/O exception - failed to read
18:55:31.863 [ERROR] [i.modbus.io.ModbusRTUTransport:166  ] - Last request: 01 0
1 01 90 00 00 3d db
18:55:31.865 [ERROR] [i.modbus.io.ModbusRTUTransport:167  ] - failed to read: Er
ror reading response
18:55:31.867 [ERROR] [w.m.io.ModbusSerialTransaction:197  ] - execute try 2 erro
r: I/O exception - failed to read
18:55:32.872 [ERROR] [i.modbus.io.ModbusRTUTransport:166  ] - Last request: 01 0
1 01 90 00 00 3d db
18:55:32.873 [ERROR] [i.modbus.io.ModbusRTUTransport:167  ] - failed to read: Er
ror reading response
18:55:32.875 [DEBUG] [.b.modbus.internal.ModbusSlave:342  ] - ModbusSlave:I/O ex
ception - failed to read
18:55:32.882 [INFO ] [.b.modbus.internal.ModbusSlave:310  ] - ModbusSlave error
getting responce from slave
18:55:33.084 [DEBUG] [b.m.internal.ModbusSerialSlave:117  ] - connection was nul
l, going to create a new one
18:55:34.094 [ERROR] [i.modbus.io.ModbusRTUTransport:166  ] - Last request: 01 0
1 01 90 00 00 3d db
18:55:34.096 [ERROR] [i.modbus.io.ModbusRTUTransport:167  ] - failed to read: Er
ror reading response
18:55:34.097 [ERROR] [w.m.io.ModbusSerialTransaction:197  ] - execute try 1 erro
r: I/O exception - failed to read
18:55:35.102 [ERROR] [i.modbus.io.ModbusRTUTransport:166  ] - Last request: 01 0
1 01 90 00 00 3d db
18:55:35.103 [ERROR] [i.modbus.io.ModbusRTUTransport:167  ] - failed to read: Er
ror reading response
18:55:35.105 [ERROR] [w.m.io.ModbusSerialTransaction:197  ] - execute try 2 erro
r: I/O exception - failed to read
18:55:35.610 [ERROR] [i.modbus.io.ModbusRTUTransport:166  ] - Last request: 01 0
1 01 90 00 00 3d db
18:55:35.611 [ERROR] [i.modbus.io.ModbusRTUTransport:167  ] - failed to read: Er
ror reading response
18:55:35.613 [DEBUG] [.b.modbus.internal.ModbusSlave:342  ] - ModbusSlave:I/O ex
ception - failed to read
18:55:35.619 [INFO ] [.b.modbus.internal.ModbusSlave:310  ] - ModbusSlave error
getting responce from slave
18:55:35.821 [DEBUG] [b.m.internal.ModbusSerialSlave:117  ] - connection was nul
l, going to create a new one

Link al commento
Condividi su altri siti

Allora questo...

18:55:26.503 [DEBUG] [c.internal.ModelRepositoryImpl:64 ] - Configuration mode l 'rrd4j.persist' can not be found

lo risolviamo dopo. Non è nulla di particolare: ci servirà per generare i grafici che chiedevi.

Questo...

Last request: 01 01 01 90 00 00 3d db

è il modbus ADU (Application Data Unit) ed è una roba del tipo...

<header> <function> <starting address> <quantity of inputs> <CRC>

Mancherebbe l'informazione sui <quantity of inputs> stranamente... in quanto 0x0190 in esadecimale equivale a 400 in decimale

e sappiamo a cosa ci riferiamo.

Ah... forse ho capito... hai scritto male...

modbus:serial.slave1.lenght=4

è length il parametro corretto.

Modificato: da smoothhands
Link al commento
Condividi su altri siti

ciao, ho modificato il parametro length, lanciato il debug... ma non ho risolto nulla...

se non ti offendi ... per aiutarti , tempo fa avevo provato una connessione con il software movicon, e le prove effettuate erano andate a buon fine, riuscendo a comunicare con il sistema di supervisione, ti allego delle immagini delle configurazioni

 

 

Modificato: da omar1971
Link al commento
Condividi su altri siti

perchè dovrei offendermi?

ti avevo avvertito che si andava per tentativi...

ed è contemplata pure la non riuscita.

posta pure il materiale e vediamo se ne saltiamo fuori.

 

una curiosità... come è cambiato il log. se è cambiato?

Un'altra cosa da provare è cambiare la parità da even a none.

Sulla pagina del binding c'è scritto che supporta solo even e odd

ma in rete ho trovato anche qualcuno che faceva delle prove con none.

Un tentativo si può anche fare.

Modificato: da smoothhands
Link al commento
Condividi su altri siti

Un'altra cosa da verificare è l'id del dispositivo.

Dato che non abbiamo inserito nulla openHAB presume che sia

slave e abbia id = 1.

openHAB invece è il master.

Link al commento
Condividi su altri siti

bello non si capisce una cippa....

non riesco ad allegare immagini di dimensioni tali da poter visualizzare decentemente il contenuto..

Modificato: da omar1971
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

×
×
  • Crea nuovo/a...