Send files via Ignition tags?

Hi,

We just installed our first ignition system. We have one server (windows) collecting data using Ignition and the MQTT transmitter, and then we have a “full” Ignition with a MQTT Module (Linux) that we use for everything except for data collection. Everything works great, but we have a small task that I’m not sure how to solve.

We have a folder on the ignition server with the MQTT transmitter (The server on the edge) that contains pdf and XML files. We would like to store those files in a MS SQL (each set of xml and pdf files should be stored in the same row in the database).

We could purchase an Ignition SQL license on the ignition server on the edge, but I was wondering if there was a way to transfer the data via MQTT to the “full” ignition server and send it to the database from there?

Would this be a good use case for a “Records” functionality of the MQTT transmitter? Or is a bad idea to send 500kb binary files via MQTT that way? we could also purchase the SQL license for the server on the edge, but the other solution seems better from a architecture standpoint - just not sure about performance and maintainability.

Thomas

Take a look at this doc that shows how to publish files via MQTT Transmission. You’ll need to handle the DB inserts at the central Ignition Gateway via scripting or something similar - but this should get you part of the way there: Publishing Files with Transmission - MQTT Modules for Ignition 8.x - Confluence.

Hi,

Thank you for the link - that is exactly what I was looking for. I have setup everything per the guide, but the tags never gets generated on the “edge server” and I get the following error message:

Error processing RecordGeneratorRecord (Id=1)
java.lang.NullPointerException: null
at com.cirruslink.mqtt.common.util.TagUtils.removeTags(TagUtils.java:786)
at com.cirruslink.mqtt.transmission.gateway.files.FilesRecordListener.removePublishFileTags(FilesRecordListener.java:284)
at com.cirruslink.mqtt.transmission.gateway.files.FilesRecordListener.processFilesRecord(FilesRecordListener.java:121)
at com.cirruslink.mqtt.transmission.gateway.files.FilesRecordListener.recordUpdated(FilesRecordListener.java:86)
at com.cirruslink.mqtt.transmission.gateway.files.FilesRecordListener.recordUpdated(FilesRecordListener.java:43)
at com.inductiveautomation.ignition.gateway.localdb.PersistenceInterfaceImpl.notifyRecordUpdated(PersistenceInterfaceImpl.java:179)
at com.inductiveautomation.ignition.gateway.redundancy.RedundantPersistenceInterfaceImpl.doNotifyRecordUpdated(RedundantPersistenceInterfaceImpl.java:111)
at com.inductiveautomation.ignition.gateway.redundancy.RedundantPersistenceInterfaceImpl$RecordUpdateListener.recordUpdated(RedundantPersistenceInterfaceImpl.java:407)
at com.inductiveautomation.ignition.gateway.redundancy.RedundantPersistenceInterfaceImpl$RecordUpdateMessage.notify(RedundantPersistenceInterfaceImpl.java:457)
at com.inductiveautomation.ignition.gateway.redundancy.RedundantPersistenceInterfaceImpl$RecordUpdateListener.receiveCall(RedundantPersistenceInterfaceImpl.java:390)
at com.inductiveautomation.ignition.gateway.redundancy.QueueableMessageReceiver.receiveCall(QueueableMessageReceiver.java:47)
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.dispatchMessage(RedundancyManagerImpl.java:963)
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl$ExecuteTask.run(RedundancyManagerImpl.java:1038)
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:539)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)

onUpdate, target: [AjaxRequestHandler@1701777932 responseObject [org.apache.wicket.ajax.AjaxRequestHandler$1@3e1]

Does this error message give a hint on what I’ve configured incorrectly?

I am somewhat new to this feature myself, but looking at your error you posted, that looks like a “Record” error. Can you confirm if you have the Record or Files section configured? Hoping to learn along with you.

I never found out what the problem was, but I found out that it has something to do with the real time tag provider. I created a new tag provider and updated the MQTT modules to use that instead, and everything started working flawlessly after that…

This was a Ignition Edge project that was restored on a full ignition gateway, not sure if that has anything to do with it…

That kinda makes sense. The default provider on edge is [edge] as I recall. So making a new provider makes sense there.

Somebody else asked this question over in the Ignition forum, and it looks like this thread used to be the answer, but the above link to the documentation appears to be broken.

I believe this is the link to the current documentation:
https://docs.chariot.io/display/CLD80/Managing+files+with+MQTT+Transmission+and+MQTT+Engine