{"id":43696133,"url":"https://github.com/nubeio/rubix-point-server","last_synced_at":"2026-02-05T04:13:18.270Z","repository":{"id":42188918,"uuid":"303017714","full_name":"NubeIO/rubix-point-server","owner":"NubeIO","description":null,"archived":false,"fork":false,"pushed_at":"2024-07-15T07:50:22.000Z","size":6089,"stargazers_count":5,"open_issues_count":12,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-01-13T06:52:23.313Z","etag":null,"topics":["bac0","bacnet","bacpypes","flask","pymodbus"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NubeIO.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-10-11T01:07:08.000Z","updated_at":"2024-07-15T07:50:12.000Z","dependencies_parsed_at":"2023-12-16T00:07:42.775Z","dependency_job_id":"9b74c419-bef7-4ebb-b4ee-3aa9997ec9ef","html_url":"https://github.com/NubeIO/rubix-point-server","commit_stats":{"total_commits":622,"total_committers":10,"mean_commits":62.2,"dds":0.504823151125402,"last_synced_commit":"27dbb6290181e3e1a1b95266d9e5e7f70c698633"},"previous_names":[],"tags_count":87,"template":false,"template_full_name":null,"purl":"pkg:github/NubeIO/rubix-point-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NubeIO%2Frubix-point-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NubeIO%2Frubix-point-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NubeIO%2Frubix-point-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NubeIO%2Frubix-point-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NubeIO","download_url":"https://codeload.github.com/NubeIO/rubix-point-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NubeIO%2Frubix-point-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29111245,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T03:44:17.043Z","status":"ssl_error","status_checked_at":"2026-02-05T03:44:12.077Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["bac0","bacnet","bacpypes","flask","pymodbus"],"created_at":"2026-02-05T04:13:17.568Z","updated_at":"2026-02-05T04:13:18.265Z","avatar_url":"https://github.com/NubeIO.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rubix Point Server\n\n## Running in development\n\n- Use [`poetry`](https://github.com/python-poetry/poetry) to manage dependencies\n- Simple script to install\n\n    ```bash\n    ./setup.sh\n    ```\n\n- Join `venv`\n\n    ```bash\n    poetry shell\n    ```\n\n- Build local binary\n\n    ```bash\n    poetry run pyinstaller run.py -n rubix-point --clean --onefile \\\n        --add-data VERSION:. \\\n        --add-data config:config\n    ```\n\n  The output is: `dist/rubix-point`\n\n## Docker build\n\n### Build\n\n```bash\n./docker.sh\n```\n\nThe output image is: `rubix-point:dev`\n\n### Run\n\n```bash\ndocker volume create rubix-point-data\ndocker run --rm -it -p 1515:1515 -v rubix-point-data:/data --name rubix-point rubix-point:dev\n```\n\n## Deploy on Production\n\n- Download release artifact\n- Review help and start\n\n```bash\n$ rubix-point -h\nUsage: rubix-point [OPTIONS]\n\nOptions:\n  -p, --port INTEGER              Port  [default: 1515]\n  -g, --global-dir PATH           Global dir\n  -d, --data-dir PATH             Application data dir\n  -c, --config-dir PATH           Application config dir\n  --prod                          Production mode\n  -s, --setting-file TEXT         Rubix Point: setting json file\n  -l, --logging-conf TEXT         Rubix Point: logging config file\n  --workers INTEGER               Gunicorn: The number of worker processes for handling requests.\n  --gunicorn-config TEXT      Gunicorn: config file(gunicorn.conf.py)\n  --log-level [FATAL|ERROR|WARN|INFO|DEBUG]\n                                  Logging level\n  -h, --help                      Show this message and exit.\n```\n\n\n## DOCS\n___\n### Config\n\n#### Development\n```bash\ncp config/config.example.json config/config.json\n\npython run.py -s config/config.json\n```\n\n### MQTT client\n  \n#### Topic structure:\n```\n\u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/\u003cevent\u003e/...\n\u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/cov/\u003call|value\u003e/\u003cDrivers\u003e/\u003cnetwork_uuid\u003e/\u003cnetwork_name\u003e/\u003cdevice_uuid\u003e/\u003cdevice_name\u003e/\u003cpoint_uuid\u003e/\u003cpoint_name\u003e\n\u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/model/\u003cModelEvent\u003e/\u003cmodel.uuid\u003e\n```\n```\nCOV:\n  \u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/cov/all/\u003cdriver\u003e/\u003cnetwork_uuid\u003e/\u003cnetwork_name\u003e/\u003cdevice_uuid\u003e/\u003cdevice_name\u003e/\u003cpoint_uuid\u003e/\u003cpoint_name\u003e\n\n  [optional] (value only)\n  \u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/cov/value/\u003cdriver\u003e/\u003cnetwork_uuid\u003e/\u003cnetwork_name\u003e/\u003cdevice_uuid\u003e/\u003cdevice_name\u003e/\u003cpoint_uuid\u003e/\u003cpoint_name\u003e\n\nMODEL:\n  \u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/model/\u003cmodel\u003e/\u003cmodel.uuid\u003e\n```\n\nDebug topic\n```\n\u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/debug\n```\n\nDebug topic example\n```\n+/+/+/+/+/+/rubix/points/debug\n```\n\n#### Example topics:\n\n**COV:**\n```\nall points:\n  \u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/cov/all/#\n\nall modbus rtu points:\n  \u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/cov/all/modbus/+/+/+/+/+/+\n\nby point uuid:\n  \u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/cov/all/+/+/+/+/+/\u003cpoint_uuid\u003e/+\n\nby point name:\n  \u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/cov/all/+/+/\u003cnetwork_name\u003e/+/\u003cdevice_name\u003e/+/\u003cpoint_name\u003e\n```\n**List:**\n```\npoints list:\n  \u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/points\n  \nschedule list:\n  \u003cclient_id\u003e/\u003cclient_name\u003e/\u003csite_id\u003e/\u003csite_name\u003e/\u003cdevice_id\u003e/\u003cdevice_name\u003e/rubix/points/value/schedules\n```\n\n### Generic Points MQTT Listener\n\n- All generic point values are updated over MQTT\n- These COVs are then broadcast again over the normal MQTT clients as above\n\n#### Topic structure:\n\n```\n\u003cclient_id\u003e/\u003csite_id\u003e/\u003cdevice_id\u003e/rubix/points/listen/cov/name/\u003cnetwork_name\u003e/\u003cdevice_name\u003e/\u003cpoint_name\u003e\n\u003cclient_id\u003e/\u003csite_id\u003e/\u003cdevice_id\u003e/rubix/points/listen/cov/uuid/\u003cpoint_uuid\u003e\n```\n\n### Schedule Value\n```\n\u003cclient_id\u003e/\u003csite_id\u003e/\u003cdevice_id\u003e/rubix/points/listen/schedules/\u003cname|uuid\u003e/\u003cschedule_name|schedule_uuid\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnubeio%2Frubix-point-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnubeio%2Frubix-point-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnubeio%2Frubix-point-server/lists"}