{ "info": { "author": "bezmi", "author_email": "", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.7" ], "description": "# JVC Projector Remote\n\nThis is a simple package to control JVC Projectors over IP. Created to be used with my [Homeassistant](https://www.home-assistant.io/) custom component: [bezmi/hass_custom_components](https://github.com/bezmi/hass_custom_components/tree/master/custom_components/jvcprojector). Works fine as a standalone module.\n\nCurrently supports:\n* Power on/off\n* Lens Memory\n* Input (HDMI only)\n* Power Status (Standby, Cooling, Emergency, Lamp On, Reserved)\n\nRaise an issue if you would like any extra commands implemented. Alternatively pull requests are more than welcome and adding new commands is trivial. [See Below.](#adding-new-commands)\n\n# Installation\n## PyPi\nInstall [this package](https://pypi.org/project/jvc-projector-remote/) from PyPi\nwith:\n~~~\npip install jvc_projector_remote\n~~~\n## From this repo\nInstall from this repo with:\n~~~\npip install -e git+https://github.com/bezmi/jvc_projector.git#egg=jvc-projector-remote\n~~~\n# Usage\nFor usage with homeassistant, [see here](https://github.com/bezmi/hass_custom_components).\n\nHere is am example for using this module standalone:\n``` python\n>>> from jvc_projector import JVCProjector\n\n # replace with your projector's local IP\n>>> host = \"192.168.1.12\"\n\n# initialise\n>>> projector = JVCProjector(host)\n\n# power on, power off\n>>> projector.power_on()\n# check status once it's on\n>>> projector.is_on()\nTrue\n\n>>> projector.power_off()\n# check if it's off\n>>> projector.is_on()\nFalse\n\n# Send arbitrary command\n# possibilities include:\n# - memory1, memory2, memory3, memory4, memory5\n# - hdmi1, hdmi2\n# - add new commands to the Commands class in __init__.py\n>>> projector.command(\"hdmi2\")\n```\n\n# Testing\nI wrote this to interface my projector with homeassistant. The code to\nsend/receive commands is rough and the error checking could be more robust. It\nhas been tested on a DLA-X5900, but should work on most of the projectors\nthat use a similar IP control scheme. Let me know if it works with your\nprojector and I will add it to the list below.\n\n## Confirmed Models\n* DLA-X5900\n\n# Bugs\nThe main issue one might face is receiving ConnectionRefusedError when making a\nrequest too soon after another. On my DLA-X5900, it takes about 600-700 ms\nbetween commands.\n\n# Improvements\n- Currently I group all power states into either \"on\" or \"off\". I might separate\n these in future.\n- ACK for all commands might be useful, but it's reliable enough without it.\n\n# Adding New Commands\n### Step 1\n[Page 25](https://www.us.jvc.com/projectors/pdf/2018_ILA-FPJ_Ext_Command_List_v1.2.pdf#page=25) of this reference shows that the function is `PMPM`\n for \"Picture Mode Switch\". The hex representation of these ASCII characters in pythonic format is:\n``` python\nb\"\\x50\\x4D\\x50\\x4D\"\n```\n### Step 2\nThe relevant picture modes are presented in [Table 4-19 on Page 30](https://www.us.jvc.com/projectors/pdf/2018_ILA-FPJ_Ext_Command_List_v1.2.pdf#page=30). Let's take `01` for the \"Cinema\" preset:\n``` python\nb\"\\x30\\x31\"\n```\n### Step 3\nFinally, the examples on [page 42](https://www.us.jvc.com/projectors/pdf/2018_ILA-FPJ_Ext_Command_List_v1.2.pdf#page=42) show what we need to append to the start and end of the command string. In the end, the final command added to the `Commands` `Enum` in `__init__.py` becomes:\n``` python\nclass Commands(Enum):\n # ...\n # ALL THE OTHER COMMAND STRINGS...\n # ...\n\n pm_cinema = b\"\\x21\\x89\\x01\\x50\\x4D\\x50\\x4D\\x30\\x31\\x0A\"\n``` \n### Step 5\nJust change the value of step 2 for the remaining input modes you want. You should be able to use it like any of the other commands, with either the `JVCProjector.command()` function in this module or the `remote.send_command` service in Home Assistant using `\"pm_cinema\"` as the command string.\n\n### Inconsistencies\nOne of the reasons I held off on this is that the commands from step 2 will be [slightly different](https://support.jvc.com/consumer/support/documents/DILAremoteControlGuide.pdf#page=5) for older projectors. The picture mode is represented by one byte/character. In this case, for the \"Cinema\" mode, we would use:\n```python\nb\"\\x31\"\n```\nInstead of the two byte code in step 2.\n\n\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/bezmi/jvc_projector", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "jvc-projector-remote", "package_url": "https://pypi.org/project/jvc-projector-remote/", "platform": "", "project_url": "https://pypi.org/project/jvc-projector-remote/", "project_urls": { "Homepage": "https://github.com/bezmi/jvc_projector" }, "release_url": "https://pypi.org/project/jvc-projector-remote/0.0.2/", "requires_dist": null, "requires_python": "", "summary": "A small package to control jvc projectors over IP", "version": "0.0.2" }, "last_serial": 5942582, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "1c2064cdb59c3245066269d38c272bb2", "sha256": "8da651b726f3f94cf631e51a6158aa02ba3527dd85dd3f8a8d7ee122c6cf9b5d" }, "downloads": -1, "filename": "jvc_projector_remote-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1c2064cdb59c3245066269d38c272bb2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4028, "upload_time": "2019-06-25T06:00:37", "url": "https://files.pythonhosted.org/packages/45/f9/8396f3cdb6e678d702967affaf1a84475cc526f0647f4d18d3def92f390a/jvc_projector_remote-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1db333740a3c6c96d0ef8b1d8d2693eb", "sha256": "d274899b73874a6eff73e96344434ef8e4820b1ece5578db25467c65d66c53d0" }, "downloads": -1, "filename": "jvc_projector_remote-0.0.1.tar.gz", "has_sig": false, "md5_digest": "1db333740a3c6c96d0ef8b1d8d2693eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2785, "upload_time": "2019-06-25T06:00:39", "url": "https://files.pythonhosted.org/packages/b8/a0/635a2e5a69aabcfe161d5dcf3774f0dac40e6e6efdd498cbb3e92f71353d/jvc_projector_remote-0.0.1.tar.gz" } ], "0.0.1.post1": [ { "comment_text": "", "digests": { "md5": "17b0fba3fe30f4fa5b457322dcf4f709", "sha256": "896cae7125763836f994af1f2a4f03e92972d8c966770b99806eaaa1f7b0f834" }, "downloads": -1, "filename": "jvc_projector_remote-0.0.1.post1-py3-none-any.whl", "has_sig": false, "md5_digest": "17b0fba3fe30f4fa5b457322dcf4f709", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4210, "upload_time": "2019-06-25T06:12:02", "url": "https://files.pythonhosted.org/packages/cb/29/c850258bb4828b86a2b1daff4d7ffbff15676c84083d62b80d17ae3ffdce/jvc_projector_remote-0.0.1.post1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3270095ee5ded0a06e0188570816f055", "sha256": "14ec922a51d46bc5b9e358be03fd14fe99221c2249f2c16ea1ce819535119842" }, "downloads": -1, "filename": "jvc_projector_remote-0.0.1.post1.tar.gz", "has_sig": false, "md5_digest": "3270095ee5ded0a06e0188570816f055", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2985, "upload_time": "2019-06-25T06:12:04", "url": "https://files.pythonhosted.org/packages/c9/28/00c5d27ce69e59168a399ae578bfb795f018903a90cf75a8f246a1a113dd/jvc_projector_remote-0.0.1.post1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "db75fd1a4aa9882813b8be26baf227e6", "sha256": "59c4ba18644944de0897a44360d3e10a71472ea63fefc4b0adbbed9827fdd685" }, "downloads": -1, "filename": "jvc_projector_remote-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "db75fd1a4aa9882813b8be26baf227e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5454, "upload_time": "2019-10-08T03:01:02", "url": "https://files.pythonhosted.org/packages/a1/01/f6eef99ab930cf39ffbb043c2991f6700c595683e792c6b5c13c70c6dbae/jvc_projector_remote-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "921b13a5f600c086a1a2ac044b1622bc", "sha256": "0d418fb5fd0c25730aa05cf7ab87435397f29a5670faf0096bcd78be5b53e4e9" }, "downloads": -1, "filename": "jvc_projector_remote-0.0.2.tar.gz", "has_sig": false, "md5_digest": "921b13a5f600c086a1a2ac044b1622bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4397, "upload_time": "2019-10-08T03:01:04", "url": "https://files.pythonhosted.org/packages/d7/fa/05c9e64619490050563e9d33836ad0bec4595d322308619a27924dcbf6f6/jvc_projector_remote-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "db75fd1a4aa9882813b8be26baf227e6", "sha256": "59c4ba18644944de0897a44360d3e10a71472ea63fefc4b0adbbed9827fdd685" }, "downloads": -1, "filename": "jvc_projector_remote-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "db75fd1a4aa9882813b8be26baf227e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5454, "upload_time": "2019-10-08T03:01:02", "url": "https://files.pythonhosted.org/packages/a1/01/f6eef99ab930cf39ffbb043c2991f6700c595683e792c6b5c13c70c6dbae/jvc_projector_remote-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "921b13a5f600c086a1a2ac044b1622bc", "sha256": "0d418fb5fd0c25730aa05cf7ab87435397f29a5670faf0096bcd78be5b53e4e9" }, "downloads": -1, "filename": "jvc_projector_remote-0.0.2.tar.gz", "has_sig": false, "md5_digest": "921b13a5f600c086a1a2ac044b1622bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4397, "upload_time": "2019-10-08T03:01:04", "url": "https://files.pythonhosted.org/packages/d7/fa/05c9e64619490050563e9d33836ad0bec4595d322308619a27924dcbf6f6/jvc_projector_remote-0.0.2.tar.gz" } ] }