{"id":15651777,"url":"https://github.com/calimero-project/calimero-tools","last_synced_at":"2025-04-09T22:19:04.204Z","repository":{"id":5804856,"uuid":"7019607","full_name":"calimero-project/calimero-tools","owner":"calimero-project","description":"A collection of KNX network tools for device discovery, process communication, and monitoring","archived":false,"fork":false,"pushed_at":"2025-03-28T12:30:30.000Z","size":2013,"stargazers_count":34,"open_issues_count":0,"forks_count":20,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-09T22:18:51.610Z","etag":null,"topics":["cli","command-line","java","knx"],"latest_commit_sha":null,"homepage":"","language":"Java","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/calimero-project.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2012-12-05T15:23:50.000Z","updated_at":"2025-03-20T11:02:13.000Z","dependencies_parsed_at":"2023-12-19T14:25:13.332Z","dependency_job_id":"9f001faa-9bb0-4b3f-b6a0-bad0a11c4e96","html_url":"https://github.com/calimero-project/calimero-tools","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calimero-project%2Fcalimero-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calimero-project%2Fcalimero-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calimero-project%2Fcalimero-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calimero-project%2Fcalimero-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/calimero-project","download_url":"https://codeload.github.com/calimero-project/calimero-tools/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248119283,"owners_count":21050755,"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":["cli","command-line","java","knx"],"created_at":"2024-10-03T12:40:08.031Z","updated_at":"2025-04-09T22:19:04.184Z","avatar_url":"https://github.com/calimero-project.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Calimero Tools [![Java CI with Gradle](https://github.com/calimero-project/calimero-tools/actions/workflows/gradle.yml/badge.svg)](https://github.com/calimero-project/calimero-tools/actions/workflows/gradle.yml)\n\n\n~~~ sh\ngit clone https://github.com/calimero-project/calimero-tools.git\n~~~\n\nA collection of KNX network tools based on Calimero for (secure) process communication, monitoring, and management.\n\nWith Maven, execute\n\n\t$ mvn install\n\nWith Gradle, execute\n\n\t./gradlew build\n\n### Docker image\n\nPre-built Docker images for running the tools are available on [Docker Hub](https://hub.docker.com/r/calimeroproject/knxtools).\n\n\nAvailable Tools\n---------------\nUse `./gradlew run` or `mvn exec:java` to list available commands.\n\n* Discover - KNXnet/IP discovery and self description\n* DeviceInfo - shows device information of a device in a KNX network (using the device's interface objects)\n* IPConfig - read/write the IP configuration of a KNXnet/IP server using KNX properties\n* NetworkMonitor - busmonitor for KNX networks (monitor raw frames on the network, completely passive)\n* ProcComm - process communication, read or write a KNX datapoint, or group monitor KNX datapoints\n* ProgMode - shows the KNX devices currently in programming mode\n* PropClient - a property client for KNX device property descriptions, get or set KNX device properties\n* Property - get/set a single KNX device interface object property\n* BaosClient - communicate with a KNX BAOS device\n* ScanDevices - list KNX devices, or check whether a specific KNX individual address is currently assigned to a KNX device\n* Restart - performs a basic restart or master reset of a KNX interface or KNX device\n* DatapointImporter - import datapoint information from a KNX project (.knxproj) or group addresses file (.xml or .csv) for use with Calimero \n\n\nExamples\n-------------\n\nNote, using KNX Secure requires a keyring (`--keyring`) and keyring password (`--keyring-pwd`); by default the keyring in the current working directory is used. Alternatively, for KNX IP Secure, the following command-line options are supported:\n\n* Secure Multicast: `--group-key` _\u003c16 bytes hex key\u003e_\n* Secure Unicast:\n    * `--user` _\u0026lt;user ID\u003e_\n    * `--user-pwd` _\u0026lt;pwd\u003e_, or `--user-key` _\u003c16 bytes hex key\u003e_\n    * (optional) `--device-pwd` _\u0026lt;auth\u003e_, or `--device-key` _\u003c16 bytes hex key\u003e_\n\n### Using Gradle\n\nShow all supported tools\n\n    ./gradlew run\n\nDiscover KNX IP devices\n\n    ./gradlew run --args discover\n\nRun group monitor (using KNXnet/IP Routing)\n\n\t./gradlew run --args=\"groupmon 224.0.23.12\"\n\nUse `-h` or `--help` for help with a tool (here, _scan_ for scanning devices)\n\n\t./gradlew run --args=\"scan -h\"\n\t\nKNX IP Secure multicast group monitor using a keyring\n\n\t./gradlew run --args=\"groupmon 224.0.23.12 --keyring mykeys.knxkeys --keyring-pwd quack\"\n\n### Using Maven\n\nShow all supported tools\n\n\tmvn exec:java\n\nRun a command with option `--help` to show the help message for usage\n\n\tmvn exec:java -Dexec.args=\"groupmon --help\"\n\nThe equivalent of the above command using explicit invocation would be\n\n\tmvn exec:java -Dexec.mainClass=io.calimero.tools.ProcComm -Dexec.args=\"--help\"\n\n**Discover KNXnet/IP devices**\n\n~~~ sh\n# Variant which executes the `discover` command\n$ mvn exec:java -Dexec.args=discover\n\n# Variant which specifically refers to the tool class\n$ mvn exec:java -Dexec.mainClass=io.calimero.tools.Discover -Dexec.args=--search\n~~~\n\n**Process Communication**\n\nStart process communication for group monitoring (command `groupmon`), accessing a KNX power-line network (`--medium p110` or `-m p110`) using a USB interface with name `busch-jaeger` (or any other KNX vendor or product name, e.g., `siemens`).\n\n\tmvn exec:java -Dexec.args=\"groupmon --usb busch-jaeger -m p110\"\n\nWith USB, you can also specify the USB interface using the vendor and product ID as `VendorID:ProductID`. If you don't know any identification yet, run the tool using a bogus ID and debug settings to print the available USB interfaces.\n\nStart process communication for group monitoring, accessing an RF network using a Weinzierl USB interface. Adjust the logging level for `debug` output:\n\n\tmvn exec:java -Dexec.args=\"groupmon --usb weinzierl -m rf\" -Dorg.slf4j.simpleLogger.defaultLogLevel=debug\n\n**Local Device Management**\n\nAccess the KNX properties of your KNXnet/IP server with control endpoint `192.168.10.10` using  _local_ device management\n\n\tmvn exec:java -Dexec.args=\"properties 192.168.10.10\"\n\n**Remote Device Management**\n\nRemote property services (this example only works if the KNX device implements _Interface Objects_): open a client to a remote (`-r`) KNX device with the device address `1.1.5`, via KNXnet/IP tunneling to a KNXnet/IP server with control endpoint `192.168.10.10`\n\n\tmvn exec:java -Dexec.args=\"properties 192.168.10.10 -r 1.1.5\"\n\nOnce you enter the CLI of the property client, execute, e.g., `scan all` to scan all KNX properties of that device.\n\n\n\n### Using Java\n\nReplace the version in the examples (3.0-SNAPSHOT) with the exact version you are running. Make sure all dependencies are available, either by relying on the Calimero Tools MANIFEST file or the [Java class path](https://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html) settings (using the `-classpath` option or the [CLASSPATH](https://docs.oracle.com/javase/tutorial/essential/environment/paths.html) environment variable). The simplest way is to have all required `.jar` files in the same directory.\n\nFor an overview of tools, run\n\n\tjava -jar calimero-tools-3.0-SNAPSHOT.jar\n\n**Discover KNXnet/IP devices**\n\nDiscover KNXnet/IP servers, with Network Address Translation (NAT) enabled:\n\n\tjava -jar calimero-tools-3.0-SNAPSHOT.jar discover search --nat\n\n**Process Communication**\n\nRead a KNX datapoint value (switch button on/off) from a group address (`1/2/1`) using the FT1.2 protocol over the serial port `/dev/ttyS01`\n\n\tjava -jar calimero-tools-3.0-SNAPSHOT.jar read switch 1/2/1 --ft12 /dev/ttyS01\n\nStart process communication group monitoring for a TP1 KNX network (the default) using KNXnet/IP Routing in the multicast group `224.0.23.12`, and a specific local host address (`--localhost`, useful in multihoming to specify the outgoing network interface)\n\n\tjava -jar calimero-tools-3.0-SNAPSHOT.jar groupmon --localhost 192.168.10.14 224.0.23.12\n\n**Busmonitor**\n\nStart a KNX busmonitor on a KNX TP1 (Twisted Pair) network, using a compact (`-c` or `--compact`) busmonitor indication output format\n\n\tjava -jar calimero-tools-3.0-SNAPSHOT.jar monitor -c --usb busch-jaeger\n\nCalimero busmonitor output in compact mode looks like\n\n~~~ sh\n02:22:09.457 Seq 0 L-Data.req 7.1.13-\u003e2/1/0, low priority FCS 0x4e domain 0x6f, tpdu 00 81: T_Group, A_Group.write 01\n02:22:09.475 Seq 1 ACK\n02:22:09.810 Seq 2 L-Data.req 7.1.13-\u003e2/1/20, low priority FCS 0xa7 domain 0x6f, tpdu 00 80 ff: T_Group, A_Group.write ff\n02:22:09.828 Seq 3 ACK\n02:22:10.726 Seq 4 L-Data.req 7.1.13-\u003e2/1/11, low priority FCS 0x44 domain 0x6f, tpdu 00 80: T_Group, A_Group.write 00\n02:22:10.744 Seq 5 ACK\n~~~\n\n**Device Information**\n\nRead device information of KNX device `1.1.4` in a TP1 network (default medium) using the KNXnet/IP server `192.168.10.12`\n\n\tjava -cp \"calimero-tools-3.0-SNAPSHOT.jar\" devinfo 192.168.10.12 1.1.4\n\n\nRun tools using Gradle without source code\n-------\n\nWith Gradle installed, copy the following snippet into a file named *build.gradle*, and execute `gradle` in the same directory (see [Examples](#Examples), e.g., `gradle run --args=\"monitor 192.168.115.6\"`).\n\n```gradle\nplugins { id 'application' }\nrepositories { mavenCentral(); maven { url = uri(\"https://s01.oss.sonatype.org/content/repositories/snapshots\") } }\nmainClassName = \"io.calimero.tools.Main\"\ndependencies {\n  runtimeOnly group: 'io.calimero', name: 'calimero-tools', version: '3.0-SNAPSHOT'\n}\n```\n\nLogging\n-------\n\nCalimero tools use the [System.Logger](https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/lang/System.Logger.html). Bind any desired logging frameworks of your choice.\n\nExtending Tools\n---------------\n\nAll tools implement the interface `Runnable` and can be extended.\nOverride the method that provides the result and customize its behavior. For example, with KNXnet/IP discovery\n\n```\npublic class MyDiscovery extends Discover {\n\tpublic MyDiscovery(String[] args) throws KNXException {\n\t\tsuper(args);\n\t}\n\n\t@Override\n\tprotected void onEndpointReceived(Result\u003cSearchResponse\u003e result) {\n\t\t// Use result ...\n\t}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalimero-project%2Fcalimero-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcalimero-project%2Fcalimero-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalimero-project%2Fcalimero-tools/lists"}