<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on Tinkerbus</title><link>https://tinkerbus.org/docs/reference/</link><description>Recent content in Reference on Tinkerbus</description><generator>Hugo</generator><language>en</language><atom:link href="https://tinkerbus.org/docs/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>File formats</title><link>https://tinkerbus.org/docs/reference/file-formats/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://tinkerbus.org/docs/reference/file-formats/</guid><description>&lt;h2 id="read"&gt;Read&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Format&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Use&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Notes&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;.knxproj&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ETS 6 project&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;An outer zip that holds the project as an inner zip, which is password-protected for protected projects, plus an information file. ETS 6 layout only; other layouts are refused.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;.knxprod&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Manufacturer product data&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Also zip files that contain a knxprod (some manufacturers deliver them that way). The signature of product data is not verified.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;knx_master.xml&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Datapoint type layouts and manufacturer names&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Used from the project when it carries one, or downloaded once on request from &lt;code&gt;update.knx.org&lt;/code&gt;, and stored in the catalog folder.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Group address CSV&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Import&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ETS CSV export. Group addresses can be three-level (&lt;code&gt;1/2/3&lt;/code&gt;), two-level (&lt;code&gt;1/200&lt;/code&gt;) or a plain number.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Group address XML&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Import&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The group address export XML.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;tshark text output&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;knxcap&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tab separated fields of a KNXnet/IP capture. See &lt;a href="../../cli/knxcap/"&gt;knxcap&lt;/a&gt;.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;.pcapng&lt;/code&gt;, &lt;code&gt;.pcap&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Reports&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;A packet capture of an ETS download, read in the application to make an anonymized transcript. Not kept. See &lt;a href="../../gui/reports-to-the-project/"&gt;Reports to the project&lt;/a&gt;.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="written"&gt;Written&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Format&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Written by&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Notes&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;.knxproj&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Save, Save as, Start from scratch&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Save replaces the project file after backing up the previous version; Save as writes a new file; Start from scratch writes an empty project. Changed content invalidates the ETS signature. See &lt;a href="../../gui/saving/"&gt;Saving&lt;/a&gt;.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Group address CSV (ETS 5.7 and later)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Group addresses &amp;gt; Import/Export&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Group address XML&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Group addresses &amp;gt; Import/Export&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Device list CSV&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Devices &amp;amp; places &amp;gt; Export&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Devices with their place.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;HTML report&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Reports&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;One self-contained HTML file, to print or save as PDF from a browser.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Telegram CSV&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Monitor &amp;gt; Export, Monitor &amp;gt; Record&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Columns: Time, Source, Source name, Destination, Destination name, Service, Data type, Value, Raw value, Confirmation. A recording never replaces an existing file.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Backup of device memory&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;knxprogram&lt;/code&gt;, Programming &amp;gt; Check&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;A text file named &lt;code&gt;backup-&amp;lt;serial&amp;gt;-&amp;lt;date&amp;gt;-&amp;lt;time&amp;gt;.txt&lt;/code&gt;. It records the memory of the device before the load.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;settings.json&lt;/code&gt;, &lt;code&gt;downloads.json&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The application&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;See &lt;a href="../settings/"&gt;Settings&lt;/a&gt;.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Report file (&lt;code&gt;.zip&lt;/code&gt;)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;A report &amp;gt; Save report file&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;report.md&lt;/code&gt; and, if you read a capture, &lt;code&gt;transcript.txt&lt;/code&gt;. See &lt;a href="../../gui/reports-to-the-project/"&gt;Reports to the project&lt;/a&gt;.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-xml&lt;/code&gt; output&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;knxdownload -xml&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The application program of a device as XML.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Raw archive entry&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;knxproj -extract&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;One entry of the inner project archive.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Files that Tinkerbus writes are created with restrictive permissions where they may hold secrets (the settings file is&#10;mode 0600).&lt;/p&gt;</description></item><item><title>Settings</title><link>https://tinkerbus.org/docs/reference/settings/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://tinkerbus.org/docs/reference/settings/</guid><description>&lt;h2 id="location"&gt;Location&lt;/h2&gt;&#10;&lt;p&gt;The application keeps its state in your user configuration folder, in a folder named &lt;code&gt;tinkerbus&lt;/code&gt;. The folder comes from&#10;the operating system: &lt;code&gt;~/.config/tinkerbus&lt;/code&gt; on Linux (or &lt;code&gt;$XDG_CONFIG_HOME/tinkerbus&lt;/code&gt;), &lt;code&gt;%AppData%\tinkerbus&lt;/code&gt; on Windows,&#10;&lt;code&gt;~/Library/Application Support/tinkerbus&lt;/code&gt; on macOS. If the system has no configuration folder, nothing is saved.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Path&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Content&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;tinkerbus/settings.json&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Settings, below. Written atomically with mode 0600; the folder is mode 0700.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;tinkerbus/catalog/&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Imported &lt;code&gt;.knxprod&lt;/code&gt; files and &lt;code&gt;knx_master.xml&lt;/code&gt;.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;tinkerbus/downloads.json&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;What is known about the last download of each project device, by project id and device id: a fingerprint of the image that was loaded, or &amp;ldquo;never&amp;rdquo; for devices added from the catalog. See the &lt;a href="../../gui/devices-and-places/#download-reminder"&gt;download reminder&lt;/a&gt;. Names and comments are not part of it.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;tinkerbus/backups/projects/&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The previous version of a project file, copied before Save replaces it (&lt;code&gt;&amp;lt;name&amp;gt;-&amp;lt;date&amp;gt;-&amp;lt;time&amp;gt;.knxproj&lt;/code&gt;). The last five per project name are kept.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;tinkerbus/backups/&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The memory backups of devices written by the Programming check and &lt;code&gt;knxprogram&lt;/code&gt;.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;A damaged &lt;code&gt;settings.json&lt;/code&gt; is treated as empty and replaced the next time something is saved.&lt;/p&gt;</description></item><item><title>Protocols and data types</title><link>https://tinkerbus.org/docs/reference/protocols/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://tinkerbus.org/docs/reference/protocols/</guid><description>&lt;p&gt;The bus protocol code lives under &lt;code&gt;internal/falcon&lt;/code&gt;, the datapoint code under &lt;code&gt;internal/dpt&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="knxnetip"&gt;KNXnet/IP&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Part&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Status&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Search (multicast) and description of a gateway&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Implemented, used by the application and &lt;code&gt;knxprobe -discover&lt;/code&gt;, &lt;code&gt;-describe&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tunnelling over UDP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Implemented, with unit tests, and used against real gateways in development&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tunnelling over TCP (KNXnet/IP v2)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Implemented, with unit tests. A gateway closes a tunnel that stays silent for about two minutes, so the connection state request is sent every 60 seconds on TCP as on UDP, and the tunnel is closed when the gateway does not answer&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Device management connection&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Implemented (reading and writing the gateway&amp;rsquo;s own interface objects). The tools use it to open and close a connection only&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Routing (multicast, default &lt;code&gt;224.0.23.12:3671&lt;/code&gt;)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Implemented in the library (at most 50 frames per second, busy handling). Not used by the application or the tools. Not tested on hardware&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IP Secure (secure sessions, secure routing)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Not implemented.&lt;/strong&gt; It would need the specification or a secure gateway to test against, and nothing is guessed&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="cemi-and-application-layer"&gt;cEMI and application layer&lt;/h2&gt;&#10;&lt;p&gt;Frames are decoded and built as cEMI L_Data requests, confirmations and indications. The application layer covers&#10;group value read, response and write, and the management services the programming code uses:&lt;/p&gt;</description></item></channel></rss>