{"id":29407187,"url":"https://github.com/alokkusingh/iot-home-stack","last_synced_at":"2026-02-05T16:32:47.587Z","repository":{"id":299167664,"uuid":"1002251160","full_name":"alokkusingh/iot-home-stack","owner":"alokkusingh","description":"IoT Home Stack","archived":false,"fork":false,"pushed_at":"2025-06-28T16:44:46.000Z","size":19,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-11T04:39:30.973Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"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/alokkusingh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null}},"created_at":"2025-06-15T03:46:53.000Z","updated_at":"2025-06-28T16:44:49.000Z","dependencies_parsed_at":"2025-06-15T04:37:33.492Z","dependency_job_id":"43ed68db-7ee6-4954-af97-db7bb3fd7fe8","html_url":"https://github.com/alokkusingh/iot-home-stack","commit_stats":null,"previous_names":["alokkusingh/iot-home-stack"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alokkusingh/iot-home-stack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alokkusingh%2Fiot-home-stack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alokkusingh%2Fiot-home-stack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alokkusingh%2Fiot-home-stack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alokkusingh%2Fiot-home-stack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alokkusingh","download_url":"https://codeload.github.com/alokkusingh/iot-home-stack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alokkusingh%2Fiot-home-stack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29125850,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T14:05:12.718Z","status":"ssl_error","status_checked_at":"2026-02-05T14:03:53.078Z","response_time":65,"last_error":"SSL_read: 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":[],"created_at":"2025-07-11T00:41:11.158Z","updated_at":"2026-02-05T16:32:47.571Z","avatar_url":"https://github.com/alokkusingh.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# iot-home-stack\nIoT Home Stack\n\n## Telemetry Service\nHome Stack Telemetry Service, which is a microservice that collects data from various sensors by listening MQTT Topics and processes it and transmits command to a sensor by publishing to a MQTT Topic.\n### MQTT Subscription Topics\n  - `home/alok/status/\u003c\u003cdeviceId\u003e\u003e`\n  - `home/alok/telemetry/temperature/\u003c\u003cdeviceId\u003e\u003e`\n  - `home/alok/telemetry/humidity/\u003c\u003cdeviceId\u003e\u003e`\n### MQTT Publish Topics\n  - `home/alok/command/\u003c\u003cdeviceId\u003e\u003e`\n### General MQTT Configurations\n- Clean State = False\n- QoS = TBD\n## Mirco Controllers\n### ESP32-GeneralPurpose-1\nGeneral purpose ESP32 microcontroller for various sensors and actuators.\n- Device ID: `esp32-general-purpose-1`\n- MQTT Subscription Topic: \n  - `home/alok/command/esp32-general-purpose-1`\n- MQTT Publish Topic: \n  - `home/alok/telemetry/temperature/esp32-general-purpose-1`\n  - `home/alok/telemetry/humidity/esp32-general-purpose-1`\n#### Sensors\n- DHT11 Temperature and Humidity Sensor\n- Light Sensor: Photosensitive Resistor Module\n### ESP32-CAM-1\n#### Sensors\n- Camera Module\n- Motion Sensor: HC-SR501 PIR\n## MQTT Broker\nMosquitto running on Kubernetes\n### Miscellaneous Security Configuration\n```text\n#Possible values are tlsv1.3, tlsv1.2 and tlsv1.1. If left unset, the default allows TLS v1.3 and v1.2\n#tls_version\n\n# Path to the PEM encoded server certificate.\ncertfile /etc/tls/tls.crt\n# Path to the PEM encoded keyfile.\nkeyfile /etc/tls/tls.key\n\nallow_anonymous false\n\nrequire_certificate true\n# cafile and capath define methods of accessing the PEM encoded\n# Certificate Authority certificates that will be considered trusted when\n# checking incoming client certificates.\n# cafile defines the path to a file containing the CA certificates.\ncafile /etc/ca/mqtt-signer-ca.crt\n\n#If require_certificate is true, you may set use_identity_as_username to true to use the CN value from the client certificate as a username. \n#If this is true, the password_file option will not be used for this listener.\n#This takes priority over use_subject_as_username if both are set to true.\nuse_identity_as_username true\n\nacl_file /etc/acl/acl.conf\n```\n### ACL (Access Control List)\n```text\n# Allow user \"home-telemetry-svc\" to subscribe to all topics\nuser home-telemetry-svc\ntopic read $SYS/#\ntopic read #\ntopic write home/alok/command/esp32-general-purpose-1\n\n# Allow user \"esp32-general-purpose-1\" to publish to \"sensors/temperature\" and \"sensors/humidity\"\nuser esp32-general-purpose-1\ntopic write home/alok/status/esp32-general-purpose-1\ntopic write home/alok/telemetry/temperature/esp32-general-purpose-1\ntopic write home/alok/telemetry/humidity/esp32-general-purpose-1\ntopic read home/alok/command/esp32-general-purpose-1\n```\n## MQTT Topics\n### Sensor Topics\n- `home/alok/status/esp32-general-purpose-1`\n- `home/alok/telemetry/temperature/esp32-general-purpose-1`\n- `home/alok/telemetry/humidity/esp32-general-purpose-1`\n### Controller Topics\n- `home/alok/command/esp32-general-purpose-1`\n## MQTT Payloads\n### Temperature Payload\n```json\n{\n  \"deviceId\": \"esp32-general-purpose-1\",\n  \"epochTime\": 1696156800,\n  \"temperature\": 25.5,\n  \"unit\": \"Celsius\"\n}\n```\n### Humidity Payload\n```json\n{\n  \"deviceId\": \"esp32-general-purpose-1\",\n  \"epochTime\": 1696156800,\n  \"humidity\": 60,\n  \"unit\": \"%\"\n}\n```\n### Device Status Payload\n#### Online Status\n```json\n{\n  \"deviceId\": \"esp32-general-purpose-1\",\n  \"epochTime\": 1696156800,\n  \"status\": \"online\",\n  \"ipAddress\": \"192.168.1.6\"\n}\n```\n#### Offline Status\n```json\n{\n  \"deviceId\": \"esp32-general-purpose-1\",\n  \"epochTime\": 1696156800,\n  \"status\": \"offline\",\n  \"lastSeen\": \"2023-10-01T12:00:00Z\"\n}\n```\n### Command Payload\n```json\n{\n  \"deviceId\": \"esp32-general-purpose-1\",\n  \"command\": \"turn_on_fan\"\n}\n```\n## mTLS (Mutual TLS)\n\n### Root Certificate\n```shell\nopenssl genrsa -des3 -out secret/mqtt-signer-ca.key 2048\n```\n```shell\nopenssl req -x509 -new -nodes -key secret/mqtt-signer-ca.key -sha256 -days 365 -out secret/mqtt-signer-ca.crt -subj /C=IN/ST=KA/L=Bengaluru/O=Home/CN=alok-signer\n```\n### Broker Domain Certificate\n```shell\nopenssl genrsa -out secret/server.key 2048\n```\n```shell\n#openssl req -new -sha256 -out secret/server.csr -key secret/server.key -subj /C=IN/ST=KA/L=Bengaluru/O=Home/CN=192.168.1.201\nopenssl req -new -out secret/server.csr -key secret/server.key -config secret/openssl-domian-csr.conf\n```\n```shell\nopenssl x509 -req -in secret/server.csr -CA secret/mqtt-signer-ca.crt -CAkey secret/mqtt-signer-ca.key -CAcreateserial -out secret/server.crt -days 360 -sha256 -copy_extensions copy\n```\n### Client Certificate - home-telemetry-service\n```shell\nopenssl genrsa -out secret/mqtt.client.home-telemetry-svc.key 2048\n```\n```shell\nopenssl req -new -sha256 -key secret/mqtt.client.home-telemetry-svc.key -subj /C=IN/ST=KA/L=Bengaluru/O=Home/CN=home-telemetry-svc -out secret/mqtt.client.home-telemetry-svc.csr\n```\n```shell\nopenssl x509 -req -in secret/mqtt.client.home-telemetry-svc.csr -CA secret/mqtt-signer-ca.crt -CAkey secret/mqtt-signer-ca.key -CAcreateserial -out secret/mqtt.client.home-telemetry-svc.crt -days 365 -sha256\n```\n```shell\nopenssl pkcs12 -export -in secret/mqtt.client.home-telemetry-svc.crt -inkey secret/mqtt.client.home-telemetry-svc.key -out secret/mqtt.client.home-telemetry-svc.p12 -name \"home-telemetry-svc\"\n```\n```shell\nkeytool -importkeystore -destkeystore secret/mqtt.client.home-telemetry-svc.jks -deststoretype JKS -srckeystore secret/mqtt.client.home-telemetry-svc.p12 -srcstoretype PKCS12 -alias \"home-telemetry-svc\"\n```\n### Client Certificate - home-telemetry-test-service\n```shell\nopenssl genrsa -out secret/mqtt.client.home-telemetry-test-svc.key 2048\n```\n```shell\nopenssl req -new -sha256 -key secret/mqtt.client.home-telemetry-test-svc.key -subj /C=IN/ST=KA/L=Bengaluru/O=Home/CN=home-telemetry-test-svc -out secret/mqtt.client.home-telemetry-test-svc.csr\n```\n```shell\nopenssl x509 -req -in secret/mqtt.client.home-telemetry-test-svc.csr -CA secret/mqtt-signer-ca.crt -CAkey secret/mqtt-signer-ca.key -CAcreateserial -out secret/mqtt.client.home-telemetry-test-svc.crt -days 365 -sha256\n```\n```shell\nopenssl pkcs12 -export -in secret/mqtt.client.home-telemetry-test-svc.crt -inkey secret/mqtt.client.home-telemetry-test-svc.key -out secret/mqtt.client.home-telemetry-test-svc.p12 -name \"home-telemetry-test-svc\"\n```\n### Client Certificate - mqtt-fx\n```shell\nopenssl genrsa -out secret/mqtt.client.mqtt-fx.key 2048\n```\n```shell\nopenssl req -new -sha256 -key secret/mqtt.client.mqtt-fx.key -subj /C=IN/ST=KA/L=Bengaluru/O=Home/CN=mqtt-fx -out secret/mqtt.client.mqtt-fx.csr\n```\n```shell\nopenssl x509 -req -in secret/mqtt.client.mqtt-fx.csr -CA secret/mqtt-signer-ca.crt -CAkey secret/mqtt-signer-ca.key -CAcreateserial -out secret/mqtt.client.mqtt-fx.crt -days 365 -sha256\n```\n### Client Certificate - esp32-general-purpose-1\n```shell\nopenssl genrsa -out secret/mqtt.client.esp32-general-purpose-1.key 2048\n```\n```shell\nopenssl req -new -sha256 -key secret/mqtt.client.esp32-general-purpose-1.key -subj /C=IN/ST=KA/L=Bengaluru/O=Home/CN=esp32-general-purpose-1 -out secret/mqtt.client.esp32-general-purpose-1.csr\n```\n```shell\nopenssl x509 -req -in secret/mqtt.client.esp32-general-purpose-1.csr -CA secret/mqtt-signer-ca.crt -CAkey secret/mqtt-signer-ca.key -CAcreateserial -out secret/mqtt.client.esp32-general-purpose-1.crt -days 365 -sha256\n```\n## Miscellaneous\n```shell\nmosquitto_pub --cafile secret/mqtt-signer-ca.crt --cert secret/mqtt.client.esp32-general-purpose-1.crt --key secret/mqtt.client.esp32-general-purpose-1.key -h khbr -p 31883 -q 1 -t foo/bar -i esp32-general-purpose-1 --tls-version tlsv1.3 -m \"Hello\" -d\n```\n```shell\nmosquitto_pub --cafile secret/mqtt-signer-ca.crt --cert secret/mqtt.client.esp32-general-purpose-1.crt --key secret/mqtt.client.esp32-general-purpose-1.key -h 192.168.1.201 -p 31883 -q 1 -t home/alok/telemetry/temperature/esp32-general-purpose-1 -i esp32-general-purpose-1 --tls-version tlsv1.2 -m \"Hello\" -d --will-topic home/alok/status/esp32-general-purpose-1 --will-payload \"offline\" --will-qos 1\n```\n```shell\nmosquitto_sub --cafile secret/mqtt-signer-ca.crt --cert secret/mqtt.client.esp32-general-purpose-1.crt --key secret/mqtt.client.esp32-general-purpose-1.key -h khbr -p 31883 -q 1 -t foo/bar -i esp32-general-purpose-1 --tls-version tlsv1.2 -d\n```\n```shell\nopenssl s_client -connect khbr:31883 -showcerts -CAfile secret/mqtt-signer-ca.crt\n```\n```shell\nopenssl req -noout -text -in secret/server.csr\n```\n```shell\nopenssl x509 -noout -text -in secret/server.crt\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falokkusingh%2Fiot-home-stack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falokkusingh%2Fiot-home-stack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falokkusingh%2Fiot-home-stack/lists"}