{"id":47949035,"url":"https://github.com/tostmann/ip4knx","last_synced_at":"2026-04-09T13:01:15.735Z","repository":{"id":348756948,"uuid":"1199626962","full_name":"tostmann/ip4knx","owner":"tostmann","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-04T12:16:03.000Z","size":2560,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-05T09:02:47.571Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","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/tostmann.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-02T14:39:40.000Z","updated_at":"2026-04-04T12:16:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"b3db21e7-055c-43df-b6e1-8df103b9603c","html_url":"https://github.com/tostmann/ip4knx","commit_stats":null,"previous_names":["tostmann/ip4knx"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tostmann/ip4knx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tostmann%2Fip4knx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tostmann%2Fip4knx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tostmann%2Fip4knx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tostmann%2Fip4knx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tostmann","download_url":"https://codeload.github.com/tostmann/ip4knx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tostmann%2Fip4knx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31509941,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"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":[],"created_at":"2026-04-04T08:56:11.262Z","updated_at":"2026-04-08T12:00:29.470Z","avatar_url":"https://github.com/tostmann.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ip4knx - Universal KNXnet/IP Gateway\n\nCustom firmware to turn the **Busware TUL (ESP32-C3)** and **TUL32 (ESP32-C6)** USB sticks into a fully featured KNXnet/IP Routing and Tunneling Gateway.\n\nBuilt upon the excellent [OpenKNX](https://github.com/OpenKNX/knx) stack, highly optimized and patched for the specific hardware requirements of the NCN5130 transceiver and modern ESP32 Arduino Core 3.x frameworks.\n\n## 🌟 Features\n\n*   **Prio 1: Home Assistant Support:** Auto-discovery via KNXnet/IP Routing and complete multi-client support.\n*   **High Performance Concurrency:** Supports up to **10 concurrent KNXnet/IP Tunneling connections** (e.g., simultaneous use of ETS, Home Assistant, Node-RED, etc.).\n*   **Improv-WiFi Provisioning:** Easy initial setup. Connect via Serial (USB) and provision Wi-Fi credentials straight from your browser. Includes a 120-second reconfiguration window after every boot.\n*   **Web-based Status Dashboard:** Built-in web server displaying system uptime, network details, active tunneling slots, and real-time KNX Bus Statistics (Bus Load, RX/TX Counters).\n*   **Zero-Conf / mDNS:** Reach the gateway interface locally via `http://tul.local`.\n*   **Hardware Watchdog:** Active Task Watchdog Timer (TWDT) and Wi-Fi connection monitoring for ultimate stability.\n\n## 🎛 Supported Hardware\n\n### Busware TUL (ESP32-C3)\n*   **MCU:** ESP32-C3\n*   **Transceiver:** NCN5130 (Galvanically isolated via ISO7221)\n*   **Target Env:** `tul_esp32c3`\n\n### Busware TUL32 (ESP32-C6)\n*   **MCU:** ESP32-C6-MINI\n*   **Transceiver:** NCN5130 (Galvanically isolated via ISO7221)\n*   **Target Env:** `tul32_esp32c6`\n\n## 🚀 Installation\n\n### Option A: Flash Pre-compiled Factory Binaries (Easiest)\nYou can directly flash the combined factory images located in the `binaries/` folder using ESP Web Tools or `esptool.py`. They contain the bootloader, partition table, and firmware.\n\n1. Locate the correct binary for your hardware in `binaries/`:\n   * `factory_tul_esp32c3.bin`\n   * `factory_tul32_esp32c6.bin`\n2. Flash it to offset `0x0000`:\n   ```bash\n   esptool.py --chip \u003cesp32c3|esp32c6\u003e write_flash 0x0000 binaries/factory_target.bin\n   ```\n\n### Option B: Build from Source (PlatformIO)\nThis project uses PlatformIO. The required `knx` and `tpuart` libraries are vendored (included locally in `lib/`) to ensure the applied hardware patches remain stable.\n\n1. Install [PlatformIO](https://platformio.org/).\n2. Open the `tul-knx-gateway` folder.\n3. Build and upload:\n   ```bash\n   pio run -e tul_esp32c3 -t upload\n   # OR\n   pio run -e tul32_esp32c6 -t upload\n   ```\n\n## ⚙️ Initial Setup\n1. Plug the TUL stick into a USB port.\n2. The initial firmware has no Wi-Fi credentials (flashing the factory binary to `0x0000` erases the NVS partition). \n3. **Provisioning via Web-Serial:** Open a Web-Serial terminal (like [ESP Web Tools](https://espweb.tools/)) and connect to the device. Follow the \"Improv-WiFi\" prompts to pass your SSID and Password.\n4. **Provisioning via Python Script (CLI):** Alternatively, you can provision the Wi-Fi credentials via command line using the included test script. This is highly useful for automated setups or debugging:\n   ```bash\n   pip install pyserial\n   python3 scripts/test_improv.py --port /dev/ttyUSB0 --ssid 'My_WiFi_Network' --password 'SuperSecret123'\n   ```\n5. Once connected, open `http://tul.local` in your browser.\n\n## 🤝 Credits\nThis project heavily relies on the [OpenKNX](https://github.com/OpenKNX) library stack, which provides the robust KNX TP1 and IP protocol implementation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftostmann%2Fip4knx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftostmann%2Fip4knx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftostmann%2Fip4knx/lists"}