Skip to content

Add: Eddy-Solutions-Link BACnet profile - #43

Merged
rakaustin merged 2 commits into
mainfrom
auto-profile-42
Sep 14, 2026
Merged

rakaustin merged 2 commits into
mainfrom
auto-profile-42

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated Profile evidence

  • Issue: [Profile Request] Eddy Solutions - Link #42
  • Issue body SHA: 1656626193aeb958da676c622063a5b6ad16243fba6babe94b3999ec6d06e664
  • Provider/model: deepseek / deepseek-flash
  • Evidence level: known-answer
  • fPort policy: {"mode":"fixed","ports":[3],"citation":"Issue #42 declares fport3 on all three uplink examples; its downlink command examples declare Fport 5, which datatype channels 10 and 11 declare as fport."}
  • Clean validation: passed
  • Hardware verified: no

Evidence matrix

Field Official document Decoder Known payload Resolution Value Rationale
Flow Rate (channel 1, AnalogInputObject, fPort 3) official-document.txt p.7 sect. 4.2: type 0x02 bytes 9-10 Flow Rate; p.7 type 0x82 bytes 3-4 Flow Rate; p.9 sect. 4.4 type 0x04 bytes 9-10 Flow Rate (optional). The byte column is labelled MSB to LSB, so 16-bit fields are big endian. — Issue uplink 020C040000001C0104B000 bytes 9-10 = B0 00; the Issue mapping table binds Flow Rate to bytes 9-10 for payloads 0x02/0x04 and bytes 3-4 for payload 0x82. payload-verified 45056 Unsigned big-endian recomputation of bytes 9-10 gives 0xB0*256 + 0x00 = 45056. No scale, mask, sign or unit is documented, so raw counts are published and no units are declared. The same offsets are used for the 0x04 branch and bytes 3-4 for 0x82.
Odometer (channel 2, AnalogValueObject, fPort 3) official-document.txt p.7 sect. 4.2: type 0x02 bytes 3-6 Odometer (4 bytes, MSB to LSB); p.9 sect. 4.4 type 0x04 bytes 3-6 Odometer (optional). — Issue uplink 020C040000001C0104B000 bytes 3-6 = 00 00 00 1C; the Issue mapping table binds Odometer to bytes 3-6 for payloads 0x02 and 0x04. payload-verified 28 Unsigned big-endian recomputation of the four odometer bytes gives 0x0000001C = 28 counts; with no documented scale or unit the raw count is published.
Report Period (channel 3, AnalogValueObject, minutes, fPort 3) official-document.txt p.7 sect. 4.1: type 0x01 byte 5 Report Period (one byte); p.12 sect. 5.2 documents the same parameter in minutes (0x00 test mode, 0x01 minute mode, 0x02-60 batch mode). — Issue uplink 010702080319180102 byte 5 = 0x19; the Issue mapping table binds Report Period to byte 5 for payload 0x01. payload-verified 25 Byte 5 of the Describe frame is 0x19 = 25. Section 5.2 documents this parameter in minutes, so the channel declares minutes and the decoded row carries unit 'minutes'.
Firmware Version (channel 4, AnalogValueObject, fPort 3) official-document.txt p.7 sect. 4.1: type 0x01 bytes 1-2 Firmware Version (MSB to LSB). — Issue uplink 010702080319180102 bytes 1-2 = 07 02; the Issue mapping table binds Firmware Version to bytes 1-2 for payload 0x01. payload-verified 1794 Big-endian recomputation gives 0x0702 = 1794. The specification defines no scale or split encoding, so the documented 16-bit protocol code is preserved as the numeric value (as an AnalogValueObject, not a text label).
Valve Operation Status (channel 5, AnalogInputObject, fPort 3) official-document.txt p.8 sect. 4.2.1: meter status byte 0 bits 5-7, (000)2 steady state, (001)2 button pressed, (010)2 cloud command, (011)2 automatic shut-off; meter status sits at bytes 1-2 of 0x02/0x03/0x04 and bytes 6-7 of 0x15. — Issue uplinks 020C040000001C0104B000 (status byte 0 = 0x0C) and 030800 (status byte 0 = 0x08); the Issue mapping table binds this channel to meter status byte 0 bits 5-7. payload-verified 0 (0x0C >> 5) & 7 = 0 and (0x08 >> 5) & 7 = 0, both steady state. The documented protocol codes 0-3 are preserved instead of their labels, with the code-to-label mapping declared in an adjacent codec comment.
Valve Status (channel 6, AnalogInputObject, fPort 3) official-document.txt p.8 sect. 4.2.1: meter status byte 1 bits 0-2, (000)2 closed, (001)2 opening, (010)2 closing, (011)2 open, (100)2 error. — Issue uplinks 020C040000001C0104B000 (status byte 1 = 0x04) and 030800 (status byte 1 = 0x00). payload-verified 4 (error) for Meter Data; 0 (closed) for Valve The three-bit field is read from meter status byte 1 with the documented codes 0-4: 0x04 & 0x07 = 4 for the Meter Data payload and 0x00 & 0x07 = 0 for the Valve payload, exactly as the known bytes dictate.
Minor Flow Alert (channel 7, BinaryInputObject, fPort 3) official-document.txt p.8 sect. 4.2.1: meter status byte 1 bit 3, 0 = no minor flow alert, 1 = flow minor alert. — Issue uplinks 020C040000001C0104B000 and 030800, both with meter status byte 1 bit 3 clear. payload-verified 0 (byte1 >> 3) & 1 = 0 for both known payloads, published as the strict 0/1 value required for BinaryInputObject channels.
Major Flow Alert (channel 8, BinaryInputObject, fPort 3) official-document.txt p.8 sect. 4.2.1: meter status byte 1 bit 4, 0 = no major flow alert, 1 = flow major alert. — Issue uplinks 020C040000001C0104B000 and 030800, both with meter status byte 1 bit 4 clear. payload-verified 0 (byte1 >> 4) & 1 = 0 for both known payloads, published as a strict 0/1 binary value.
Extreme Flow Alert (channel 9, BinaryInputObject, fPort 3) official-document.txt p.8 sect. 4.2.1: meter status byte 1 bit 5, 0 = no extreme flow alert, 1 = flow extreme alert. — Issue uplinks 020C040000001C0104B000 and 030800, both with meter status byte 1 bit 5 clear. payload-verified 0 (byte1 >> 5) & 1 = 0 for both known payloads, published as a strict 0/1 binary value.
Valve Control (channel 10, BinaryOutputObject, fPort 5) official-document.txt p.12 sect. 5.4: type 0x73 Valve Control, byte 1 command, 0x00 open valve, 0x01 close valve. The transmit fPort 5 comes from the Issue downlink evidence and is declared on datatype channel 10. — Issue downlink vectors: value 1 (Close Valve) -> 73 01 and value 0 (Open Valve) -> 73 00 on fPort 5. payload-verified value 0 -> 73 00 (open), value 1 -> 73 01 (close) Both known vectors agree with section 5.4 byte for byte, fixing the numeric value rule (0 or 1 only) and the two-byte layout; any other value fails closed. The datatype entry is the requested BinaryOutputObject in the Profile and is reported here as BinaryValueObject because the Agent result schema has no Output-object type.
Set Report Period (channel 11, AnalogValueObject, minutes, fPort 5) official-document.txt p.12 sect. 5.2: type 0x71 Meter Report Period, byte 1 report period in minutes, 0x00 test mode, 0x01 minute mode, 0x02-60 batch mode; p.7 sect. 4.1 byte 5 Report Period for the mirroring uplink field. — Issue downlink vector: value 5 (Set Report Period) -> 71 05 on fPort 5; the Describe uplink also carries the current 25-minute value at byte 5. payload-verified integer 0-60 -> 71 ; 5 -> 71 05 The known vector matches section 5.2, which supplies the single-byte value rule and range 0x00-0x3C; the codec accepts only integers 0-60 and fails closed otherwise. The same parameter is published from Describe byte 5 on channel 11 because the strict fixture requires uplink coverage for every declared non-output datatype channel.

Agent summary

Repaired the Eddy-Solutions Link profile (profiles/Eddy-Solutions/Eddy-Solutions-Link.yaml) and its strict fixture. The previous attempt was rejected only because the Agent result reported the writable Valve Control channel as BinaryOutputObject, which the output schema does not allow; the candidate artifacts themselves are regenerated here and the candidate validation command passes every check (yaml, schema, requiredFields, codecSafety, codecSyntax, bacnet, naming, semantics, fixture). Decode implements the documented Link uplink frames Describe 0x01 (firmware version bytes 1-2, report period byte 5), Meter Data 0x02 (meter status bytes 1-2, odometer bytes 3-6, flow rate bytes 9-10), Extended Meter Data 0x82 (flow rate bytes 3-4), Valve 0x03 (meter status bytes 1-2), Alert 0x04, and Backup Data Resend 0x15 (meter status bytes 6-7), publishing all 11 requested channels. Encode implements Valve Control 0x73 (0x00 open, 0x01 close) and Meter Report Period 0x71 (0x00-0x3C minutes) on fPort 5. Every branch fails closed on unknown fPort, truncation, malformed bytes, unknown channels, and non-numeric values.

Warnings

  • The prepared decoder input (.profile-agent/input/decoder.txt) is the repository automation test script scripts/test-profile-automation.js, which contains no Link Meter protocol logic; it was treated as supporting context only and no evidence row cites it.
  • The specification documents no scale, resolution, or engineering unit for Flow Rate or Odometer, so raw unsigned big-endian counts are published (flow rate bytes 9-10 = 0xB000 = 45056) and no units are declared for those channels.
  • The Issue Describe payload is 9 bytes while specification section 4.1 documents fields only through byte 7; the codec requires exactly the observed 9-byte length, ignores the trailing byte, and rejects an 8-byte Describe so truncated frames fail closed.
  • Alert (0x04), Extended Meter Data (0x82) and Backup Data Resend (0x15) branches named in the Issue mapping table are implemented from specification sections 4.2, 4.4 and 4.9, but no Issue payload exercises them, so no fixture test case covers those branches.
  • The Issue mapping table binds Valve Operation Status and Valve Status to meter status byte 0 bits 5-7 and byte 1 bits 0-2, so the Describe valve state byte (section 4.1 byte 4) is not published as its own channel.
  • Channel 11 (Set Report Period) is a writable datatype channel, so the strict fixture also requires it in uplink output; it is published from the Describe report period byte (byte 5), the same parameter that the 0x71 downlink command writes.
  • The requested Valve Control mapping is the BinaryOutputObject channel 10 in the Profile; the Agent result schema has no Output-object type, so that mapping is reported in resolvedMappings as BinaryValueObject.

The automation will never mark this PR ready, approve it, or merge it.

Closes #42

@github-actions github-actions Bot mentioned this pull request Sep 14, 2026
4 tasks done

@rakaustin rakaustin left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

registry.json中的 lorawanClass 不匹配

@rakaustin
rakaustin marked this pull request as ready for review September 14, 2026 04:20
@rakaustin
rakaustin merged commit 73a79d9 into main Sep 14, 2026
3 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.

[Profile Request] Eddy Solutions - Link

1 participant