Vendo mi caja de monitorización a empresas de piscinas: la lógica de flow y el firmware se quedan conmigo
Traducido del English por IA ·
Una pregunta algo de negocio de un aficionado que, sin querer, tiene clientes.Construí una caja de monitorización de piscinas (ESP32-S3, pH, ORP, temperatura, interruptor de flujo) para mi propia piscina. Un amigo que dirige una empresa de mantenimiento de piscinas la vio y ahora 4 empresas de mantenimiento las quieren para las piscinas de sus clientes. Unas 60 cajas en total hasta ahora.Todo funciona en mi única organización de Hermetry. La parte útil es un flow con un bloque Script que convierte pH, ORP y temperatura en una sugerencia de dosificación («añadir 300 g de X»). Me llevó meses de ajuste y básicamente es el producto. El firmware también incluye mi rutina de calibración.Ahora cada empresa quiere iniciar sesión y ver sus piscinas. Preguntas:- ¿una organización para todos o una por empresa?- ¿cómo les dejo ver paneles y alarmas sin que vean (y copien) el flow?- ¿hay algo para proteger el firmware cuando las cajas están físicamente en sus manos?No quiero ser secreto con los clientes, solo que un competidor consiga la lógica registrándose como «cliente».
Bit of a business question from a maker who accidentally has customers.
I built a pool monitoring box (ESP32-S3, pH, ORP, temp, flow switch) for my own pool, a friend who runs a pool service company saw it, and now 4 pool service companies want them for their client pools. About 60 boxes in total so far.
All of it runs in my one Hermetry organisation. The useful part is a flow with a Script block that turns pH, ORP and temperature into a dosing suggestion («add 300 g of X»). That took me months of tuning and it’s basically the product. The firmware also has my calibration routine in it.
Now each company wants to log in and see their pools. Questions:
– one organisation for everyone, or one per company?
– how do I let them see dashboards and alarms without them seeing (and copying) the flow?
– anything to protect the firmware when the boxes are physically in their hands?
I’m not trying to be secretive with customers, I just don’t want a competitor to get the logic by signing up as a «customer».
Traducido del English por IA ·
Una organización por empresa. Nunca aceptarían ver las piscinas de otra empresa, y las organizaciones están aisladas a nivel de base de datos.
One org per company. They’d never accept seeing another company’s pools, and organisations are isolated at the database level.
Traducido del English por IA ·
Sobre el firmware: Hermetry nunca firma el firmware; usted firma las imágenes en su propia compilación y registra solo la clave pública. Haga eso y active el secure boot y el cifrado de flash en el S3, eso cubre el lado de la caja.
On firmware: Hermetry never signs firmware, you sign images in your own build and register only the public key. Do that, and turn on secure boot plus flash encryption on the S3, that covers the box side.
Traducido del English por IA ·
Si es una org por empresa, ¿tengo que reconstruir el flujo y los dashboards 4 veces? ¿Y cada vez que cambie la lógica de dosificación?
If it’s one org per company, do I rebuild the flow and dashboards 4 times? And every time I change the dosing logic?
Traducido del English por IA ·
Desde el lado del cliente: sí, querría mi propia organización. Y sinceramente, me da igual tu script, lo que me importa es que el número sea correcto.
From the customer side: I’d want my own org, yes. And honestly I don’t care about your script, I care that the number is right.
Traducido del English por IA ·
Gestiono la monitorización de planta para seis clientes de esta forma, así que aquí tienes la configuración que ha funcionado.Una organización por empresa cliente. Tú mantienes una cuenta y eres miembro de cada una, con Admin, y cambias entre ellas desde el selector de organizaciones. Las personas del cliente se invitan como User. Un User puede ver dispositivos, perfiles, paneles y alarmas, reconocer alarmas, enviar comandos básicos y crear paneles personales. Ver los flujos requiere Admin (el permiso es automation.read), así que tu bloque Script queda fuera de su vista. Nunca le des a un cliente Admin «solo por un minuto».Paneles: créalos una vez en una organización plantilla, descarga el panel como archivo e impórtalo en cada organización cliente. Los flujos no viajan en el archivo del panel, así que debes trasladarlos por separado: expórtalo desde el menú de la fila en la lista de flujos (Export) e impórtalo en cada organización cliente (Import). Los secretos hay que volver a escribirlos, y los flujos importados llegan desactivados. Con 4 organizaciones, guardo también el código del bloque Script en git; es una tarea de 10 minutos por cambio. Si esto se vuelve engorroso, piensa en mover el cálculo de dosificación al firmware y enviar dose_g como telemetría; así la lógica vive en una única imagen firmada.Firmware: lo que dijo Laura, firmar con Ed25519 en tu pipeline, registrar la clave pública en la página Firmware y dejar desactivada la opción Allow unsigned images. Las imágenes sin firmar o refirmadas se rechazan entonces en la comprobación de carga.La tabla de roles está en Users and roles. El branding con tu logotipo también se configura por organización, si quieres que parezca tu propio producto.
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.
Traducido del English por IA ·
Me decidí por esta opción. Creé una org plantilla, 4 orgs de clientes y los clientes como User. Probé con una cuenta User de prueba y el menú Flows no aparece, bien. La importación del archivo de la placa funcionó a la primera. Creo que pasaré la dosificación al firmware en la próxima versión, porque reimportar el flow cuatro veces ya es molesto.
Went with this. Made a template org, 4 customer orgs, customers as User. I tested with a dummy User account and the Flows menu isn’t there, good. Board file import worked first time. I think I’ll move the dosing into firmware next version, re-importing the flow four times is already annoying.
Traducido del English por IA ·
Mantenga un usuario ficticio en cada organización para esa comprobación, lo volverá a necesitar después de los cambios de roles.
Keep a dummy User in each org for that check, you’ll want it again after role changes.
- Debes estar registrado para responder a este debate.
Únete a la conversación
Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

