Releases - BMS¶
Release notes for WideQuick BMS. The newest release is listed first and expanded; older releases are collapsed, click a release to expand it. Each release is built on a specific WideQuick Modular Framework version, linked under its heading. For the full framework changelog see the MOD releases.
WideQuick BMS 2026.1.2¶
Released 2026-08-20 Modular Framework Version: WideQuick MOD 2026.1.0
Release notes
New features¶
| Feature | Description |
|---|---|
| Calendar import and export | Events can be imported into the calendar from a local .ics file and exported back out to one. Each import is kept as its own subscription in a new ics_subscriptions table, so it can be renamed, recoloured, hidden or removed as a unit without touching events created directly in the calendar. An import is read once at import time. Adds the ImportCalendar, ExportCalendar, EditCalendars and CalendarFilter views. |
| Holidays and holiday eves | A day is marked as a holiday by creating a calendar event on it with the HOLIDAY colour, and as a holiday eve with HOLIDAYEVE. Such an event is snapped to whole days when saved. The daily classification is published to two internal Data Store variables, isHoliday and isHolidayEve, which can be connected to an output so a control system runs its own schedules against the day type. The classification is a property of the day rather than a value written into each time channel's own registers, so one pair of variables serves every schedule. The match is an overlap test, so a multi-day holiday marks every day it covers. |
| Logbook archive | Logbook entries can be archived instead of deleted. The logbook table gains an archived column, the filter gains a Visa arkiverade toggle, and a new Logbook_Archive privilege controls who may archive an entry. The privilege defaults to denied, so it must be granted to a role before anyone can archive. The settings view gains an action that permanently deletes every archived note. |
| Report units and prefixes | Reports carry a display unit. The report controllers gained Unit and Prefix pickers, and every selected signal gets its own scale factor, calculated from that signal's own prefix and the chosen unit. The values are queried in the unit they were logged in, and the factors travel to the template alongside the data, landing on its Meta sheet as Factor1 to Factor15, where the template applies the scaling. One signal logged in Wh and another already in kWh therefore report on the same scale. The Unit list is not a fixed set. It is built from the units of the signals on the report's logger, reduced to their SI base, so only units the data actually contains are offered. Selecting a unit filters the signal tree to signals of that dimension, and the tree stays disabled until a unit is chosen. Filtering is opt-in per controller: a report view without the Unit object leaves the tree unfiltered and sends values in their native units. Prefixes on m³ apply to the metre, so dm³ is a thousandth of m³ rather than a tenth. ReportQueue, reportStats and reportSchedules gain unit and factorArray columns, added automatically on first start so existing databases migrate themselves. |
| Delta reports | Two new report controllers, Delta_Week and Delta_Year, report the change over a period rather than the logged values themselves. They are intended for meters that report a continuously increasing total. Delta_Week presents a daily delta per column, one column per weekday, and accepts logging intervals from hourly to daily. Delta_Year presents a monthly delta per column, one column per month, using the DeltaYear_H.xlsx template that accepts intervals from monthly down to hourly. Both accept up to 15 signals. They ship with new Excel templates (DeltaWeek.xlsx, DeltaYear_H.xlsx) alongside reworked EnergyReport.xlsx and WeeklyEnergyReport.xlsx. |
| Remote client list | A new scRemoteClients script counts the remote clients connected to the application. A remote client can request the connected-client detail list, which the server returns over RPC to the requesting client only. The list is never stored. Adds the RemoteClients.kvie pop-out. |
| Alarm notification criteria | Outbound alarm notifications can be filtered by alarm state. The mail_schedules table gains a criteria column accepting all, active, acknowledged, unacknowledged and inactive, added automatically on first start and defaulting to active so existing schedules keep sending on the same alarm state as before. The alarm schedule treeview shows which alarm classes and which criteria each schedule monitors. |
| Map lines and pipes | Lines and pipes can be drawn on a map alongside pins. Line geometry is defined on the MainLine1, MediumLine1 and SmallLine1 objects, and the scMap script was reworked to position them from geographic coordinates. |
| Dashboard gauges | Two gauge widgets, Gauge_1x1 and Gauge_2x2, were added to Dashboard Widgets.klib. They present a single value as a dial, in a one-cell and a two-by-two dashboard size. |
| Unused suffix view | An Unused popup variables button in the debug view opens the new UnboundDebug.kvie, listing every suffix that is not connected to a popup or a view. |
| Logbook topic tree | The logbook files an entry against a workview, an object, or a topic path of its own, and presents all three in a single tree. A toggle switches that tree between workview order, which follows the folder structure of the process views, and signal order, which follows the tag path. The two are linked through the object index, so a note on an object also appears under every view that object is drawn in, and a note on a view also appears under the objects drawn in it. Where two objects in the same view share a name, the leaf label is extended with as much of the tag as is needed to tell them apart. The logbook table gains topic_kind and topic_ref, derived from topic and re-derived on every start, and the entry list gains a Placed on column naming what each entry is anchored to. The logbooks opened from an object popup and from a process view preselect their subject while leaving the rest of the tree reachable. |
Improvements¶
| Area | Description |
|---|---|
| Alarm Sender — acknowledging user | Notifications now report which user acknowledged an alarm. Alarm state and the acknowledging user name are resolved from wqlogg_larmlogg_alarm_data rather than inferred from the live alarm object. |
| Alarm details in description | Each alarm's details are copied into its description property, making the text reachable outside alarm objects. |
| Alarm schedule status | Alarm - Schedule updates the number of schedules and their active state live instead of only on load. |
| Maintenance log | A Clear the maintenance log button clears every entry in the maintenance log. The action sits behind a confirmation dialog and the Config privilege. |
| Alarm frequency | Alarm - Frequency gained a Filter button that opens the alarm filter pop-out, so the frequency view can be narrowed the same way the alarm list is. |
| Bar chart date order | A new property renders the date axis right-to-left instead of left-to-right. |
| Calendar import colours | Imported calendars are created with the DEFAULT colour and can be recoloured in EditCalendars. The HOLIDAY and HOLIDAYEVE colours are what mark a day, so changing a calendar to or from either shows a warning first. |
| Holidays on remote clients | The scHoliday script is registered for remote clients. |
| Theme-aware filters | The alarm filter and the maintenance filter follow the active theme. |
| Report scheduler follows the report system | A scheduled report stores the same display unit and per-signal factors as a manually created one, selected in ReportSchedule2.kvie. |
| Report signal check | Creating a report is blocked until at least one signal is selected, the same check MOD and WWT already had. |
| Calendar — overflow badge opens the day | The month view's Show more (N) badge opens the Day view for that date, where every event of the day is visible. Overflowing events are never drawn in the month cell itself. |
| Calendar — week and day event names | Events sharing an identical span were drawn as stacked bars with their names on top of each other. A column holding more than one event now collapses to a single bar labelled Show more events (X), which opens a picker listing everything it stands for. |
| Alarm overview text length | Long alarm texts are held to the width of the alarm overview widget instead of stretching it. |
| Settings icons | Settings icons ship in gray and white variants so they follow the active theme. |
| Speed dial | The SpeedDialRight object was drawn out of proportion. Its element widths and offsets were corrected. |
| Object property descriptions | Property descriptions appear as help text in WideQuick® Designer. The descriptions left empty on the valve objects were filled in, and the ObjectName example in DynTouch was missing its closing quotation mark, reading "FS61 instead of "FS61". |
scPrototypes |
Gained a toUpperCase() helper for use in project scripts. |
| Alarm Sender — compact SMS | An alarm schedule can send a compact message instead of the full per-alarm listing. A compact message carries the subject line, the event type and a comma-separated list of the alarms matching it, which keeps a notification covering many alarms within a sensible length. |
| Prompt accepts Enter | The prompt pop-out treats Enter as a confirmation, so a value can be typed and committed without reaching for the button. |
| Quieter logs | The application and error logs were cleaned up. Schema migrations in scCalendar, scHoliday, scMaintenance and scSuffix now check whether a column exists before adding it, rather than attempting the change and letting the SQLite driver report the failure into Errors.log. scUsers.hasPriv() denies instead of throwing when it is called without a privilege. Several hundred lines of recurring startup noise are gone. |
Changes¶
| Area | Change |
|---|---|
| Removed views and scripts | The unused CreateEnergyReport.kvie was deleted and scMapObjects.js was removed from the project — a copy is kept in the resource pack should it be needed. |
| Calendar feeds | Events can now be imported into the calendar from a local .ics file. |
Bugs¶
| # | Area | Description |
|---|---|---|
| 1 | Maintenance | A missed recurring deadline was dropped when no user was logged in, because the insert required a current user and threw instead. The creator now falls back to System. |
| 2 | Alarm Sender | The alarm description could be sent as the literal text Undefined. A guard now suppresses the field when no description is available. |
| 3 | Alarm list | dslAlarms.onDataChanged() could push the same alarm twice. The list is now scanned before a push, so duplicates are rejected. |
| 4 | Calendar | Events did not cover a whole day. A full-day event is now written at index 0 and index 48, so it spans the day. |
| 5 | Dashboard | Daylight saving transitions misaligned the bar chart. Fixed, together with grid and description rendering. |
| 6 | Map | StatusPin applied its dynamic status without checking the alarm objects, so a pin could show a state its object did not have. It now verifies against both the object list and the alarm objects. |
| 7 | Map | Lines and pipes were never drawn on a map. The scMap update calls were left disabled, and the geometry properties sat on the info popup instead of the line objects. The calls are now active, and the properties live on the MainLine1, MediumLine1 and SmallLine1 objects. Any values previously entered on the info popup need to be set again on the line objects. |
| 8 | Map | A pipe spanning a large geographic area computed its pixel offsets from a fixed Line0 that could fall outside the visible frame, placing the pipe incorrectly. Offsets are now anchored to the corner of the visible frame. |
| 9 | Object library | The CustomLabel property had no effect on the nameplate of some objects. Fixed across the sensor, valve, speed dial and map indicator libraries, including their legacy variants. |
| 10 | Object library | Dampers reported NO and NC inverted, in both the current and the legacy damper libraries. Fixed. |
| 11 | Navigation | Menu buttons did not change colour when the theme was toggled, and a sub-navigation item that outlived its view broke the registration loop. A guard and an unregister step were added. |
| 12 | Navigation | In the full menu, Back on a paginated sub-navigation page only undid the last forward step, because paging was driven by a single previous-index value rather than a page history. The scSubNavPopup script now records the start index of every page, so Back steps back through the whole sequence. |
| 13 | Script libraries | scAlarmFinder was registered twice in ScriptLibraries.kdat, and error messages in scAuditTrail and scMaintenance still carried the old scMaintenanceLog prefix, pointing at the wrong script when something failed. The duplicate registration was removed and the prefixes corrected. |
| 14 | Alarm overview | The error layer could not cover the view because other objects sat above it. The object order was corrected. |
| 15 | Maintenance | MaintenanceInfoPanel was registered under a name that did not match its view file, and a stale folder entry was left in SuffixConfig.db. Both corrected. |
| 16 | Suffix settings | Suffixalias - Popuper keys its categories by their Swedish names while the tree shows them translated, so in any other language the settings fields resolved to nothing. The controls displayed but silently refused input, and selecting an item no longer filled in the combo boxes and text fields. The displayed label is now resolved back to its canonical key before use. Adding a category also rejects a name matching an existing category's translated label, which would otherwise create two entries that cannot be told apart. |
| 17 | Suffix settings | Creating a category reported an error and left the new category unselected, because the tree was searched using the raw typed name and a criterion the translated model can never match. The lookup now uses the label the node actually renders under, and skips the selection rather than throwing if the node cannot be found. |
| 18 | Maintenance | A recurring maintenance configuration could not be created from Underhåll - Återkommande. Three of the controls, the interval count, the priority and the assignee, are not live-bound to the configuration object, so the values entered were discarded when the configuration was saved. They are now copied across before saving. getTemplateFromName() also returned a template's deadline_value in milliseconds while applyOffset() expects a count of interval units, which placed the first deadline far outside any usable range. The value is converted to a unit count on read and deadline_type is normalised at the same point. Saving a configuration with an empty name, type, description or interval no longer writes a malformed row. |
Translations¶
| Area | Change |
|---|---|
| New project translation strings | Logbook archive labels and the view controller popup, report schedule views, calendar import, export and edit views, the maintenance info panel and maintenance filter, alarm criteria labels, document and file picker labels, the login view, and report and damper library strings. |
| Removed | Dead source strings were pruned ahead of the new translation pass. |
| Verified | Translated strings were compared against the Swedish baseline to catch entries that had drifted from their source. |
| Alarm criteria | Criteria are displayed translated but stored as canonical keys. The scAlarmSender script untranslates the selected value before writing it to the database. |
| Report strings | The unit, prefix and delta report labels were added, and the misspelt "Excell" is now "Excel" throughout. |
| Calendar collapse strings | Visa fler (N) and Visa händelser (X) were added for the collapsed month, week and day events. |
| Languages updated | Arabic, Bulgarian, Croatian, Czech, Danish, English, Finnish, French, German, Hungarian, Italian, Mandarin, Norwegian, Polish, Portuguese (PT and BR), Romanian, Slovenian, Spanish, Swedish. |
Library and view changes¶
| File | Change |
|---|---|
scHoliday.js |
Calendar import and export, shared ICS parser, holiday and holiday eve classification published to isHoliday and isHolidayEve |
scAlarmSender.js |
Criteria filtering, acknowledging user reporting, alarm state resolved from the alarm log, description guard, criteria untranslation |
scLogBook.js |
archived column, deleteMark retirement and cleanup, permanent delete of archived entries |
scRemoteClients.js |
New script — connected client count and RPC-served client list |
scMap.js |
Line and pipe handling, offsets anchored to the visible frame |
scMaintenance.js |
System fallback for unattended recurring inserts |
scDashboard.js |
Bar chart date order property, daylight saving correction, grid and description fixes |
scSubNavPopup.js, scThemes.js |
Theme recolouring of menu buttons, guard and unregister for stale sub-navigation items |
scAlarm.js |
Duplicate push guard in dslAlarms.onDataChanged() |
Privileges.kdat |
New Logbook_Archive privilege |
DataStore.kdat |
Alarm details copied into description |
ImportCalendar.kvie, ExportCalendar.kvie, EditCalendars.kvie, CalendarFilter.kvie |
Calendar import, export, edit and filter views |
UnboundDebug.kvie |
New view listing suffixes not connected to a popup or view |
RemoteClients.kvie |
New pop-out listing connected remote clients |
Logbook.kvie, LogBookFilter.kvie, LogbookViewControllerPopup.kvie |
Archive column, Visa arkiverade toggle, translated labels |
Larm - Schema.kvie, AlarmSchedule_1.kvie, AlarmSchedule_2.kvie |
Criteria selection, live schedule count and active status |
Spårningslogg - Underhåll.kvie |
Rensa underhållsloggen button |
Map Indicators.klib |
Line and pipe objects, StatusPin alarm object verification, CustomLabel fixes |
Dashboard Widgets.klib |
Gauge widgets, bar chart date order |
COMPONENTS.klib, COMPONENTS_Legacy.klib, DAMPERS_Legacy.klib |
Damper NO and NC corrections |
Valves.klib, Speed Dial.klib, DynTouch.klib |
Property descriptions filled in, SpeedDialRight proportions, ObjectName example corrected |
scReports.js, scReportScheduler.js |
Unit and SI prefix resolution, per-signal scale factors, unit and factorArray columns with their schema migrations, logger guard |
Report.klib |
Unit and prefix pickers, delta report support |
Delta_Week.kvie, Delta_Year.kvie |
New delta report controllers, with a signal-selected check before a report can be created |
ReportSchedule2.kvie |
Unit and prefix selection for scheduled reports |
Reports/Templates/*.xlsx |
New DeltaWeek and DeltaYear_H templates, reworked energy report templates |
scCalendar.js |
Month view overflow badge opens the Day view for that date |
scWeekViewManager.js, scDayViewManager.js, Calendar.klib |
Week and day event collapse with Visa händelser (X) |
Larm - Översikt.kvie |
Object order so the error layer covers the view |
Translations.klib |
String additions, dead string removal, Swedish baseline verification |
WideQuick BMS 2026.1.1¶
Released 2026-10-08 — Patch version BMS 2026.1.1.2
Release notes
Bugs¶
| # | Area | Description |
|---|---|---|
| 1 | Remote systems | Connecting to a remote system running WideQuick BMS, or another Modular Framework application, broke local functionality: popups, trends, history, the logbook, the calendar and the alarm counters stopped working or showed the remote system's data. Script functions were declared globally, so the remote system's copies of the same scripts replaced the local ones. All script functions and classes are now members of their own script library and are called through the library name. |
| 2 | Remote alarms | Disconnecting a remote system could raise errors, and the remote alarm count failed when a remote system's data was removed before the disconnect was handled. Remote systems are now checked properly before they are registered or removed, and registration is retried while a remote system's data is still loading. |
| 3 | Remote alarms | The alarm counters in the navigation and on dashboards showed a wrong number of remote alarms after connecting, and a connected remote system's own scripts could overwrite the local counters. Remote alarms are now counted directly from the remote alarm groups and published to two new variables, remoteNoAckAlarms and remoteAckAlarms. |
| 4 | Popups | A popup reopened from cache after a remote system had connected could crash the client. Popups now only reuse instances built by the local application. |
| 5 | Trend | The trend popup failed to load for objects with a suffix that has no matching tag. |
| 6 | Maintenance, Calendar | On the web client and on remote clients, maintenance tasks and the maintenance events in the calendar showed dates around 1970. These clients receive whole-number database values as 32-bit numbers, which cuts off timestamps stored in milliseconds. Timestamps are now read as decimal numbers, which arrive intact. |
| 7 | Databases | Web and remote clients ran the database table creation and migrations at startup, which wrote errors to the web client's log. Table creation and migrations for maintenance, the calendar, the report scheduler and the alarm sender now only run on the server. |
| 8 | Alarms | Go to alarm in the alarm list did nothing on the web client, because an alarm group's Measure script cannot reach script libraries there. Views with an alarm list now provide a view.goToCurrentAlarm() function, and the alarm groups' Measure scripts call it. This covers Larm - Lista, the alarm popup, the map and the dashboard alarm list widgets. |
| 9 | Remote alarms | Go to alarm on an alarm from a connected remote system did nothing, since the object is not part of the local project. It now opens the remote system in WideQuick® Remote, the same way as the remote systems menu. After login, the remote system navigates to the alarm's view and highlights the object. |
| 10 | Dashboard | On the web client, the dashboard's from and to date fields showed 1970-01-01, and the history widgets used that range. The fields are no longer bound to the scDashboard script; the range is read from the fields when it is applied. |
| 11 | Maintenance | On the web client, the priority list in Underhåll - Mallar and the template and priority lists in Underhåll - Återkommande were empty. The lists are now filled when the view loads. |
| 12 | Suffix alias | On the web client, the view field in Suffixalias - Popuper showed the wrong view, and the list of available views stayed empty because the web client cannot read the server's folders. On the web client the field is now read-only and shows the view linked to the selected category, with a notice that editing is not available there. Desktop and remote clients are unchanged. |
| 13 | Audit trail | With web or remote clients connected, a change could be logged more than once, or with the wrong user or system. Every connected application reacted to the change, and none of them could tell where it was made. Each change is now logged once, by the application where the user made it. Changes without a user, such as from scripts or drivers, are logged by the server. Adding or removing audited variables now reaches all connected applications, and Spårningslogg has a new System column. |
| 14 | Popups | On the web client in a resized browser, the Styrkurva and Styrkurva tid popups drew their content at half size, and the document viewer in the Documents popup overflowed the popup. Both now scale with the popup on the web client. Sizing on desktop and remote clients is unchanged. |
| 15 | Styrkurva tid, time channels | The Styrkurva tid popup and saved time channel profiles could not run on web and remote clients, because the scStyrkurvaTid and scTimeChannel scripts were not loaded there. Both scripts now run on remote clients. |
Known issues¶
| Area | Issue |
|---|---|
| Web client: tree views in popups | In popup windows opened from an object, such as Documents, History, Trend and Object Info, the tree view header shows large, dark text on the web client, and the rows do not follow the popup zoom. The theme's header text colour and font are not applied in these windows. This is an issue in WideQuick® Web Client and is expected to be fixed in a later WideQuick version. Tree views in the main view are not affected. |
| Audit trail: web client on the server computer | The audit trail decides where a change was made from each application's recent user activity. A web client running in a browser on the same computer as the server shares that activity, so a change made there can be logged twice. Web clients on other computers are not affected. |
Library and view changes¶
| File | Change |
|---|---|
Scripts/*.js (29 files) |
Script functions and classes declared as members of their script library, for example scSmartPopup.smartPopup and scAlarmFinder.goToAlarm, instead of as globals |
| Views and libraries (32 views, 4 libraries) | Calls updated to the library-qualified names |
scRemoteAlarms.js |
Existence checks when registering and removing remote systems, retry while a system's data is loading, remote alarms counted from the alarm groups |
scAlarm.js |
Alarm counters are only written by the local application, not by a connected remote system's copy of the script |
scSmartPopup.js |
Popups only reuse instances built by the local application |
Trend.kvie |
Guard for objects whose suffix has no matching tag |
Nav.kvie, Dashboard Widgets.klib |
Alarm counters include remoteNoAckAlarms / remoteAckAlarms |
scMaintenance.js, MaintenanceInfoPanel.kvie |
Timestamps read as decimal numbers through the column lists logCols(), templateCols and eventCols instead of SELECT *; status migration only on the server |
scCalendar.js, scReportScheduler.js, scAlarmSender.js |
Table creation and migrations only on the server |
Larm - Lista.kvie, VySpecifikAlarm.kvie, Karta.kvie, Dashboard Widgets.klib |
Define view.goToCurrentAlarm() for the alarm groups' Measure scripts |
scAlarmFinder.js, scRemoteSystems.js, WORKSPACE.kvie, Remote/startup_remote/Workviews/StartUp.kvie |
Go to alarm on a remote system's alarm opens WideQuick® Remote and navigates to the alarm there |
scDashboard.js |
New readRange() function that reads the dashboard's from and to fields |
Dashboard_Template.kvie, Dashboard Widgets.klib, the Demo dashboards |
From and to fields no longer bound to scDashboard; the range is read with readRange() |
Underhåll - Mallar.kvie, Underhåll - Återkommande.kvie |
Priority and template lists filled from the view's Load script |
Suffixalias - Popuper.kvie |
On the web client, the view field is read-only and shows the category's linked view, with a notice |
scAuditTrail.js |
Each change logged by the application where it was made; list changes synchronised to all connected applications |
Spårningslogg.kvie |
New column System |
scWM.js |
New scWM.isWeb property and an afterScale hook for popups |
Styrkurva.kvie, StyrkurvaTid.kvie, scStyrkurvaTid.js |
Separate sizing for the web client |
Documents.kvie |
Document viewer scaled with the popup on the web client |
ScriptLibraries.kdat |
scStyrkurvaTid and scTimeChannel run on remote clients |
DataStore.kdat |
New variables remoteNoAckAlarms, remoteAckAlarms, AuditTrailVersion and AuditTrailClaims; in the Demo project, the alarm groups' Measure scripts call view.goToCurrentAlarm() |
Upgrade notes¶
| Topic | Note |
|---|---|
| Custom scripts and views | Your own code that calls the framework's script functions by their old global names must use the library-qualified name instead, for example scSmartPopup.smartPopup, scAlarmFinder.goToAlarm(...), scWorkviewAnimation.AnimationHandler, scQuickSort.Quicksort and b64.btoa / b64.atob. |
| Remote systems: auto connect | For the alarm counters to include a remote system's alarms in every view, enable Auto connect for that remote system. Without it, the connection is only open while a view uses it, such as the alarm list. |
| Alarm groups: Go to alarm | Alarm groups added to the project must use the Measure script if (view.goToCurrentAlarm) { view.goToCurrentAlarm(); }. The earlier form, which calls scAlarmFinder.goToAlarm with app.alarmView, does not work on the web client. A custom view with an alarm list must also define view.goToCurrentAlarm(); see the migration guide. |
| Remote systems: Go to alarm | Navigating to a remote system's alarm requires the remote system to run WideQuick BMS 2026.1.1.2 as well. Otherwise WideQuick® Remote opens at the remote system's start view. The user logs in to the remote system in the WideQuick® Remote window. |
Released 2026-07-08 — Patch version BMS 2026.1.1.1
Release notes
Bugs¶
| # | Area | Description |
|---|---|---|
| 1 | Audit trail | The audit trail filter couldn't combine object, user, and time at the same time (it was capped at two conditions), and the row-count limit didn't reliably return the newest rows. Fixed with a single predicate-based filter. |
| 2 | Maintenance | Recurring tasks stored the interval unit in the active interface language, so the recurring offset could be skipped or misapplied when the language differed from when the task was created. Fixed by normalising units to a canonical form. |
Library and view changes¶
| File | Change |
|---|---|
Spårningslogg.kvie |
Audit trail filter rewritten — predicate-based object/user/time filtering with a newest-N row limit |
scMaintenance.js |
Recurring interval units normalised to a canonical form for language-independent scheduling |
Released 2026-07-02 Modular Framework Version: WideQuick MOD 2026.1.0
Release notes
New features¶
| Feature | Description |
|---|---|
Time Channel Profiles (scTimeChannel.js) |
A new script library that lets users save and load named time channel schedules. A profile captures the on/off values for all day types — weekdays, weekends, holidays, and up to three special days — for a given tag and stores them in the Config database for later reuse. |
| History — Import from All | New workview popup ImportFromAll.kvie under Common_Popup/HistorikPopups/ for importing history signal groups from any part of the project. |
| History — Import Saved Signals | New workview popup ImportSavedSignals.kvie for importing from previously saved signal selections. |
Improvements¶
| Area | Change |
|---|---|
| Report Scheduler | Reports can now be triggered at a specific time of day (±5 min accuracy). Three new database columns added to reportSchedules: trigger_time, trigger_day, and trigger_month. The checkTrigger logic was fully rewritten and ReportSchedule1.kvie updated with new UI controls. |
| Map pins | Map pins no longer use tooltip objects. They are now created with createObject, giving more display control and making them more stable in the web client. |
| Map — folder navigation depth | Navigation from map pins to folders was limited to 1 level deep. It can now navigate to any depth. |
| Map — alarm text translation | Alarm texts shown on map pin popups are now run through Language.translate so they respect the active language. |
Map — mapView property |
All internal mapViews references corrected to mapView. The map (Karta.kvie) no longer renders above the navigation bar in the web client. |
| Dashboard — bar chart | Bar chart now supports Days, Weeks, and Year grouping views. |
| Dashboard — expanded view | History set-time now applies to the expanded popup view. Pie, Bar, and History widgets now initialise on load via scDashboard. Expanded legend shows the current value at the ruler position and percentage where applicable. Fixed expanded list column widths being stretched by long content. |
| Calendar | Month names and day-of-week labels are now passed through Language.translate and match the selected interface language. |
| Alarm Sender — slot 2 | Added slot2_active column to mail_schedules so each weekday can independently enable or disable its second time slot. |
| Alarm Sender — day-of-week | Fixed an off-by-one bug where getDay() misaligned all alarm days by one. A Monday-first index map is now used correctly. |
| Alarm Sender — midnight send | 00:00 – 00:00 time slots are now treated as disabled rather than triggering a midnight send. |
| Alarm Sender — timer guard | Timer delay now guards against a zero or negative timeToSend value, defaulting to a 2 second minimum. |
| Alarm Schedule | Editing an existing schedule no longer silently resets emailActive to 0. 00:00 to 00:00 is the default disabled state for new schedules. Buttons now follow the active theme. |
| Alarm email and SMS | All hardcoded Swedish labels are now passed through Language.translate so they appear in the user's active language. |
| History / VySpecifikHistorik | Can now load signal groups from other parts of the project. Signal list switched from a flat list to a TreeView. Maximum signal count lowered to improve performance. Tags that are not logged are now clearly indicated. |
| Maintenance | Added reminder_enabled field to maintenance templates. The UI now shows a reminder checkbox in the template editor. |
| Documents and Maintenance | Both modules now handle the tag structure format C_c.D_d.S_o_s in addition to previously supported formats. |
| Documents — UI labels | Document list group labels are now passed through Language.translate. |
| Control Curve (Styrkurva) | The popup now displays the current value on the curve. It can also be placed directly inside a workview screen rather than only as a popup. |
| Control Curve Time (StyrkurvaTid) | Brought to feature-parity with the standard Control Curve and visually overhauled. A vertical line tracks the current wall-clock time on the graph in real time; a horizontal line tracks the live Y0 process value. The X-axis label now appends the current HH:MM time. Data point boxes are arranged in two columns (previously a single column), supporting up to 24 visible points. The preview curve now also updates when Y-axis min/max changes, not only when data points are edited. |
| Control Curve — independent clamp save/load | Both Styrkurva and StyrkurvaTid now save and load the upper and lower clamp values independently. Previously, both clamp handles had to be visible for either value to be included in a saved profile. |
| Control Curve — duplicate profile name prevention | Renaming a profile to a name already used by another profile is now blocked. |
| Control Curve — audit trail | Spårningslogg.kvie updated with control curve audit trail support. |
| Process popup | Visual update with corrected element placement and spacing. |
| Pop-out close | Pop-outs opened via a link now use the correct close action instead of app.popup.visible. |
| SubNav popup | Now lazily initialises the subnav route tree on demand for correct behaviour on web clients. Default fallback view corrected to Dashboard Energi.kvie. |
| Settings | The Settings view now respects user privilege levels. |
scPlatform |
All timers now call setSingleShot(true) to prevent repeated firing after initial detection. |
| Weather | A data-change trigger was added so the weather widget refreshes automatically when the underlying data changes. |
| "Email" label | All places previously showing "Epost" now consistently use "Email". Text boxes resized to accommodate translated strings. |
| Language icon | Language icon is now square for consistent display in the settings. |
Bugs¶
| # | Area | Description |
|---|---|---|
| 1 | Alarm Schedule | Editing a schedule silently set emailActive to 0. Fixed. |
| 2 | Alarm Sender | Day-of-week index off-by-one caused all scheduled alarm windows to fall on the wrong day. Fixed. |
| 3 | Map | Folder navigation from map pins was limited to one directory level. Fixed to support unlimited depth. |
| 4 | Date Config | Translation string handling caused date configuration to fail when the locale format produced a non-numeric string. Date comparison now uses numeric values directly. |
| 5 | Dashboard | Expanded list column widths were stretched by long content. Fixed. |
| 6 | Reports | Logger list column ordering was incorrect. Fixed. |
| 7 | Calendar | Month and day names were rendered using the system locale instead of the active WideQuick language. Fixed. |
| 8 | Documents | Tag structure C_c.D_d.S_o_s was incorrectly split, causing object tree build failures. Fixed with proper parsing. |
| 9 | Calendar | Maintenance reminders were appearing on two calendar days instead of one. Fixed by snapping the reminder block to the start of the day. |
Translations¶
| Area | Change |
|---|---|
| New project translation strings | Alarm acknowledgement, history import labels, settings and privilege labels, dashboard widget labels, report scheduler time controls, calendar month and day names, document group labels, map indicator tooltips, mail status strings ("Sending…", "Sent!", "Send failed"), and report status strings ("Creating report…", "Report done!"). |
| Removed | Orphaned Swedish source strings. |
| Verified | All Swedish source strings now have a corresponding translation entry. |
| Languages updated | Arabic, Bulgarian, Croatian, Czech, Danish, English, Finnish, French, German, Hungarian, Italian, Mandarin, Norwegian, Polish, Portuguese (PT + BR), Romanian, Slovenian, Spanish, Swedish. |
Library and view changes¶
| File | Change |
|---|---|
Translations.klib |
Major string additions and cleanup across all languages |
Dashboard Widgets.klib |
Widget and language updates |
Map Indicators.klib |
Map pin, indicator, and tooltip updates |
Report.klib |
Report template and layout changes |
COMPONENTS.klib |
Component updates |
COMPONENTS_Legacy.klib |
Legacy component updates |
Dampers_Legacy.klib |
Legacy component updates |
COMMON_STATIC.klib |
Static component updates |
Calendar.klib |
Calendar display updates |
CustomPopupObjects.klib |
Popup object updates |
WorkviewNameDisplay.klib |
Workview name display updates |
Buttons.klib |
New button definitions |
Styrkurva.klib |
Control Curve component updates |
AlarmSchedule_1.kvie |
Full UI rework for slot 2 time windows and theme |
ReportSchedule1.kvie |
New send-time controls |
VySpecifikHistorik.kvie |
Cross-system group loading |
Historik.kvie |
Cross-system groups, TreeView for signal list, max count lowered |
Dashboard *.kvie |
Bar chart, legend, and load improvements |
Karta.kvie |
Map nav-bar z-order fix for web |
StyrkurvaTid.kvie |
Visual overhaul, two-column data point layout, live time and Y0 indicator lines |
WORKSPACE.kvie |
Workspace layout updates |
LB01/LB02/LB03.kvie |
HVAC standard and legacy view updates |
VS11 / VV10–VS20.kvie |
Heating system view updates |
Larm - Logg.kvie |
Alarm log view updates |
Inställningar.kvie |
Settings view with privilege support |
WideQuick BMS 2026.1.0¶
Released 2026-05-21 Modular Framework Version: WideQuick MOD 2026.1.0
Release notes
This is the first release of WideQuick BMS in the Modular Framework family — the building-management concept rebuilt on the Modular Framework foundation. It brings the full Framework feature set (multi-language support, an in-system logbook, a maintenance calendar, document handling, and broad web and remote client support) together with the building-management tooling that defines the BMS concept, such as time channels, reasonable suffixes, control curves and ready-made building dashboards.
New features¶
| Feature | Description |
|---|---|
| Multi-language support | Views, scripts, the object library, dynamics and Data Store are now fully translatable, with a built-in language selector and a language icon for switching language at runtime. |
| Tooltip system | A new tooltip mechanism (scToolTip) adds contextual help boxes throughout the system, including history and map objects. |
| Rewritten Workview animation | The animation system has been rebuilt from the ground up to be more versatile and easier to configure, with a matching settings view and helpers for reading user-defined theme colours. |
| ObjectFinder & goTo | Every object is automatically indexed with its view path and name, and the new goTo function lets you jump straight to any object from anywhere in the project. |
| Configurable runtime behaviour | Value-display refresh rate is now adjustable at runtime, and the chosen theme (light/dark) is remembered and restored on the next startup. |
| Web & remote client support | Major expansion of client support: report creation, alarm-schedule editing and the log viewer all work on WideQuick Web and remote clients, and suffixes, view privileges and maintenance state are synchronised between all clients. |
| Legacy view import | Views built in WideQuick BMS 8.0 or earlier can be lifted directly into the framework, where their symbols instantly repaint to the new, redesigned objects while keeping the same connections. |
New & updated modules¶
| Module | Description |
|---|---|
| Object library | A redesigned set of process symbols (valves, sensors, dampers and more) with a cleaner, modernised look, plus the legacy BMS symbols (including air-handling/"luftbehandling") integrated to work in the framework while keeping their familiar appearance. Objects were standardised across font size, decimals, captions and descriptions, and digital value displays were added. These are the symbols that legacy BMS 8.0 views repaint to on import. |
| Time channels | Time-channel functionality ported from the legacy BMS and integrated into the common popup system. Time-channel configurations can be saved and applied, with a user-assigned name and description, and a privilege check on the time-channel popout. |
| Control curves | Control curve objects with configurable X/Y setpoints, value clamping and axis locking, plus a time-based control curve. Curve signals have their own privileges and the views scale correctly across resolutions. |
| Manual operation | A manual-operation popup for commanding objects, including changing the hand icon and the shutdown option, with captioned special buttons. |
| Dashboard | A new configurable dashboard built from a library of reusable widget objects (Dashboard Widgets.klib), with ready-made BMS dashboards and a dynamic alarm graph. Widgets work on desktop, web and remote, the start dashboard shown after login is configurable, and example dashboards are included to build from. |
| Logbook | A new module for creating, browsing and filtering timestamped log entries across the project. Filter by topic, date range and user; open it pre-filtered to a specific topic; and embed the LogBookEntryButton template in any view. |
| Calendar | A new calendar module with month navigation, mini calendar and an upcoming-events sidebar. Maintenance tasks appear as calendar events with status-based colours and automatic reminders ahead of scheduled work. |
| Documents | A new document-management module with a file picker for uploading documents and a handler (scDoc) for linking documents to objects, validated across desktop, remote and web. |
| Map handler | A new map module with an example view and web-compatible map support, plus a new set of map navigation indicator objects for placing and linking objects on a map. |
| History | History can now be shown for the entire project, not just a single object, with automatic decimal scaling and a wider colour spread for readable multi-curve trends. |
| Maintenance | Significantly expanded: recurring maintenance tasks with a treeview object selector, real-time sync across all connected clients, refresh buttons, a per-user maintenance counter on the dashboard, and status/priority colours throughout. A new system-identity mechanism registers each system, tags tasks by system, and adds a System column and filter so a single maintenance database can serve several installations. |
| Reports | The report scheduler now supports two time spans per day and scheduling by alias, shows clear status messages, and can be created and run from remote clients. Reports from an existing WideQuick installation can also be migrated into a Modular Framework project. |
| Alarms | A new alarm frequency view shows how often alarms occur, remote alarms can be scheduled in alarm schedules with their severity and group, alarm schedules gained select-all / deselect-all buttons for alarm groups, the "Visa information" button supports show scripts, and alarm log events are no longer recorded twice. Alarm list status colours follow the standard BMS alarm colour configuration. |
Changes¶
| Area | Change |
|---|---|
| Navigation | "Loggar" moved into "Rapporter & loggar", "Underhåll & loggar" renamed to "Underhåll", individual menu items can be hidden at runtime, and a re-show button was added for hidden sub-navigation. |
| Login & users | Login is now possible via a combo box instead of typing a username, and the login requirement can be disabled from the settings view. |
| Users & permissions | New demo users were added, each with a sensible role-based privilege level, and the privilege system was reworked: privileges were renamed from the old scheme to a new one, dedicated privileges were added for maintenance and logbook actions, and users now get a clear notification when they lack the privilege for an action. The Servicetekniker role was renamed to service. |
| Process value object | Value updates are now driven by a Data Store listener instead of dynamics, giving lighter rendering for stale or slow-changing variables since the object only redraws when the value actually changes. |
| Alarm terminology | Alarm wording was standardised: "Allvarlighetsgrad" is now "Larmklass" and "Bekräfta/Bekräftbara" is now "Kvittera/Kvitterbara" throughout the views and translations. |
| Signal simulation | Demo Modbus signals were converted to OPC UA, with a simulator (scSimMB) generating realistic values for the new OPC UA signals. |
| Settings | Settings unavailable on remote/web clients are now clearly disabled. |
| Map indicators | A new set of map navigation indicator objects has been introduced and is now used by default. The previous map indicators are no longer used in the framework views but remain fully functional and behave exactly as before, so existing projects that use them are unaffected. |
| Licensing | The project now ships under the BSD 3-Clause license, together with third-party license texts and attributions. |
Migrating from a legacy WideQuick BMS¶
As the first BMS release in the Modular Framework family, there is no earlier version in this family to upgrade from. When bringing an existing, legacy WideQuick BMS project across, note the following:
| Topic | Note |
|---|---|
| Legacy view import | Views built in WideQuick BMS 8.0 or earlier can be lifted directly into this project, where their symbols repaint to the new, redesigned objects while keeping the same connections. |
| Objects use SuffixAlias | Framework objects reference their values through a SuffixAlias rather than the suffix directly. A suffix alias must be defined for each object; objects with an unconfigured alias are flagged visually in the views. |
| Maintenance system identity | On first start, maintenance tasks are attributed to the current system by hostname, and a migration dialog is shown if an application name change is detected. Review the assignment afterwards to confirm tasks belong to the correct system. |