Skip to content

feat: read schedule,calendar and trend#64

Merged
robertsLando merged 12 commits intobacnet-js:masterfrom
EveGun:feature/schedule-calendar-trend
Feb 11, 2026
Merged

feat: read schedule,calendar and trend#64
robertsLando merged 12 commits intobacnet-js:masterfrom
EveGun:feature/schedule-calendar-trend

Conversation

@EveGun
Copy link
Copy Markdown
Contributor

@EveGun EveGun commented Feb 10, 2026

Summary

This PR ports schedule/calendar/trend read compatibility from the legacy node-bacstack implementation into @bacnet-js/client, and adds read examples for manual validation.

Source reference:

What changed

  • Added specialized decode paths in ReadProperty.decodeAcknowledge for:
    • WEEKLY_SCHEDULE
    • EXCEPTION_SCHEDULE
    • EFFECTIVE_PERIOD
    • DATE_LIST
  • Added BACnet WEEKNDAY support in ASN.1 decode flow.
  • Added decodeRange integration in ReadRange.decodeAcknowledge.
  • Fixed non-zero offset slicing in ReadRange fallback range buffer handling.
  • Fixed closing-tag length consumption in exception schedule decode.
  • Added unit tests for schedule/calendar parsing and trend range decoding.
  • Added read examples:
    • examples/read-schedule-weekly.ts
    • examples/read-schedule-exceptions.ts
    • examples/read-schedule-period.ts
    • examples/read-calendar-datelist.ts
    • examples/read-trend.ts

Type consistency

  • Trend range timestamp now returns Date (instead of epoch number) for consistency with other decoded date/time fields.

Validation

  • npm run lint
  • npm run test:unit
  • Docker-based compliance tests executed successfully in local environment ✅
  • Manually validated against a WAGO PFC200 device (schedule/calendar/trend read paths) ✅

Notes

  • Write examples were intentionally removed from this read-focused branch.
  • Write-side porting will follow in a separate branch/PR.
  • Parser behavior was validated against real BACnet traffic captures from WAGO PFC200 communication (Wireshark), then confirmed with live device reads.

@EveGun EveGun changed the title Feature/schedule calendar trend feat: read schedule,calendar and trend Feb 10, 2026
robertsLando
robertsLando previously approved these changes Feb 10, 2026
Copy link
Copy Markdown
Member

@robertsLando robertsLando left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your PR @EveGun ! Didn't know we forgot to backport some changes from that repo, everything looks good! LGTM

@coveralls
Copy link
Copy Markdown

coveralls commented Feb 10, 2026

Pull Request Test Coverage Report for Build 21896151072

Details

  • 230 of 256 (89.84%) changed or added relevant lines in 3 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-0.02%) to 82.951%

Changes Missing Coverage Covered Lines Changed/Added Lines %
src/lib/services/ReadProperty.ts 27 28 96.43%
src/lib/asn1.ts 190 215 88.37%
Totals Coverage Status
Change from base Build 19532691339: -0.02%
Covered Lines: 5166
Relevant Lines: 5923

💛 - Coveralls

mandrake-sw
mandrake-sw previously approved these changes Feb 10, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ports legacy schedule/calendar/trend read-compatibility into @bacnet-js/client by adding specialized ASN.1 decode paths (weekly/exception schedules, effective period, calendar date list) and trend-log range decoding, plus tests and manual-run examples.

Changes:

  • Added new ASN.1 decoders for schedule/calendar payloads and WEEKNDAY handling.
  • Integrated decodeRange into ReadRange.decodeAcknowledge and added trend-range parsing tests.
  • Added example scripts for reading schedule/calendar/trend data for manual validation.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
src/lib/asn1.ts Adds WEEKNDAY decoding and new schedule/calendar/trend-range decode helpers.
src/lib/services/ReadProperty.ts Routes certain Schedule/Calendar properties through specialized decoders.
src/lib/services/ReadRange.ts Integrates decodeRange and adjusts rangeBuffer slicing behavior.
src/lib/types.ts Updates ReadRangeAcknowledge.property type and adds optional values.
test/unit/service-read-property.spec.ts Adds unit tests for schedule/calendar parsing compatibility.
test/unit/service-read-range.spec.ts Adds unit tests for trend range decoding and offset slicing behavior.
examples/read-trend.ts Adds a manual validation example for reading trend log ranges.
examples/read-schedule-weekly.ts Adds a manual validation example for weekly schedules.
examples/read-schedule-exceptions.ts Adds a manual validation example for exception schedules.
examples/read-schedule-period.ts Adds a manual validation example for effective periods.
examples/read-calendar-datelist.ts Adds a manual validation example for calendar date lists.

Comment thread src/lib/services/ReadProperty.ts Outdated
Comment thread src/lib/services/ReadProperty.ts
Comment thread src/lib/asn1.ts
Comment thread src/lib/asn1.ts Outdated
Comment thread src/lib/asn1.ts
Comment thread src/lib/services/ReadRange.ts Outdated
Comment thread test/unit/service-read-range.spec.ts Outdated
@robertsLando
Copy link
Copy Markdown
Member

@EveGun I think copilot review is legit, could you fix it please?

@EveGun
Copy link
Copy Markdown
Contributor Author

EveGun commented Feb 10, 2026

@EveGun I think copilot review is legit, could you fix it please?

Will look into it!

@EveGun EveGun dismissed stale reviews from mandrake-sw and robertsLando via 86cbb1e February 11, 2026 07:18
@EveGun
Copy link
Copy Markdown
Contributor Author

EveGun commented Feb 11, 2026

Looks like a flaky CI fail?I can reproduce this occasionally, but local reruns pass.
The schedule/calendar/trend changes and related tests are green locally.

@robertsLando
Copy link
Copy Markdown
Member

robertsLando commented Feb 11, 2026

@EveGun Yeah seems the CI is flaky, a re-run made it green

Copy link
Copy Markdown
Contributor

@jacoscaz jacoscaz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't personally breached into the scheduling-related aspects of BACnet, yet, so take my words with a grain of salt but this generally LGTM! I will include some form of scheduling during my next round of work on @bacnet-js/device and might be able to provide better feedback then.

@robertsLando robertsLando merged commit 0ce3996 into bacnet-js:master Feb 11, 2026
17 of 18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants