james56
@james_p56 · Joined August 2026
Automation engineer · manufacturing
- Topics
- 2
- Replies
- 14
- Points
- 0
Forum Replies Created
We did it with commands on a smaller fleet and it was a mess every time a unit missed one. Nobody could tell which units had which interval.
Rebuilt our palletising screen with the belt widths set to match the real belts. Works for us.
No, the Uno handles both. But how is the relay powered, and where do the grounds meet? The jumping readings and the disappearing port sound like the valve, not the supply.
DTR is one of the old modem control lines. On the Uno it goes through a 100 nF capacitor to the reset pin, so the IDE can reset the board before an upload. Any program that opens the port toggles DTR, so the board resets. I fought this on a line counter at work last year.
Software side, two things together:
stty -F /dev/ttyUSB0 -hupcl # don't drop DTR when the port closes
ser = serial.Serial()
ser.port = '/dev/ttyUSB0'
ser.baudrate = 9600
ser.timeout = 2
ser.dtr = False
ser.open()
Be warned that on Linux the driver may still raise DTR for a moment on the very first open after boot, so this reduces resets, it doesn’t always kill them.
The sure fix is hardware: a 10 µF capacitor between RESET and GND on the Uno, minus to GND. That swamps the reset pulse. You then have to pull it out (or press reset by hand at the right moment) when you upload new firmware.
And for the drops in your total: also keep the count in EEPROM every few minutes, or have the Uno send a running total since it was flashed instead of since boot. A reset then costs you a few pulses, not the whole total.
Did this for a roof inspection drone, so here’s what I ended up with.
On the Pi, pymavlink reads the MAVLink stream from TELEM2. You only need two messages: GLOBAL_POSITION_INT (lat/lon in 1e7 degrees, relative altitude in mm) and SYS_STATUS (battery voltage in mV). Once a second, publish a flat object over MQTT with TLS:
from pymavlink import mavutil
m = mavutil.mavlink_connection("/dev/serial0", baud=921600)
state = {}
while True:
msg = m.recv_match(type=["GLOBAL_POSITION_INT", "SYS_STATUS"], blocking=True)
if msg.get_type() == "GLOBAL_POSITION_INT":
state.update(lat=msg.lat / 1e7, lng=msg.lon / 1e7, alt_m=msg.relative_alt / 1000)
else:
state["batt_v"] = msg.voltage_battery / 1000
if time.time() - last >= 1:
client.publish("v1/telemetry", json.dumps(state), qos=1); last = time.time()
Name the keys lat and lng, that’s what the Map card looks for by default.
On the board, a Map card. Bind Points to the drone’s latest values (lat, lng), and that’s your live marker. Bind Routes to Device readings over time with the keys lat,lng, and turn on Replay controls. The client can play the flight back at 1x to 10x and scrub. Add a value card for battery and altitude next to it. Satellite map style helps them see the panel rows.
1 message a second is far inside the default per-device limits. And keep it read-only: no commands from the board to the drone, the pilot flies it.
Isn’t there a relay feature? I’m sure I saw a gateway status called Pending somewhere in the gateway list.
The star is your dropout problem. 1-wire hates stubs, every leg reflects. Either run one line past every probe with tiny stubs, or split it: you can load the overlay twice on two pins and have two shorter buses. I’d also try 2.2k instead of 4.7k with that much cable.
disable-bt plus removing the console did it. 600 polls overnight, zero CRC errors, zero timeouts. I was on ttyAMA0 talking to… nothing useful apparently, and the script fell back to retries that sometimes hit. Changed it to serial0. Kevin, ttyAMA is the ARM PL011 naming, not USB.
No VPN at those sites I’d bet, that’s the point of the panel feature.
Router A: you can’t switch that from Hermetry, by design. “Allow panel access from my cloud account” is the router owner’s local consent and lives only on the router’s own Cloud page. Someone on site has to turn it on once. We had a farmer do it with me on the phone, it took five minutes: log into the router’s local panel from a laptop on the LAN, Cloud page, tick the switch. After that Open panel works from anywhere.
Router B: the firmware is too old for panel sessions. Update it through Hermetry’s firmware page. For a router that far away I’d do it on its own first, not as part of a wave, and check its Firmware tab for the Updates over LTE setting if it’s on the mobile uplink. Licensed devices have local approval and metered-link rules, so it may sit in Waiting until those allow it.
Couple of things for when it works. If the router is on LTE you get a confirm that the session may use up to 50 MB and is then closed. Sessions end after 30 minutes without use or 4 hours total. Only the person who opened a session can enter it, so a colleague opens their own. And what you change inside the panel is up to you, opening it changes nothing.
All the refusal messages are listed on Remote access to a router’s panel.
That was it, they had the pump board bookmarked directly. Sorted, thanks.
Is there a way back after Open a board? Our ops people end up three boards deep and then close the tab to start over.
I run plant monitoring for six customers this way, so here’s the setup that’s held up.
One organisation per customer company. You keep one account and are a member of each, with Admin, and switch between them from the organisation picker. The customer’s people are invited as User. A User can see devices, profiles, dashboards and alarms, acknowledge alarms, send basic commands and build personal boards. Viewing flows needs Admin (the permission is automation.read), so your Script block stays out of their sight. Never give a customer Admin “just for a minute”.
Dashboards: build them once in a template org, download the board as a file and import it into each customer org. Flows don’t travel in the board file, so you bring the flow over separately: Export it from the row menu on the flow list and Import it in each customer org (secrets have to be typed in again, and imported flows arrive switched off). With 4 orgs I keep the Script block code in git as well, it’s a 10-minute job per change. If that gets painful, think about moving the dosing calculation into the firmware and sending dose_g as telemetry; then the logic lives in one signed image.
Firmware: what Laura said, sign with Ed25519 in your pipeline, register the public key on the Firmware page, and leave Allow unsigned images off. Unsigned or re-signed images are then refused by the upload check.
The role table is on Users and roles. Branding with your logo is per organisation too, if you want it to look like your product.
Works out of the box on my Linux machine, never tried a Mac.
Thanks. Do I need to buy a library for the electrical side, or is there something in the base set for meters and breakers?

