{"id":20767229,"url":"https://github.com/promyloph/juramote","last_synced_at":"2025-04-30T10:42:54.453Z","repository":{"id":66437845,"uuid":"105139421","full_name":"PromyLOPh/juramote","owner":"PromyLOPh","description":"Remote control for Jura coffee maker","archived":false,"fork":false,"pushed_at":"2017-11-14T12:41:53.000Z","size":41,"stargazers_count":16,"open_issues_count":1,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-30T10:42:46.163Z","etag":null,"topics":["iot","raspberry-pi"],"latest_commit_sha":null,"homepage":"https://6xq.net/juramote/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PromyLOPh.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"COPYING.rst","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":"2017-09-28T11:19:18.000Z","updated_at":"2025-02-27T07:38:52.000Z","dependencies_parsed_at":"2023-02-24T14:00:13.110Z","dependency_job_id":null,"html_url":"https://github.com/PromyLOPh/juramote","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PromyLOPh%2Fjuramote","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PromyLOPh%2Fjuramote/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PromyLOPh%2Fjuramote/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PromyLOPh%2Fjuramote/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PromyLOPh","download_url":"https://codeload.github.com/PromyLOPh/juramote/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251684844,"owners_count":21627201,"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":["iot","raspberry-pi"],"created_at":"2024-11-17T11:28:20.420Z","updated_at":"2025-04-30T10:42:54.447Z","avatar_url":"https://github.com/PromyLOPh.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"juramote\n========\n\nRemote control for Jura_ coffee maker. Currently supported:\n\n- Xs90 (EF516M V01.25)\n\n.. _Jura: https://www.jura.com/\n\nUsage\n-----\n\nThis software depends on Python. Both 2.7 and 3 should work. It also requires\nthe following packages to be installed. They are available from pypi_:\n\n- pyserial\n- Flask\n- wtforms\n\n.. _pypi: https://pypi.python.org/\n\nThe standard setuptools-based install is supported and thus as easy as typing::\n\n    git clone https://github.com/PromyLOPh/juramote.git\n    cd juramote\n    pip install .\n\nHowever using a virtual environment is highly recommended.\n\nThen use ``juramotecli`` for a command line interface or set up nginx/uwsgi for\nremote HTTP access. See directory contrib/ for example configs.\n\nProtocol\n--------\n\nOn the back of the machine a debug connector (female, 9 pin dsub) can be used\nto access various functions. It uses the UART protocol with the following\npinout::\n\n    5       1\n     -------\n     \\     /\n      -----\n     9     6\n\n1\n    TX (output)\n2\n    GND\n3\n    RX (input)\n4\n    VCC (5V)\n\nThe synchronous text protocol uses a strange “transfer encoding” and stretches\none byte to four, see juramote/com.py. It provides the following (known)\ncommands. Integer, arguments or response, are usually hex-encoded (uppercase).\n\nCB: → cb:00\n    Unknown.\nCM: → cm:300E8006006000000000000000000\n    Status information. Some values are equivalent to those returned by HZ_:\n\n    .. code:: python\n\n       cm[0] = hz[6]\n       cm[1:5] = hz[2]\n\nCS: → cs:03EC0562300E800000000000000600601C1\n    Sensor(?) status information. Some values are equivalent to\n    those returned by HZ_:\n\n    .. code:: python\n\n        cs[0:4] = hz[4]\n        cs[4:8] = hz[5]\n        cs[9:13] = hz[2]\n        cs[31:35] = hz[3]\n\n    19:22\n        Nonzero when brewing, 0x1FF for the first step, 0x3FF for the second\n    22:25\n        Nonzero (usually 0x3FF) when grinding\nDA:\u003cmessage\u003e\n    Print permanent message on display. Argument is latin1 encoded string.\nDR:\n    Reset display.\nDT:\u003cmessage\u003e\n    Change default message (“Bitte wählen”).\nFA:\u003cid\u003e\n    Press button id. Argument is 8 bit button id.\nFN:\u003cid\u003e\n    Control component (brewer, pumps, …). Argument is 8 bit.\nGB:\n    Switches machine off. Any arguments?\n\n    .. discovery missing for gc…gz\nHZ: → hz:0100011100000,0291,00E9,0001,03FC,0543,3,100100,0000,00\n    .. _HZ:\n\n    Status information, comma-separated.\n\n    0. Unknown bitfield. Bit 3 is one when milk pump(?) is on. Bit 6 is zero when brewing.\n    1. Unknown\n    2. Some kind of brewing sensor, 0xe8 when idle, goes up to ~0x255 when\n       brewing.\n    3. Flow meter(?), reset to 0 before new product is made\n    4. Coffee heater temperature(?)\n    5. Milk heater temperature(?)\n    6. Brewer source/destination selection/encoder(?)\n        3\n            normal coffee\n        5\n            cappucino coffe\n        6\n            cappuccino milk\n    7. Unknown bitfield\n    8. Unknown\n    9. Unknown\nIC: →\n    Read status from input board. No arguments.\n\n    Bit 1…0\n        Menu wheel on the left. State changes 00→01→11 or 11→10→00\n        for each tick.\n    Bit 8\n        Somehow related to water tank\n    Bit 10\n        Stops toggling if coffee grounds bowl is full\nKB: → kb:\n    Unknown.\nLS: → ls:0,1,1,0,0,0,0,0,0,0,0,0,3,0\n    Unknown status information.\nMA: → ok:\n    Unknown, moves some part of the machine.\nMJ: → ok:\n    Dito.\nMW: → ok:\n    Dito.\n\n    .. Milk?\nOO: → oo:0,1,28,560,14\n    Unknown status information.\nPM: → ok:\n    Play music. Easter egg.\nRE:\u003caddress\u003e\n    .. _RE:\n\n    Read from EEPROM at address. Argument is 16 bits and reads a single 16 bit\n    word.\nRM:\u003caddress\u003e\n    Read memory?\nRT:\u003caddress\u003e\n    Reads a whole line (32 byte) from EEPROM, see RE_.\nTL: → tl:R8Cx Loader V2.00\n    Firmware loader version?\nTY: → ty:EF516M V01.25\n    Firmware version?\nWE:address,value → ok:\n    Write a single word value to EEPROM at address, see RE_.\nXX: → xx:F\n    Unknown\n\nAcknowledgements\n----------------\n\nThe following people contributed to this project:\n\n- Lars-Dominik Braun\n- Lars Reinhardt\n- Martin Flasskamp\n\nThis is not the first project interfacing with Jura’s debug interface. Notable\ninspirations include:\n\n- `Hacking the coffee machine \u003chttps://blog.q42.nl/hacking-the-coffee-machine-5802172b17c1\u003e`_\n- `Coffeemakers forum \u003chttps://www.coffeemakers.de/infocenter/forum/3-auslesen-der-logikeinheit/latest\u003e`_\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpromyloph%2Fjuramote","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpromyloph%2Fjuramote","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpromyloph%2Fjuramote/lists"}