{"id":15095812,"url":"https://github.com/slesinger/pybmr","last_synced_at":"2025-04-15T00:31:30.951Z","repository":{"id":35126331,"uuid":"209960801","full_name":"slesinger/pybmr","owner":"slesinger","description":"Python library for controling BMR HC64 heating","archived":false,"fork":false,"pushed_at":"2024-08-17T14:16:39.000Z","size":74,"stargazers_count":0,"open_issues_count":6,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-28T12:38:11.122Z","etag":null,"topics":["czech-republic","heating","home-assistant"],"latest_commit_sha":null,"homepage":"https://shop.fenixgroup.cz/z4770-bmr-hc-64-ridici-jednotka","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/slesinger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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-09-21T09:49:21.000Z","updated_at":"2024-04-21T13:58:31.000Z","dependencies_parsed_at":"2024-01-11T23:42:11.972Z","dependency_job_id":"cbc720a5-d1e8-411c-90c3-563a93a89e45","html_url":"https://github.com/slesinger/pybmr","commit_stats":{"total_commits":66,"total_committers":5,"mean_commits":13.2,"dds":"0.40909090909090906","last_synced_commit":"4a7cc02a05489af2d898b509d609355938d0f7c2"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slesinger%2Fpybmr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slesinger%2Fpybmr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slesinger%2Fpybmr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slesinger%2Fpybmr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/slesinger","download_url":"https://codeload.github.com/slesinger/pybmr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248984277,"owners_count":21193717,"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","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":["czech-republic","heating","home-assistant"],"created_at":"2024-09-25T15:42:18.900Z","updated_at":"2025-04-15T00:31:30.639Z","avatar_url":"https://github.com/slesinger.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PyBmr\n\nPython library for communication with BMR HC64 Heating Controller units.\n\n### Features\n\n- List, read and save heating circuits\n- HDO reading\n- List, read and set shutter blinds (experimental)\n\nProduct website: \n - https://bmr.cz/produkty/regulace-topeni/rnet\n - https://bmr.cz/produkty/regulace-topeni/rt64\n\n## Install:\n\n```\npython3 -m pip install pybmr\n```\n\n## Usage examples\n\n### Create connection\n\n```\nfrom pybmr import pybmr\n\nbmr = pybmr.Bmr(\"http://192.168.1.5/\", \"username, \"password\")\n```\n\n### Circuits\n\nGet number of circuits:\n\n```\nnumCircuits = bmr.getNumCircuits()\n```\n\nLoad circuit status:\n\n```\ncircuit = bmr.getCircuit(0)\nprint(f\"Circuit {circuit['name']}: temperature is {circuit['temperature']} °C, target temperature is {circuit['target_temperature']} °C\")\n```\n\nLoad circuit schedules (what schedule is assigned to what day). It is possible to assign a different schedule for up to 21 days.\n\n```\ncircuit_schedules = bmr.getCircuitSchedules(0)\nprint(f\"Circuit 0 schedule for the first day is {circuit_schedules['day_schedules'][0]}\")\n```\n\nSave circuit schedules:\n\n```\nbmr.setCircuitSchedules(0, [0, 8])\n```\n\n\n### Schedules\n\nLoad schedules:\n\n```\nschedules = bmr.getSchedules()\nprint(schedule[0])  # Print the name of first schedule\n```\n\nGet schedule details:\n\n```\nschedule = bmr.getSchedule(0)\nprint(f\"Schedule {schedule['name']} has timetable {schedule['timetable']}\")\n```\n\nSave schedule:\n\n```\nbmr.setSchedule(0, \"New schedule name\", [(\"00:00\", 21), (\"06:00\", 23), (\"21:00\", 21)])\n```\n\nDelete schedule:\n\n```\nbmr.deleteSchedule(0)\n```\n\n### Summer mode\n\nGet summer mode:\n\n```\nif bmr.getSummerMode():\n    print(\"Summer mode is ON\")\nelse:\n    print(\"Summer mode is OFF\")\n```\n\nSet summer mode:\n\n```\nbmr.setSummerMode(True):\n```\n\nLoad summer mode assignments (which circuits will be affected by turning the\nsummer mode on):\n\n```\nassignments = bmr.getSummerModeAssignments()\nfor circuit_id, value in enumerate(assignments):\n    if value:\n        print(f\"Circuit {circuit_id} is assigned to summer mode.\")\n    else:\n        print(f\"Circuit {circuit_id} is NOT assigned to summer mode.\")\n```\n\nAdd circuits to summer mode:\n\n```\nbmr.setSummerModeAssignments([0, 1, 2], True)\n```\n\nRemove circuits from summer mode:\n\n```\nbmr.setSummerModeAssignments([0, 1, 2], False)\n```\n\n### Low mode\n\nGet low mode:\n\n```\nlow_mode = bmr.getLowMode()\nif low_mode['enabled']:\n  print(f\"Low mode is turned ON since {low_mode['start_date']}, target temperature is {low_mode['temperature']}\")\n  if low_mode['end_date']:\n    print(f\"It will be turned off automatically on {low_mode['end_date']}\")\n```\n\nTurn the low mode ON, set temperature to 18°C:\n\n```\nbmr.setLowMode(True, 18)\n```\n\nTurn the low mode ON and let it turn OFF automatically after 3 days:\n\n```\nbmr.setLowMode(True, 18, datetime.now(), datetime.now() + timedelta(days=3))\n```\n\nTurn the low mode OFF:\n\n```\nbmr.setLowMode(False)\n```\n\nLoad low mode assignments (which circuits will be affected by turning the\nlow mode on):\n\n```\nassignments = bmr.getLowModeAssignments()\nfor circuit_id, value in enumerate(assignments):\n    if value:\n        print(f\"Circuit {circuit_id} is assigned to low mode.\")\n    else:\n        print(f\"Circuit {circuit_id} is NOT assigned to low mode.\")\n```\n\nAdd circuits to low mode:\n\n```\nbmr.setLowModeAssignments([0, 1, 2, 6, 7, 8], True)\n```\n\nRemove circuits from low mode:\n\n```\nbmr.setLowModeAssignments([0, 1, 2, 6, 7, 8], False)\n```\n\n### HDO\n\nLoad HDO status:\n\n```\nhdo = bmr.getHDO()\nif hdo:\n  print(\"HDO is currently ON\")\nelse:\n  print(\"HDO is currently OFF\")\n```\n\n## Backup of BMR Controler Unit Configuration\n\nThere is a CLI tool that can be used to backup configuration of actual BMR Controler Unit. It can be used in automations or just as a remote management tool. For more information refer to https://github.com/dankeder/bmrcli\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslesinger%2Fpybmr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fslesinger%2Fpybmr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslesinger%2Fpybmr/lists"}