Add Atom HMI site guides and editing playbook

This commit is contained in:
2026-10-21 09:56:32 -06:00
parent a06fa5ed6f
commit 2b1c36cd91
10 changed files with 646 additions and 18 deletions
+17
View File
@@ -12,3 +12,20 @@ Record confirmed facts separately from assumptions. Do not invent page structure
At the end of a substantial work session, update HANDOFF.md with completed work, validation results, unfinished items, and concrete next steps. Update PROJECT.md when durable project facts or decisions change. Commit these updates to this repository and report the commit. Do not claim knowledge was saved until the remote write succeeds.
Repository notes provide continuity, not automatic synchronization of chat history, browser sessions, running tools, or local files. A new chat must explicitly read them.
## Atom HMI site documentation instructions
# Atom HMI project knowledge
The user requests ongoing documentation upkeep as part of future Atom HMI work.
Before site work, read the private cloud knowledge base and relevant site guides:
https://chatgpt.com/space/page_59b26c8716dc8191a88caea787825299
Cloud Page IDs and local filenames are recorded in cloud-knowledge-base.json. Read current cloud content before updating it; reconcile remote edits rather than overwriting them with an older local copy.
During each authorized site task, update the relevant cloud guide with verified new knowledge and completed changes without waiting for a separate request. Create and index a guide for any newly explored site. Update ATOMHMI-PLAYBOOK.md and its cloud Page for techniques that apply across sites. Keep local Markdown backups aligned when available.
Document site/environment/device IDs, equipment and register mappings, units/conversions, writable settings versus outputs, page patterns, alarms/latching, trends, tests, restored values, and unresolved questions. Distinguish observations, user-confirmed facts, and assumptions. Correct stale statements with dated evidence while preserving useful history.
Never store credentials. Respect current site authorization; simulation permission for one site does not apply automatically elsewhere. Report any failed documentation save. This is upkeep during active project tasks, not authorization to create a scheduled automation.
+74
View File
@@ -0,0 +1,74 @@
# Atom HMI editing playbook
Updated 2026-10-20 (Edmonton). Read this before future Atom HMI work, together with SITE-STUDY.md, MANDEL-BUILD.md, and MANDEL-SETTINGS.md. Target for these experiments: https://dev.atomhmi.com/site_mandel/. Owner explicitly authorized simulation writes with restoration. Do not carry that assumption to production sites.
## Fast editing: Copy/Paste works
1. Open Configure Pages, select the page, wait for its Title and component tree.
2. Click the Copy icon on the desired component. A root Row exports the whole subtree as plain-text JSON on the browser clipboard. Read the clipboard after the click completes; earlier empty reads were misleading.
3. Save the original JSON as a backup before changes. Change the exported data and child structure, preserving component type IDs and register bindings.
4. Write JSON to the browser clipboard, click Paste Element. It appends a root. An element's paste icon inserts a sibling after that element, rather than replacing it.
5. Inspect the draft, remove the backed-up original root, then Save & Close. Deletions of draft elements can be discarded with Cancel before saving. Never delete the page itself as part of replacement.
6. Wait for Create or Select Page and save confirmation before leaving. Open the actual runtime page and verify readings and actions.
Paste generates fresh element/data IDs. Critically, it regenerates setup behavior from the component type. Editing the exported `data.setup` does NOT install custom event behavior: a custom washer switch experiment reverted to its canonical switch implementation and was removed. Use native components with their supported data fields. Two-position switches write On/Off values to ONE register; separate Start and Stop command registers need two native buttons.
Reload Configure Pages between pages. Repeated live preview loads can produce Highcharts #16/JustGage errors and stale previews. Runtime verification is essential. Modal animations and controller polling create a delay: immediate checkbox/readout state is not proof of a completed PLC write. Wait for the actual output text, then restore and verify it.
## Native style reference
The original Mandel Well page uses bordered equipment Rows (`border border-secondary rounded my-1`), compact numeric fields (`my-1 col-12 col-sm-6 col-md-3`, `innerClasses: h-100`, border + rounded, editable data `w-100 btn-entry`), and status pills (`badge badge-pill bg-on` / `bg-off`). Reused this on Main, Air Compressor, Chicken Coop, Pressure Washer, Ventilation, and Water Usage. Existing Well unchanged. Root JSON backups are in artifacts/mandel/*before*.json.
## Verified simulation writes and restoration
| Register | Original | Temporary test | Verified result | Restored |
| --- | --- | --- | --- | --- |
| main:g_coopHeatSP | 10 °C | 11 | readout 11 | 10 |
| main:g_coopCoolSP | 25 °C | 26 | readout 26 | 25 |
| main:g_coopDailyFanDur | 3,600,000 | 1.5 displayed hours | readout 1.5 h | 1 h |
| main:g_coopTemp_limits_hihi_in_sp | 35 °C | 36 | readout 36 | 35 |
| main:g_inLights | 0 | 1 | interior output On | 0; output Off |
| main:g_exLights | 0 | 1 | exterior output On | 0; output Off |
| main:g_pressureWasher_in_manOnMaxSP | 0 | 60000 | native Start made washer Running and valve Open | 0 |
| main:g_pressureWasher_in_autoMode | 0 Manual | 1 Auto | settled readback observed | 0 Manual |
Final native coop switches were individually tested On -> output On -> Off -> output Off. Heating/cooling/alarm entries write direct values. Daily fan duration divides by 3,600,000 for hours and writes `value * 3600000` (tested through the runtime form). Preserve read/write conversion symmetry.
Washer Start/Stop command registers are momentary `g_pressureWasher_in_manStart` / `...in_manStop`, each written 1 by its respective native button. They were enabled already and read back 0 after commands. Washer was stopped at completion; valve Closed, pump Stopped. Running it naturally increments runtime/history; do not reset accumulated operating history to disguise tests.
## Chicken coop lighting
Enable polling for `g_inLights` and `g_exLights` (OPC UA addresses `Home.g.inLights` / `Home.g.exLights`). These are actual writable binary demand settings, verified against `g_coopInteriorLights_out_val` and `g_coopExteriorLights_out_val`. Native two-position switches: value/indicator expression is the corresponding command register, updateRegister the same register, On 1, Off 0. Separate indicators show physical/controller output feedback. Both commands left at 0.
## Pressure washer findings
Owner clarified that a DIGITAL pressure limit switch is currently installed. Enabled and displayed `main:g_pressureWasherPrsHi_out_val`, a Debounced Input at OPC UA `Home.g.pressureWasherPrsHi.out_val`. Final observed value 1. Label it Input 0/1 until polarity and exact mechanical threshold are confirmed; do not infer a psi threshold or adjust a physical switch through analog alarm fields.
Analog `g_pressureWasherPres_out_eu` remains inactive (owner confirmed), observed -118.5 psi. Analog alarm limits are future commissioning settings and do not configure the digital pressure switch.
At original manual maximum run time 0, native Start did not sustain operation. With temporary 60000 and Manual mode, native Start produced Washer Running and Water Valve Open. Stop returned Washer Stopped; valve subsequently Closed. Pump remained Stopped during these brief tests. This does not establish the complete pump/interlock logic or demonstrate a successful pressure cycle. The digital limit input may be relevant, but that causal relationship is not proven.
Added editable Manual Run Time Limit using controller raw units. Its time unit has NOT been independently established, so do not label it seconds/minutes yet. Original 0 restored as requested; a suitable nonzero time limit is needed to repeat the observed manual-start test. Do not change seq_in_enable or other program-owned sequence inputs merely to force a run. Final page has native On · Start and Off · Stop buttons, Auto/Manual, separate washer/pump/valve/digital-limit status, and inactive-analog explanation.
## Further work boundaries
Register descriptions and readback distinguish candidate settings from outputs, but are not a PLC program listing. Reads of raw/debounced DI values do not establish writable user settings. Expose actual configuration/command registers, preserve program-owned outputs and interlocks, and document unknown units/polarity rather than guessing. Alarm limit writes were tested on one representative coop threshold; other configured alarm targets have not all been individually exercised.
Current screenshots: artifacts/mandel/coop-final.jpg and washer-final.jpg. Register inventory and prior settings/alarm audits remain in that directory.
## Cleanup, confirmed units, and non-latching alarms
Updated October 20, 2026 after owner feedback:
- Removed obsolete Temperature page (root backup `temperature-removed-backup.json`) and its navigation. Removed Hot Tub navigation; there was no Hot Tub page in the page catalog.
- Rebuilt Main/overview as six native equipment cards with live readings/status and direct links. Removed obsolete undefined Table and its stale shop/hot-tub bindings. Backups include `overview-before-cleanup.json` and `main-before-cleanup.json`.
- Owner confirmed house volumes are gallons and flow/flow alarm limits are gpm. Water Usage and overview now show gal/gpm.
- Owner confirmed fan output is 0–10 V. Fan speed demand remains 0–100%. Updated voltage labels without scaling values.
- Chose pascals (Pa) for negative differential pressure, including its chart axis, thresholds, and hysteresis labels. Owner will scale the controller. Existing numeric readings/limits were not rescaled or changed.
- Refreshed Well header, subtitle, detail panel, charts and alarm heading; replaced broken page_wells link with Water Usage. Preserved the separate site-information/map/report root and moved it below operating controls. No Well metadata or thresholds changed.
- Set HMI Latching OFF on all 80 Main alarm definitions and the one Global alarm, Stale-Alm. Preserved calculation, enabled state, delays, severity and notification groups. The audit `nonlatching-audit.json` records 81 IDs and observed before state (some false entries are verification after an earlier change). Global Stale-Alm was reopened and confirmed false. Earlier Main entries were reopened and confirmed false after a browser interruption. This changes HMI alarm latching, not any independently latched PLC source logic.
- Final runtime verification: overview populated six equipment cards; Water Usage displayed gal and gpm; ventilation displayed V and Pa; Well showed live flow, totals, settings and both trends. Screenshots: overview-cleanup.jpg, water-cleanup.jpg, ventilation-cleanup.jpg, well-cleanup.jpg, nonlatching-proof.jpg.
Navigation editor caution: after deleting an entry, reload before another mutation. Its table can display new rows while event handlers still refer to prior row positions. A removed Ventilation entry was corrected during verification; final navigation has Compressor, Well, Washer, Ventilation, Coop, Water Usage and Device Status, with no Temperature/Hot Tub.
Page roots matter: Copy on the first root does not capture additional roots. Read the DOM-backed root list before replacements; preserve unrelated site-information roots. A pasted replacement appends at the bottom; use the root Up arrow to restore desired order.
+15 -13
View File
@@ -3,21 +3,23 @@
Last updated: 2026-10-21
## Completed
- Established this repository as the remote home for AtomHMI UI project knowledge.
- Added session instructions, project overview, and handoff notes.
## Current state
No AtomHMI page edits have been performed as part of this setup. The target site URL, page, and requested changes have not yet been supplied in this conversation.
Imported the Atom HMI project Markdown guides from the existing chat workspace into this repository. Preserved the original repository instructions and added the site-documentation upkeep instructions.
## Next steps
1. Read AGENTS.md and PROJECT.md.
2. Obtain the target AtomHMI URL, page, and requested changes.
3. Inspect the page editor using the available browser tools; authenticate through the normal login flow if needed.
4. Perform the requested work and verify the result.
5. Commit updated project knowledge and handoff notes here.
Prior site work is documented in the imported guides: Mandel dashboards and settings, navigation cleanup, 81 non-latching HMI alarms; Shop overview, heating, actuator, temperature trends, diagnostics and 22 non-latching alarms. These are prior verified work, not new site changes in this repository-import task.
## Current state and next steps
1. Read AGENTS.md, PROJECT.md and the relevant site guide before further work.
2. Reconnect to the signed-in target browser; session state is not transferred through Git.
3. Confirm the requested site/environment and current state before editing.
4. Shop temperature limits are still 0 °C and need commissioning. A separate boiler-water sensor/target was not found. Do not edit atGVL_alarmManager.
5. Keep guides, cloud knowledge and handoff notes current with verified changes, tests and unresolved questions.
## Included and excluded material
All Atom HMI Markdown guides and the project README are included. Existing AGENTS.md was merged rather than replaced. Secrets, environment files, screenshots, and JSON artifacts were not uploaded. Local artifact references require the original workspace until separately uploaded.
## Resume prompt
Use Atom Git to open Auto/atom-hmi-ui-chatgpt. Read AGENTS.md, PROJECT.md, and HANDOFF.md, then continue from the recorded next steps.
## Continuity limits
These notes do not automatically transfer browser login state, uncommitted local files, running processes, or complete chat history between computers.
Use Atom Git to open Auto/atom-hmi-ui-chatgpt. Read AGENTS.md, PROJECT.md, HANDOFF.md and the relevant site guide, then continue with the requested site task.
+68
View File
@@ -0,0 +1,68 @@
# Mandel development site — page build
Built and verified on October 20, 2026 at https://dev.atomhmi.com/site_mandel.
Follow-up settings expansion is documented in `MANDEL-SETTINGS.md`: coop setpoints and fan target are now editable, fan speed is adjustable, and five pages have alarm threshold/hysteresis controls. The owner confirmed the washer pressure sensor is not active yet.
## Plan and delivered pages
| Page | Route | Delivered behavior |
| --- | --- | --- |
| Home (existing Main) | `page_main` | Live compressor pressure, coop temperature, compressor/heater status, house daily volume, and six equipment links |
| Air Compressor (updated) | `page_comp` | Correct Main-device pressure binding, 0–200 psi display range, run status, runtime hours, current-run minutes, manual sequence start/stop buttons, pressure history |
| Pressure Washer (new) | `page_pressure_washer` | Pressure readout, sequence/pump/valve status, runtime, manual sequence start/stop buttons, pressure history |
| Chicken Coop (new) | `page_chicken_coop` | Temperature, heating/cooling setpoint readouts, daily fan target in hours, heater/fan/door-output/light statuses, temperature/setpoint history |
| Ventilation (new) | `page_ventilation` | Fan speed, output, negative pressure, engineering-unit note, two-axis history |
| Water Usage (new) | `page_water_usage` | House flow/today/yesterday/total, plus today's/yesterday's well volumes using the working Well page's history registers |
| Well (existing) | `page_well` | Inspected and retained unchanged |
Added navigation entries for Pressure Washer, Chicken Coop, Ventilation, and Water Usage. The existing default Main route remains the home page. Existing Temperature, Hot Tub, and Device Status navigation was retained; no hot-tub data group was found in Main's inventory, so no hot-tub equipment controls were fabricated.
## Register survey
Inspected all 1,167 Main-device register definitions through Manage Registers. Full inventory and the enable audit are saved in `artifacts/mandel/mandel-register-inventory.json`. Inventory values and Enabled flags are the initial snapshot; `verifiedEnabledDuringBuild` records the later enable verification.
The new pages reference these groups:
- Compressor: `g_airPressure_out_eu`, `g_airCompressor_out_run`, `g_airCompressor_out_runTime`, `g_airCompressor_out_tss`, `g_airCompressor_in_manStart`, `g_airCompressor_in_manStop`.
- Washer: `g_pressureWasherPres_out_eu`, `g_pressureWasher_out_run`, `g_pressureWasherPump_out_run`, `g_pressureWasherValve_out_run`, `g_pressureWasher_out_runTime`, `g_pressureWasher_out_tss`, `g_pressureWasher_in_manStart`, `g_pressureWasher_in_manStop`.
- Coop: `g_coopTemp_out_eu`, `g_coopHeatSP`, `g_coopCoolSP`, `g_coopDailyFanDur`, `g_coopHeater_out_val`, `g_coopExhaustFan_out_val`, `g_coopDoorOpen_out_val`, `g_coopInteriorLights_out_val`, `g_coopExteriorLights_out_val`.
- Ventilation: `g_houseFanSpeed`, `g_fanSpdOut_in_eu`, `g_negAirPres_out_eu`.
- Water usage: `g_houseFlow_out_eu`, `g_houseVol_todayEu`, `g_houseVol_yesterdayEu`, `g_houseVol_euTotal`, `g_well_history_today_vol`, `g_well_history_yday_vol`.
All 32 referenced registers are enabled. The first enable pass also enabled the legacy `g_well_out_volTdy` and `g_well_out_volYest` definitions; the final Water Usage page instead uses the already-enabled history registers from the existing Well page. No PLC register values were written during the build.
Register definitions use the existing OPC UA slave and `Home.g...` tag addresses. Preserved their existing one-second On Change update configuration. Unlike the previously studied production register editor, the development editor did not expose separate logging interval/duration fields. The new history widgets use enabled register sources; separate backend retention settings were not changed.
## Binding and formatting decisions
The old compressor/home widgets used `shop:PRES_EU`, `shop:TEMP_EU`, and unmatched pressure-setpoint references. Updated them to actual Mandel `main:` registers. Replaced the unmatched compressor setpoint widgets with runtime displays rather than guessing a control register.
Runtime descriptions specify seconds: total hours divide by 3,600, and current-run minutes divide by 60. The coop's daily fan duration returns 3,600,000 for its one-hour target; its display divides by 3,600,000. Heating/cooling setpoints and fan target remain readouts. No new coop or ventilation write controls were added.
The compressor's gauge range is a display range only and does not change pressure setpoints. Pressure-washer pressure remains a numeric readout to avoid inventing gauge bounds. House-water and ventilation fields with unverified physical units are identified as using PLC engineering units rather than assigned guessed units.
The two manual Start/Stop pairs each write `1` to their equipment sequence's `in_manStart` or `in_manStop` register. These are configured buttons; they were not pressed. Pump/valve direct-output commands were not added.
## Validation
- Observed successful page-save messages, reopened pages, and followed saved navigation links.
- Verified Enabled = Yes for the register enable pass and compared the final well-total bindings with the existing Well page.
- Checked all five equipment pages and the home page visually, with screenshots saved under `artifacts/mandel/`.
- Verified live examples: compressor pressure around 130.6 psi and 2.2 runtime hours; coop temperature 20.7 °C, heat/cool setpoints 10/25 °C, daily fan target 1.0 h; house today 160 and yesterday 71; well today 171 gal and yesterday 298 gal. Values are snapshots and will change.
- Corrected clipped home status badges and the fan-duration conversion during visual review.
- No operational Start/Stop, setpoint submission, or output-control test was performed.
## Observations requiring separate follow-up
- The washer reports approximately **−118.5 psi** because its pressure sensor is not active yet, as subsequently confirmed by the owner. Its page now includes an inactive-sensor commissioning note.
- History has only the data available from enabled register sources; newly enabled signals may initially have little history.
- The development page editor intermittently left modal pickers open and timed out. Its console also recorded repeated chart-library loading errors and missing chart/gauge globals during editor previews. Saved runtime pages rendered successfully; underlying application/library loading was not modified.
- Copy/Paste did not transfer the source Well subtree during the test, so the new pages were assembled using native elements.
## Repeatable review workflow
1. Open a page from the home tiles or navigation and verify live values against Manage Registers.
2. Use Configure Pages to select the exact page and check its Title/URL before edits.
3. Save the component, close any lingering picker, then save the page separately. Verify the successful-save message before navigating away or reloading.
4. Reopen the runtime page to verify persistence and layout. Test equipment commands only as a separate authorized operational check.
+58
View File
@@ -0,0 +1,58 @@
# Mandel settings expansion
Later simulation testing, lighting controls, washer digital-limit feedback, and Copy/Paste discoveries are recorded in [ATOMHMI-PLAYBOOK.md](ATOMHMI-PLAYBOOK.md). The verification below describes the earlier build before those tests.
Updated October 20, 2026. The pressure-washer sensor is not active yet, as confirmed by the owner. Its pressure reading is not a commissioning reference.
## Delivered adjustments
| Page | Editable settings |
| --- | --- |
| Chicken Coop | Heating setpoint, cooling setpoint, daily fan target (hours); four temperature alarm thresholds and low/high reset hysteresis |
| Air Compressor | Auto/Manual selector; four pressure alarm thresholds and low/high reset hysteresis |
| Pressure Washer | Auto/Manual selector; four pressure alarm thresholds and low/high reset hysteresis; inactive-sensor commissioning note |
| Ventilation | House fan speed (0–100%); four negative-pressure alarm thresholds and low/high reset hysteresis |
| Water Usage | Four house-flow alarm thresholds and low/high reset hysteresis |
Tap a bordered numeric value, enter a new value, and press Save to apply it. Cancel leaves the controller value unchanged. Auto/Manual switches apply their selected mode. Existing Start/Stop buttons remain available on the compressor and washer pages.
All existing threshold values, operating modes, and alarm-enable logic were preserved during this build. Exposing editable settings did not apply new setpoints or switch modes.
## Register mapping
For each prefix below, Low, Low-Low, High, and High-High threshold fields read and write the corresponding `<prefix>_limits_<level>_in_sp` register, where level is `lo`, `lolo`, `hi`, or `hihi`. Low/High Reset Hysteresis fields use `<prefix>_limits_lo_in_hyst` and `<prefix>_limits_hi_in_hyst`.
| Page | Prefix | Display units |
| --- | --- | --- |
| Air Compressor | `g_airPressure` | psi |
| Pressure Washer | `g_pressureWasherPres` | psi; sensor inactive |
| Chicken Coop | `g_coopTemp` | °C |
| Ventilation | `g_negAirPres` | PLC engineering units (EU) |
| Water Usage | `g_houseFlow` | PLC engineering units (EU) |
The Manage Alarms catalog contains corresponding High, High-High, Low, and Low-Low alarm records for all five groups. These are alarm adjustments, not invented operating-pressure controls. Alarm activation still follows the controller's existing enable configuration.
Additional controls:
- Heating setpoint: `main:g_coopHeatSP`, direct numeric read/write.
- Cooling setpoint: `main:g_coopCoolSP`, direct numeric read/write.
- Daily fan target: `main:g_coopDailyFanDur`, displayed as register / 3,600,000 and written as user value × 3,600,000. Entry range 0–24 hours.
- House fan speed: `main:g_houseFanSpeed`, direct numeric read/write with entry range 0–100%.
- Compressor mode: `main:g_airCompressor_in_autoMode`, Auto = 1, Manual = 0.
- Washer mode: `main:g_pressureWasher_in_autoMode`, Auto = 1, Manual = 0.
Enabled polling for the 30 threshold/hysteresis registers and the two mode registers. Existing coop setpoint and fan-speed registers were already enabled. This changes register availability, not the PLC's alarm-enable settings.
## Verification
- Observed page-save confirmations and reopened all five saved runtime pages.
- Heating entry opened with its existing value of 10 °C, then was cancelled.
- High-High temperature alarm entry opened at its existing 35 °C, then was cancelled.
- Daily fan entry opened at 1 hour and showed 0–24 hour limits, then was cancelled.
- Fan-speed entry opened at 0% and showed 0–100% limits, then was cancelled.
- Checked the saved threshold readouts and Auto/Manual selectors without toggling modes.
- No PLC register values were written, no alarm thresholds were changed, and no equipment commands were run.
The write targets and conversion expressions were configured and reviewed; a submitted write was not tested. Alarm numeric fields preserve signed engineering values and do not enforce cross-field ordering. They should be set coherently for the installation. No arbitrary alarm bounds, delay-unit conversions, or sensor calibration changes were introduced.
Screenshots and the alarm/register audit are under `artifacts/mandel/` with `settings` in their filenames. The Chicken Coop page is left open for review.
+182
View File
@@ -0,0 +1,182 @@
# Atom HMI page inventory
Observed October 20, 2026. Names are the Configure Pages dropdown labels. Unless marked incomplete, each page's preview and element tree were opened. See SITE-STUDY.md for scope limits.
## Sweet Grass — 51 listed, 49 inspected
- 20' Loading
- Air Screen
- Bagging
- Bin 2
- Bins
- Center Receiving
- Clean Dust Collection Sequence
- Cleaning
- Crimping
- Crimping Sequence
- Debearder
- Device Status
- dryer
- Dust Collection
- Elevator #5
- Grader
- Groater
- Groater Sequence
- Hours
- Indents
- Maintenance
- Modes
- Motors — rendered page inspected; element tree incomplete because editor timed out
- Office
- old Air Screen
- old Bin 2
- old Cleaning
- old Debearder
- old Dust Collection
- old Grader
- old Indents
- old Motors — incomplete: editor timed out
- old Paddy Table
- old Precleaner
- old Screenings
- Overview
- Paddy Table
- Power Dryer
- Power Main
- Precleaner
- Receiving
- Receiving PID Tuning — no component types appeared in the loaded tree
- Receiving Sequence
- Receiving test
- Screenings
- Settings
- Shipping
- South Receiving
- South Receiving Sequence
- Start Stop Delays
- testing
## KAV Main - Mill — 42 inspected
- Bin Inventory
- Bins
- Cistern
- County Water North
- County Water West
- Device Status
- Distributor
- Maintenance
- Mill 2
- Mill 2 Settings
- Mill2Debug
- Motors
- Out Pump 1
- Out Pump 2
- Out Pump 3
- Overview
- Overview Test
- Receiving
- Receiving Motors
- Receiving Settings
- Receiving Trend
- Select Site
- Settings
- Tempering
- Tempering 2
- Tempering Chart
- Tempering radar sensor
- Tempering Settings
- Tempering Water
- test
- test2
- Well 1 (NW 1)
- Well 2 (NW 2)
- Well 3 (Shop)
- Well 4 (SE 1)
- Well 5 (SE 2)
- Well 6 (NE 1)
- Well 7 (NE 2)
- Well 8 (NE 3)
- Well X (Spare 1)
- Well X (Spare 2)
- Wells
## KAV East - Mill — 4 inspected
- Bins
- Device Status
- Select Site
- Settings
## KAV Main - Water — 29 inspected
- Cistern
- County Water North
- County Water West
- Device Status
- Out Pump 1
- Out Pump 2
- Out Pump 3
- Select Site
- Settings
- TruckWater
- Well 1 (NW 1)
- Well 1 New
- Well 10
- Well 10 New
- Well 2 (NW 2)
- Well 3 (Shop)
- Well 4 (SE 1)
- Well 5 (SE 2)
- Well 6 (NE 1)
- Well 7 (NE 2)
- Well 8 (NE 3)
- Well 9
- Well 9 New
- well 9 test
- Well Test
- Well Test Device Status
- Well X (Spare 1)
- Well X (Spare 2)
- Wells
## KAV East - Water — 38 inspected
- Cistern 1 Transfer
- Cistern 2 Transfer
- Cistern 3 Transfer
- Cistern 4 Transfer
- Cisterns
- County Water
- Device Status
- Dugout Dist 7
- Outflow
- Select Site
- Settings
- Sys 1_1
- Sys 1_2
- Sys 1_3
- Sys 1_4
- Sys 2_1
- Sys 2_2
- Sys 3_1
- Sys 3_2
- Sys 4_1
- Sys 4_2
- Sys 6_1
- Sys 7_1
- Sys 7_2
- Temps
- Well 21 (East)
- Well 22 (South West)
- Well 23 (Far North West)
- Well 24
- Well 25 (Far South East)
- Well 25 New
- Well 26 (Far South West)
- Well 26 New
- Well 27 (West)
- Well 28 Far North
- Well 29
- Well 30
- Wells
+14 -5
View File
@@ -16,8 +16,17 @@ This repository is the shared home for project instructions, confirmed facts, an
- Preserve project knowledge remotely rather than depending on one computer.
- Use the connected Atom Git plugin to read and update this repository.
## Details still needed
- Target AtomHMI URL and environment.
- Target page and desired changes.
- Page editor workflow and available backup/export features.
- Validation and publication requirements for the target environment.
## Established sites and guides
- Mandel development: https://dev.atomhmi.com/site_mandel/ — MANDEL-BUILD.md and MANDEL-SETTINGS.md.
- Shop development: https://dev.atomhmi.com/site_atom/ — SHOP-BUILD.md. Do not edit atGVL_alarmManager.
- ATOMHMI-PLAYBOOK.md: verified native Copy/Paste workflow, tests, and editing pitfalls.
- SITE-STUDY.md and PAGE-INVENTORY.md: production reference-site study and inventory. Production sites were reference material, not blanket write targets.
- README.md: project entry point and cloud knowledge base link.
## Cloud references
- Knowledge base: https://chatgpt.com/space/page_59b26c8716dc8191a88caea787825299
- Atom HMI Editor cloud Space: https://chatgpt.com/space/page_6ad8d4bee7fc8191ba246a2fdf29a5bf
Keep site guides current during project work and reconcile cloud/repository edits before overwriting either. There is no automatic synchronization.
+20
View File
@@ -0,0 +1,20 @@
# Atom HMI Editor
Project for editing Atom HMI sites through natural-language requests and the native Copy/Paste page builder.
## Cloud knowledge base
https://chatgpt.com/space/page_59b26c8716dc8191a88caea787825299
Read AGENTS.md and the relevant site guide before work. Update the cloud guides with verified site knowledge during each task, and reconcile local backups.
## Existing artifacts
Original screenshots, register inventories, page templates and audits remain at `/home/snkbyte/Documents/ChatGPT/Atom HMI/artifacts/`. Credentials are not copied into this project.
## Sites
- Mandel development: https://dev.atomhmi.com/site_mandel/
- Shop development: https://dev.atomhmi.com/site_atom/
Keep site-specific authorization and exclusions in force; the Shop atGVL_alarmManager is excluded from editing.
+62
View File
@@ -0,0 +1,62 @@
# Shop PLC dashboards
Built October 21, 2026 for https://dev.atomhmi.com/site_atom/. Device ID `shop`, display name Shop.
## Scope and inventory
The register table contains 2,472 entries. The equipment/system inventory saved in `artifacts/shop/register-inventory.json` contains 264 non-alarm-manager entries, including 233 `g_` entries. Alarm-manager internals were excluded from selection, pages, settings, trends, and alarms. No `atGVL_alarmManager` register or its configuration was modified.
All equipment registers used were already enabled. No enable or recording configuration changes were necessary. Existing operating setpoints, alarm thresholds, alarm-source enables, calibration, and output states were preserved. Runtime entry dialogs were opened and cancelled; no PLC setpoint or output commands were submitted during this build.
## Published pages
| Page | Route | Content |
| --- | --- | --- |
| Overview | page_overview | Default page; office/shop temperatures, heat targets, heat-pump/window output statuses, equipment links and combined temperature history |
| Office Heating | page_office_heating | Office temperature; editable heating setpoint/deadband; demand/output/fault; temperature and target trend; four temperature limits and individual hysteresis; four controller alarm-reporting enables |
| Floor Heating | page_floor_heating | Shop temperature; editable floor heat target/deadband; demand/output/fault; trend; four limits/hysteresis and alarm-reporting enables |
| Window Actuator | page_window_actuator | Office temperature; editable automatic window setpoint/deadband; open/close solenoid status and faults; temperature/target trend |
| Temperature Trends | page_temperatures | Office vs shop temperature, office heating/window targets, and floor-heating target history; 1H/1D/7D selectors |
| Diagnostics | page_diagnostics | Two temperature sensor/channel/overrange/underrange fault groups, raw inputs, electrical signals/supplies, and two I/O card faults |
Native Copy/Paste component trees are saved as `artifacts/shop/*-template.json`. New navigation entries were added with Overview as default. The Atom HMI brand link opens the default page.
## Register map
All references below use `shop:`.
- Office temperature: `g_teOffice_out_eu`; shop temperature: `g_teShop_out_eu`.
- Office heating: `g_officeHeatCtrl_sp`, `g_officeHeatCtrl_db`, demand `g_officeHeatCtrl_Q`; actual output `g_officeHeat_out_val`, fault `g_officeHeat_fault_out`.
- Floor heating: `g_shopFloorCtrl_sp`, `g_shopFloorCtrl_db`, demand `g_shopFloorCtrl_Q`; output `g_shopFloor_out_val`, fault `g_shopFloor_fault_out`.
- Window control: `g_windowSP`, `g_windowDB`; solenoid outputs `g_officeWndOpen_out_val`, `g_officeWndClose_out_val`; corresponding `_fault_out` registers.
- For each temperature prefix `g_teOffice` / `g_teShop`, limits use `_limits_{lo,lolo,hi,hihi}_in_sp`, individual hysteresis `_in_hyst`, controller reporting enables `_alm_in_en`, and HMI alarm sources `_alm_out`.
- Temperature diagnostics use `_sensorFault_out`, `_faults_chan_out`, `_faults_over_out`, `_faults_under_out`; raw/signal/supply use `_in_raw`, `_in_signal`, `_in_supVlt`.
- Hardware faults: `g_base1_card01_fault_out`, `g_base1_card02_fault_out`.
Numeric settings read the register and write `value` back to the same register. Deadband/hysteresis entry limits are 0–100 °C; operating setpoints and thresholds retain signed numeric entry. Two-position alarm switches use 1 enabled / 0 disabled. They change PLC alarm reporting enable inputs, distinct from the HMI alarm definition's enabled setting.
## Alarms
Created 22 HMI alarms from existing PLC fault and limit alarm outputs: 8 temperature-limit alarms, 8 temperature-input/sensor faults, 2 heating-output faults, 2 window-solenoid faults and 2 I/O card faults. All 22 were reopened and verified enabled/non-latching. Update interval 1 second, HMI delays 0; PLC source logic retains its existing delays. High/Low temperature alarms are Warning; High-High/Low-Low and faults are Critical. Alarm and return-to-normal messages identify equipment in plain language. No notification group was selected, and no external notification recipients were configured.
The full alarm manifest and verification is `artifacts/shop/alarms-created.json`. No alarms were generated from alarm-manager internals or reset/acknowledgement globals.
## Commissioning notes
- Existing temperature limits are 0 °C. These were exposed rather than replaced with invented thresholds. Set coherent operating limits before relying on temperature alarming. HMI alarms follow existing `_alm_out` signals; HMI non-latching does not change PLC latching/source logic.
- `g_teShop` descriptions incorrectly repeat Office temperature. Page/alarm names follow the distinct Shop register prefix and control-loop mapping.
- No separate boiler-water temperature or boiler operating target was found. Floor Heating shows the floor loop's room-temperature demand and pump output; it does not claim to provide direct boiler control.
- Window open/close signals are solenoid output commands. No position-feedback register was found. Do not label these as confirmed fully open/closed or offer direct output writes without establishing control logic.
- Heating demand and pump output are deliberately separate. At inspection the floor demand was 1 with pump output 0; this build does not establish the interlock or pump-feedback behavior.
- Runtime counters `_out_rt` exist but their time units are not documented, so no guessed hours conversion was added.
- Historical chart loading takes longer than live numeric polling. Wait for plotted traces, not only axis labels, before recording QA screenshots.
## Verification and artifacts
- Saved and opened all six pages; overview showed live office ~23.7–23.8 °C, shop ~18.5 °C and both heating targets 20 °C.
- Confirmed plotted sensor/target history on the Temperature Trends page.
- Opened Heating Setpoint at 20 °C and Window Setpoint at 22.5 °C; cancelled both.
- Reopened every new alarm and checked its ID, enabled=true and latching=false.
- Screenshots include overview.jpg, office-heating.jpg, floor_heating.jpg, window_actuator.jpg, temperatures.jpg, diagnostics.jpg and alarms.jpg. Early runtime-audit snapshots can contain temporary polling placeholders; final trend screenshot shows loaded traces.
Use ATOMHMI-PLAYBOOK.md for the general Copy/Paste, modal, and navigation editing workflow.
+136
View File
@@ -0,0 +1,136 @@
# Atom HMI site study
Inspected through the signed-in browser on October 20, 2026. Purpose: prepare to build another Atom HMI installation using existing page patterns and copy/paste. No pages, registers, alarms, device connections, or element definitions were saved or changed. The element Copy control was exercised once; no paste was performed.
## Coverage
| Site | Pages listed | Page trees inspected | Main use |
| --- | ---: | ---: | --- |
| Sweet Grass (`site_sweetgrass`) | 51 | 49 | Grain processing, receiving, cleaning, crimping, groating, shipping, dryer, power |
| KAV Main - Mill (`site_kav`) | 42 | 42 | Mill 2, tempering, receiving, inventory; also legacy water templates |
| KAV East - Mill (`site_kav_east_mill`) | 4 | 4 | Bin monitoring and equipment diagram |
| KAV Main - Water (`site_kav_water`) | 29 | 29 | Cistern, wells, county supply, outlet pumps, truck water |
| KAV East - Water (`site_kav_east_water`) | 38 | 38 | Multiple cisterns, transfers, distribution circuits, wells, temperature |
| Total | 164 | 162 | |
Coverage means opening each page in Configure Pages and inspecting its rendered preview and element names/types. It does not mean every element's settings were opened or every runtime control tested. Sweetgrass `Motors` and `old Motors` timed out in their large editors and remain incomplete. Representative configuration dialogs were inspected for rows, status indicators, gauges, trends, numeric data, command buttons, viewports, and images. All dialogs were closed without saving. No source-code or backend API access was established.
The rendered Sweetgrass Motors page was successfully inspected separately after the builder timeout. It repeats motor-ID/name cards with Auto/Manual, Start/Stop, time since start, and optional frequency adjustment; the South Elevator Valve has Rev/Stop/Fwd and raw position. Its element tree and exact write bindings remain unverified.
The complete page-name inventory is in `PAGE-INVENTORY.md`.
## How the application is assembled
The same Atom HMI application hosts separate sites under `/site_<id>/`. The four KAV sites have custom Select Site pages with links between Main Mill, East Mill, Main Water, and East Water. This is separate from the administrator's global Select Site screen.
Configure Pages has two areas:
- **Data:** page title, URL slug, rendered preview, and a nested element tree.
- **Navigation:** separate menu entries with title, URL, and default flag. Creating a page does not establish that it automatically appears in navigation.
Page slugs appear in routes such as `page_mill2`, `page_receiving`, and `page_sys11`. Titles and slugs can differ: KAV Receiving Settings uses `rec_settings`; its Receiving Trend uses `rec_trend`. Links may be relative, absolute to a site, or include an anchor such as `page_motors#M09`. Preserve case and verify each target when copying.
The builder requires cancelling or saving the currently selected page before selecting another, even if it was only opened for inspection. Otherwise it reports “Please cancel or save current page” and keeps the old tree. Always verify the loaded Title and URL before acting. Long surveys and very large pages caused browser timeouts; reloading the clean configuration page recovered navigation.
## Layout and reusable components
Pages are nested trees. Rows and Divs contain labels, indicators, readouts, buttons, gauges, links, charts, or other containers. The Overview page is a good small example: a Main Selection row contains equipment cards, and each card includes a title, separator, status indicator, and page link with a settings icon.
The UI exposes element copy, paste, reorder, add, edit, and delete controls; there are also page-level Add Element and Paste Element controls. The copy icon was confirmed as `fa-copy`, and paste as `fa-paste`. Copying the top row of KAV East Water Wells left the browser text clipboard empty. **Inference:** the builder uses an application-managed clipboard or another mechanism. Its serialization, child-copy behavior, persistence across navigation, and cross-site compatibility have not been verified. Do not promise external JSON paste until a disposable-page test confirms it.
Styling uses Classes and Styles. Observed classes include `col-6`, `col-12`, `w-100`, `h-100`, `border`, `rounded`, `badge`, `badge-pill`, `bg-danger`, `bg-warning`, `bg-on`, `bg-off`, `btn-start`, and `btn-entry`. These resemble Bootstrap conventions plus application-specific classes. Reuse the parent container's spacing and widths instead of reconstructing each child independently.
### Equipment diagrams
KAV Mill 2 and Tempering combine a View Port diagram with trends and control cards. East Mill Bins is a simpler diagram template. Viewport children include static images, two/multiple/ten-state images, level indicators, static text, and advanced text.
The Main Viewport on KAV Mill 2 has minimum width `25rem`, aspect ratio `16/6`, a light-grey background, and a rounded border. An inspected T1 image has Left `5.75`, Top `5.5`, Width `11`, aspect ratio `auto`, and `/images/static/bin.png` as its off image. The coordinate units were not established. Image editors also expose a value expression, rotation, horizontal/vertical translation, horizontal flip, transition time, and off/on image URLs. Do not infer that a picture by itself establishes the correct level or motor binding.
### Live values, states, and commands
Display expressions support register references, literal values, or equations. Observed expression forms include:
```text
|{register:main:dryer_g_m77_01_out_status}|
|{water:calc_TotalSysIn}|
```
Preserve the source component's supported syntax; these examples are observed forms, not a complete expression-language specification.
The Sweetgrass Overview six-state indicator references `main:dryer_g_m77_01_out_status` and defines texts/classes for Fault, Stopping, Starting, Running, an extra state, and Off/Stopped. State styling and register values must be mapped together.
A gauge exposes value, min, max, units, label, decimal places, update interval, classes, and styles. An inspected KAV East Water Flow gauge uses `|{water:calc_TotalSysIn}|`, limits 0–50, units `gpm`, one decimal, and interval `1000`. Units for that interval were not labelled in the dialog.
**Read and write bindings are distinct.** Sweetgrass Center Receiving's Start Button is a Button Set Value configured to write `1` to `main:recvSeqStart`. It was inspected through the element editor; the operational Start button was not clicked.
Numerical Data can also be editable. An inspected Ratio component displays `|{register:main:dryer_g_centRecBin21Ratio}|` but writes to `main:dryer_g_centRecBin21RatioSel`. Its write expression is `value`, the user-entered variable. It has editable and limits checkboxes, min/max fields, adjustment buttons/step size, suffix, Numeral.js number format, and separate main/inner/label/data classes and styles. The displayed limits 0 and 100 do not prove enforcement: the Limits checkbox was unchecked.
### Trends and history
The Trend editor exposes JSON fields for Series, Scales, and Buttons, plus a default button index, navigator register/color/duration, horizontal grid lines, classes, and styles. Series contain `name`, `register`, `scale`, and `color`. Scales define axes and bounds. Range buttons contain count/type/text and time ranges. Chart bindings use register strings without expression wrappers, for example `water:well21GPM`.
The inspected East Water Wells trend includes a series named “Well 29” bound to `water:g_well30_flow_out_eu`. This looks like a copied label that needs checking; no correction was made. When copying a chart, check every series name, register, scale, navigator, range button, and default index.
## Template choices for another installation
| New requirement | Best starting examples | What to adapt |
| --- | --- | --- |
| Small home/status dashboard | Sweetgrass Overview | Equipment names, state mapping, page links, widths |
| Mill process diagram + controls | KAV Main Mill 2 / Tempering | Images, geometry, bins, motor IDs, series, command targets |
| Simple bin diagram | KAV East Mill Bins | Bin images, levels, labels, gauges and history |
| Grain inventory | KAV Main Bin Inventory | Grain dropdown values, capacity/quantity expressions, totals |
| Receiving source/destination selection | Sweetgrass Center/South Receiving; KAV Receiving | Routing choices, distributor states, sequence and motor references |
| Sequence setup | Sweetgrass Receiving/Crimping/Groater Sequence | Motor IDs, delay and state registers, links |
| Standalone well or VFD pump | KAV Main Water Well 1 New / Well 10 New / Out Pump 1 | Run/mode/speed/flow/level, commands, totals, timers, iframe targets |
| Multiple cisterns and transfers | KAV East Water Cisterns + Cistern Transfer pages | Tank levels, transfer paths, run conditions, settings |
| Distribution circuits | KAV East Water Sys pages + Outflow | Circuit identity, pressure/flow, motor and command bindings |
| Power monitoring | Sweetgrass Power Main / Power Dryer | Meter registers, units, axes and tables |
| Device diagnostics | Device Status across sites | Device prefix, CPU/disk/memory/uptime sources and action buttons |
Treat pages named old, test, New, or Spare as candidates requiring comparison, not automatically current templates. KAV Main has old water pages even though KAV Main Water is a separate live site. Do not select a source on title alone.
## Data and site setup
The observed Sweetgrass chain is:
```text
Page element → device-qualified register → selected slave → PLC tag address
```
Manage Devices lists `global` (Global) and `main` (Main PC). Main PC's slaves are Codesys PLC, Groater PLC, Main PLC, SG Dryer, Shipping PLC, and Terminal. The Main PC register table contains 20,055 definitions, including disabled entries. Presence in the table does not establish that a register is enabled, updating, or logged.
The inspected register `dryer_g_m77_01_out_status` belongs to SG Dryer and uses address JSON:
```json
{ "tag": "sg_dryer.g.m77_01.out_status" }
```
It is enabled, updates On Change with a one-second interval, and has logging disabled. Logging fields showed interval 60 seconds and duration 604800 seconds, but those values do not mean logging is active. A chart needs a deliberate history configuration, not just a display reference.
Registers and alarms each expose Edit and Import tabs. Import formats and submission behavior were not inspected or tested. Sweetgrass Main PC has 1,538 alarm definitions; the sampled list includes receiving-leg and debearder transmitter/current alarms. Alarm notification, trigger, role, and export menus exist, but their detailed configuration has not been audited. Existing PLC logic and interlocks were not inspected.
Create Site is a form with Site ID and Site Name plus Submit. It was opened only; no site was created. The form alone does not establish what defaults, devices, roles, or templates a new site receives.
Manage Elements lists 46 component definitions, with five marked “Dont Use.” Opening an element definition editor shows an “Are you sure?” step; that was declined. These definitions should not be changed to accomplish ordinary page assembly.
## Copy/paste build procedure
1. Define the new site's equipment list, page map, controller/device IDs, register map, and required read versus write behavior.
2. Pick the closest current source template from the table above. Record its site, page, and parent element name.
3. In a disposable destination page, verify that copying a parent includes the expected children and that paste works across the intended site boundary. Inspect the draft and cancel after this first test.
4. Build one representative unit first. Update title/slug, visible labels, element names, anchors/links, images/coordinates, read expressions, write registers/values, state mappings, numeric formats/units/limits, charts, and timers.
5. Check every child for source-site references. A renamed card can still read or write the original equipment.
6. Verify the draft layout and loaded page identity. Save only the intended destination page, then reopen it to verify persistence. Configure navigation separately.
7. Confirm live displays against known register values. Validate history separately. Operational command testing is a separate, explicitly authorized activity with the installation owner; a visual preview is not a control-system test.
8. Once the representative unit is correct, duplicate that adapted unit for the remaining equipment and repeat the register/link checks.
## Remaining evidence needed
- Sweetgrass Motors and old Motors trees, which timed out.
- Actual application clipboard format, nested copy semantics, and cross-site paste behavior.
- A controlled new-page save/reopen test and navigation/default-page test.
- Intended new installation's equipment, controller tags, units, ranges, and command mapping.
- Required alarm/notification rules, user roles, history retention, and exports.
- Whether a supported Atom HMI API or import/export interface can replace browser editing for a standalone agent. No such interface was verified in this study.
This survey establishes a browser editing approach and a template map. It does not yet establish a fully tested autonomous editing agent.