{"id":13713209,"url":"https://github.com/x448/senml","last_synced_at":"2026-03-10T07:32:17.394Z","repository":{"id":131185119,"uuid":"223829381","full_name":"x448/senml","owner":"x448","description":"Disco SenML is cisco/senml with bugfixes.  Programs are 4 MB smaller and SenML CBOR complies with RFC 8428.","archived":false,"fork":false,"pushed_at":"2021-06-07T17:39:42.000Z","size":83,"stargazers_count":8,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-12-17T05:26:08.990Z","etag":null,"topics":["cbor","go","golang","iot","rfc-8428","senml"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/x448.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-25T00:08:52.000Z","updated_at":"2022-09-12T00:20:48.000Z","dependencies_parsed_at":"2023-06-18T15:30:20.130Z","dependency_job_id":null,"html_url":"https://github.com/x448/senml","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/x448/senml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x448%2Fsenml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x448%2Fsenml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x448%2Fsenml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x448%2Fsenml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/x448","download_url":"https://codeload.github.com/x448/senml/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x448%2Fsenml/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30326914,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cbor","go","golang","iot","rfc-8428","senml"],"created_at":"2024-08-02T23:01:29.626Z","updated_at":"2026-03-10T07:32:17.337Z","avatar_url":"https://github.com/x448.png","language":"Go","readme":"# Disco SenML is cisco/senml with bugfixes\n[![](https://github.com/x448/senml/workflows/ci/badge.svg)](https://github.com/x448/senml/blob/master/.github/workflows/ci.yml)\n[![cover ≥80.7%](https://github.com/x448/senml/workflows/cover%2080.7%25/badge.svg)](https://github.com/x448/senml/actions?query=workflow%3A%22cover+80.7%25%22)\n\n## SenML\n[RFC 8428 Sensor Measurement Lists (SenML)](https://tools.ietf.org/html/rfc8428) defines a format for representing simple sensor measurements and device parameters in Sensor Measurement Lists.  \n\n## Disco SenML\nDisco SenML is a fork of [cisco/senml](https://github.com/cisco/senml) that resolves various issues.  Programs are smaller, CBOR representation no longer violates RFC 8428, and all unit tests pass. \n\nBy switching CBOR library to [fxamacker/cbor](https://github.com/fxamacker/cbor), x448/senml is not vulnerable to the same resource exhaustion attacks as cisco/senml from malformed SenML CBOR representation.\n\n![image](https://user-images.githubusercontent.com/57072051/79265367-9e3ad180-7e5b-11ea-9ed0-d3779de8d72a.png)\n\nBy switching CBOR library to [fxamacker/cbor](https://github.com/fxamacker/cbor), x448/senml is 4.4 MB smaller than cisco/senml (for senmlCat).\n\n![image](https://user-images.githubusercontent.com/57072051/79264086-99751e00-7e59-11ea-8c0f-a8bf0dfdf9ba.png)\n\nAll features are the same as cisco/senml except MessagePack support is removed.\n\nDisco SenML was created on Nov 23, 2019 using cisco/senml (4d43ea8) dated Oct 10, 2019.\n\n__Special thanks__:\n\n* Cullen Jennings for his work on RFC 8428 (SenML) and cisco/senml. He did the heavy lifting in those, so changes made by this project are trivial by comparison.\n* Faye Amacker for adding requested features to her [CBOR library](https://github.com/fxamacker/cbor) that made this easy.\n\n## Release Notes\nDisco SenML initial release on Nov 24, 2019.\n\nThis project fixes open issues in cisco/senml (d5a3c66, Dec 11, 2019):\n\n* __cisco/senml #2 (2016)__ \"CBOR does not encode or decode numeric field names\". \u003c-- RFC 8428 violation.\n* __cisco/senml #18 (2017)__ \"Base Value and Base Sum missing from the model.\n* __cisco/senml #22 (2019)__ \"CBOR support uses go-codec which adds bloat to the binary.\n* __cisco/senml #25 (2019)__ \"cisco/senml does not pass unit tests\"\n\nThere are no changes to core cisco/senml features except removal of MessagePack.\n\nMessagePack was removed because it:\n\n* increased bloat (cisco/senml #22) and attack surface.\n* isn't mentioned in SenML RFC 8428.\n* prevented having a [CBOR library](https://github.com/fxamacker/cbor) (fxamacker/cbor) as the only external dependency.\n\nChanges to cisco/senml (4d43ea8, Oct 10, 2019):\n\n* Compiled programs are each 4 MB smaller (senmlCat and senmlServer).\n* CBOR representation uses integers for labels, so it no longer violates SenML RFC 8428.\n* Missing Base Value and Base Sum are added to the model.\n* Fixed bad test data in unit tests and added new CBOR test using example from\n  SenML RFC 8428 so all unit tests pass.\n* Removed MessagePack feature for reasons cited in README.md.\n* Replaced ugorji/go with fxamacker/cbor.\n* Use Go modules and have at least one tagged release.\n* Require Go 1.12\n* Added name to LICENSE.\n* Updated README.md with new name \"Disco SenML\"\n\n## Limitations\nKnown limitations:\n\n* There are no unit tests for senmlCat or senmlServer. Using senmlCat or senmlServer is not recommended.\n* Security Audit: I didn't conduct a security audit of cisco/senml or this project.  A security audit is recommended.\n* Code Review and Refactoring:  I didn't perform any code review or refactoring beyond the minimum changes required to resolve cisco/senml issues 2, 18, 22 and 25.  Code review and refactoring is recommended.\n\n## Requirements\n\nGo 1.12+ is required.\n\n# senmlCat\nTool to convert SenML between formats and act as gateway server to other services\n\n# usage\n\n## convert JSON SenML to XML \nsenmlCat -json -i data.json \u003e data.xml\n\n## convert JSON SenML to CBOR\nsenmlCat.go -ijson -cbor data.json \u003e data.cbor \n\n## convert to Excel spreadsheet CSV file\nsenmlCat -expand -ijsons -csv -print data.json \u003e foo.csv\n\nNote that this moves times to excel times that are days since 1900\n\n## listen for posts of SenML in JSON and send to influxdb\n\nThis listens on port 880 then writes to an influx instance at localhost where to\nthe database called \"junk\"\n\nThe -expand is needed to expand base values into each line of the Line Protocol\n\nsenmlCat -ijsons -http 8880 -expand -linp -print -post http://localhost:8086/write?db=junk\n\n# License\nCopyright © 2019-present Montgomery Edwards⁴⁴⁸ (github.com/x448)  \nCopyright © 2016-2019 Cullen Jennings\n\nx448/senml is licensed under the BSD 2-Clause \"Simplified\" License.  See [LICENSE](LICENSE) for the full license text.\n","funding_links":[],"categories":["Repositories"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fx448%2Fsenml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fx448%2Fsenml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fx448%2Fsenml/lists"}