Content
# #buellton — 2026-01-28
**10:29 [Kevin](https://slack.com/archives/C091185E1JN/p1769624994345809):** @Mason Radke the GeoSCADA mobile app has been "updated" and is now broken. Rather than mess with this app, I wonder if this would be a good platform to use your MQTT app that you used for the Nino Well?
**10:31 [Kevin](https://slack.com/archives/C091185E1JN/p1769625089165249):** That Grafina app is supposed to be pretty powerful according to Chad at SPICE.
**10:34 [Kevin](https://slack.com/archives/C091185E1JN/p1769625269525759):** but I like the IoT MQTT Panel app also. They have a "pro" version which we will probably want to move to so we can do away with the ads
**10:35 [Kevin](https://slack.com/archives/C091185E1JN/p1769625311776709):** Pro version is $9.49 per phone
**10:36 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769625397421639):** interesting
**10:36 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769625413797999):** im trying to think how we would get PLC or scada data out via MQTT
**10:37 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769625470219369):** I could also build an Autosys MQTT panel app
**10:42 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769625730732609):** how many data points do you think they would want to see on mobile?
**10:43 [Kevin](https://slack.com/archives/C091185E1JN/p1769625801751419):** there's not many now, maybe 25?
**10:43 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769625829371449):** that could get busy on the IoT panel app now.. but might not be bad
**10:44 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769625843906979):** tile them appropriately..
**10:44 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769625887462869):** or we build our own custom app and bill them? begin building our recurring revenue stream.
**10:45 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769625904558639):** work smarter not harder
**10:47 [Kevin](https://slack.com/archives/C091185E1JN/p1769626051260519):** I need to get them something quick for now if I am going to go away from the Geo app.
**10:48 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769626091412689):** ok. we can definately give it a go. We would need proof of concept for data flow and then we're off to the races.
**10:48 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769626102371449):** not sure how we would get geoscada data -> mqtt yet
**10:48 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769626125365969):** ignition does it
**10:50 [Kevin](https://slack.com/archives/C091185E1JN/p1769626225126399):** if you don't mind shifting gears, go ahead and spend some time on this proof of concept.
**10:50 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769626244697759):** ok, i just started on solvang water.. let me look into the scaling.. it shouldnt take long
**10:51 [Kevin](https://slack.com/archives/C091185E1JN/p1769626287962779):** yes, good. thank you
**10:54 [Kevin](https://slack.com/archives/C091185E1JN/p1769626482754769):** Productivity has MQTT comms, and Eth I/P. Maybe we can use it as a go-between?
**10:55 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769626533480349):** mqtt is a little more nuanced than that. we will need to make sure its capabale of sending mqtt messages to a broker. but i can look into that as well
**10:56 [Kevin](https://slack.com/archives/C091185E1JN/p1769626582539959):** yep, I know nothing about it. Not my department :grin:
**10:56 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769626603737489):** i know it wasnt going to work at the nino well. but dont remember why
**10:56 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769626616572159):** let me finish up solvang and i'll dive in
**10:58 [Kevin](https://slack.com/archives/C091185E1JN/p1769626729977799):** If it helps you at solvang, the scaling is in the PLC
**10:59 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769626746096779):**
![[F0ACDKWQC0G_image.png]]
**11:02 [Kevin](https://slack.com/archives/C091185E1JN/p1769626931765299):** If it helps for MQTT, all the PLC tags go into a OPC server before going to Geo
**11:02 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769626939247069):** kepware?
**11:02 [Kevin](https://slack.com/archives/C091185E1JN/p1769626944723909):** yep
**11:02 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769626950847399):** there could definately be something we can do there
**11:09 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769627395272409):** I think KepWare is going to be our ticket
**11:12 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769627568120169):**
![[F0ABD30V9KM_image_from_ios.jpg]]
**11:12 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769627579840079):** Seems pretty reliable. This one is still chugging away
**11:14 [Kevin](https://slack.com/archives/C091185E1JN/p1769627668869519):** so awesome
**11:26 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769628377309899):** this is never a good sign
**11:26 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769628377394059):**
![[F0ABHFQU7C6_image.png]]
**11:26 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769628392887109):** if the price is reasonable, they usually just publish it
**11:46 [Kevin](https://slack.com/archives/C091185E1JN/p1769629596814429):** oh boy
**11:47 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769629676045489):** i have another idea
**11:48 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769629680289929):** a better idea
**11:50 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769629821417969):**
```
Concept: Lightweight MQTT publishing bridge using Node-RED
Goal
Enable a 3rd-party MQTT dashboard to display selected SCADA values without changing existing PLC, Kepware, or Geo SCADA operation.
Current architecture
• PLCs send data to Kepware (OPC server)
• Geo SCADA reads values from Kepware for SCADA/HMI
Proposed addition
Add a small "bridge" service that publishes a defined set of tags to an MQTT broker:
PLCs → Kepware → (OPC UA) Node-RED → (MQTT) Broker → MQTT Dashboard
This runs in parallel with the existing SCADA path and does not interfere with Geo SCADA.
⸻
How it works
1) Node-RED reads values from Kepware via OPC UA
• Kepware exposes tag values through its OPC UA server endpoint (read/subscription interface).
• Node-RED acts as an OPC UA client:
• Connects to Kepware's OPC UA endpoint on the network
• Subscribes to the required tags (example: ~25 values)
• Receives updates on value change (or on a defined interval)
This is efficient and provides near real-time updates without polling overhead.
2) Node-RED publishes those values to the MQTT broker
• Node-RED formats the values into the payload structure the dashboard expects, for example:
• One topic with a JSON object containing multiple tags, or
• One topic per tag
• Node-RED then publishes to the MQTT broker using standard MQTT (with optional username/password and TLS if required).
3) The dashboard displays values from MQTT
• The MQTT dashboard subscribes to the topic(s) on the broker.
• As Node-RED publishes updated values, the dashboard receives them and displays the live SCADA values.
⸻
Implementation approach
Infrastructure
• Create a lightweight Linux VM (or small Linux host) to run Node-RED.
• Minimal resource footprint; designed for always-on operation.
Configuration steps
1. Confirm Kepware OPC UA endpoint access and security requirements.
2. Configure Node-RED OPC UA client connection to Kepware.
3. Define and map the tag list (approximately 25 tags) to be published.
4. Configure MQTT broker connection settings in Node-RED.
5. Publish test values to a test topic and validate dashboard display.
6. Promote to production topic naming and finalize documentation.
⸻
Benefits
• Avoids additional annual licensing for Kepware MQTT publishing.
• No changes to PLC logic and no disruption to Geo SCADA.
• Flexible: easy to add/remove tags and adjust message format later.
• Transparent: Node-RED provides simple monitoring/logging for troubleshooting.
```
**11:51 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769629868568019):** this can be done by installing and running node red on the scada server, creating a 3rd lightweight linux VM to run the node-red software and act as the bridge. or installing a raspberry pi attached to the network to act as the bridge.
**11:52 [Kevin](https://slack.com/archives/C091185E1JN/p1769629948819889):** let's put it on the server
**11:52 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769629973522349):** on the scada server? or make a new VM
**11:54 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769630046533399):** i actually dont recommend we run this on a windows machine
**11:54 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769630064286869):** there is are a couple of additonal layers that add complexity and increase the likely hood of issues
**11:54 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769630076512539):** Linux VM or Raspberry PI
**11:56 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769630205143079):** this has a high likely hood of working, how far do you want me to take the proof of concept/ how much time do you want me to spend on it?
**11:57 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769630271307249):** PoC would include creating the new VM, installing an OS, installing node-red, configuring/testing networking, testing OPC UA from kepware to node-red, pushing these values to the mqtt broker using node red. making a new dashboard to display one or two scada values
**11:58 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769630315838459):** that could take 3-4 hours
**12:00 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769630439933819):** their server has 128gb of ram! we're using like 8gb
**12:00 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769630445922999):** resource wise there is no issue.
**12:25 [Kevin](https://slack.com/archives/C091185E1JN/p1769631912855609):** do it
**12:25 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769631919483739):** copy
**12:25 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769631922125599):** thanks
**12:25 [Kevin](https://slack.com/archives/C091185E1JN/p1769631929930609):** yw
**12:25 [Kevin](https://slack.com/archives/C091185E1JN/p1769631946736419):** guess I didn't mess around with the ram on that server
**12:26 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769631969375599):** or i think we upgraded it? i kinda rememer
**12:26 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769631978638289):** ram is cheap
**12:26 [Kevin](https://slack.com/archives/C091185E1JN/p1769631989125199):** right, I remember
**13:55 [Kevin](https://slack.com/archives/C091185E1JN/p1769637310758789):**
![[F0ABZFQP4L9_screenshot_20260128-135356.png]]
**13:55 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769637335161649):** kepware service bounced
**13:55 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769637343017529):** after i made a change to the OPC UA server settings
**13:55 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769637351548339):** do the know we're working on it?
**13:56 [Kevin](https://slack.com/archives/C091185E1JN/p1769637375527369):** No I forgot to tell them
**13:56 [Kevin](https://slack.com/archives/C091185E1JN/p1769637378864999):** I will
**13:56 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769637393068589):** thanks.. some technical hurdles, but i think im past the worst of it
**14:06 [Kevin](https://slack.com/archives/C091185E1JN/p1769638011619749):** glad to know the alarms work
**14:07 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769638034610919):** yeah thats good!
**14:48 [Kevin](https://slack.com/archives/C091185E1JN/p1769640528968019):** let me know when I can jump on the server for a few to download some files
**14:49 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769640555011019):** i can pause while you do that if you want.. i just got the new server talking to kepware
**14:49 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769640565360409):** sorting out how to grab the data we want
**14:49 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769640580039609):** then we're not in new territory anymore.. the rest will be just like nino
**14:49 [Kevin](https://slack.com/archives/C091185E1JN/p1769640595641469):** if you are in a groove keep going
**14:52 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769640744206099):** whatas a good first/test value to grab
**14:53 [Kevin](https://slack.com/archives/C091185E1JN/p1769640813135439):** hmmm. if a plant is running, then maybe a flow rate?
**14:54 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769640854864309):**
![[F0ABJSH625U_image.png]]
**14:54 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769640856693729):** ok ill do influent flow.
**14:56 [Kevin](https://slack.com/archives/C091185E1JN/p1769641017921729):** oh yeah, wwtp influent flow is perfect
**14:57 [Kevin](https://slack.com/archives/C091185E1JN/p1769641021275129):** it changes a lot
**15:26 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769642774126189):**
![[F0ABM37BK9Q_image.png]]
**15:26 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769642783253039):** influent flow is not being pushed to the mqtt broker
**15:26 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769642808104239):** let me try to build a new dashboard to display this now
**15:33 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769643207650619):** @Kevin
**15:33 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769643212310919):**
![[F0ABHMDS1GD_image_from_ios.jpg]]
**15:33 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769643217002299):** Boom.
**15:33 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769643226215599):** Nailed it
**15:38 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769643510167169):**
[[F0AB5MA257H_screenrecording_01-28-2026_15-37-20_1.mp4]]
**15:38 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769643515858999):** its currently updating every 5 seconds
**15:40 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769643616492509):** @Kevin proof of concept complete and very successful. i am happy with how it working
**15:40 [Kevin](https://slack.com/archives/C091185E1JN/p1769643635698509):** Beautiful!!
**16:36 [Kevin](https://slack.com/archives/C091185E1JN/p1769647002148849):** are you still on the server?
**16:36 [Kevin](https://slack.com/archives/C091185E1JN/p1769647006159229):** @Mason Radke
**16:37 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769647043947499):** No. You can hop on. I need to close things up on there
**16:37 [Mason Radke](https://slack.com/archives/C091185E1JN/p1769647053426499):** You can close whatever is open
**17:15 [Kevin](https://slack.com/archives/C091185E1JN/p1769649324788069):** alright. thank you!