<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>qrdn</title><link href="https://blog.qrdn.de/" rel="alternate"/><link href="https://blog.qrdn.de/feeds/all.atom.xml" rel="self"/><id>https://blog.qrdn.de/</id><updated>2025-10-12T00:00:00+02:00</updated><subtitle>quite random domain name</subtitle><entry><title>Wolf Wärmepumpe auslesen</title><link href="https://blog.qrdn.de/2025/wolf-warmepumpe-auslesen.html" rel="alternate"/><published>2025-09-29T00:00:00+02:00</published><updated>2025-09-29T23:40:31.034156+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2025-09-29:/2025/wolf-warmepumpe-auslesen.html</id><summary type="html">&lt;p&gt;Wie erfasse ich den Stromverbrauch (und weitere Metriken) meiner Wolf Wärmepumpe?&lt;/p&gt;
&lt;p&gt;Eingebaut ist eine "CHA-07/400V" Monoblock-Wärmepumpe, und im Steuergerät ein "WolfLink Pro" zur Digitalisierung.&lt;/p&gt;
&lt;h1&gt;Wolflink verbinden mit Netzwerk&lt;/h1&gt;
&lt;p&gt;Gemäß Anleitung ohne Smartset App möglich:&lt;/p&gt;
&lt;p&gt;Das Gerät spannt einen WLAN Acccess Point auf, mit dem verbinden und dann auf &lt;a href="http://192.168.1.1"&gt;http …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wie erfasse ich den Stromverbrauch (und weitere Metriken) meiner Wolf Wärmepumpe?&lt;/p&gt;
&lt;p&gt;Eingebaut ist eine "CHA-07/400V" Monoblock-Wärmepumpe, und im Steuergerät ein "WolfLink Pro" zur Digitalisierung.&lt;/p&gt;
&lt;h1&gt;Wolflink verbinden mit Netzwerk&lt;/h1&gt;
&lt;p&gt;Gemäß Anleitung ohne Smartset App möglich:&lt;/p&gt;
&lt;p&gt;Das Gerät spannt einen WLAN Acccess Point auf, mit dem verbinden und dann auf &lt;a href="http://192.168.1.1"&gt;http://192.168.1.1&lt;/a&gt; navigieren.&lt;/p&gt;
&lt;p&gt;Die MAC-Adresse vom Access Point deutet auf einen ESP Microcontroller hin, das erklärt das instabile WLAN. Evtl hilft es, Hintergrund-Dienste zu pausieren, die bei Netzverbindung versuchen ins Internet zu kommen (Nextcloud client etc). Android mag WLANs ohne Internet auch nicht gerne.&lt;/p&gt;
&lt;p&gt;Ethernet-Port hat das ding auch, bei dem funktioniert die Verbindung einwandfrei und zuverlässig. Ab Werk muss man da nur DHCP liefern, und dann halt die IP Adresse per http ansteuern die der Wolflink darüber bekommen hat.&lt;/p&gt;
&lt;h1&gt;Wolflink konfigurieren&lt;/h1&gt;
&lt;p&gt;HTTP Basic Auth&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Benutzername: &lt;code&gt;admin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Passwort: Steht auf der Rückseite, ist das gleiche wie fürs WLAN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Das Gerät meldet sich per DHCP als "wolflink", wenn der DHCP-Server den Namen über DNS auflöst braucht man keine IP zu suchen/pflegen.&lt;/p&gt;
&lt;p&gt;Das Webinterface ist scheinbar immer per LAN und WLAN erreichbar.&lt;/p&gt;
&lt;p&gt;Die Wolflink Website hat 3 Unterseiten:&lt;/p&gt;
&lt;h2&gt;Status page&lt;/h2&gt;
&lt;p&gt;General Info&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Serial number:    xxxxxxxxxxxx&lt;/li&gt;
&lt;li&gt;Firmware version:     4.50.0&lt;/li&gt;
&lt;li&gt;System name:      NameIConfiguredMyself&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Network&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ethernet status:      Not connected&lt;/li&gt;
&lt;li&gt;Ethernet MAC address:     04:83:08:xx:xx:xx&lt;/li&gt;
&lt;li&gt;Wi-Fi status:     Connected&lt;/li&gt;
&lt;li&gt;Wi-Fi MAC address:    04:83:08:xx:xx:xx&lt;/li&gt;
&lt;li&gt;Wi-Fi SSID:   MyHomeWIFI&lt;/li&gt;
&lt;li&gt;IP address:   1.2.3.4&lt;/li&gt;
&lt;li&gt;Access point:     Active&lt;/li&gt;
&lt;li&gt;Access point SSID:    WOLFLINK-xxxxxx&lt;/li&gt;
&lt;li&gt;Smartset portal status:   Connected&lt;/li&gt;
&lt;li&gt;Local connection status:      Not connected&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bus&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;eBus:     Connected&lt;/li&gt;
&lt;li&gt;ModBus:   Not connected&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Netzwork page&lt;/h2&gt;
&lt;p&gt;(passwort-geschützt, siehe "Basic auth" oben)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zeigt WLAN SSIDs deren Beacons vom Wolflink empfangen werden.&lt;/li&gt;
&lt;li&gt;Erlaubt ein WLAN zu konfigurieren mit SSID, Password und Auth (WEP, WPA, WPA2 Personal, WPA3 Personal, WPA/WPA2 Personal, WPA2/WPA3 Personal), sowie DHCP oder statische IP zu setzen.&lt;/li&gt;
&lt;li&gt;Erlaubt den eingebauten Access Point zu deaktivieren.&lt;/li&gt;
&lt;li&gt;"Start WPS" button&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Settings page&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Checkbox "Enable internet connection to the WOLF Smartset portal server" (ab Werk aus)&lt;/li&gt;
&lt;li&gt;Password Ändern-Box&lt;/li&gt;
&lt;li&gt;System Name&lt;/li&gt;
&lt;li&gt;Reboot button&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Daten auslesen ohne Cloud&lt;/h1&gt;
&lt;p&gt;"Wolflink pro" ist wohl das gleiche wie ISM7e: &lt;a href="https://forum.iobroker.net/topic/73491/wolf-link-home-ism7i-ism8i-was-ist-n%C3%B6tig"&gt;https://forum.iobroker.net/topic/73491/wolf-link-home-ism7i-ism8i-was-ist-n%C3%B6tig&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dafür hat jemand C# Software geschrieben, die von dem Gerät die Metriken ausliest: &lt;a href="https://github.com/zivillian/ism7mqtt"&gt;https://github.com/zivillian/ism7mqtt&lt;/a&gt;.
Laut Quellcode wird dafür über Port 9092 oder 9091 mit XML Daten kommuniziert.&lt;/p&gt;
&lt;p&gt;Das funktioniert auch entsprechend Anleitung:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;podman&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;-it&lt;span class="w"&gt; &lt;/span&gt;--rm&lt;span class="w"&gt; &lt;/span&gt;--entrypoint&lt;span class="w"&gt; &lt;/span&gt;/bin/sh&lt;span class="w"&gt; &lt;/span&gt;--name&lt;span class="w"&gt; &lt;/span&gt;ism7config&lt;span class="w"&gt; &lt;/span&gt;zivillian/ism7mqtt:latest
$&lt;span class="w"&gt; &lt;/span&gt;/app/ism7config&lt;span class="w"&gt; &lt;/span&gt;--help&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# hiermit die config Datei erzeugen&lt;/span&gt;
&lt;span class="c1"&gt;# in einem anderen Terminal auf dem host die config Datei extrahieren:&lt;/span&gt;
&lt;span class="c1"&gt;# podman cp ism7config:/app/parameter.json ./ism7-parameter.json&lt;/span&gt;
podman&lt;span class="w"&gt; &lt;/span&gt;run&lt;span class="w"&gt; &lt;/span&gt;-it&lt;span class="w"&gt; &lt;/span&gt;--rm&lt;span class="w"&gt; &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ISM7_MQTTHOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nas.home.arpa&lt;span class="w"&gt; &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ISM7_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wolflink.home.arpa&lt;span class="w"&gt; &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ISM7_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;stehtAufDemAufkleber&lt;span class="w"&gt; &lt;/span&gt;-v&lt;span class="w"&gt; &lt;/span&gt;./ism7mqtt.parameter.json:/app/parameter.json:Z&lt;span class="w"&gt; &lt;/span&gt;zivillian/ism7mqtt:latest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Stirbt dann aber:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;System.IO.InvalidDataException: timeout
   at ism7mqtt.Ism7Client.OnInitialValuesAsync(IResponse response, CancellationToken cancellationToken) in /app/ism7mqtt/ISM7/Ism7Client.cs:line 297
   at ism7mqtt.ResponseDispatcher.DispatchAsync(IResponse response, CancellationToken cancellationToken) in /app/ism7mqtt/ISM7/ResponseDispatcher.cs:line 32
   at ism7mqtt.Ism7Client.ReadPipeAsync(PipeReader source, CancellationToken cancellationToken) in /app/ism7mqtt/ISM7/Ism7Client.cs:line 191
System.Net.Sockets.SocketException (125): Operation canceled
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource&amp;lt;System.Int32&amp;gt;.GetResult(Int16 token)
   at ism7ssl.Ism7SslStream.ReadAsync(Memory`1 buffer, CancellationToken cancellationToken) in /app/ism7ssl/Ism7SslStream.cs:line 154
   at ism7mqtt.Ism7Client.FillPipeAsync(PipeWriter target, CancellationToken cancellationToken) in /app/ism7mqtt/ISM7/Ism7Client.cs:line 145
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Verpacken in einer shell-loop hilft, aber evtl sehe ich deshalb nicht alle Metriken auf dem MQTT Bus (händisch hübsch formatiert):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;mosquitto_sub&lt;span class="w"&gt; &lt;/span&gt;-h&lt;span class="w"&gt; &lt;/span&gt;nas.home.arpa&lt;span class="w"&gt; &lt;/span&gt;-F&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;@Y-@m-@dT@H:@M:@S@z %t %p&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-q&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-t&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Wolf/#&amp;#39;&lt;/span&gt;
&lt;span class="m"&gt;2025&lt;/span&gt;-09-29T22:46:34+0200&lt;span class="w"&gt; &lt;/span&gt;Wolf/wolflink.home.arpa/BM-2_0x35
&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Funktion des Bedienmoduls&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;System&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Zeitprogramm Zirkulation Heizgerät&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Raumeinflussfaktor&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Außenfühler gemittelt Berechnungszeitraum&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Antilegionellenfunktion&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Aus&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Freigabe Parallelbetrieb&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Aus&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Raumtemperaturabhängige Abschaltung&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Ein&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Absenkstopp&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;-16,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Warmwasserminimaltemperatur&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;45&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;PI-Regler Raumtemperatur Kp&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;PI-Regler Raumtemperatur Tn&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Startzeit Antilegionellenfunktion&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;18:00:00&amp;quot;&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Uhrzeit&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;22:46:00&amp;quot;&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Datum&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;09/29/2025 00:00:00&amp;quot;&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Partymodus&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Deaktiviert&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Urlaubsmodus&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Deaktiviert&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Anforderung Lüftung&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Automatik AUS&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;1x Warmwasser&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Aus&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BUSCONFIG_Erkannte-Geraete-Low-Byte&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;256&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BUSCONFIG_Erkannte-Geraete-High-Byte&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BUSCONFIG_Softwareversion&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;330&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BUSCONFIG_Sollwertkorrektur&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;-1,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;SmartHome System&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;keine Verbindung&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Freigabe SmartHome&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Ein&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Außentemperatur&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;.2,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Wartungsmeldung&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Aus&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BUSCONFIG_Vereinfachter-Modus&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Programmwahlschalter gemeinsam&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Ein&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Anpassung Raumfühler BM-2 0&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Korrektur Außentemperatur&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BUSCONFIG_SmartHome-System&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;BUSCONFIG_Programmwahlschalter-Gemeinsam&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Firmware&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;.3,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Uhrzeit Ende&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330000&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;01:46:00&amp;quot;&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330006&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;01:46:00&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Datum Ende&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330001&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;09/30/2025 00:00:00&amp;quot;&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330007&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;09/30/2025 00:00:00&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Uhrzeit Start&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330002&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;22:46:00&amp;quot;&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330008&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;22:46:00&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Datum Start&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330003&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;09/29/2025 00:00:00&amp;quot;&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330009&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;09/29/2025 00:00:00&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Uhrzeit BM2&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330004&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;22:46:00&amp;quot;&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330010&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;22:46:00&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Datum BM2&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330005&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;09/29/2025 00:00:00&amp;quot;&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;330011&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;09/29/2025 00:00:00&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="m"&gt;2025&lt;/span&gt;-09-29T22:46:34+0200&lt;span class="w"&gt; &lt;/span&gt;Wolf/wolflink.home.arpa/DHK_BM-2_0x35
&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Raumtemperatur&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;340000&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;-3276.8,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;340041&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;-3276.8&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Gemittelte Außentemperatur&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;.8,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Anforderung Heizkreis&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Automatik aus&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Heizkreis Status&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;AT Abschaltung&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Sparfaktor&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Winter/Sommer Umschaltung&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;17&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ECO/ABS&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Tagtemperatur&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;340009&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;340035&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;340040&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Raumeinfluss&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Aus&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Vorlauftemperatur&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;37&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Sockeltemperatur Heizkurve&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Startpunkt Heizkurve&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Normaußentemperatur Heizkurve&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;-16,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Vorlauftemperatur Heizkurve&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;65&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Zeitprogramm&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Sollwertkorrektur&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;340026&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;-1,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;340031&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;-1&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Programmwahl&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;340029&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Auto&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;340032&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Reglertyp&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;aktuelle Kreisart in Kombination mit Heizgerät&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Heizkreis&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Raumeinfluss Kühlen&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Aus&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Kühlkurve global&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="m"&gt;2025&lt;/span&gt;-09-29T22:46:34+0200&lt;span class="w"&gt; &lt;/span&gt;Wolf/wolflink.home.arpa/WWSystem_BM-2_0x35
&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Warmwasser Status&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Aus&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Zeitprogramm&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Warmwassersolltemperatur eingestellt&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;350009&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;45&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;350014&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;45&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Programmwahl&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;350012&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Auto&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;350015&amp;quot;&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Auch wenn der Hersteller es wohl nicht supporten mag: &lt;a href="https://forum.iobroker.net/topic/73491/wolf-link-home-ism7i-ism8i-was-ist-n%C3%B6tig/2"&gt;https://forum.iobroker.net/topic/73491/wolf-link-home-ism7i-ism8i-was-ist-n%C3%B6tig/2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Das ISM7 kann wohl nur eine Verbindung, d.h. während ism7mqtt läuft kann man die SmartSet App und Cloud nicht nutzen: &lt;a href="https://www.heizungsforum.de/threads/ism7i-linkhome-oder-linkpro-fuer-cgb-20.10994/#post-371729"&gt;https://www.heizungsforum.de/threads/ism7i-linkhome-oder-linkpro-fuer-cgb-20.10994/#post-371729&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;Daten auslesen mit Cloud&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Daten an die Cloud senden erlauben im wolflink webinterface&lt;/li&gt;
&lt;li&gt;Auf &lt;a href="https://www.wolf-smartset.com/"&gt;https://www.wolf-smartset.com/&lt;/a&gt; einen Account anlegen mit username, Vorname, Nachname, E-Mail, Land&lt;/li&gt;
&lt;li&gt;Eingeloggt dann die Seriennummer und das Passwort des Wolflink eingeben&lt;/li&gt;
&lt;li&gt;Sofort erscheint es in der "Anlagenliste" mit einem Wolken-Icon das signalisiert ob es Daten an die Cloud schickt&lt;/li&gt;
&lt;li&gt;Klick auf "Öffnen" zeigt die geschickten Werte und ermöglicht Anpassung diverser Parameter&lt;/li&gt;
&lt;li&gt;Für Detais muss man ggf das Fachmann-Passwort eingeben, das ist ab Werk &lt;code&gt;1111&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Browser-Entwicklertools verraten, dass alle 10 Sekunden von &lt;a href="https://www.wolf-smartset.com/portal/api/portal/GetParameterValues"&gt;https://www.wolf-smartset.com/portal/api/portal/GetParameterValues&lt;/a&gt; ein JSON mit den aktuellen Messwerten abgerufen wird, das aber nur die aktualisierten Werte enthält, also meistens leer ist (bis auf einen Zeitstempel "LastAccess").&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Home Assistant Integration&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://www.home-assistant.io/integrations/wolflink/"&gt;https://www.home-assistant.io/integrations/wolflink/&lt;/a&gt; liest die Daten aus der Wolf Smartset Cloud aus.&lt;/p&gt;
&lt;h1&gt;Stromverbrauch messen&lt;/h1&gt;
&lt;p&gt;Von ISM7 und Smartset Cloud kommen die interessanten Energie-Messwerte:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leistungsaufnahme (WP + EHZ)   in kW&lt;/li&gt;
&lt;li&gt;Energiemenge HZ, ID 270059 in kWh&lt;/li&gt;
&lt;li&gt;Energiemenge WW, ID 270060 in kWh&lt;/li&gt;
&lt;li&gt;Erzeugte Wärmemenge aktueller Monat, ID 270163 in kWh&lt;/li&gt;
&lt;li&gt;Erzeugte Wärmemenge aktuelles Jahr, ID 270165 in kWh&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Energiemenge HZ plus Energiemenge WW sind genau die Erzeugte Wärmemenge im aktuellen Zeitraum, also wohl auch kein Stromverbrauch.
Laut &lt;a href="https://forum.iobroker.net/topic/71084/wolf-cha-10-verbrauchsdaten-erfassen"&gt;https://forum.iobroker.net/topic/71084/wolf-cha-10-verbrauchsdaten-erfassen&lt;/a&gt; zählt das Gerät auch selbst keinen Strom.
Bei max. 10-sekündiger Aktualisierung des Wertes aktuelle Leistungsaufnahme bringt es wohl auch nichts, diesen Wert zu integrieren, siehe auch &lt;a href="https://www.photovoltaikforum.com/thread/183019-erfahrungen-mit-der-wolf-cha/?postID=4457326&amp;amp;highlight=ism7%2Bstrom#post4457326"&gt;https://www.photovoltaikforum.com/thread/183019-erfahrungen-mit-der-wolf-cha/?postID=4457326&amp;amp;highlight=ism7%2Bstrom#post4457326&lt;/a&gt; (der ganze Thread von mehreren hundert Posts hat wahrscheinlich viele Infos zu dem Gerät).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Also braucht es für die Erfassung des Stromverbrauchs der Wärmepumpe dann wohl einen extra 3-Phasen-Zähler&lt;/strong&gt;, zB einen &lt;a href="https://www.shelly.com/de/products/shelly-3em-63w-gen3"&gt;Shelly 3EM&lt;/a&gt;.
Evtl. ändert sich daran ja demnächst was mit der neuen Photovoltaik-Integration qua Gesetz: &lt;a href="https://www.baulinks.de/webplugin/2025/1327.php4"&gt;https://www.baulinks.de/webplugin/2025/1327.php4&lt;/a&gt; "Sie unterstützen die EEBus-Anwendungsfälle Monitoring of Power (MPC) und Limitation of Power Consumption (LPC)"
Herstellerinfo: &lt;a href="https://www.wolf.eu/de-de/professional/wissensmanagement/heizung/energiemanagement-waermepumpe#toc4"&gt;https://www.wolf.eu/de-de/professional/wissensmanagement/heizung/energiemanagement-waermepumpe#toc4&lt;/a&gt; und verlinkt &lt;a href="https://oxomi.com/p/2024876/catalog/4802251?oxDeeplink=e30%3D"&gt;https://oxomi.com/p/2024876/catalog/4802251?oxDeeplink=e30%3D&lt;/a&gt;&lt;/p&gt;</content><category term="misc"/><category term="de"/><category term="smarthome"/><category term="Heizung"/></entry><entry><title>Heizkurve optimieren</title><link href="https://blog.qrdn.de/2025/heizkurve-optimieren.html" rel="alternate"/><published>2025-03-20T00:00:00+01:00</published><updated>2025-10-12T00:00:00+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2025-03-20:/2025/heizkurve-optimieren.html</id><summary type="html">&lt;p&gt;Zielsetzung Energieverbrauch minimieren, dafür Vorlauftemperatur minimieren&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wärmepumpe arbeitet umso effizienter, je geringer der Temperaturhub ist. Vorlauf &amp;gt; 55°C gilt als ineffizient&lt;/li&gt;
&lt;li&gt;(Gas)Brennwertgerät: Erhöht Effizienz (ggü Heizwertgerät), indem Wasserdampf kondensiert wird, der bei Verbrennung entsteht (bei Gas mehr als bei Öl wegen mehr Wasserstoff-Atomen). Dies umso besser/mehr möglich, je …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;Zielsetzung Energieverbrauch minimieren, dafür Vorlauftemperatur minimieren&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wärmepumpe arbeitet umso effizienter, je geringer der Temperaturhub ist. Vorlauf &amp;gt; 55°C gilt als ineffizient&lt;/li&gt;
&lt;li&gt;(Gas)Brennwertgerät: Erhöht Effizienz (ggü Heizwertgerät), indem Wasserdampf kondensiert wird, der bei Verbrennung entsteht (bei Gas mehr als bei Öl wegen mehr Wasserstoff-Atomen). Dies umso besser/mehr möglich, je geringer die Temperatur am Wärmetauscher ist, und über 57°C nicht möglich. Der Wärmetauscher hat Rücklauftemperatur, diese ist um so niedriger je geringer die Vorlauftemperatur ist (weil Heizkörper nur begrenzte Menge Wärme abgeben können).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://www.zukunftaltbau.de/ee-fit"&gt;https://www.zukunftaltbau.de/ee-fit&lt;/a&gt;
&lt;a href="https://www.viessmann.de/de/wissen/technik-und-systeme/gas-brennwertkessel/funktion.html"&gt;https://www.viessmann.de/de/wissen/technik-und-systeme/gas-brennwertkessel/funktion.html&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Luftfeuchte&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Die relative Luftfeuchtigkeit sollte in der Heizperiode nicht über 60 bis 65 Prozent liegen&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Gebäudeklima "früher": Durch Fenster-/Türschlitze zieht kalte Luft rein. Heizung sehr heiß um angenehme Temperatur zu erreichen (+ Strahlungswärme steigert Komfort), zB Holzofen. Recht warme Abgase ziehen Wärmeenergie "zum Schornstein raus", nehmen Luftfeuchte mit.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Gebäudeklima heute: Minimierung von Wärme-Energie-Verlusten durch bessere Dämmung ("zugeklebt") und geringe Abgastemperaturen (soweit vorhanden) → kein (Kamin)Zug mehr.  Anfallende Feuchte (Kochen, Duschen, Wäschetrocknen, Atmen) muss anders entfernt werden → Lüftungsanlage mit Energierückgewinnung (Wärmetauscher).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://www.zukunftaltbau.de/eigentuemer/heizung-erneuerbare-energie/richtig-heizen-und-lueften"&gt;https://www.zukunftaltbau.de/eigentuemer/heizung-erneuerbare-energie/richtig-heizen-und-lueften&lt;/a&gt;
(TODO: Quellen für alles)&lt;/p&gt;
&lt;h2&gt;Heizkurve optimieren&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.haustechnikdialog.de/SHKwissen/343/Einstellen-der-Heizkurve"&gt;https://www.haustechnikdialog.de/SHKwissen/343/Einstellen-der-Heizkurve&lt;/a&gt;  ← auch: Raum-Soll = Parallelverschiebung, Grafiken Viessmann&lt;/li&gt;
&lt;li&gt;&lt;a href="https://redaktion.hessen-agentur.de/publication/2022/3940_DIY-Heizung-optimieren.pdf"&gt;https://redaktion.hessen-agentur.de/publication/2022/3940_DIY-Heizung-optimieren.pdf&lt;/a&gt;  (Land Hessen, passipedia). Wasser nachfüllen, entlüften, Heizkurve optimieren&lt;/li&gt;
&lt;li&gt;&lt;a href="https://energiesparkommissar.de/video/diy-heizung-optimieren-heizkosten-sparen-ohne-kosten-durch-anpassung-der-heizkurve"&gt;https://energiesparkommissar.de/video/diy-heizung-optimieren-heizkosten-sparen-ohne-kosten-durch-anpassung-der-heizkurve&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Optimierung Heizkurve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Raumtemperatur generell zu niedrig: Niveau erhöhen&lt;/li&gt;
&lt;li&gt;insbesondere an kalten Tagen zu niedrig: Neigung erhöhen&lt;/li&gt;
&lt;li&gt;in der Übergangszeit zu gering, an kalten Tagen ok: Niveau erhöhen, Neigung senken&lt;/li&gt;
&lt;li&gt;in der Übergangszeit zu hoch, an kalten Tagen ok: Niveau senken, Neigung erhöhen&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Heizkurve bei Buderus RC35&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=yxoWbcplMN4"&gt;https://www.youtube.com/watch?v=yxoWbcplMN4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=fULv4mWKPjs"&gt;https://www.youtube.com/watch?v=fULv4mWKPjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.haustechnikdialog.de/Forum/t/251127/Einstellung-Buderus-rc35"&gt;https://www.haustechnikdialog.de/Forum/t/251127/Einstellung-Buderus-rc35&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.haustechnikdialog.de/Forum/t/112555/Formel-Heizkennlinie-Buderus-RC35"&gt;https://www.haustechnikdialog.de/Forum/t/112555/Formel-Heizkennlinie-Buderus-RC35&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bauexpertenforum.de/threads/buderus-gb172-14-rc35-einstellung.77682/"&gt;https://www.bauexpertenforum.de/threads/buderus-gb172-14-rc35-einstellung.77682/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.haustechnikdialog.de/Forum/t/150591/Heizkurve-und-Raumeinfluss-Buderus-GB162-25"&gt;https://www.haustechnikdialog.de/Forum/t/150591/Heizkurve-und-Raumeinfluss-Buderus-GB162-25&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fußpunkt: bei 20°C Außentemperatur 20°C Vorlauf-Soll. (Angepasst über Raumtemperatur-Soll: dessen Abweichung zu 20°C = Parallelverschiebung)&lt;/p&gt;
&lt;p&gt;Steigung: Vorlauf-Soll bei Auslegungstemperatur. Auslegungstemperatur einzustellen in Anlagendaten.&lt;/p&gt;
&lt;h2&gt;Nachtabsenkung sinnvoll?&lt;/h2&gt;
&lt;p&gt;In schlecht gedämmten Häusern: ja
&lt;a href="https://www.energie-experten.org/heizung/heizungstechnik/heizungssteuerung/nachtabsenkung"&gt;https://www.energie-experten.org/heizung/heizungstechnik/heizungssteuerung/nachtabsenkung&lt;/a&gt;&lt;/p&gt;</content><category term="misc"/><category term="de"/><category term="Heizung"/></entry><entry><title>Monitoring a freifunk node</title><link href="https://blog.qrdn.de/2024/monitoring-a-freifunk-node.html" rel="alternate"/><published>2024-09-26T00:00:00+02:00</published><updated>2024-09-26T00:15:26.462780+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2024-09-26:/2024/monitoring-a-freifunk-node.html</id><summary type="html">&lt;p&gt;I own/operate a freifunk router, running the &lt;a href="https://darmstadt.freifunk.net/"&gt;Freifunk Darmstadt&lt;/a&gt; firmware which is based on gluon, which itself is based on OpenWRT.&lt;/p&gt;
&lt;p&gt;I'd like to monitor the operation of my node (e.g. wifi client count on 2.4 and 5 GHz), but I want to avoid building my own …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I own/operate a freifunk router, running the &lt;a href="https://darmstadt.freifunk.net/"&gt;Freifunk Darmstadt&lt;/a&gt; firmware which is based on gluon, which itself is based on OpenWRT.&lt;/p&gt;
&lt;p&gt;I'd like to monitor the operation of my node (e.g. wifi client count on 2.4 and 5 GHz), but I want to avoid building my own firmware image. I already have prometheus and grafana running, so all I need is a node_exporter on the device exporting metrics over HTTP. I can install such with &lt;code&gt;opkg install prometheus-node-exporter-lua&lt;/code&gt;, but whenever the autoupdater installs a new firmware version (often), I'd have to manually repeat that installation.&lt;/p&gt;
&lt;p&gt;As noted &lt;a href="https://github.com/freifunk-gluon/gluon/wiki/Commandline-administration#update-proof-way"&gt;in the gluon wiki&lt;/a&gt; this can be automated using &lt;code&gt;/etc/rc.local&lt;/code&gt; which is run on each boot. Just add the following snippet (before the closing &lt;code&gt;exit 0&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;!&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-e&lt;span class="w"&gt; &lt;/span&gt;/usr/bin/prometheus-node-exporter-lua&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
sh&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sleep 60 &amp;amp;&amp;amp; \&lt;/span&gt;
&lt;span class="s1"&gt;  logger &amp;quot;installing prometheus-node-exporter-lua&amp;quot;&lt;/span&gt;
&lt;span class="s1"&gt;  opkg update&lt;/span&gt;
&lt;span class="s1"&gt;  opkg install prometheus-node-exporter-lua \&lt;/span&gt;
&lt;span class="s1"&gt;    prometheus-node-exporter-lua-nat_traffic \&lt;/span&gt;
&lt;span class="s1"&gt;    prometheus-node-exporter-lua-netstat \&lt;/span&gt;
&lt;span class="s1"&gt;    prometheus-node-exporter-lua-openwrt \&lt;/span&gt;
&lt;span class="s1"&gt;    prometheus-node-exporter-lua-wifi \&lt;/span&gt;
&lt;span class="s1"&gt;    prometheus-node-exporter-lua-wifi_stations&lt;/span&gt;
&lt;span class="s1"&gt;  logger &amp;quot;installing prometheus-node-exporter-lua returned $?&amp;quot;&lt;/span&gt;
&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Waiting 60 seconds after boot hopefully is enough for the WAN network to be up.&lt;/p&gt;
&lt;p&gt;Correct operation can be tested by running the file manually: &lt;code&gt;bash /etc/rc.local&lt;/code&gt; and checking for the "installing ... returned ..." line with &lt;code&gt;logread -f&lt;/code&gt;.&lt;/p&gt;</content><category term="misc"/><category term="en"/></entry><entry><title>The Nightmare Stacks map</title><link href="https://blog.qrdn.de/2023/the-nightmare-stacks-map.html" rel="alternate"/><published>2023-07-29T00:00:00+02:00</published><updated>2023-07-29T16:44:52.313739+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2023-07-29:/2023/the-nightmare-stacks-map.html</id><summary type="html">&lt;p&gt;I very much enjoyed "The Nightmare Stacks" by Charles Stross, my favourite book of the "Laundry Files" series (as released so far).&lt;/p&gt;
&lt;p&gt;The plot being placed in a real place, I used the excellent &lt;a href="https://umap.openstreetmap.fr/en"&gt;umap&lt;/a&gt; website to draw the places &amp;amp; campaign movements named in the book as an openstreetmap overlay …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I very much enjoyed "The Nightmare Stacks" by Charles Stross, my favourite book of the "Laundry Files" series (as released so far).&lt;/p&gt;
&lt;p&gt;The plot being placed in a real place, I used the excellent &lt;a href="https://umap.openstreetmap.fr/en"&gt;umap&lt;/a&gt; website to draw the places &amp;amp; campaign movements named in the book as an openstreetmap overlay (actually 3 layers: places &amp;amp; leylines from the preparation phase, second the campaign of the Host of Air and Darkness, third the counter-movements by the Urük):&lt;/p&gt;
&lt;iframe width="100%" height="300px" frameborder="0" allowfullscreen allow="geolocation" src="//umap.openstreetmap.fr/en/map/the-nightmare-stacks_942389?scaleControl=false&amp;miniMap=false&amp;scrollWheelZoom=false&amp;zoomControl=true&amp;allowEdit=false&amp;moreControl=true&amp;searchControl=null&amp;tilelayersControl=null&amp;embedControl=null&amp;datalayersControl=true&amp;onLoadPanel=undefined&amp;captionBar=false&amp;captionMenus=true"&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;a href="//umap.openstreetmap.fr/en/map/the-nightmare-stacks_942389?scaleControl=false&amp;miniMap=false&amp;scrollWheelZoom=true&amp;zoomControl=true&amp;allowEdit=false&amp;moreControl=true&amp;searchControl=null&amp;tilelayersControl=null&amp;embedControl=null&amp;datalayersControl=true&amp;onLoadPanel=undefined&amp;captionBar=false&amp;captionMenus=true"&gt;See full screen&lt;/a&gt;&lt;/p&gt;</content><category term="misc"/><category term="en"/></entry><entry><title>checkmk setup details (inside podman container)</title><link href="https://blog.qrdn.de/2023/checkmk-setup-details-inside-podman-container.html" rel="alternate"/><published>2023-01-06T00:00:00+01:00</published><updated>2024-09-26T00:20:54.901381+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2023-01-06:/2023/checkmk-setup-details-inside-podman-container.html</id><summary type="html">&lt;p&gt;Things about CheckMK not (easily) found in the documentation.&lt;/p&gt;
&lt;p&gt;Every host is &lt;code&gt;ping&lt;/code&gt;ed, this service is named "Check_MK".&lt;/p&gt;
&lt;p&gt;Run containerized version in podman with &lt;code&gt;podman --cap-add net_raw&lt;/code&gt; for ping to work&lt;/p&gt;
&lt;p&gt;Install Plugins in containerized Raw edition:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-it&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;cmk&lt;span class="w"&gt;  &lt;/span&gt;checkmk&lt;span class="w"&gt;  &lt;/span&gt;/bin/bash
OMD&lt;span class="o"&gt;[&lt;/span&gt;cmk&lt;span class="o"&gt;]&lt;/span&gt;:~$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/tmp …&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Things about CheckMK not (easily) found in the documentation.&lt;/p&gt;
&lt;p&gt;Every host is &lt;code&gt;ping&lt;/code&gt;ed, this service is named "Check_MK".&lt;/p&gt;
&lt;p&gt;Run containerized version in podman with &lt;code&gt;podman --cap-add net_raw&lt;/code&gt; for ping to work&lt;/p&gt;
&lt;p&gt;Install Plugins in containerized Raw edition:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-it&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;cmk&lt;span class="w"&gt;  &lt;/span&gt;checkmk&lt;span class="w"&gt;  &lt;/span&gt;/bin/bash
OMD&lt;span class="o"&gt;[&lt;/span&gt;cmk&lt;span class="o"&gt;]&lt;/span&gt;:~$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/tmp
OMD&lt;span class="o"&gt;[&lt;/span&gt;cmk&lt;span class="o"&gt;]&lt;/span&gt;:~$&lt;span class="w"&gt; &lt;/span&gt;curl&lt;span class="w"&gt; &lt;/span&gt;https://raw.githubusercontent.com/f-zappa/check_mk_adsl_line/master/adsl_line-1.3.mkp
OMD&lt;span class="o"&gt;[&lt;/span&gt;cmk&lt;span class="o"&gt;]&lt;/span&gt;:~$&lt;span class="w"&gt; &lt;/span&gt;mkp&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;adsl_line-1.3.mkp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Monitoring RHEL7&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;has systemd v219, the agent requires 220. remedy: "legacy mode"&lt;/li&gt;
&lt;li&gt;avoid xinetd? use &lt;a href="https://docs.checkmk.com/latest/en/agent_linux_legacy.html#ssh"&gt;Agent over SSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ssh known_hosts in checkmk container: run &lt;code&gt;cmk --check $hostname&lt;/code&gt; which lets "the correct" ssh ask for accepting the host key. &lt;code&gt;podman -u cmk $containername  /bin/ssh $hostname&lt;/code&gt; did not suffice in my case&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;IPv6&lt;/h2&gt;
&lt;p&gt;checkmk defaults to IPv4 only, change in Settings &amp;gt; Folder "Main" &amp;gt; Dual stack. Selecting "both" will do ping4 and ping6 checks separately.&lt;/p&gt;
&lt;p&gt;podman container gets no public route, only link-local (fe80:), thus IPv6 pings to public addresses fail.
Apparently an open issue: &lt;a href="https://github.com/containers/podman/issues/15850"&gt;https://github.com/containers/podman/issues/15850&lt;/a&gt;.&lt;/p&gt;</content><category term="misc"/><category term="en"/><category term="linux"/><category term="computer"/></entry><entry><title>Reading BTLE advertisements on Linux</title><link href="https://blog.qrdn.de/2022/reading-btle-advertisements-on-linux.html" rel="alternate"/><published>2022-12-27T00:00:00+01:00</published><updated>2022-12-27T23:12:31.959854+01:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2022-12-27:/2022/reading-btle-advertisements-on-linux.html</id><summary type="html">&lt;p&gt;Project context: reading environmental sensor data from card10 into influxDB.&lt;/p&gt;
&lt;h1&gt;GATT / ESS&lt;/h1&gt;
&lt;p&gt;epicardium (C Firmware) exports sensor data over Bluetooth GATT ESS (environmental sensing service).&lt;/p&gt;
&lt;p&gt;GATT requires pairing, connecting → only 1:1, encrypted&lt;/p&gt;
&lt;p&gt;Reading possible with &lt;code&gt;card10_iaq_notify.py&lt;/code&gt; from &lt;a href="https://git.card10.badge.events.ccc.de/card10/firmware/-/merge_requests/508/diffs"&gt;https://git.card10.badge.events.ccc.de/card10/firmware/-/merge_requests/508 …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Project context: reading environmental sensor data from card10 into influxDB.&lt;/p&gt;
&lt;h1&gt;GATT / ESS&lt;/h1&gt;
&lt;p&gt;epicardium (C Firmware) exports sensor data over Bluetooth GATT ESS (environmental sensing service).&lt;/p&gt;
&lt;p&gt;GATT requires pairing, connecting → only 1:1, encrypted&lt;/p&gt;
&lt;p&gt;Reading possible with &lt;code&gt;card10_iaq_notify.py&lt;/code&gt; from &lt;a href="https://git.card10.badge.events.ccc.de/card10/firmware/-/merge_requests/508/diffs"&gt;https://git.card10.badge.events.ccc.de/card10/firmware/-/merge_requests/508/diffs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Turns out the eCO2 values computed by the BSEC values are quite bogus, compared to a proper CO2 NDIR sensor: &lt;a href="https://dm1cr.de/co2-sensor-vergleich"&gt;https://dm1cr.de/co2-sensor-vergleich&lt;/a&gt;. I replicated these results:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Correlate BME680 with MH-Z19c" src="https://qrdn.de/dump/AhdA38fqQgwT4u7Q/2022-11-20.Correlate-BME680-eCO2-MHZ19c.png"&gt;&lt;/p&gt;
&lt;p&gt;Now the idea is to check if the raw resistance values from the BME680 have some better correlation to actual CO2 values, without the intelligence from the proprietary BSEC library.&lt;/p&gt;
&lt;p&gt;Epicardium has these values, but doesn't export these over bluetooth ESS. So instead, use a python script to do BT-LE advertisements ourselves: &lt;a href="https://codeberg.org/scy/sensible-card10/"&gt;https://codeberg.org/scy/sensible-card10/&lt;/a&gt; And extend it to include the raw resistance value.&lt;/p&gt;
&lt;h1&gt;reading GAP / BLE advertisements on linux&lt;/h1&gt;
&lt;p&gt;This is a real problem due to lack of documentation of bluez5. Most online searches turn up the deprecated hcitool and friends. There is a python library &lt;code&gt;bluepy&lt;/code&gt; which implements BLE advertisement scanning, but docs are limited too: &lt;a href="https://ianharvey.github.io/bluepy-doc/"&gt;https://ianharvey.github.io/bluepy-doc/&lt;/a&gt;. Some blogpost mentions the backend binary &lt;code&gt;bluepy-helper&lt;/code&gt; which can also be talked to directly: &lt;a href="https://macchina.io/blog/internet-of-things/communication-with-low-energy-bluetooth-devices-on-linux/"&gt;https://macchina.io/blog/internet-of-things/communication-with-low-energy-bluetooth-devices-on-linux/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;GAP ~= beacons, limited data rate, 1:n, unencrypted. See &lt;a href="https://elinux.org/images/3/32/Doing_Bluetooth_Low_Energy_on_Linux.pdf"&gt;https://elinux.org/images/3/32/Doing_Bluetooth_Low_Energy_on_Linux.pdf&lt;/a&gt;, &lt;a href="https://learn.adafruit.com/introduction-to-bluetooth-low-energy?view=all"&gt;https://learn.adafruit.com/introduction-to-bluetooth-low-energy?view=all&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Check source is sending advertisements (card10 serial, &lt;code&gt;sudo picocom -b 115200 /dev/ttyACM0&lt;/code&gt; had python stacktrace in my case).&lt;/p&gt;
&lt;p&gt;bluetooth snooping using bluez' &lt;code&gt;btmon&lt;/code&gt;: no filtering, e.g. A2DP clutters.&lt;/p&gt;
&lt;p&gt;Better: the reference tool &lt;code&gt;blescan&lt;/code&gt; from bluepy:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;blescan&lt;span class="w"&gt; &lt;/span&gt;-a&lt;span class="w"&gt; &lt;/span&gt;-t0
&lt;span class="w"&gt;    &lt;/span&gt;Device&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;new&lt;span class="o"&gt;)&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;ca:4d:10:XX:XX:XX&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;public&lt;span class="o"&gt;)&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;-70&lt;span class="w"&gt; &lt;/span&gt;dBm
&lt;span class="w"&gt;        &lt;/span&gt;16b&lt;span class="w"&gt; &lt;/span&gt;Service&lt;span class="w"&gt; &lt;/span&gt;Data:&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;1a18c2cccc071b16187e0f00b100016c00860260&amp;gt;
&lt;span class="w"&gt;        &lt;/span&gt;Complete&lt;span class="w"&gt; &lt;/span&gt;Local&lt;span class="w"&gt; &lt;/span&gt;Name:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;card10&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Copy implementation to implement own data parsing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;bluepy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;btle&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;ScanPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;btle&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DefaultDelegate&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;handleDiscovery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;btle&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ScanEntry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;isNewDev&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;isNewData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;magic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;press&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;iaqa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;iaq&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;eco2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;battery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; \
            &lt;span class="n"&gt;struct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unpack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;HHhHLhBHHB&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;btle&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ScanEntry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SERVICE_DATA_16B&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="c1"&gt;# ScanEntry.getValueText() parses bytes into hex-digits, but struct.unpack() needs bytes from getValue&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="misc"/><category term="en"/><category term="computer"/></entry><entry><title>Merge multiple PDF pages into one page</title><link href="https://blog.qrdn.de/2022/merge-multiple-pdf-pages-into-one-page.html" rel="alternate"/><published>2022-12-15T00:00:00+01:00</published><updated>2022-12-15T13:09:50.397775+01:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2022-12-15:/2022/merge-multiple-pdf-pages-into-one-page.html</id><summary type="html">&lt;p&gt;Example scan a Credit Card, resulting in a PDF with two pages, each containing the image of one side of the card.&lt;/p&gt;
&lt;p&gt;Join the images, put them onto one page (and add some 10px distance between them):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pdfjam&lt;span class="w"&gt; &lt;/span&gt;input.pdf&lt;span class="w"&gt; &lt;/span&gt;--nup&lt;span class="w"&gt; &lt;/span&gt;1x2&lt;span class="w"&gt; &lt;/span&gt;--noautoscale&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--fitpaper&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--delta&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;10 10&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--outfile …&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Example scan a Credit Card, resulting in a PDF with two pages, each containing the image of one side of the card.&lt;/p&gt;
&lt;p&gt;Join the images, put them onto one page (and add some 10px distance between them):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pdfjam&lt;span class="w"&gt; &lt;/span&gt;input.pdf&lt;span class="w"&gt; &lt;/span&gt;--nup&lt;span class="w"&gt; &lt;/span&gt;1x2&lt;span class="w"&gt; &lt;/span&gt;--noautoscale&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--fitpaper&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--delta&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;10 10&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--outfile&lt;span class="w"&gt; &lt;/span&gt;out.pdf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="misc"/><category term="en"/></entry><entry><title>plasmashell stuck at 100% CPU</title><link href="https://blog.qrdn.de/2022/plasmashell-stuck-at-100-cpu.html" rel="alternate"/><published>2022-08-25T00:00:00+02:00</published><updated>2022-08-26T08:22:47.099324+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2022-08-25:/2022/plasmashell-stuck-at-100-cpu.html</id><summary type="html">&lt;p&gt;My fedora 35 had its &lt;code&gt;plasmashell&lt;/code&gt; process stuck at 100% CPU, after some switching between wayland and X11 sessions. When trying to change global keyboard shortcuts (e.g. Alt-F1 for the App-Menu Launcher), it would freeze completely for like 30 seconds, repeatedly.
A new user wouldn't have that problem.&lt;/p&gt;
&lt;p&gt;The …&lt;/p&gt;</summary><content type="html">&lt;p&gt;My fedora 35 had its &lt;code&gt;plasmashell&lt;/code&gt; process stuck at 100% CPU, after some switching between wayland and X11 sessions. When trying to change global keyboard shortcuts (e.g. Alt-F1 for the App-Menu Launcher), it would freeze completely for like 30 seconds, repeatedly.
A new user wouldn't have that problem.&lt;/p&gt;
&lt;p&gt;The fix was to remove &lt;code&gt;~/.config/plasmashellrc&lt;/code&gt;.&lt;/p&gt;</content><category term="misc"/><category term="en"/><category term="KDE"/><category term="computer"/><category term="linux"/></entry><entry><title>Notizen vom Einbau eines 3rd-party Autoradio</title><link href="https://blog.qrdn.de/2020/notizen-vom-einbau-eines-3rd-party-autoradio.html" rel="alternate"/><published>2020-09-24T00:00:00+02:00</published><updated>2020-10-13T10:01:58.071518+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2020-09-24:/2020/notizen-vom-einbau-eines-3rd-party-autoradio.html</id><summary type="html">&lt;ul&gt;
&lt;li&gt;physikalischer Einbaurahmen: 2DIN ist ein Standard, der eigentliche Schacht im Skoda ist aber größer &amp;amp; man braucht einen (Plattform-spezifischen?) Rahmen vorne, der auf die Befestigungsschrauben mappt&lt;/li&gt;
&lt;li&gt;"Standard" ist der ISO-Stecker, VW+Skoda+... nutzen Quadlock&lt;ul&gt;
&lt;li&gt;ISO: Pins standard, nur einige nicht belegt, und häufig "Dauerplus" und Zündung vertauscht&lt;/li&gt;
&lt;li&gt;Quadlock: sieht aus wie …&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;ul&gt;
&lt;li&gt;physikalischer Einbaurahmen: 2DIN ist ein Standard, der eigentliche Schacht im Skoda ist aber größer &amp;amp; man braucht einen (Plattform-spezifischen?) Rahmen vorne, der auf die Befestigungsschrauben mappt&lt;/li&gt;
&lt;li&gt;"Standard" ist der ISO-Stecker, VW+Skoda+... nutzen Quadlock&lt;ul&gt;
&lt;li&gt;ISO: Pins standard, nur einige nicht belegt, und häufig "Dauerplus" und Zündung vertauscht&lt;/li&gt;
&lt;li&gt;Quadlock: sieht aus wie ISO+x, pin-Belegung aber anders. Scheinbar standard? &lt;a href="https://www.skodacommunity.de/threads/aux-buche-neuer-radio.122141/#post-1765957"&gt;https://www.skodacommunity.de/threads/aux-buche-neuer-radio.122141/#post-1765957&lt;/a&gt;  &lt;img alt="Quadlock Pinbelegung" src="https://blog.qrdn.de/images/VW Passat RNS510 wiring connector.jpg"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Radio: heutzutage i.d.R. (auch Skoda) mit Phantomspeisung, d.h. 12V supply für Elektronik in Antenne liegt auf Signalkabel. 3rd party radios brauchen Injektor (Elektrisch auch nur ein Kondensator und eine Spule)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3rd party Radios können wohl nicht laufen wenn die Zündung aus ist&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.zenec.com/ufaqs/es-ist-moeglich-das-zenec-ego-geraet-bei-ausgeschalteter-zuendung-einzuschalten-und-zu-betreiben/"&gt;http://www.zenec.com/ufaqs/es-ist-moeglich-das-zenec-ego-geraet-bei-ausgeschalteter-zuendung-einzuschalten-und-zu-betreiben/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="de"/><category term="Auto"/></entry><entry><title>nextcloud on fedora 27, using snap</title><link href="https://blog.qrdn.de/2018/nextcloud-on-fedora-27-using-snap.html" rel="alternate"/><published>2018-06-24T00:00:00+02:00</published><updated>2018-06-24T22:28:50.861407+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2018-06-24:/2018/nextcloud-on-fedora-27-using-snap.html</id><content type="html">&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;snap&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;nextcloud
$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;snap&lt;span class="w"&gt; &lt;/span&gt;get&lt;span class="w"&gt; &lt;/span&gt;nextcloud&lt;span class="w"&gt; &lt;/span&gt;ports
Key&lt;span class="w"&gt;          &lt;/span&gt;Value
ports.http&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;
ports.https&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;443&lt;/span&gt;
$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;snap&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;nextcloud&lt;span class="w"&gt; &lt;/span&gt;ports.https&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;12345&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ports.http&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;12344&lt;/span&gt;
$&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;which&lt;span class="w"&gt; &lt;/span&gt;nextcloud.occ&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;admin-user&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;admin-pw&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="misc"/><category term="working-notes"/><category term="en"/></entry><entry><title>htc HD2 Startup sequence // howto update Bootloader</title><link href="https://blog.qrdn.de/2018/htc-hd2-startup-sequence-howto-update-bootloader.html" rel="alternate"/><published>2018-02-18T00:00:00+01:00</published><updated>2018-06-24T22:26:14.238499+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2018-02-18:/2018/htc-hd2-startup-sequence-howto-update-bootloader.html</id><summary type="html">&lt;p&gt;Source: &lt;a href="https://forum.xda-developers.com/showthread.php?t=1402975"&gt;https://forum.xda-developers.com/showthread.php?t=1402975&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Startup&lt;/h2&gt;
&lt;p&gt;sequence&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;HSPL "tri colored-screen"&lt;/li&gt;
&lt;li&gt;Bootloader: MAGLDR, cLK&lt;/li&gt;
&lt;li&gt;one of&lt;ul&gt;
&lt;li&gt;recovery: CWM, TWRP, ...&lt;/li&gt;
&lt;li&gt;OS (Android, Windows, ...)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Magic Buttons at Startup:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;HSPL: keep &lt;em&gt;Volume down&lt;/em&gt; and press &lt;em&gt;End call&lt;/em&gt;/&lt;em&gt;Power&lt;/em&gt; once&lt;/li&gt;
&lt;li&gt;MAGLDR: keep &lt;em&gt;End call&lt;/em&gt;/&lt;em&gt;Power&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Update Bootloader&lt;/h2&gt;
&lt;p&gt;(with broken &lt;em&gt;Start call …&lt;/em&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Source: &lt;a href="https://forum.xda-developers.com/showthread.php?t=1402975"&gt;https://forum.xda-developers.com/showthread.php?t=1402975&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Startup&lt;/h2&gt;
&lt;p&gt;sequence&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;HSPL "tri colored-screen"&lt;/li&gt;
&lt;li&gt;Bootloader: MAGLDR, cLK&lt;/li&gt;
&lt;li&gt;one of&lt;ul&gt;
&lt;li&gt;recovery: CWM, TWRP, ...&lt;/li&gt;
&lt;li&gt;OS (Android, Windows, ...)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Magic Buttons at Startup:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;HSPL: keep &lt;em&gt;Volume down&lt;/em&gt; and press &lt;em&gt;End call&lt;/em&gt;/&lt;em&gt;Power&lt;/em&gt; once&lt;/li&gt;
&lt;li&gt;MAGLDR: keep &lt;em&gt;End call&lt;/em&gt;/&lt;em&gt;Power&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Update Bootloader&lt;/h2&gt;
&lt;p&gt;(with broken &lt;em&gt;Start call&lt;/em&gt; button):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;place &lt;code&gt;leoimg.nbh&lt;/code&gt; on external SD card (FAT32 partition)&lt;/li&gt;
&lt;li&gt;start into HSPL&lt;/li&gt;
&lt;li&gt;confirm update by pressing &lt;em&gt;End call&lt;/em&gt;/&lt;em&gt;Power&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;USB commands:&lt;/h2&gt;
&lt;p&gt;Source: &lt;a href="https://forum.xda-developers.com/showthread.php?t=1292146"&gt;https://forum.xda-developers.com/showthread.php?t=1292146&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fastboot flash recovery $recovery.img&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fastboot oem boot-recovery&lt;/code&gt; boot into recovery&lt;/li&gt;
&lt;li&gt;Show help, which tells how to emulate hardware keys: &lt;code&gt;fastboot oem \?&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="en"/><category term="HD2"/><category term="working-notes"/></entry><entry><title>Eigener Router bei unitymedia</title><link href="https://blog.qrdn.de/2016/eigener-router-bei-unitymedia.html" rel="alternate"/><published>2016-09-24T00:00:00+02:00</published><updated>2020-10-13T10:02:09.671556+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2016-09-24:/2016/eigener-router-bei-unitymedia.html</id><summary type="html">&lt;p&gt;Seit 1.8.2016 ist die Endgerätefreiheit per Gesetz garantiert, d.h. Provider dürfen mir als Kunden nicht mehr Modem/Router vorschreiben. Um das zu überprüfen, &lt;a href="https://wiki.fsfe.org/Activities/CompulsoryRouters/Implementation/Germany"&gt;verborgt die FSFE derzeit passende Router&lt;/a&gt;, und ich hab das mal gemacht. Hier das detaillierte log:&lt;/p&gt;
&lt;h2&gt;Zusammenfassung&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Verbindung erfolgreich&lt;/em&gt;: Ja&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Telefoniedaten verfügbar&lt;/em&gt;: Ja, nach …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;Seit 1.8.2016 ist die Endgerätefreiheit per Gesetz garantiert, d.h. Provider dürfen mir als Kunden nicht mehr Modem/Router vorschreiben. Um das zu überprüfen, &lt;a href="https://wiki.fsfe.org/Activities/CompulsoryRouters/Implementation/Germany"&gt;verborgt die FSFE derzeit passende Router&lt;/a&gt;, und ich hab das mal gemacht. Hier das detaillierte log:&lt;/p&gt;
&lt;h2&gt;Zusammenfassung&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Verbindung erfolgreich&lt;/em&gt;: Ja&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Telefoniedaten verfügbar&lt;/em&gt;: Ja, nach telefonischer Anfrage&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Verwendetes Routermodell&lt;/em&gt;: AVM Fritz!Box 6490 Cable&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Verwendeter Internettarif&lt;/em&gt;: 2play 120.000 (Vertragsbeginn 2015), Hessen&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Zusätzliche Anmerkungen&lt;/em&gt;: Wie dokumentiert Anruf bei der Hotline nötig, durchgeben von CM-MAC und Seriennummer. Freischaltung nach 2 Tagen, dann erscheinen auch SIP-Zugangsdaten auf der Kundencenter-Website&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Chronologie&lt;/h2&gt;
&lt;h3&gt;Dienstag: Hotline-Anruf: Wechsel auf eigenen Router&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Hotline angerufen, 7Min (mit Ansage) gewartet&lt;/li&gt;
&lt;li&gt;Fragen:&lt;ul&gt;
&lt;li&gt;MAC, Seriennummer hinterlegen, dann wie lange bis Umschaltung?&lt;ul&gt;
&lt;li&gt;1-2 Stunden / im Laufe des Tages geht es&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;zurück auf altes Gerät wechseln: neuer Anruf nötig? Haben sie die MAC/serial davon dann noch? Wie lang dauert das dann ggf.?&lt;ul&gt;
&lt;li&gt;Für zurück wechseln nochmal anrufen&lt;/li&gt;
&lt;li&gt;Sie haben MAC/serial von dem Gerät noch im System&lt;/li&gt;
&lt;li&gt;Dauert wieder 1-2 Stunden&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Wenn ich das alte Gerät heute dran lasse, verliert das dann die Verbindung? / Woran merke ich, dass umgeschaltet wurde?&lt;ul&gt;
&lt;li&gt;wenn ich den Zugang bis heut Abend nicht brauche, kann ich einfach das neue Gerät jetzt anstecken, das verbindet sich dann automatisch, sobald es geht.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Telefonie-Zugangsdaten tauchen auch demnächst im Kundencenter auf?&lt;ul&gt;
&lt;li&gt;ja&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Will Kundennummer, Name, Geburtstag, Anschrift des Vertragspartners&lt;/li&gt;
&lt;li&gt;MAC &amp;amp; Serial (Fritz!Box "CM MAC") durchgegeben &amp;amp; vorlesen lassen -&amp;gt; stimmt&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Dienstag: Onlinechat&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Kundencenter-Website aufgemacht (ohne Ad/content-blocker), plötzlich erscheint der "Onlinechat"&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Martin: Willkommen bei Unitymedia.&lt;/p&gt;
&lt;p&gt;Martin: Wie kann ich behilflich sein?&lt;/p&gt;
&lt;p&gt;Sie: Ich habe gerade an der Hotline einen eigenen Router freischalten lassen (MAC/serial) eingegeben.&lt;/p&gt;
&lt;p&gt;Sie: Sollte im kundencenter unter "meine aufträge" ein auftrag auftauchen?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(2min)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Martin: Für was ist das jetzt wichtig?&lt;/p&gt;
&lt;p&gt;Sie: Ich will wissen wie die Umstellung funktioniert.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Und&lt;/em&gt; wenn es einen Auftrag gibt, sagt der&lt;/p&gt;
&lt;p&gt;Sie: ja, ob schon umgestellt wurde&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(3min)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Martin: Ich sehe nach, dann haben wir Klarheit.&lt;/p&gt;
&lt;p&gt;Martin: . Bitte schreiben Sie mir doch Ihre Kundenummer, Namen, vollständige Adresse und Geburtsdatum.&lt;/p&gt;
&lt;p&gt;Sie: Kundennummer XXX, Vorname Nachname, 1.1.1970, Straße Nr., PLZ Ort&lt;/p&gt;
&lt;p&gt;Sie: Aber wie gesagt, bisher ist ja alles so wie es soll, ich frage nur ob da ein auftrag sein sollte&lt;/p&gt;
&lt;p&gt;Sie: Ich sehe gerade, da kam eine Email. "Sie erhalten in Kürze eine schriftliche Bestätigung Ihres Auftrags"&lt;/p&gt;
&lt;p&gt;Martin: Ja, da muss bei Umstellung des Modems einer sein, ich weiss aber nicht ob der im Kundencenter angezeigt wird. Deswegen gucken wir nach.&lt;/p&gt;
&lt;p&gt;Sie: ah, okay&lt;/p&gt;
&lt;p&gt;Martin: Auftrag ist drin und läuft durch.&lt;/p&gt;
&lt;p&gt;Sie: ah ja, jetzt sehe ich den auch unter "aktuelle aufträge"&lt;/p&gt;
&lt;p&gt;Sie: haben Sie etwas dafür gemacht? Oder nur geguckt?&lt;/p&gt;
&lt;p&gt;Sie: (wie gesagt, ich frage weil mich der Prozess interessiert :) )&lt;/p&gt;
&lt;p&gt;Martin: Ich denke die Anzeige im Kundencenter hat sich aktualisiert, mehr nicht.&lt;/p&gt;
&lt;p&gt;Martin: Solange diese Auftrag "offen" ist in Ihrer Anzeige bitte nichts verstllen an der Vox.&lt;/p&gt;
&lt;p&gt;Martin: &lt;em&gt;Box&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Sie: okay. momentan ist noch der "alte" router dran, nicht der neue&lt;/p&gt;
&lt;p&gt;Martin: So soll das auch sein. Gut gemacht:-)&lt;/p&gt;
&lt;p&gt;Sie: super, dann wars das. vielen dank!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Danach kam ein Textbaustein "Ich schließe jetzt das Chatfenster, danach geht die Umfrage zur Kundenzufriedenheit auf"&lt;/li&gt;
&lt;li&gt;Nach ca. ½ Minute verschwand das Chat-log, und wurde durch einen Spruch wie "Dankeschön, hier gehts zur Umfrage" mit Verlinkung ersetzt.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Dienstag mail: Bestellbestätigung&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;herzlichen Dank für Ihre Bestellung:&lt;/p&gt;
&lt;p&gt;2play PLUS 120&lt;/p&gt;
&lt;p&gt;Sie erhalten in Kürze eine schriftliche Bestätigung Ihres Auftrags. Ihre Hardware wird nun für den Versand vorbereitet. Die Produktaktivierung ist für den [Dienstag] geplant. Das endgültige Aktivierungsdatum erhalten Sie mit der Versandbenachrichtigung.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Donnerstag: Umstellung&lt;/h3&gt;
&lt;p&gt;Es hat natürlich nicht 1-2 Stunden gedauert, sondern 2 Tage. Donnerstag morgen war keine Verbindung mit dem alten Router mehr da, die angesteckte Fritz!Box kam ins Internet. Im &lt;a href="https://app.unitymedia.de/kundencenter/"&gt;Kundencenter&lt;/a&gt; unter Meine Produkte &amp;gt; Telefon, ganz unten auf der Seite, standen auch SIP-credentials für Telefonie, mit denen ein- und ausgehende Telefonate von der Fritz!Box aus gingen.&lt;/p&gt;
&lt;h3&gt;Donnerstag mail: Bestellbestätigung&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Ihre Hardware ist jetzt auf dem Weg und trifft in Kürze bei Ihnen ein.&lt;/p&gt;
&lt;p&gt;Über diesen Link können Sie jederzeit den aktuellen Status Ihrer Sendung abrufen:
http://nolp.dhl.de/...&lt;/p&gt;
&lt;p&gt;Die Produktaktivierung erfolgt am [Donnerstag] im Laufe des Tages, also gegebenenfalls auch erst abends.
Für eine vorzeitige Aktivierung oder Fragen zur Installation rufen Sie uns an: 0221 466 190 19.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Donnerstag Brief: Infos zur Verwendung eigener Router&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Infos zur Verwendung eigener Router" src="https://blog.qrdn.de/images/2016-09.unitymedia-infos.png"&gt;&lt;/p&gt;
&lt;h3&gt;Samstag Brief: Bestellbestätigung&lt;/h3&gt;
&lt;p&gt;Eine Bestellbestätigung für 2play 120.000 wie bei Abschluss eines Neuvertrages. Hat vermutlich nichts mit dem Routerwechsel zu tun, sondern mit der versehentlichen Buchung der "Telefon Komfort" Option (mehrere Rufnummern, Zusatzfunktionen wie Makeln, besserer Provider-Router) durch den Hotline-Mitarbeiter (siehe unten).&lt;/p&gt;
&lt;h3&gt;nächste Woche: Hotline-Anruf: Rückwechsel&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Hotline-Navigation: 3 für Kundenservice, 2 für Produkt/Vertrag, 3 für "nicht Horizon/Mobil"&lt;/li&gt;
&lt;li&gt;keine Ansage Wartezeit, 13Min gewartet&lt;/li&gt;
&lt;li&gt;Anliegen: will Gerät zurück wechseln&lt;ul&gt;
&lt;li&gt;kein Problem, innerhalb der nächsten 3 Stunden&lt;/li&gt;
&lt;li&gt;bitte gleich nach dem Gespräch das TC7200U anschließen, damit der Auftrag nicht fehlschlägt&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Telefon-Komfort gebucht? Bestandteile (aber nicht "Telefon Komfort") im Kundencenter, Posten auf schriftl. Vertragsbestätigung&lt;ul&gt;
&lt;li&gt;Kollege hat sich wohl verklickt&lt;/li&gt;
&lt;li&gt;sie nimmt es wieder raus, schreibt mir den Betrag gut&lt;/li&gt;
&lt;li&gt;Entstehen Kosten? Nein/Gutschrift&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Rückwechsel&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;~30min später die Fritz!Box abgesteckt, das TC7200U angesteckt &amp;amp; eingeschaltet&lt;/li&gt;
&lt;li&gt;wenige Minuten danach geguckt: uplink ist da. Das TC7200U rebooted noch ein paar mal (evtl wegen Firmware-update)&lt;/li&gt;
&lt;li&gt;Kundencenter zeigt nicht mehr die 3 Rufnummern etc. (Komfort-Bestandteile), und auch nicht mehr die SIP-Credentials&lt;/li&gt;
&lt;li&gt;Telefon ein- und ausgehend funktioniert&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;das kommt wohl eher selten vor&amp;#160;&lt;a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="misc"/><category term="de"/><category term="reallife"/><category term="computer"/></entry><entry><title>How to save a whole mediawiki into a git repo</title><link href="https://blog.qrdn.de/2016/how-to-save-a-whole-mediawiki-into-a-git-repo.html" rel="alternate"/><published>2016-09-19T00:00:00+02:00</published><updated>2016-09-25T17:15:03.618914+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2016-09-19:/2016/how-to-save-a-whole-mediawiki-into-a-git-repo.html</id><summary type="html">&lt;p&gt;Recently I tried to archive the contents of &lt;a href="https://wiki.chaos-darmstadt.de/"&gt;our old MediaWiki&lt;/a&gt;
instance to a &lt;a href="https://git.darmstadt.ccc.de/azrael/wiki-exported/"&gt;git repository&lt;/a&gt;. Somebody else had already
&lt;a href="https://git.darmstadt.ccc.de/cda/wiki-exported/"&gt;done that&lt;/a&gt;, using
&lt;a href="https://github.com/wikimedia/mediawiki/tree/master/maintenance"&gt;some scripts from MediaWiki&lt;/a&gt;, but these ignored the page histories, saving
only the recent version for each page, and offered no possibility to also save uploaded files …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Recently I tried to archive the contents of &lt;a href="https://wiki.chaos-darmstadt.de/"&gt;our old MediaWiki&lt;/a&gt;
instance to a &lt;a href="https://git.darmstadt.ccc.de/azrael/wiki-exported/"&gt;git repository&lt;/a&gt;. Somebody else had already
&lt;a href="https://git.darmstadt.ccc.de/cda/wiki-exported/"&gt;done that&lt;/a&gt;, using
&lt;a href="https://github.com/wikimedia/mediawiki/tree/master/maintenance"&gt;some scripts from MediaWiki&lt;/a&gt;, but these ignored the page histories, saving
only the recent version for each page, and offered no possibility to also save uploaded files, especially images.&lt;/p&gt;
&lt;p&gt;So I decided to see if I could do better, and found &lt;a href="https://github.com/Git-Mediawiki/Git-Mediawiki/wiki/"&gt;Git-Mediawiki&lt;/a&gt;.
I had to fiddle a bit, because of it &lt;a href="https://bugs.archlinux.org/index.php?do=details&amp;amp;task_id=49900"&gt;not being installed, only copied, with archlinux' git package&lt;/a&gt;,
and our broken TLS certificate, but eventually got the import to work:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pacman&lt;span class="w"&gt; &lt;/span&gt;-Sy&lt;span class="w"&gt; &lt;/span&gt;perl-mediawiki-api&lt;span class="w"&gt; &lt;/span&gt;perl-datetime-format-iso8601&lt;span class="w"&gt; &lt;/span&gt;perl-lwp-protocol-https
sudo&lt;span class="w"&gt; &lt;/span&gt;ln&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;/usr/share/git/mw-to-git/git-mw.perl&lt;span class="w"&gt; &lt;/span&gt;/usr/lib/git-core/git-mw
sudo&lt;span class="w"&gt; &lt;/span&gt;ln&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;/usr/share/git/mw-to-git/git-remote-mediawiki.perl&lt;span class="w"&gt; &lt;/span&gt;/usr/lib/git-core/git-remote-mediawiki
&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PERL5LIB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/share/git/mw-to-git/
&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PERL_LWP_SSL_VERIFY_HOSTNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# this makes the whole TLS encryption insecure -- I use it because we don&amp;#39;t have a valid certificate, and I don&amp;#39;t intend to write back to the wiki&lt;/span&gt;
git&lt;span class="w"&gt; &lt;/span&gt;clone&lt;span class="w"&gt; &lt;/span&gt;mediawiki::https://wiki.chaos-darmstadt.de/w
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The result is a linear history with one commit for each saved revision of any page. There seem to be some bugs, though:
- subpages are not exported, like our main pages' subsections "Hauptseite/Header" etc.
- some page histories occur twice in the git history, e.g. for &lt;a href="https://git.darmstadt.ccc.de/azrael/wiki-exported/commits/master/Mate-Basteln.mw"&gt;page "Mate-Basteln"&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Some of the things I did wrong when getting it to work:&lt;/p&gt;
&lt;h2&gt;Errors&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;wrong endpoint &lt;a href="https://wiki.chaos-darmstadt.de/"&gt;https://wiki.chaos-darmstadt.de/&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;could&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wiki&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://wiki.chaos-darmstadt.de/&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;does&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;appear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mediawiki&lt;/span&gt;
&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://wiki.chaos-darmstadt.de//api.php&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;
&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SSL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;certificate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;correct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Found&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;occurred&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;accessing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="o"&gt;://&lt;/span&gt;&lt;span class="n"&gt;wiki&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;chaos&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;darmstadt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;de&lt;/span&gt;&lt;span class="c1"&gt;//api.php after 1 attempt(s))&lt;/span&gt;
&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Could&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refs&lt;/span&gt;&lt;span class="sr"&gt;/mediawiki/origin/&lt;/span&gt;&lt;span class="n"&gt;master&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wrong endpoint &lt;a href="https://wiki.chaos-darmstadt.de/wiki/"&gt;https://wiki.chaos-darmstadt.de/wiki/&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Searching revisions...
No previous mediawiki revision found, fetching from beginning.
Fetching &lt;span class="err"&gt;&amp;amp;&lt;/span&gt; writing export data by pages...
Listing pages on remote wiki...
fatal: could not get the list of wiki pages.
fatal: &amp;#39;https://wiki.chaos-darmstadt.de/wiki/&amp;#39; does not appear to be a mediawiki
fatal: make sure &amp;#39;https://wiki.chaos-darmstadt.de/wiki//api.php&amp;#39; is a valid page
fatal: and the SSL certificate is correct.
fatal: (error 2: Failed to decode JSON returned by https://wiki.chaos-darmstadt.de/wiki//api.php
Decoding Error:
malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before &amp;quot;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;\n&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ht...&lt;/span&gt;&lt;span class="err"&gt;&amp;quot;)&lt;/span&gt; &lt;span class="na"&gt;at&lt;/span&gt; &lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;usr&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;share&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;perl5&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;vendor_perl&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;MediaWiki&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="na"&gt;API&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pm&lt;/span&gt; &lt;span class="na"&gt;line&lt;/span&gt; &lt;span class="na"&gt;400&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;

&lt;span class="na"&gt;Returned&lt;/span&gt; &lt;span class="na"&gt;Data:&lt;/span&gt;
&lt;span class="err"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="na"&gt;DOCTYPE&lt;/span&gt; &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;de&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ltr&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;client-nojs&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Diese Aktion gibt es nicht â Chaos-Darmstadt Wiki&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

... (all the HTML from the page) ...

fatal: Could not read ref refs/mediawiki/origin/master
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;PERL5LIB&lt;/code&gt; not set&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Klone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nach&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;wiki&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;Can&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;locate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Git&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Mediawiki&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;@INC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;may&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;need&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;Git&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Mediawiki&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;module&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;@INC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;contains&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;perl5&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;site_perl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;share&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;perl5&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;site_perl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;perl5&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;vendor_perl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;share&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;perl5&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;vendor_perl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;perl5&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;core_perl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;share&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;perl5&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;core_perl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;core&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;remote&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;mediawiki&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;18.&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="c1"&gt;--compilation aborted at /usr/lib/git-core/git-remote-mediawiki line 18.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SSL/TLS cert not accepted. I work around by disabling the check, because I know the cert is broken, and I don't intend to write back to the wiki, so in the worst case my export attempt is tampered with. In general, always correctly check your certificates and treat this as an severe error!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Searching&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;revisions&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;No&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;previous&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mediawiki&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;revision&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;found&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fetching&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;beginning&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Fetching&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;writing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;Listing&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;remote&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wiki&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;could&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wiki&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://wiki.chaos-darmstadt.de/wiki/&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;does&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;appear&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mediawiki&lt;/span&gt;
&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://wiki.chaos-darmstadt.de/wiki//api.php&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valid&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;
&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SSL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;certificate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;correct&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Can&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t connect to wiki.chaos-darmstadt.de:443 (certificate verify failed) : error occurred when accessing https://wiki.chaos-darmstadt.de/wiki//api.php after 1 attempt(s))&lt;/span&gt;
&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Could&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;refs&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mediawiki&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;origin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;master&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;git remote helper mediawiki not installed (&lt;code&gt;ln -s&lt;/code&gt; commands from above):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;fatal&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Unable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remote&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;helper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;mediawiki&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;/ol&gt;</content><category term="misc"/><category term="en"/><category term="computer"/><category term="git"/></entry><entry><title>Qt "ModelTest" application</title><link href="https://blog.qrdn.de/2016/qt-modeltest-application.html" rel="alternate"/><published>2016-09-14T00:00:00+02:00</published><updated>2016-09-25T16:40:06.665985+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2016-09-14:/2016/qt-modeltest-application.html</id><summary type="html">&lt;p&gt;Several sources on the Internet propose the &lt;em&gt;ModelTest&lt;/em&gt; application to check whether custom &lt;a href="https://doc.qt.io/qt-5/qabstractitemmodel.html"&gt;QAbstractItemModel&lt;/a&gt; subclasses behave correctly. The application is contained in the official sources (&lt;a href="https://code.qt.io/cgit/qt/qtbase.git/tree/tests/auto/other/modeltest"&gt;Qt5&lt;/a&gt; and &lt;a href="https://code.qt.io/cgit/qt/qt.git/tree/tests/auto/modeltest"&gt;Qt4&lt;/a&gt;), and documented (in a sense) &lt;a href="https://wiki.qt.io/Model_Test"&gt;in the official wiki&lt;/a&gt;. What is not clear, however:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The mentioned &lt;code&gt;.pri&lt;/code&gt; file is missing, one version …&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">&lt;p&gt;Several sources on the Internet propose the &lt;em&gt;ModelTest&lt;/em&gt; application to check whether custom &lt;a href="https://doc.qt.io/qt-5/qabstractitemmodel.html"&gt;QAbstractItemModel&lt;/a&gt; subclasses behave correctly. The application is contained in the official sources (&lt;a href="https://code.qt.io/cgit/qt/qtbase.git/tree/tests/auto/other/modeltest"&gt;Qt5&lt;/a&gt; and &lt;a href="https://code.qt.io/cgit/qt/qt.git/tree/tests/auto/modeltest"&gt;Qt4&lt;/a&gt;), and documented (in a sense) &lt;a href="https://wiki.qt.io/Model_Test"&gt;in the official wiki&lt;/a&gt;. What is not clear, however:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The mentioned &lt;code&gt;.pri&lt;/code&gt; file is missing, one version can be found &lt;a href="https://github.com/bruceoutdoors/Intro-Design-Patterns-Cpp-Qt5/blob/master/libs/modeltest/modeltest.pri"&gt;on github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Although not stated clearly, ModelTest is &lt;em&gt;not&lt;/em&gt; something you can drop into your otherwise normal application, comparable to &lt;code&gt;Q_ASSERT&lt;/code&gt; statements. Instead, it's a unit test for the QTest framework, i.e. a standalone test of a separate model instance. If your model proxies a complex data structure which can not easily be recreated or mocked for the test, ModelTest is useless.&lt;/li&gt;
&lt;li&gt;Various versions of ModelTest are in the Qt repos, at KDE, and elsewhere. The ones in the Qt repositories got not many updates recently (last commit from 2016-01-21), so it's not clear if they are maintained at all&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="en"/><category term="computer"/><category term="Qt"/></entry><entry><title>Git hosting software</title><link href="https://blog.qrdn.de/2015/git-hosting-software.html" rel="alternate"/><published>2015-03-16T00:00:00+01:00</published><updated>2020-10-13T10:13:52.665452+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2015-03-16:/2015/git-hosting-software.html</id><content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Software&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;Comment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitLab&lt;/td&gt;
&lt;td&gt;&lt;a href="https://about.gitlab.com/"&gt;https://about.gitlab.com/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gogs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://gogs.io/"&gt;https://gogs.io/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Security issues, single maintainer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gitea&lt;/td&gt;
&lt;td&gt;&lt;a href="https://gitea.io/"&gt;https://gitea.io/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Gogs community fork&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gitorious&lt;/td&gt;
&lt;td&gt;&lt;a href="https://gitorious.org/"&gt;https://gitorious.org/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Bought by GitLab, will shut down&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phabricator&lt;/td&gt;
&lt;td&gt;&lt;a href="http://phabricator.org/"&gt;http://phabricator.org/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Used by Wikimedia&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</content><category term="misc"/><category term="en"/><category term="computer"/></entry><entry><title>debugging ANTLR4 Lexer</title><link href="https://blog.qrdn.de/2015/debugging-antlr4-lexer.html" rel="alternate"/><published>2015-02-13T00:00:00+01:00</published><updated>2016-07-21T20:47:39.543502+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2015-02-13:/2015/debugging-antlr4-lexer.html</id><summary type="html">&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;grun&lt;span class="w"&gt; &lt;/span&gt;MyLexer&lt;span class="w"&gt; &lt;/span&gt;tokens&lt;span class="w"&gt; &lt;/span&gt;-tokens&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;&lt;span class="w"&gt; &lt;/span&gt;testfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;invokes the TestRig on the Lexer spilling out the tokens it recognized. Example stdout:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;[@0,0:9=&amp;#39;google.com&amp;#39;,&amp;lt;4&amp;gt;,1:0]&lt;/span&gt;
&lt;span class="k"&gt;[@1,10:10=&amp;#39;\n&amp;#39;,&amp;lt;2&amp;gt;,1:10]&lt;/span&gt;
&lt;span class="k"&gt;[@2,11:11=&amp;#39;\t&amp;#39;,&amp;lt;1&amp;gt;,2:0]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Format of this output: A list of tokens, where …&lt;/p&gt;</summary><content type="html">&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;grun&lt;span class="w"&gt; &lt;/span&gt;MyLexer&lt;span class="w"&gt; &lt;/span&gt;tokens&lt;span class="w"&gt; &lt;/span&gt;-tokens&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;&lt;span class="w"&gt; &lt;/span&gt;testfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;invokes the TestRig on the Lexer spilling out the tokens it recognized. Example stdout:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;[@0,0:9=&amp;#39;google.com&amp;#39;,&amp;lt;4&amp;gt;,1:0]&lt;/span&gt;
&lt;span class="k"&gt;[@1,10:10=&amp;#39;\n&amp;#39;,&amp;lt;2&amp;gt;,1:10]&lt;/span&gt;
&lt;span class="k"&gt;[@2,11:11=&amp;#39;\t&amp;#39;,&amp;lt;1&amp;gt;,2:0]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Format of this output: A list of tokens, where each is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;@tokenIndex,startIndex:endIndex=&amp;quot;spelling&amp;quot;,&amp;lt;tokenId&amp;gt;,?:?&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;or (if not default channel)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;@tokenIndex,startIndex:endIndex=&amp;quot;spelling&amp;quot;,&amp;lt;tokenId&amp;gt;,channel=channelId,lineNo:columnNo&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tokenIndex&lt;/code&gt; - in the whole output, starting at 0&lt;/li&gt;
&lt;li&gt;&lt;code&gt;startIndex&lt;/code&gt;,&lt;code&gt;endIndex&lt;/code&gt; - char/byte? in the input stream&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spelling&lt;/code&gt; - the literal text&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tokenId&lt;/code&gt; - can be found in the .tokens file&lt;/li&gt;
&lt;li&gt;&lt;code&gt;channelId&lt;/code&gt; - index of the channel(?)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lineNo&lt;/code&gt;,&lt;code&gt;columnNo&lt;/code&gt; - line, column of the token start&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tip: append &lt;code&gt;| column -t -s, | less&lt;/code&gt; to create a table delimited at &lt;code&gt;,&lt;/code&gt; and increase readability (and pass through less for paging).&lt;/p&gt;
&lt;p&gt;This does not output "sub-tokens", i.e. only the highest level, not the ones these are assembled from.&lt;/p&gt;</content><category term="misc"/><category term="en"/><category term="computer"/></entry><entry><title>grep -f</title><link href="https://blog.qrdn.de/2014/grep-f.html" rel="alternate"/><published>2014-11-02T00:00:00+01:00</published><updated>2016-07-21T20:40:38.346466+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2014-11-02:/2014/grep-f.html</id><content type="html">&lt;p&gt;&lt;code&gt;grep -f patterns.txt&lt;/code&gt; is horribly slow. Even &lt;code&gt;for l in cat patterns.txt ; do grep $l ; done&lt;/code&gt; is magnitudes faster.&lt;/p&gt;</content><category term="misc"/><category term="en"/><category term="TIL"/></entry><entry><title>Linking against a specific library version:</title><link href="https://blog.qrdn.de/2014/linking-against-a-specific-library-version.html" rel="alternate"/><published>2014-08-15T00:00:00+02:00</published><updated>2016-07-21T20:18:08.465012+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2014-08-15:/2014/linking-against-a-specific-library-version.html</id><summary type="html">&lt;p&gt;Linking against a specific library version: &lt;a href="http://stackoverflow.com/a/3393372"&gt;http://stackoverflow.com/a/3393372&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;old:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ld -lgif
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;new:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ld -l:libgif.so.1337
ld /lib/libgif.so.1337
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This came up when writing &lt;a href="https://github.com/azrdev/vlc-anigif"&gt;https://github.com/azrdev/vlc-anigif&lt;/a&gt;. At the time, Archlinux had only giflib4 in its repos, but I needed functions from …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Linking against a specific library version: &lt;a href="http://stackoverflow.com/a/3393372"&gt;http://stackoverflow.com/a/3393372&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;old:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ld -lgif
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;new:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ld -l:libgif.so.1337
ld /lib/libgif.so.1337
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This came up when writing &lt;a href="https://github.com/azrdev/vlc-anigif"&gt;https://github.com/azrdev/vlc-anigif&lt;/a&gt;. At the time, Archlinux had only giflib4 in its repos, but I needed functions from v5.&lt;/p&gt;</content><category term="misc"/><category term="en"/><category term="computer"/></entry><entry><title>TIL - htop graphs</title><link href="https://blog.qrdn.de/2014/til-htop-graphs.html" rel="alternate"/><published>2014-08-05T00:00:00+02:00</published><updated>2016-07-20T20:37:25.170718+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2014-08-05:/2014/til-htop-graphs.html</id><summary type="html">&lt;p&gt;Today I learned: &lt;a href="http://hisham.hm/htop/"&gt;htop&lt;/a&gt; can show value history of the meters in the top bar:
Go to configure them, then select any which has a [mode] in square brackets behind it - F4 toggles that mode, including live preview of plain number view, ascii-graphed history, and "LED" which are big ascii-arted …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Today I learned: &lt;a href="http://hisham.hm/htop/"&gt;htop&lt;/a&gt; can show value history of the meters in the top bar:
Go to configure them, then select any which has a [mode] in square brackets behind it - F4 toggles that mode, including live preview of plain number view, ascii-graphed history, and "LED" which are big ascii-arted numbers.&lt;/p&gt;</content><category term="misc"/><category term="TIL"/><category term="computer"/><category term="en"/></entry><entry><title>Geld ist Müll</title><link href="https://blog.qrdn.de/2014/geld-ist-mull.html" rel="alternate"/><published>2014-07-31T00:00:00+02:00</published><updated>2016-07-20T20:37:25.170718+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2014-07-31:/2014/geld-ist-mull.html</id><content type="html">&lt;p&gt;Hat so eine Papierverbrennungs/-recyclingsanlage eigentlich nen Modul um weggeschmissenes Papiergeld rauszufiltern? So den Geburtstagsumschlag mit 200€ von Oma und so? Oder ist das einfach weg?&lt;/p&gt;</content><category term="misc"/><category term="reallife"/><category term="de"/></entry><entry><title>TIL - Ofen</title><link href="https://blog.qrdn.de/2014/til-ofen.html" rel="alternate"/><published>2014-07-31T00:00:00+02:00</published><updated>2014-07-20T00:00:00+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2014-07-31:/2014/til-ofen.html</id><content type="html">&lt;p&gt;Heute gelernt: Wenn der Ofen nicht an geht, die Herdplatten aber tun, einfach mal die integrierte Uhr stellen - so als kleiner Schubs in Richtung "Strom ist wieder an, und wir bauen nicht mehr. Darfst weitermachen."&lt;/p&gt;
&lt;p&gt;m(&lt;/p&gt;</content><category term="misc"/><category term="reallife"/><category term="TIL"/><category term="de"/></entry><entry><title>Brick It!</title><link href="https://blog.qrdn.de/2014/brick-it.html" rel="alternate"/><published>2014-07-15T00:00:00+02:00</published><updated>2016-07-20T20:37:25.170718+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2014-07-15:/2014/brick-it.html</id><content type="html">&lt;p&gt;How to destroy your linux system… in multiple acts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Brick your shell:&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$EDITOR&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;/ol&gt;</content><category term="misc"/><category term="computer"/><category term="en"/></entry><entry><title>Lol, Unicode…</title><link href="https://blog.qrdn.de/2014/lol-unicode.html" rel="alternate"/><published>2014-07-15T00:00:00+02:00</published><updated>2016-07-20T20:37:29.347384+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2014-07-15:/2014/lol-unicode.html</id><content type="html">&lt;p&gt;Some Unicode findings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📳 U+1F4F3 : VIBRATION MODE&lt;/li&gt;
&lt;li&gt;🚂 U+1F682 : STEAM LOCOMOTIVE&lt;/li&gt;
&lt;li&gt;📢 U+1F4E2 : PUBLIC ADDRESS LOUDSPEAKER&lt;/li&gt;
&lt;li&gt;🍝 U+1F35D : SPAGHETTI&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="computer"/><category term="en"/></entry><entry><title>Migrating a router from DD-WRT to OpenWRT</title><link href="https://blog.qrdn.de/2013/migrating-a-router-from-dd-wrt-to-openwrt.html" rel="alternate"/><published>2013-05-01T00:00:00+02:00</published><updated>2023-01-12T00:28:39.570025+01:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2013-05-01:/2013/migrating-a-router-from-dd-wrt-to-openwrt.html</id><summary type="html">&lt;p&gt;How to exchange the DD-WRT firmware on your router by OpenWRT.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;my Router&lt;/em&gt;: TL-WR1043ND Version (DE)v1.0&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Old firmware&lt;/em&gt;: DD-WRT r19519&lt;/p&gt;
&lt;p&gt;&lt;em&gt;New firmware&lt;/em&gt;: OpenWRT "Attitude Adjustment" 12.09 Beta 2,
filename: &lt;code&gt;openwrt-ar71xx-generic-tl-wr1043nd-v1-squashfs-factory.bin&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;First revert back to the original TP-Link firmware[1]. Use the Web flash interface and a …&lt;/p&gt;</summary><content type="html">&lt;p&gt;How to exchange the DD-WRT firmware on your router by OpenWRT.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;my Router&lt;/em&gt;: TL-WR1043ND Version (DE)v1.0&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Old firmware&lt;/em&gt;: DD-WRT r19519&lt;/p&gt;
&lt;p&gt;&lt;em&gt;New firmware&lt;/em&gt;: OpenWRT "Attitude Adjustment" 12.09 Beta 2,
filename: &lt;code&gt;openwrt-ar71xx-generic-tl-wr1043nd-v1-squashfs-factory.bin&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;First revert back to the original TP-Link firmware[1]. Use the Web flash interface and a special image[2]. This took very long in my case, first the 200sec in the browser counted down, and then some minutes passed where nothing happened. Finally the Browser showed a confirmation dialog reading "Update failed", but the router was unresponsive (no ping, no dhcp). I did a powercycle on it, then it was up and running fine, with the original firmware reading:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="mf"&gt;3.11.5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;100427&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rel&lt;/span&gt;&lt;span class="mf"&gt;.61427&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;
&lt;span class="n"&gt;Hardware&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;
&lt;span class="n"&gt;WR1043N&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;00000000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then I simply put the openwrt /factory/ file from above into the Web flash formular and uploaded. Took some time, then OpenWRT was up and the LuCI Web interface asked to set a root password.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;[1]: got this instruction from &lt;a href="http://wiki.openwrt.org/doc/howto/generic.flashing#via.original.firmware"&gt;http://wiki.openwrt.org/doc/howto/generic.flashing#via.original.firmware&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[2]: from here &lt;a href="http://www.dd-wrt.com/phpBB2/viewtopic.php?t=85237"&gt;http://www.dd-wrt.com/phpBB2/viewtopic.php?t=85237&lt;/a&gt;&lt;/p&gt;</content><category term="misc"/><category term="en"/><category term="computer"/></entry><entry><title>quick'n'dirty PXE</title><link href="https://blog.qrdn.de/2013/quickndirty-pxe.html" rel="alternate"/><published>2013-02-17T00:00:00+01:00</published><updated>2016-07-21T20:10:10.311361+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2013-02-17:/2013/quickndirty-pxe.html</id><content type="html">&lt;p&gt;… on Archlinux:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class="w"&gt; &lt;/span&gt;-O&lt;span class="w"&gt; &lt;/span&gt;/var/ftpd/ipxe.pxe&lt;span class="w"&gt; &lt;/span&gt;http://releng.archlinux.org/pxeboot/
pacman&lt;span class="w"&gt; &lt;/span&gt;-S&lt;span class="w"&gt; &lt;/span&gt;tftp-hpa
sudo&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;.tftpd&lt;span class="w"&gt; &lt;/span&gt;-L
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;append to dnsmasq-config &lt;em&gt;on your dhcp-server&lt;/em&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="na"&gt;dhcp-boot&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/var/ftpd/ipxe.pxe,,&amp;lt;ip-of-tftp-server&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content><category term="misc"/><category term="en"/><category term="computer"/></entry><entry><title>E135 backlight</title><link href="https://blog.qrdn.de/2013/e135-backlight.html" rel="alternate"/><published>2013-02-04T00:00:00+01:00</published><updated>2016-07-21T20:23:00.777683+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2013-02-04:/2013/e135-backlight.html</id><summary type="html">&lt;p&gt;&lt;em&gt;Disclaimer: this article is rather old, and does not reflect linux' current state of brightness on the Thinkpad E135&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;first, it was fixed on maximum. no tool could change it, &lt;code&gt;/sys/class/backlight/acpi_video0/brightness&lt;/code&gt; could be written to and changed, but the backlight didn't. Tried the solutions in&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1"&gt;1 …&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Disclaimer: this article is rather old, and does not reflect linux' current state of brightness on the Thinkpad E135&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;first, it was fixed on maximum. no tool could change it, &lt;code&gt;/sys/class/backlight/acpi_video0/brightness&lt;/code&gt; could be written to and changed, but the backlight didn't. Tried the solutions in&lt;sup id="fnref:1"&gt;&lt;a class="footnote-ref" href="#fn:1"&gt;1&lt;/a&gt;&lt;/sup&gt;, excluding those which would just echo to above /sys/... file, until I found out Kernel parameter &lt;code&gt;acpi_backlight=vendor&lt;/code&gt; did the trick.&lt;/p&gt;
&lt;p&gt;Now &lt;code&gt;/sys/class/backlight&lt;/code&gt; no longer contained an &lt;code&gt;acpi_video0&lt;/code&gt; directory, but a &lt;code&gt;thinkpad_screen&lt;/code&gt; directory, that has the same brightness files, which change on using the Fn keys for brightness change.&lt;/p&gt;
&lt;p&gt;If I write to them their content changes, but not the backlight, but at least the Fn key combos work.&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;a href="http://forums.opensuse.org/english/get-technical-help-here/laptop/480572-brightness-keys-f7-f8-thinkpad-edge-e535-trinity-a8-4500m-radeon-7640g-12-2-64-a-2.html#post2504740"&gt;http://forums.opensuse.org/english/get-technical-help-here/laptop/480572-brightness-keys-f7-f8-thinkpad-edge-e535-trinity-a8-4500m-radeon-7640g-12-2-64-a-2.html#post2504740&lt;/a&gt;&amp;#160;&lt;a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="misc"/><category term="en"/><category term="E135"/><category term="linux"/></entry><entry><title>KMix with multiple identically named master channels</title><link href="https://blog.qrdn.de/2013/kmix-with-multiple-identically-named-master-channels.html" rel="alternate"/><published>2013-02-04T00:00:00+01:00</published><updated>2016-07-21T20:35:14.078265+02:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2013-02-04:/2013/kmix-with-multiple-identically-named-master-channels.html</id><summary type="html">&lt;p&gt;On the Thinkpad Edge E135, ALSA recognizes 2 sound cards (0 and 1), of which #1 is the analog one I want to use and control - but not the default one. alsamixer can control it via selecting the entries in its F6 menu, but still it's not the default one …&lt;/p&gt;</summary><content type="html">&lt;p&gt;On the Thinkpad Edge E135, ALSA recognizes 2 sound cards (0 and 1), of which #1 is the analog one I want to use and control - but not the default one. alsamixer can control it via selecting the entries in its F6 menu, but still it's not the default one. Creating this&lt;sup id="fnref:2"&gt;&lt;a class="footnote-ref" href="#fn:2"&gt;1&lt;/a&gt;&lt;/sup&gt; &lt;code&gt;asound.conf&lt;/code&gt; fixes that.&lt;/p&gt;
&lt;p&gt;Now KMix shows 2 open tabs (both with the label "HD Audio Generic"), one for each card. Unfortunately it defaults to control the digital output with its control-panel icon, too, and worse, the dialog to change that "Master Channel" gets confused by the identical names and just doesn't display any channel, so you can't change it. Fix: Stop KMix (dunno if that's really neccessary, but probably is), open &lt;code&gt;~/.kde4/share/config/kmixrc&lt;/code&gt; and set the &lt;code&gt;MasterMixer=&lt;/code&gt; and &lt;code&gt;MasterMixerDevice=&lt;/code&gt; entries in the &lt;code&gt;[Global]&lt;/code&gt; section. &lt;code&gt;MasterMixer&lt;/code&gt; specifies an equivalent to the ALSA card, but apparently 1-indexed (so here it was "ALSA::HD-Audio_Generic:1" and I set it to "ALSA::HD-Audio_Generic:2"), &lt;code&gt;MasterMixerDevice&lt;/code&gt; tells the channel which should be controlled as Master ("IEC958:0" here, changed to "Master:0"). Simply look at the end of the section names and compare with the channels displayed in KMix beyond each tab (i.e. card), if you're unsure what entries to set.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: In later versions of KMix (IIRC around 4.15) this stopped to work, so I stayed on that version&lt;/em&gt;&lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;&lt;code&gt;/etc/asound.conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;defaults.pcm.card 1
defaults.pcm.device 0
defaults.ctl.card 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 1 in the text"&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content><category term="misc"/><category term="en"/><category term="E135"/><category term="linux"/><category term="KDE"/></entry><entry><title>32bit wine-prefixes</title><link href="https://blog.qrdn.de/2012/32bit-wine-prefixes.html" rel="alternate"/><published>2012-12-01T00:00:00+01:00</published><updated>2023-01-12T00:28:36.346666+01:00</updated><author><name>dragon</name></author><id>tag:blog.qrdn.de,2012-12-01:/2012/32bit-wine-prefixes.html</id><summary type="html">&lt;p&gt;tl;dr: &lt;code&gt;WINEARCH=win32&lt;/code&gt; creates a 32bit prefix, to confirm check if &lt;code&gt;$WINEPREFIX/drive_c/Program Files (x86)&lt;/code&gt; exists&lt;/p&gt;
&lt;p&gt;A &lt;a href="https://winehq.org/"&gt;wine&lt;/a&gt; prefix is a directory containing a lot of the files wine needs to simulate a windows installation. The "standard" wine prefix &lt;code&gt;~/.wine&lt;/code&gt; is used whenever you don't specify a different …&lt;/p&gt;</summary><content type="html">&lt;p&gt;tl;dr: &lt;code&gt;WINEARCH=win32&lt;/code&gt; creates a 32bit prefix, to confirm check if &lt;code&gt;$WINEPREFIX/drive_c/Program Files (x86)&lt;/code&gt; exists&lt;/p&gt;
&lt;p&gt;A &lt;a href="https://winehq.org/"&gt;wine&lt;/a&gt; prefix is a directory containing a lot of the files wine needs to simulate a windows installation. The "standard" wine prefix &lt;code&gt;~/.wine&lt;/code&gt; is used whenever you don't specify a different one in the environment variable &lt;code&gt;$WINEPREFIX&lt;/code&gt;. 
Now like a normal windows installation, the environment (e.g. the provided libraries) may be of either 32 or 64-bitness. Wine copies these libraries into the prefix when it is created, so you have to specify the desired bitness at that point, using the &lt;code&gt;$WINEARCH&lt;/code&gt; environment variable. To create a 32bit prefix, just execute wine with &lt;code&gt;$WINEPREFIX&lt;/code&gt; set, e.g.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nv"&gt;WINEARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;win32&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;WINEPREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.wine_32bit&lt;span class="w"&gt; &lt;/span&gt;winecfg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Finally, to check what bitness a given prefix has, just check if there is a directory &lt;code&gt;drive_c/Program Files (x86)&lt;/code&gt; in the prefix - if there is, it's a 64bit prefix.&lt;/p&gt;</content><category term="misc"/><category term="en"/><category term="computer"/></entry></feed>