{"id":47806346,"url":"https://github.com/mikanmi/runnable-platform","last_synced_at":"2026-04-03T17:41:25.837Z","repository":{"id":44743175,"uuid":"438480911","full_name":"mikanmi/runnable-platform","owner":"mikanmi","description":"You can enjoy controlling your infrared home devices, a ceiling light, an air conditioner, or more joyful devices on Apple Home app on iPhone or Siri, using RunnablePlatform and your Custom-Command.","archived":false,"fork":false,"pushed_at":"2023-02-02T03:41:44.000Z","size":908,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-07-12T09:43:55.848Z","etag":null,"topics":["air-conditioner","apple","command","home-automation","homekit","homeremote","infrared","lightbulb","python","raspberry-pi","rpz-ir-sensor","runnable","smarthome"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mikanmi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-15T03:23:52.000Z","updated_at":"2022-10-12T13:15:45.000Z","dependencies_parsed_at":"2023-02-17T14:00:35.593Z","dependency_job_id":null,"html_url":"https://github.com/mikanmi/runnable-platform","commit_stats":null,"previous_names":["mikanmi/runnable-platform","patineboot/runnable-platform"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/mikanmi/runnable-platform","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikanmi%2Frunnable-platform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikanmi%2Frunnable-platform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikanmi%2Frunnable-platform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikanmi%2Frunnable-platform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mikanmi","download_url":"https://codeload.github.com/mikanmi/runnable-platform/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikanmi%2Frunnable-platform/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31366376,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:13:05.644Z","status":"ssl_error","status_checked_at":"2026-04-03T17:13:04.413Z","response_time":107,"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":["air-conditioner","apple","command","home-automation","homekit","homeremote","infrared","lightbulb","python","raspberry-pi","rpz-ir-sensor","runnable","smarthome"],"created_at":"2026-04-03T17:41:22.922Z","updated_at":"2026-04-03T17:41:25.825Z","avatar_url":"https://github.com/mikanmi.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RunnablePlatform\n\n[RPZ-IR-Sensor]: https://www.indoorcorgielec.com/products/rpz-ir-sensor/\n[IndoorCorgi]: https://github.com/IndoorCorgi\n[IndoorCorgi-cgir]: https://github.com/IndoorCorgi/cgir\n[IndoorCorgi-cgsensor]: https://github.com/IndoorCorgi/cgsensor\n[Homebridge-Service-Type]: https://developers.homebridge.io/#/service\n\nRunnablePlatform is the Homebridge plugin that connects many infrared home devices with Homebridge using Custom-Command.\n\nRunnablePlatform and Custom-Command communicate through Custom-Command’s standard input and output with each other.\n\nMy Custom-Command, InfraredRunnable, controls some infrared home devices.\n\nYou can enjoy controlling your infrared home devices, a ceiling light, an air conditioner, or more joyful devices on Apple Home app on iPhone or Siri, using RunnablePlatform and your Custom-Command.\n\n![RunnablePlatform shows accessories](https://github.com/patineboot/runnable-platform/blob/main/apple-home-app.png \"RunnablePlatform shows accessories\")\n\n- Development Webpage: \u003chttps://github.com/patineboot/runnable-platform\u003e\n- Publishing Webpage: \u003chttps://www.npmjs.com/package/homebridge-runnable-platform\u003e\n\n## Feature\n\nRunnablePlatform supports:\n\n- All [Service Types][Homebridge-Service-Type] of Homebridge.\n- All Characteristics of [Service Types][Homebridge-Service-Type] on Homebridge.\n\ne.g., My Custom-Command, InfraredRunnable, support LightBulb, Heater Cooler, Humidifier Dehumidifier, Humidity Sensor, Light Sensor, Temperature Sensor. You can create a Custom-Command supports all sorts of [Homebridge API Service Types][Homebridge-Service-Type] with all Characteristics.\n\n## Install\n\nSearch **patineboot's** RunnablePlatform with the \"RunnablePlatform\" word on Homebridge.\n\nInstall RunnablePlatform you found on Homebridge.\n\n## Usage\n\n### Config the config.json file of Homebridge\n\nThe example of the element of RunnablePlatform on config.json.\n\n```bash\n{\n    \"platform\": \"RunnablePlatform\",\n    \"name\": \"RunnablePlatform\",\n    \"run\": \"/var/opt/infrared-runnable/runnable.py\",\n    \"time\": 300,\n    \"accessories\": [\n        {\n            \"name\": \"DimLight\",\n            \"service\": \"Lightbulb\",\n            \"characteristics\": [\n                \"On\",\n                \"Brightness\"\n            ]\n        },\n    ]\n}\n```\n\nThe RunnablePlatform platform element.\n|Attribute|Type|Description|\n|-|-|-|\n|platform|string|Set \"_RunnablePlatform_\" only.|\n|name|string|Set \"_RunnablePlatform_\" only.|\n|run|string|Input the absolute path of the Custom-Command to control the infrared home devices.|\n|time|number|Input the millisecond time to finish handling a JSON message on the Custom-Command.|\n|accessories|array of any type|See the following accessories element of RunnablePlatform|\n\nThe accessories element of RunnablePlatform.\n|Attribute|Type|Description|\n|-|-|-|\n|name|string|The name of an infrared home device.|\n|service|string|The service type of the infrared home device.|\n|characteristics|array of string|The characteristics of the service.|\n\nRefer to Homebridge Service Types:\n\n- [Service Types][Homebridge-Service-Type]: \u003chttps://developers.homebridge.io/#/service\u003e\n\nGet service and characteristics, e.g., Heater Cooler:\n\n1. Visit [Heater Cooler](https://developers.homebridge.io/#/service/HeaterCooler)\n2. Find the service name of Heater Cooler on the Example code.\n   Get the service name, **HeaterCooler**, from the 'this.Service.HeaterCooler' code snippet.\n\n   ```bash\n   // create a new Heater Cooler service\n   this.service = new this.Service(this.Service.HeaterCooler);\n   ```\n\n3. Get the Characteristics\n   1. Find 'Required Characteristics' and 'Optional Characteristics.'\n   1. Click the Active link to Characteristic.\n   1. Get the name, **Active**, from the 'Characteristic.Active' on the Name item.\n\n## Program the Custom-Command\n\nRunnablePlatform and Custom-Command communicate through Custom-Command’s standard input and output with each other.\n\nCustom-Command should have the two features:\n\n- Send infrared codes to infrared home devices\n- Post and Receive a JSON message to RunnablePlatform\n\nThe JSON message format on the standard input and output:\n|Attribute|Type|Description|\n|-|-|-|\n|method|string|Set '_SET_' only.|\n|name|string|The name of your infrared home device .|\n|characteristic|string|The characteristic will change the new value.|\n|value|string|The new value of the characteristic.|\n|status|array of any|The current characteristics of the device specified with name attribute.|\n\ne.g., the JSON message that RunnablePlatform turns on the '_Your Light_' Lightbulb.\n\n_Custom-Command_'s standard input:  \n_RunnablePlatform_ **--[JSON message]-\u003e** _Custom-Command_\n\n```json\n{\n    \"method\": \"SET\",\n    \"name\": \"Your Light\",\n    \"id\": 1,\n    \"characteristic\": \"On\",\n    \"value\": true,\n    \"status\": {\n        \"On\": false,\n        \"Brightness\": 100,\n        \"ColorTemperature\": 500,\n        \"Hue\": 360,\n        \"Saturation\": 100\n    }\n}\n```\n\n```json\n{\n    \"method\": \"ACK\",\n    \"name\": \"Your Light\",\n    \"id\": 1,\n    \"status\": {\n        \"On\": true,\n        \"Brightness\": 100,\n        \"ColorTemperature\": 500,\n        \"Hue\": 360,\n        \"Saturation\": 100\n    }\n}\n```\n\ne.g., the JSON message that the '_Your AirConditioner_' HeaterCooler notifies the current temperature.\n\n_Custom-Command_'s standard output:  \n_Custom-Command_ **--[JSON message]--\u003e** _RunnablePlatform_\n\n```json\n{\n    \"method\": \"SET\",\n    \"name\": \"Your AirConditioner\",\n    \"characteristic\": \"CurrentTemperature\",\n    \"value\": 20\n}\n```\n\n## My Custom-Command, InfraredRunnable\n\nMy Custom-Command, InfraredRunnable, sends some infrared codes registered previous to my infrared home devices with [RPZ-IR-Sensor][RPZ-IR-Sensor].\n\nInfraredRunnable uses hardware and software:\n\n- [RPZ-IR-Sensor][RPZ-IR-Sensor]: is an infrared sender of the Raspberry Pi HAT.\n- [cgir][IndoorCorgi-cgir]: is a tool in Python to control RPZ-IR-Sensor.\n- [cgsensor][IndoorCorgi-cgsensor]: is a tool to get the sensor data from RPZ-IR-Sensor.\n\nMy list of infrared home devices:\n\n|Product Name|Constructor|Service Type|\n|-|-|-|\n|RPZ-IR-Sensor|Indoor Corgi|HumiditySensor and TemperatureSensor|\n|A ceiling light|Panasonic|LightBulb|\n|A ceiling light|Panasonic|LightBulb|\n|An air-conditioner|N/A|HeaterCooler|\n\n## Misc\n\nInfraredRunnable involves some useful files:\n\n- _codes.json_  \n  involves some infrared codes of '[cgir][IndoorCorgi-cgir].'\n\n- *example.install_runnable.sh*  \n  installs InfraredRunnable on Ubuntu Linux.  \n  Run the install script after changing masked as `XXX` to your sensitive information of the devices or some.\n\nHomebridge UI provides Swagger:\n\n- Swagger URL  \n  http:// [homebrdige domain or IP] /swagger\n\n- The cached accessories URL  \n  We get the current state of 'the cached accessories' on  \n  http:// [homebrdige domain or IP] /swagger/static/index.html#/Homebridge/ServerController_getCachedAccessories\n\n### Patineboot's ideas about RunnablePlatform\n\n1. I may add the new communication to RunnablePlatform.\n   - RESTful API  \n     - GET - get the state of RunnablePlatform accessory on the Homebridge.\n     - POST - notify the state to the Homebridge  \n       Memo: We already get 'the cached accessories' with Swagger on Homebridge.\n   - Web socket  \n     RunnablePlatform sends the state to change by user interaction on Apple Home app or Siri.\n1. RunnablePlatform supports updating the properties for some characteristics in the future.\n\n   ```json\n   {\n       \"method\": \"PROPERTY\",\n       \"name\": \"My Temperature\",\n       \"characteristic\": \"TargetTemperature\",\n       \"properties\": [\n           \"minValue\": \"18\",\n           \"maxValue\": \"30\",\n           \"minStep\": \"1\"\n       ]\n   }\n   ```\n\n## Environment\n\nRunnablePlatform is running as Homebridge Plugin.\n\nMy Custom-Command, InfraredRunnable, is running but not limited:\n\n- Raspberry Pi OS: GNU/Linux 10 (buster) 10.11\n- Python: 3.7.3\n- [cgir][IndoorCorgi-cgir]: 1.0\n- [cgsensor][IndoorCorgi-cgsensor]: 1.0\n\n## Thanks\n\n@[IndoorCorgi][IndoorCorgi]\n\nThey created a nice Raspberry Pi HAT, [RPZ-IR-Sensor][RPZ-IR-Sensor], and good tools, '[cgir][IndoorCorgi-cgir] and [cgsensor][IndoorCorgi-cgsensor].'\n\n@[IndoorCorgi][IndoorCorgi]'s '[RPZ-IR-Sensor][RPZ-IR-Sensor]': \u003chttps://www.indoorcorgielec.com/products/rpz-ir-sensor/\u003e\n\nI strongly recommend [RPZ-IR-Sensor][RPZ-IR-Sensor] to send infrared codes because of my good experience.\n\n## No Thanks\n\n[Homebridge and its Organization Collaborators](https://github.com/homebridge)  \nOverall, The Verified By Homebridge program is a FRAUD.\n\n\u003e I solved my plugin soon from the requests of @donavanbecker.  \n\u003e @donavanbecker respond very late and is ignoring the import bug at Homebridge.\n\nThe member of Homebridge replied very late every time, and 3 months later, finally, He ignored my proposal.\n\n[Bit Trade One, LTD.](https://bit-trade-one.co.jp) (ADRSIR design, manufacturing, and sales) provides **NO** supports and the **USELESS** scripts. Bit Trade One provides bad and poor deliverables.\n\n## Publish RunnablePlatform on NPM for patine\n\n1. Update  \n   1. Update the value of 'version' on `package.json`.\n   1. Update the `package-lock.json`.  \n      ```bash\n      rm -rf node_modules\n      rm package-lock.json\n      npm install ../runnable-platform/\n      ```\n1. Login\n   ```bash\n   npm login\n   ```\n   npm asks\n   ```bash\n   Username: patine\n   Password: \u003cyour password\u003e\n   Email: (this IS public) \u003cyour email address\u003e\n   Enter one-time password: \u003cone time password on received email\u003e\n   ```\n1. Publish\n   ```bash\n   npm publish\n   ```\n1. Logout\n   ```bash\n   npm logout\n   ```\n\n## Install Local RunnablePlatform\n\n1. Clone\n\n   ```bash\n   git clone https://github.com/patineboot/runnable-platform.git\n   ```\n\n1. Install\n\n   ```bash\n   sudo npm --location=global install ./runnable-platform/\n   ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikanmi%2Frunnable-platform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmikanmi%2Frunnable-platform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikanmi%2Frunnable-platform/lists"}