{"id":17454778,"url":"https://github.com/ole1986/centronic-py","last_synced_at":"2025-07-22T19:03:33.615Z","repository":{"id":46808682,"uuid":"189089227","full_name":"ole1986/centronic-py","owner":"ole1986","description":"Centronic USB Stick to control Becker Shutter CC31/CC51","archived":false,"fork":false,"pushed_at":"2021-09-24T09:52:27.000Z","size":1672,"stargazers_count":43,"open_issues_count":2,"forks_count":11,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-19T18:29:03.010Z","etag":null,"topics":[],"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/ole1986.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}},"created_at":"2019-05-28T19:19:40.000Z","updated_at":"2025-03-04T17:47:32.000Z","dependencies_parsed_at":"2022-09-05T20:50:22.224Z","dependency_job_id":null,"html_url":"https://github.com/ole1986/centronic-py","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ole1986/centronic-py","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ole1986%2Fcentronic-py","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ole1986%2Fcentronic-py/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ole1986%2Fcentronic-py/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ole1986%2Fcentronic-py/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ole1986","download_url":"https://codeload.github.com/ole1986/centronic-py/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ole1986%2Fcentronic-py/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266553957,"owners_count":23947240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-10-18T01:41:44.959Z","updated_at":"2025-07-22T19:03:33.595Z","avatar_url":"https://github.com/ole1986.png","language":"Python","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=TDSRUDJ9EL98J\u0026source=url"],"categories":[],"sub_categories":[],"readme":"[![Donations Badge](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=TDSRUDJ9EL98J\u0026source=url)\n\nThis project automates \"Becker Antriebe\" shutter also known as CC31/CC51 using the Centronic USB Stick V2\n\n```\n./centronic-stick.py [-hlst] [--checksum \u003ccode\u003e] [--device \u003cdevice\u003e] [--add \u003cmodifier\u003e] [--mod \u003cmodifier\u003e] [--remove \u003ccode\u003e] [--send \u003cUP|UP2|DOWN|DOWN2|HALT|DOWN:\u003cdelay\u003e|UP:\u003cdelay\u003e|CLEARPOS|TRAIN|TRAINMASTER|REMOVE\u003e --channel \u003c[unit:]channel\u003e]\n\nThis script is used send command codes to CC11/CC51 compatible receivers through the CentronicControl USB Stick\nIt is necessary to own such USB device and to PAIR it first, before using commands like UP and DOWN\n\n                 -h: shows this help\n                 -l: listen on the centronic USB device to fetch the codes\n                 -s: display the current db stats (incl. last run of a unit)\n                 -t: test mode - no codes will be send and no numbers consumed / works only with '--send'\n   --send \u003ccommand\u003e: submit a completely generated code for UP/UP2/DOWN/DOWN2/HALT/DOWN:\u003cdelay\u003e/UP:\u003cDELAY\u003e/CLEARPOS/TRAIN/REMOVE commands / requires '--channel'\n                     While UP2 and DOWN2 are the intermediate position (E.g. sun protection)\n  --device \u003cdevice\u003e: set the device if it differs from the default, also host:port possible (ser2net)\n--channel \u003c[unit:]channel\u003e: define the unit (1-5) and channel (1-7) being used for '--send'. Example: 2:15 will close shutter for unit 2 on all channels\n  --checksum \u003ccode\u003e: add a checksum to the given 40 char code and output (without STX, ETX)\n   --mod \u003cmodifier\u003e: used to manipulate the db entries\n   --add \u003cmodifier\u003e: used to add a db entry\n    --remove \u003ccode\u003e: used to remove an entry from db\n```\n\n### INSTALLATION\n\nRun the `install.sh` script to install all necessary dependencies.\nThe installer will also configure sudo to allow FHEM the execution of `centronic-stick.py`.\n\nFor those who are familar with the installation routine, the following steps are required\n\n* Install python3 pip\n* Install python3 module `pyserial` using python3 pip\n* Add `fhem` user into sudoers file to allow executing `centronic-stick.py` from the FHEM website\n\n### PROGRAM RECEIVER\n\nTo make recievers listening to the Centronic USB Stick, the \"master sender\" is required to add additional senders. The \"master sender\" can either be the wall-mounted transmitter or a remote.\n\nTo program another sender, please follow the below instruction\n\n**1) Press and hold the programming button on the MASTER SENDER for ~3 seconds**\nThe receiver should confirm with a single \"Klack\" noise\n\n**2) Run the below command to TRAIN the receiver**\nThe receiver should confirm with a single \"Klack\" noise followed by a \"Klack - Klack\" once the training succeeded\n\n```\n./centronic-stick.py --send TRAIN --channel 1\n```\n\nRepeat the steps for all the receivers using different channels (E.g. `--channel 2`, `--channel 3`, [...])\n\n*You have successfully paired the Centronic Stick with your shutter(s)*\n\n### ADD MORE CHANNELS\n\nBy default the `--channel` argument uses the first known unit (registered in the database file) for a maximum of **7 channels**.\n\nIf more channels are required, the `--channel` argument can be used to choose different units (maximum 5)\n\nExample:\n\n```\n# program another unit on channel 1\n./centronic-stick.py --send TRAIN --channel 2:1\n```\n\n```\n# program a third unit on channel 7\n./centronic-stick.py --send TRAIN --channel 3:7\n```\n\n### EXAMPLE USAGE\n\nTo move down the shutter, run the below command (amend the channel if neccessary)\n\n```\n# move down the shutter programmed on channel 1 for unit 1\n./centronic-stick.py --send DOWN --channel 1\n```\n\nTo move up the shutter on unit 2 and channel, run the below command\n\n```\n# move up the shutter programmed on channel 1 for unit 2\n./centronic-stick.py --send UP --channel 2:1\n```\n\nTo pause the movement on unit 3 and channel 1 (which is not the same as unit 1 and channel 1), run the command\n\n```\n# stop shutter on unit 3 channel 1\n./centronic-stick.py --send HALT --channel 3:1\n```\n\nTo move down all shutters per explicit unit, run the below command\n\n```\n# --channel 15 and --channel 1:15 is the same\n./centronic-stick.py --send HALT --channel 1:15\n```\n\nTo move down all shutters on ALL configured units, run the below command (check `-s` argument to see which unit is configured)\n\n```\n# move down shutter on all configured units and all channels (15 = broadcast)\n./centronic-stick.py --send DOWN --channel 0:15\n```\n\n### REMOVE SENDER\n\nTo unpair the centronic-stick.py the following steps can be achieved\n\n**1) Press and hold the programming button on the MASTER SENDER for 3 seconds**\nThe receiver should confirm with a single \"Klack\" noise\n\n**2) Run the below commands to REMOVE the sender from its receiver**\nThe receiver should confirm with a single \"Klack\" noise followed by a \"Klack - Klack\"\n\n```\n# remove unit 1 with channel 1 from the shutter\n./centronic-stick.py --send REMOVE --channel 1\n```\n\n**Please note that this command is per channel*\n\nOnce ALL SENDERS for a specific unit are removed from ALL RECEIVERS it is safe to reset the increment counter using `--mod` argument.\n\n### DATABASE OUTPUT\n\nBelow is an example output of the sqlite3 database\n\n```\ncode      increment configured  last run       \n1737b     825       1           2020-04-01 17:26\n1737c     0         0           (unknown)\n1737d     0         0           (unknown)\n1737e     0         0           (unknown)\n1737f     0         0           (unknown)\n```\n\n### TROUBLESHOOTING\n\nSince this script requires to store the incremental numbers for any unit being configured, the database file `centronic-stick.db` is used.\nIt might be necessary to manually change or increase the number to match with the receiver.\n\nUse the argument `--mod \"\u003cunit\u003e:\u003cincrement\u003e:\u003cconfigured\u003e\"` (CAREFULLY) to set the unit properties\n\nFurther technical details can be found in the [TECHNICAL.md](TECHNICAL.md) document\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fole1986%2Fcentronic-py","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fole1986%2Fcentronic-py","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fole1986%2Fcentronic-py/lists"}