<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Techbotch</title><link href="https://techbotch.org/" rel="alternate"/><link href="https://techbotch.org/feeds/all.atom.xml" rel="self"/><id>https://techbotch.org/</id><updated>2026-03-10T00:00:00+01:00</updated><entry><title>Audio Dummy Load</title><link href="https://techbotch.org/blog/audio-dummy-load/index.html" rel="alternate"/><published>2026-03-10T00:00:00+01:00</published><updated>2026-03-10T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2026-03-10:/blog/audio-dummy-load/index.html</id><summary type="html">&lt;p&gt;Wenn man einen defekten Audio-Verstärker testet und repariert, hat man nicht
immer Boxen zur Hand (Repair Cafe), oder will einfach den Krach nicht im Raum
haben, wenn man die maximale Leistung testet (und Eure Lautsprecher halten das
vermutlich auch nicht lange aus). Nun könnte man auf die Idee kommen, die …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wenn man einen defekten Audio-Verstärker testet und repariert, hat man nicht
immer Boxen zur Hand (Repair Cafe), oder will einfach den Krach nicht im Raum
haben, wenn man die maximale Leistung testet (und Eure Lautsprecher halten das
vermutlich auch nicht lange aus). Nun könnte man auf die Idee kommen, die
Lautsprecher einfach ersatzlos wegzulassen, aber erstens kann der Verstärker
dann nicht beweisen, wieviel Leistung er bringt, da er ja ohne Last läuft und
zweitens nehmen es manche Verstärkertypen &lt;em&gt;sehr&lt;/em&gt; übel, wenn Sie ihre Energie
nirgends loswerden (Röhrenverstärker!).&lt;/p&gt;
&lt;p&gt;Dafür gibt es eine elegante Lösung – eine Dummy Load, die man anstatt der
Lautsprecher anschließt.  Was nach High-Tech klingt ist allerdings denkbar
simpel: Haushaltsübliche Lautsprecher haben eine Impedanz von 8Ω oder in
selteneren Fällen auch mal 4Ω.  Alles was wir brauchen ist also ein
entsprechender Widerstand pro Kanal, eine Klemme für das Lautsprecherkabel und
idealerweise noch Anschlüsse für Oszilloskop und/oder Multimeter für Messungen.&lt;/p&gt;
&lt;h1&gt;Dummy Load planen&lt;/h1&gt;
&lt;p&gt;Im Netz überbieten sich die Audio-Bastler mit elaborierten Designs, die neben
8Ω und 4Ω auch noch andere Werte bieten, eine Durchschaltung für dann
angeschlossene Lautsprecher, einen oder mehrere Lüfter, eine
Temperaturüberwachung und einen Außenbordmotor mitbringen. So aufwändig brauche
ich es nicht. Ich stelle mir folgendes Features vor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2x 8Ω Last&lt;/li&gt;
&lt;li&gt;Montage auf Alugehäuse oder -platte für gute Wärmeabfuhr&lt;/li&gt;
&lt;li&gt;2x 2 Polklemmen für den Anschluss der Lautsprecherkabel&lt;/li&gt;
&lt;li&gt;Eine BNC Buchse für's Oszilloskop&lt;/li&gt;
&lt;li&gt;Ein DPDT Schalter zum umschalten der BNC Buchse von links auf rechts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Woher bekommen wir nun unsere 8Ω Impedanz? Ganz einfach: ein Drahtwiderstand.
Hifi Verstärker haben meist irgendwo zwischen 10 und ein paar hundert Watt
Sinusleistung pro Kanal (maximal).  Typische Werte dürfen wohl eher bis 200W
gehen und niemand will im Wohnzimmer die Lautstärke auf 11 Stellen. D.h. ein
200W Lastwiderstand sollte dicke reichen. Auch wollen wir den Verstärker da ja
nicht stundenlang dran betreiben, sondern immer nur kurz eine Messung machen.
Auch werden wir nur selten für die Messung voll aufdrehen. Also sollten wir
thermisch im grünen Bereich sein.  Das einzige was man mit diesem Setup nicht
so gut machen kann, sind Langzeitmessungen bei hoher Leistung – z.B. um
intermittierende Ausfälle zu diagnostizieren.&lt;/p&gt;
&lt;p&gt;Also habe ich je ein Paar solcher Widerstände beim fernöstlichen Fachversand für
Nerdbedarf geordert:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/audio-dummy-load/load-resistor.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Natürlich höre ich schon den Aufschrei aller audiophilen Leser, die auf die
Gefahr einer induktiven Komponente hinweisen und bezweifeln, dass die Impedanz
über den Frequenzbereich exakt genug sei, bevor sie sich wieder der
feinstofflichen Optimierung ihrer polaren 30mm² Lautsprecherkabel mit
Sonnenwindabschirmung zuwenden. Um auch denen Genüge zu tun, schreiten wir zum
Äußersten und nehmen eine Impedanzkurve der beiden Widerstände auf
(&lt;a href="https://github.com/philpagel/ET44.py/tree/main/examples/sweep"&gt;ET4410&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/audio-dummy-load/impedance-curve-8ohm-resistor1.png" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/audio-dummy-load/impedance-curve-8ohm-resistor2.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Ich würde mal behaupten, dass das eine super flache Impedanzkurve ist –
jedenfalls im Audio-Frequenzbereich bis 20kHz. Hier finden wir 0.2% Abweichung
zwischen der kleinsten und größten Impedanz. Und selbst bei 100kHz weicht die
Impedanz um gerade mal 3% vom Wert bei 100Hz ab. Ich glaube kaum, dass echte
Lautsprecher da mithalten können. Und ich habe auch Evidenz dafür – so sieht
z.B. die Impedanzkurve meiner Lautsprecher in der Bastelhöhle (Teufel Kombi 11)
aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/audio-dummy-load/speaker-impedance.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Nun mögen das keine high-end Boxen sein, aber ich finde den Unterschied dennoch 
beeindruckend.&lt;/p&gt;
&lt;h1&gt;Aufbau&lt;/h1&gt;
&lt;p&gt;Es ist zwar etwas übertrieben, einen Schaltplan für eine simple Dummy Load zu
zeichnen, aber für Euch tue ich bekanntlich alles:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/audio-dummy-load/schematics.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Der Schalter dient dazu, den Oszilloskop-Port zwischen den beiden Kanälen
umzuschalten. Das finde ich besser, als zwei separate BNC Buchsen, weil man die
negative Seite der beiden Kanäle bei vielen Verstärkern &lt;em&gt;nicht&lt;/em&gt;
zusammenschalten darf. Das ist &lt;em&gt;kein&lt;/em&gt; gemeinsamer Ground! Und genau das täte
man, wenn man zwei Oszilloskopkanäle gleichzeitig anklemmt. Also außer man hat
ein Oszi mit untereinander vollständig isolierten und nicht geerdeten Kanälen.
Hab ich aber nicht. Manche Verstärker finden gemeinsamen Ground ok, aber manche
reagiern da allergisch drauf. Im Zweifel kann man prüfen, ob die schwarzen
Polklemmen im Verstärker verbunden sind (also Durchgang haben), aber so finde
ich es sicherer und ich kann gut damit leben, nicht zwei Kanäle auf einmal sehen
zu können.&lt;/p&gt;
&lt;p&gt;Zunächst dachte ich, ich könnte die Widerstände auf einen großen Kühlkörper
schrauben. Das hätte perfekt gepasst und stylish ausgesehen, aber dann hätte
ich nicht so recht gewusst, wie und wo ich die Buchsen befestigen soll und so
habe ich ein Alu-Festplattengehäuse genommen, das ich noch im Vorratsstapel
hatte.&lt;/p&gt;
&lt;p&gt;Zunächst mal Löcher zur Befestigung von Widerständen und diversen Buchsen
bohren. Damit das halbwegs exakt wird, habe ich zunächst eine Bohrschablone in
Inkscape erstellt, ausgedruckt und mit Klebestift auf das Gehäuse geklebt. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/audio-dummy-load/drilling-templates.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Ankörnen, bohren und schließlich die Schablone mit warmem Wasser ablösen.  Da
die Widerstände auf der Außenseite montiert sind, brauchen wir nun noch Löcher
zur Kabeldurchführung. In diese pfriemle ich dann so Gummi-Kabeldurchführungen
rein, damit die Isolierung der Kabel nicht beschädigt wird.&lt;/p&gt;
&lt;p&gt;Dann ordentlich Wärmeleitpaste unter die Widerstände schmieren und das Ganze
auf das Alugehäuse schrauben, die diversen Buchsen in die Frontplatte einbauen
und alles verkabeln. Fertig:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/audio-dummy-load/dummy-load.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Ich finde das sieht gut aus. Die Frontplatte ist leider nur eingeclipst und
dadurch etwas wackelig.  Vielleicht spendiere ich der später noch etwas Kleber
um den Rand.&lt;/p&gt;
&lt;h1&gt;Testfahrt&lt;/h1&gt;
&lt;p&gt;Das muss natürlich sofort ausprobiert werden! Also her mit dem nächstgelegenen
Verstärker (Yamaha S202D Stereo-Receiver – ein Mistding! Kauft den nicht!) und
an die Load anklemmen. Das Oszilloskop anschließen und den Funktionsgenerator
an den Verstärker klemmen (1kHz Sinuswelle, 300mVpp) und schon kann es
losgehen.  Aber halt – mit welchen Spannungen ist da in etwa zu rechnen?
Machen wir mal eine Überschlagsrechnung. Angenommen der Verstärker liefert 100W
pro Kanal:&lt;/p&gt;
&lt;div class="math"&gt;$$ U = \sqrt{P \cdot R} $$&lt;/div&gt;
&lt;div class="math"&gt;$$ U = \sqrt{100W \cdot 8Ω} $$&lt;/div&gt;
&lt;div class="math"&gt;$$ U = 28.28V $$&lt;/div&gt;
&lt;p&gt;Also wären ca. 10V/Div angebracht. Da wir aber zunächst nicht volle Pulle
aufdrehen (ich starte mal auf Stufe 11 von 99), werden wir dann die
Sensitivität ordentlich erhöhen müssen, um das Signal schön zu sehen. Die
folgenden Abbildungen zeigen den linken Kanal. Da der rechte exakt genauso
aussieht spare ich mir den hier. Bei einer Reparatur kann das aber natürlich
völlig anders sein.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/audio-dummy-load/scope-1V.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wir erkennen klar unser Sinus-Signal, wenn auch deutlich von hochfrequenten
Störungen überlagert – willkommen in einer Welt voller Schaltnetzteile. Als
nächstes erhöhen wir nun schrittweise die Amplitude am Signalgenerator und
beobachten den Output. Bei &lt;span class="math"&gt;\(6.4 V_{pp}\)&lt;/span&gt; bzw. &lt;span class="math"&gt;\(2.26 V_{rms}\)&lt;/span&gt; Eingangssignal
fängt es an zu clippen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/audio-dummy-load/scope-input-clipping.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Nun wieder zurück auf einen moderateren Signalpegel (2Vpp) und dann drehen wir
die Lautstärke am Verstärker so lange hoch, bis erneut Clipping zu sehen ist:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/audio-dummy-load/scope-max-volume.png" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/audio-dummy-load/scope-output-clipping.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das ist oberhalb von Lautstärke-Stufe 94 (von 99) der Fall. D.h. Dann wollen
wir mal versuchen, die maximal Leistung ohne Clipping zu berechnen. Zunächst
fällt auf, dass ich ein Depp bin, denn ich habe das Oszilloskop auf &lt;em&gt;10x Probe&lt;/em&gt;
eingestellt, aber in Wahrheit ein simples Koaxkabel verwendet. Kurz: alle
Spannungen betragen nur ein Zehntel des angezeigten Werts.  Also zeigt der
Screenshot 20 V/div (nicht 200V/div) und unser Signal hat ca. &lt;span class="math"&gt;\(4.3 \cdot 20V =
86 Vpp\)&lt;/span&gt;. Das wiederum entspricht &lt;span class="math"&gt;\(86 V_{pp} / 2\sqrt{2} = 30.4 V_{rms}\)&lt;/span&gt;.  Somit
hat der Verstärker pro Kanal eine maximal nutzbare Leistung von&lt;/p&gt;
&lt;div class="math"&gt;$$30.4 V^2 /8Ω = 115 W$$&lt;/div&gt;
&lt;p&gt;Das entspricht verblüffend exakt der Angabe des Herstellers – hier der Auszug
aus dem Handbuch:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/audio-dummy-load/manual-power.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Leider ist das dort nur für 4Ω spezifiziert, aber offenbar gilt es auch bei 8Ω.&lt;/p&gt;
&lt;p&gt;Der Lastwiderstand hat sich bei der kleinen Messung übrigens nur minimal
aufgeheizt – vielleicht handwarm ist er nun.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Ich finde die Dummy-Load ist gut gelungen. Sie hat ein handliches Format,
keinen Schnickschnack, und alles was ich brauche. Sollte ich irgendwann
doch mal eine 4Ω Version brauchen, baue ich einfach eine zweite – ich glaube
aber nicht, dass das passieren wird.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Eaton USV ist tot</title><link href="https://techbotch.org/blog/eaton-ups-dead/index.html" rel="alternate"/><published>2026-03-04T00:00:00+01:00</published><updated>2026-03-04T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2026-03-04:/blog/eaton-ups-dead/index.html</id><summary type="html">&lt;p&gt;In meinem kleinen Server- und Netzwerkschränkchen lebt neben Fritzbox,
Homeserver, Switch und Patchpanel auch eine unterbrechungsfreie Stromversorgung
für den Server. Meine ist eine &lt;a href="https://techbotch.org/blog/ups-setup/index.html"&gt;Eaton Ellipse
850&lt;/a&gt; mit der ich immer sehr
zufrieden war. Kürzlich fing sie an rumzuzicken, so dass ich sie zunächst außer
Betrieb genommen habe und als ich …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In meinem kleinen Server- und Netzwerkschränkchen lebt neben Fritzbox,
Homeserver, Switch und Patchpanel auch eine unterbrechungsfreie Stromversorgung
für den Server. Meine ist eine &lt;a href="https://techbotch.org/blog/ups-setup/index.html"&gt;Eaton Ellipse
850&lt;/a&gt; mit der ich immer sehr
zufrieden war. Kürzlich fing sie an rumzuzicken, so dass ich sie zunächst außer
Betrieb genommen habe und als ich sie mal in Ruhe testen wollte, ließ sie sich
garnicht mehr einschalten – seltsam.&lt;/p&gt;
&lt;p&gt;Als erstes bauen wir den Akku aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/eaton-ups-dead/akku.jpg" class="Large" alt="Ausgebauter Bleiakku Typ DJW12.9.0"&gt;&lt;/p&gt;
&lt;p&gt;Ein 12V 9.0Ah AGM Bleiakku also. Die USV ist inzwischen fast 5 Jahre lang im
Dauerbetrieb gewesen – insofern wäre es dem Akku nicht zu verdenken, wenn er
langsam schwächelt. Also messen wir als erstes mal die Leerlaufspannung. Alles
unter 10V gilt als Kandidat für einen Austausch.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/eaton-ups-dead/Leerlaufspannung.jpg" class="Medium" alt="Multimeter shows 0.170V DC"&gt;&lt;/p&gt;
&lt;p&gt;Oh – 0.17V sind &lt;em&gt;sehr&lt;/em&gt; wenig. Da dürfte sich jeder Versuch, den Akku
wiederzubeleben erübrigen und auch die weitere Fehlersuche wird vertagt. Also
bestellen wir einen neuen – 35€ inkl. Versand.  Am nächsten Tag war er da.
Leider völlig unzureichend verpackt: Der ca. 3kg schwere Akku flog ohne jede
Polsterung in einem riesigen Karton rum! Merke: sowas nicht bei Böttcher kaufen
(Wobei man da eigentlich eh garnicht kaufen sollte). Der neue Akku hat eine
Leerlaufspannung von 12.8V. Das ist jetzt nicht der Brüller, aber ok. Also
einbauen und Schraube wieder festziehen und USV ans Stromnetz anschließen.&lt;/p&gt;
&lt;p&gt;Dann drücken wir mal den Einschaltknopf und hoffen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/eaton-ups-dead/working-again.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Na, das sieht doch schon viel besser aus! Also nehmen wir die USV wieder in
Betrieb – da wird sich das Serverchen freuen.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Ich gebe zu, das war diesmal eher banal, aber ich fand es insofern doch nützlich,
als ich eigentlich nicht erwartet hätte, dass ein toter Akku die USV komplett
lahmlegt. Ich hätte gedacht, dass sie angeht und über den toten Akku meckert. &lt;/p&gt;
&lt;p&gt;Again what learned...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>ASA Component Tester</title><link href="https://techbotch.org/blog/asa-component-tester/index.html" rel="alternate"/><published>2026-02-20T00:00:00+01:00</published><updated>2026-02-20T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2026-02-20:/blog/asa-component-tester/index.html</id><summary type="html">&lt;p&gt;Vor vielen Jahren hatte ich mir mal einen einfachen
&lt;a href="https://techbotch.org/blog/component-tester/index.html"&gt;Komponententester&lt;/a&gt; gebaut.
Der erzeugte via Trafo eine sinusförmige Wechselspannung von ein paar Volt und
ans Oszilloskop angeschlossen konnte man damit Strom-Spannungskurven von
Bauteilen aufnehmen. Viele alte analoge Oszilloskope hatten sowas früher
eingebaut.&lt;/p&gt;
&lt;p&gt;Auf der anderen Seite gibt es richtig aufwändige Curve-Tracer …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Vor vielen Jahren hatte ich mir mal einen einfachen
&lt;a href="https://techbotch.org/blog/component-tester/index.html"&gt;Komponententester&lt;/a&gt; gebaut.
Der erzeugte via Trafo eine sinusförmige Wechselspannung von ein paar Volt und
ans Oszilloskop angeschlossen konnte man damit Strom-Spannungskurven von
Bauteilen aufnehmen. Viele alte analoge Oszilloskope hatten sowas früher
eingebaut.&lt;/p&gt;
&lt;p&gt;Auf der anderen Seite gibt es richtig aufwändige Curve-Tracer, die mit
verschiedenen Spannungen und Frequenzen arbeiten und noch so manch anderen
Trick auf Lager haben. Das sind in der Regel riesige uralte analoge Kisten die
sicher viel Spaß machen, aber selten sind und entsprechen immer noch einen Arm
und ein Bein kosten. Also eher nicht. Auf der anderen Seite gibt es deutlich
kompaktere Geräte, wie das &lt;a href="https://w140.com/tekwiki/wiki/TR210"&gt;Tektronix TR210&lt;/a&gt;, 
die man dann wiederum an sein Oszi klemmt.&lt;/p&gt;
&lt;p&gt;Solche Dinger nennt man auch gerne &lt;em&gt;ASA Component Tester&lt;/em&gt;, wobei ASA für
&lt;em&gt;Analog Signature Analysis&lt;/em&gt; steht. Aber auch der Name &lt;em&gt;Huntron Tracker&lt;/em&gt;
ist immer wieder zu lesen.&lt;/p&gt;
&lt;p&gt;Und was kann man nun damit machen? Zum einen sind sie nützlich, um Bauteile aus
der Grabbelkiste zu charakterisieren – z.B. um zu prüfen, ob sie noch OK sind,
oder auch um gefälschte Bauteile zu entlarven. Zum anderen kann man sowas aber
auch verwenden, um bei Reparaturen im stromlosen Schaltkreis herum zu messen,
um defekte Bauteile aufzuspüren. &lt;/p&gt;
&lt;p&gt;Manche Geräte haben auch einen zweiten Kanal, um die Signatur eines
fragwürdigen Bauteils mit einem Referenzbauteil zu vergleichen. Das alles
klingt praktisch und so habe ich beschlossen ein bisschen aufzurüsten.  Also
habe ich so einen "ASA VI Curve tester" für eine guten Fuffi in Fernost
bestellt. Mein Exemplar hat zwei Kanäle, die es alternierend am externen Oszi
anzeigen kann. Ein Handbuch lag nicht bei, aber ich konnte soetwas wie eine
Anleitung online herunterladen.  Das taugt allerdings garnichts und so empfehle
ich sich das Manual für das Tektronix TR210 zu besorgen. Zwar kann die billige
China-Kopie längst nicht alles, was das Vorbild zu bieten hatte, (obwohl es
auch einen fast exakten Nachbau gibt), aber mir hat das Tek Handbuch sehr
geholfen die Funktionen des Geräts zu verstehen und obendrein enthält es
haufenweise Referenzgraphiken von intakten und defekten Bauteilen.&lt;/p&gt;
&lt;p&gt;Und so sieht mein neues Spielzeug aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/curve-tracer.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Als erstes habe ich es natürlich geöffnet:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/pcb.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Die Platine ist übersichtlich und wirkt ganz ok verarbeitet. Leider sind alle
Typenbezeichungen von ICs weggelasert oder -geschliffen, was ich ziemlich lustig
finde, denn zum einen sind die Chinesen doch die Weltmeister des
Produktplagiats und zum anderen ist so ein Curve-Tracer nun auch nicht
Rocket-Science. Was soll das also?&lt;/p&gt;
&lt;p&gt;Egal – wir wollen das Teil nun mal ein bisschen ausprobieren und herausfinden,
wie es zu bedienen ist und was es so leisten kann.&lt;/p&gt;
&lt;h1&gt;Funktionsübersicht&lt;/h1&gt;
&lt;p&gt;Mein Tester hat zwei Kanäle: A und B, die sich eine gemeinsame Masse (COM)
teilen. Die Blaue Buchse, die mit &lt;strong&gt;G&lt;/strong&gt; beschriftet ist, stellt einen
Puls-Ausgang zum schalten von Transistoren und MOSFETs dar.&lt;/p&gt;
&lt;p&gt;Also schauen wir uns mal genauer an, was das Gerät so treibt. Mein Multimeter
sagt, dass die Spannung zwischen &lt;em&gt;A&lt;/em&gt; und  &lt;em&gt;COM&lt;/em&gt; 3.3V AC beträgt. Wenn es sich
um eine sinusförmige Wechselspannung handelt dann wären das 4.67V Peak-to-Peak.
Mal mit dem Oszilloskop nachschauen:&lt;/p&gt;
&lt;p&gt;Zunächst einfach open circuit, also ohne irgendwas am Testausgang:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/open-circuit-2channel.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und dann nehmen wir einen Widerstand und drehen ein bisschen am Poti des
Testers bis die beiden Signale eine ähnliche Größe haben:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/resistor-2channel.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und dann das gleiche mit einem Kondensator:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/capacitor-2channel.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Man kann schön erkennen, dass Kanal 2 mit Kondensator eine Phasenverschiebung
erfährt.&lt;/p&gt;
&lt;p&gt;Mit den Tasten in der oberen Reihe wählt man die Messfrequenz aus. Welche das 
genau sind habe ich mal mit meinem Multimeter gemessen:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Taste&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Freq&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Low&lt;/td&gt;
&lt;td style="text-align: left;"&gt;44 Hz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Med 1&lt;/td&gt;
&lt;td style="text-align: left;"&gt;350 Hz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;Med 2&lt;/td&gt;
&lt;td style="text-align: left;"&gt;2.1 kHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;High&lt;/td&gt;
&lt;td style="text-align: left;"&gt;13.8 kHz&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Wie Ihr Euch vielleicht erinnert, wird das &lt;em&gt;device under test&lt;/em&gt; (DUT) in Serie
zu einem internen Widerstand geschaltet (in unserem Fall ein Poti), so dass ein
Spannungsteiler entsteht. Hier das vereinfachte Schaltbild des Tektronix TR210
Tracers (aus dessen Manual kopiert) dem der chinesische nachempfunden sein
dürfte:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/schaltplan.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Mit dem Oszilloskop wird nun die Spannung über dem DUT auf der X-Achse gemessen
und auf der Y-Achse die Spannung über einem internen Widerstand, der als
Stromsensor dient (im Schaltplan als Amperemeter dargestellt).&lt;/p&gt;
&lt;p&gt;Der Taster rechts schaltet das Gerät in den alternierenden Modus bei dem abwechselnd
das Signal für Kanal A bzw. B angezeigt wird. Die Geschwindigkeit mit der der
Wechsel Erfolg wird mit dem rechten Poti eingestellt.&lt;/p&gt;
&lt;p&gt;Ganz oben befinden sich dann die Anschlüsse für die Spannungsversorgung (24V
DC) sowie für die beiden Oszilloskop-Kanäle (X/Y).&lt;/p&gt;
&lt;p&gt;Nun, da wir halbwegs verstanden haben, was die Bedienelemente tun, beschriften
wir mal alles:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/labeling.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Let's test!&lt;/h1&gt;
&lt;p&gt;Nun ist es an der Zeit, mal ein paar herumfliegende Bauteile zu testen, um ein
Gefühl dafür zu bekommen, wie das so aussieht. &lt;/p&gt;
&lt;p&gt;Also Oszilloskop anschließen und alles einstellen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kanal 1 auf X&lt;/li&gt;
&lt;li&gt;Kanal 2 auf Y, &lt;/li&gt;
&lt;li&gt;DC-coupling&lt;/li&gt;
&lt;li&gt;1x probe, &lt;/li&gt;
&lt;li&gt;1V/div&lt;/li&gt;
&lt;li&gt;timebase 1ms/div&lt;/li&gt;
&lt;li&gt;und dann in den XY-Modus schalten.&lt;/li&gt;
&lt;li&gt;Damit die Bilder so aussehen, wie im Handbuch des TR201 beschrieben müssen
  beide Kanäle invertiert werden. Das hatte ich bei den ersten Messungen
  vergessen, aber sofort bei der Diode bemerkt und korrigiert. Aber letztlich egal –
  man kann auch einfach die Messspitzen vertauschen...&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Grundlegende Bedienung beim Test&lt;/h2&gt;
&lt;p&gt;Im Prinzip ist Testen super simpel: einfach mit den beiden Messspitzen über
einer zu testenden Komponente Kontakt herstellen und auf den Bildschirm
schauen. Wie bei einem Multimeter. Je nachdem, was wir für ein Bauteil vor uns
haben und was das Oszi anzeigt kann es Sinn machen, dann den Frequenzbereich zu
ändern, oder den interen Widerstand des Tester zu verstellen, damit man eine
vernünftige Kurve zu sehen bekommt. Und so tastet man sich Bauteil für Bauteil 
durch die Schaltung bis man etwas auffälliges findet.&lt;/p&gt;
&lt;p&gt;Im folgenden sehen wir verschiedene typische "analoge Signaturen" typischer Bauteile.
Mehr davon gibt es in den Links, v.a. dem Manual des TR210.&lt;/p&gt;
&lt;h2&gt;Open Circuit – nix angeschlossen&lt;/h2&gt;
&lt;p&gt;Als erstes wieder open circuit. Diesmal aber korrekt im XY-Modus und bei 
Frequenz &lt;em&gt;Med 1&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/open-circuit-med1.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Wir bekommen eine schöne horizontale Line, da die volle Spannung anliegt und
kein Strom fließen kann. Wechseln wir aber auf den Frequenzbereich &lt;em&gt;High&lt;/em&gt; und
drehen die Dämpfung maximal auf sehen wir eine deutliche kapazitive Komponente:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/open-circuit-high-max-attenuation.png" class="Large"&gt;&lt;/p&gt;
&lt;h2&gt;Kurzschluss&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/short-circuit.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Diesmal bekommen wir eine vertikale Line, denn die Spannung bricht über dem
DUT augenblicklich zusammen, de es keinen Widerstand hat – dafür fließt der
Strom frei.&lt;/p&gt;
&lt;h2&gt;Widerstand&lt;/h2&gt;
&lt;p&gt;67kΩ, F=&lt;em&gt;Med1&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/resistor-67k-med1.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;67kΩ, F=&lt;em&gt;Med1&lt;/em&gt;, maximale Dämpfung:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/resistor-67k-med1-attenuated.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;67kΩ, F=&lt;em&gt;High&lt;/em&gt;, maximale Dämpfung:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/resistor-67k-high-attenuated.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Zunächst sieht es eigentlich nach &lt;em&gt;open circuit&lt;/em&gt; aus, aber wenn man den
Ausgangswiderstand des Tester hochdreht (Dämpfung), erkennt man, dass die Line
eine klare Steigung hat. Geht man dann auf die höchste Messfrequenz addiert sich die 
schon anfangs erwähnte kapazitive Komponente.&lt;/p&gt;
&lt;p&gt;Und hier bekommen wir eine diagonale Line, wie es sich für einen ohmschen 
Widerstand gehört: der Strom steigt proportional zur Spannung.&lt;/p&gt;
&lt;h2&gt;Dioden&lt;/h2&gt;
&lt;p&gt;Zunächst mal eine stinknormale Silizum-Gleichrichterdiode (GP10Y):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/diode-med1-upside-down.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Oops – das sieht irgendwie verkehrtherum aus im Vergleich zu dem Bild, das ich
mal gelernt hatte. Und siehe da: ich hatte vergessen dass man die Kanäle invertieren muss.
Schnell korrigiert und schon erscheint das gewohnte Bild:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/diode-med1.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Als nächstes versuchen wir mal eine rote LED auf Frequenz &lt;em&gt;Low&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/LED-low.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und eine 3.0V Zener Diode:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/zener-3V.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Nehmen wir eine 3.9V Zener Diode wird es am linken rand schon knapp:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/zener-3.9V.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und bei einer 5.1V Zener Diode nehmen verpassen wir das spannendste:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/zener-5_1V.png" class="Large"&gt;&lt;/p&gt;
&lt;h2&gt;Kondensatoren&lt;/h2&gt;
&lt;p&gt;47µF Elko bei ~40Hz:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/asa-component-tester/capacitor-47µF.png" class="Large"&gt;&lt;/p&gt;
&lt;h1&gt;Alternierender Modus&lt;/h1&gt;
&lt;p&gt;Dieses Gerät gibt es in zwei verschiedenen Varianten:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Wechselanzeige: d.h. das Gerät kann zwischen der Anzeige der beiden Kanäle
   hin- und herschalten und man kann die Wechselgeschwindigkeit einstellen&lt;/li&gt;
&lt;li&gt;Dualanzeige: beide Kanäle werden gleichzeitig angezeigt und man kann die y-Verschiebung
   einstellen.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ich habe die Variante 1. Der Wechseltakt kann im Bereich von ca. 1/s bis 5/s
eingestellt werden – das ist jedenfalls meine ultimativ akkurate Schätzung,
denn nachgemessen habe ich es nicht.. Dieser Modus ist nützlich, um ein
unbekanntes oder fraglich defektes Bauteil mit einem bekanntermaßen
funktionierenden als Referenz zu vergleichen. Oder sogar bei der Fehlersuche in
einer Platine das Referenzbild einer identischen, funktionierenden Platine
heranzuzuiehen.&lt;/p&gt;
&lt;p&gt;Und zuguterletzt kann man den Wechselmodus verwenden, um aktive Bauteile mit
drei Beinen zu testen: Transistoren oder MOSFETs. Dabei verbindet man dann die
blaue &lt;strong&gt;G&lt;/strong&gt; Buchse mit dem &lt;em&gt;Gate&lt;/em&gt; oder &lt;em&gt;Base&lt;/em&gt; Pin, die beiden anderen mit &lt;em&gt;A&lt;/em&gt;
und &lt;em&gt;COM&lt;/em&gt;. Beim automatischen Wechseln wird nun die Spannung an Gate/Base ein
und ausgeschaltet und wir bekommen das Bauteil im aktiven und inaktiven Zustand
zu sehen. Z.B bei diesem Transistor, der im Takt ein- und ausschaltet:&lt;/p&gt;
&lt;video src="https://techbotch.org/blog/asa-component-tester/hameg-alternate.mov" controls class="Medium"&gt;&lt;/video&gt;

&lt;p&gt;Die ganzen bisherigen Screenshots stammten von meinem Siglent SDS2104X plus.
Damit geht es recht gut. Doch für das kleine Video habe ich dann doch mein
altes analoges Hameg HM2005 verwendet, denn es reagiert viel spritziger. In dem
Bereich sind analoge Oszis einfach unschlagbar. Mit vielen älteren, billigeren
Sigitaloszilloskopen ist der XY-Modues fast unbrauchbar, also selber erstmal
ausprobieren, ob euer Oszi das vernünftig kann und notfalls eine billiges altes
Hameg auf Ebay kaufen ;-)&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Im Großen und Ganzen bin ich zufrieden. Das Ding tut was es soll und lässt sich
ganz ok bedienen. &lt;/p&gt;
&lt;p&gt;Aber ich finde es nicht uneingeschränkt gut.  Die maximale Testspannung von ±
4.6V ist nicht so das gelbe vom Ei – für moderne, hauptsächlich digitale
Schaltungen ist das OK, aber schon bei einer 5V Zener-Diode oder manchen
Komponenten auf der Primärseite eines Netzteils reicht das nicht mehr aus, um
alle Eigenschaften zu prüfen. &lt;/p&gt;
&lt;p&gt;Das Manual ist sehr knapp und teils unverständlich – Beispielgraphiken fehlen
ganz. Hier besser das Handbuch  des Tekronix Testers besorgen. Und der
Hersteller hätte ruhig 20 Cent mehr ausgeben können um den beiden Potis
richtige Drehknöpfe zu spendieren.&lt;/p&gt;
&lt;p&gt;Mit einem modernen Digitaloszi klappt die Visualisierung im XY-Modus ganz
ordentlich.  Noch viel besser aber flutscht es mit einem alten analogen Oszi -
allerdings hat mein Hamekg HM2005 hnehin einen integrierten Komponententester,
so dass ich normalerweise den verwende.  Ältere/billigere Digitaloszis sind im
XY-Modus eine Qual – also Finger weg für diese Anwendung.&lt;/p&gt;
&lt;p&gt;Wem das jetzt alles zu Hardware-lastig war, der kann natürlich auch auf eine
Softwarelösung zurückgreifen: In Form einer
&lt;a href="https://www.tek.com/en/keithley-iv-curve-tracer"&gt;App&lt;/a&gt; für
Keithley 2450 Source Meter. ;-)&lt;/p&gt;
&lt;h1&gt;Links&lt;/h1&gt;
&lt;p&gt;Zuguterletzt noch ein paar Links auf hilfreiche Ressourcen.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tektronics &lt;a href="https://www.tek.com/en/tr210-manual/tr210-tracker-user-manual"&gt;TR210 Manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Huntron &lt;a href="https://www.youtube.com/watch?v=Hj7f0xnZAGc&amp;amp;list=PL8QvoGnQbLIbYTIzzmVFFiIF9CULEjKmL0"&gt;Video Serie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Octopus video by &lt;a href="https://www.youtube.com/watch?v=Gwo3pEH7hUE"&gt;w2aew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Nuts&amp;amp;Volts &lt;a href="https://www.nutsvolts.com/magazine/article/build-an-oscilloscope-octopus"&gt;Octopus Tester&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>SMD Bauteile sortieren</title><link href="https://techbotch.org/blog/smd-component-storage/index.html" rel="alternate"/><published>2026-02-15T00:00:00+01:00</published><updated>2026-02-15T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2026-02-15:/blog/smd-component-storage/index.html</id><summary type="html">&lt;p&gt;Bei zahlreichen Projekten hatte ich immer wieder festgestellt, dass ich mir
dringend ein System ausdenken muss, nach dem ich meine diversen SMD Bauteile
sortieren und aufbewahren will, damit ich sie schneller finde.&lt;/p&gt;
&lt;p&gt;Auf den ersten Blick klingt das simpel: Ordne sie doch einfach nach Nennwert in
aufsteigender Reihenfolge und bewahr' …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Bei zahlreichen Projekten hatte ich immer wieder festgestellt, dass ich mir
dringend ein System ausdenken muss, nach dem ich meine diversen SMD Bauteile
sortieren und aufbewahren will, damit ich sie schneller finde.&lt;/p&gt;
&lt;p&gt;Auf den ersten Blick klingt das simpel: Ordne sie doch einfach nach Nennwert in
aufsteigender Reihenfolge und bewahr' sie in kleinen Tütchen oder Döschen auf.
Aber da steckt mehr dahinter, denn die Bauteile unterscheiden sich in diversen
Parametern. Für Widerstände z.B.:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Widerstand [Ω]&lt;/li&gt;
&lt;li&gt;Toleranz [%]&lt;/li&gt;
&lt;li&gt;Leistung [W]&lt;/li&gt;
&lt;li&gt;Bauform (Größe)&lt;/li&gt;
&lt;li&gt;Spannungsfestigkeit [V]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zum Glück sind die nicht alle unabhängig voneinander, denn sonst bräuchten wir
wirklich &lt;em&gt;sehr&lt;/em&gt; viele Döschen!&lt;/p&gt;
&lt;h2&gt;Widerstand&lt;/h2&gt;
&lt;p&gt;Fangen wir mit dem offensichtlichsten an – dem Widerstand. Der kann theoretisch
natürlich jeden beliebigen Wert haben, aber in der Realität hält man sich beim
Schaltungsdesign an bestimmte fixe Standardwerte und weicht von diesen nur ab,
wenn es unbedingt sein muss. Die Standardwerte entstammen dann einer von
mehreren Normreihen, wie z.B. E6, E12, E24, E48 oder E96. Die Zahl gibt an,
wieviele verschiedene Werte es für jede Dekade (Zehnerpotenz) gibt. Also z.B.
je 12 verschiedene Werte in jedem Bereich für die E12 Reihe. Die typischen
Widerstandssortimente die man so kaufen kann enthalten meist die E12 Reihe oder
sogar E24. Sie decken dann oft den Bereich von 1Ω bis knapp unter 1MΩ ab, also
sechs Größenordnungen.&lt;/p&gt;
&lt;p&gt;Im Falle der E24 Reihe sind das also &lt;span class="math"&gt;\(24 \cdot 6 = 120\)&lt;/span&gt; verschiedene
Widerstandswerte. Das sind ziemlich viele. Aber es kommt noch schlimmer...&lt;/p&gt;
&lt;h2&gt;Toleranz&lt;/h2&gt;
&lt;p&gt;Der nächste Parameter, der unsere Widerstände charakterisiert ist die Toleranz.
Also wie genau der Widerstand sich an den Nennwert hält. Das sind dann z.B.
10%, 5% oder 1% oder so.&lt;/p&gt;
&lt;p&gt;Und hier kommen wieder die Normreihen ins Spiel, denn je mehr Werte ich in
einer Dekade habe, desto enger muss die Toleranz sein, damit benachbarte
Nenn-Widerstände nicht überlappen. So hat die E12 Reihe eine Toleranz von 10%
und E24 dann schon 5%. Mal rechnen:&lt;/p&gt;
&lt;p&gt;Die Werte der E12 Reihe lauten: 1.0, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7,
5.6, 6.8, 8.2 und alle sind &lt;span class="math"&gt;\(\pm 10%\)&lt;/span&gt;. Also berechnen wir mal die Toleranzgrenzen (in R):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; r = c(1.0, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2)
&amp;gt; data.frame(r=r, min=r*0.9, max=r*1.1)
     r     min    max
1    1.0   0.90   1.10
2    1.2   1.08   1.32
3    1.5   1.35   1.65
4    1.8   1.62   1.98
5    2.2   1.98   2.42
6    2.7   2.43   2.97
7    3.3   2.97   3.63
8    3.9   3.51   4.29
9    4.7   4.23   5.17
10   5.6   5.04   6.16
11   6.8   6.12   7.48
12   8.2   7.38   9.02
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und für E24:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; r = c(1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 
        2.7, 3.0, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 
        6.8, 7.5, 8.2, 9.1)
&amp;gt; data.frame(r=r, min=r*0.95, max=r*1.05)
      r     min     max
1     1.0   0.950   1.050
2     1.1   1.045   1.155
3     1.2   1.140   1.260
4     1.3   1.235   1.365
5     1.5   1.425   1.575
6     1.6   1.520   1.680
7     1.8   1.710   1.890
8     2.0   1.900   2.100
9     2.2   2.090   2.310
10    2.4   2.280   2.520
11    2.7   2.565   2.835
12    3.0   2.850   3.150
13    3.3   3.135   3.465
14    3.6   3.420   3.780
15    3.9   3.705   4.095
16    4.3   4.085   4.515
17    4.7   4.465   4.935
18    5.1   4.845   5.355
19    5.6   5.320   5.880
20    6.2   5.890   6.510
21    6.8   6.460   7.140
22    7.5   7.125   7.875
23    8.2   7.790   8.610
24    9.1   8.645   9.555
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In der Praxis findet man aber manchmal auch Sortimente der E12 oder E24 Reihe,
die eine Toleranz von 1% haben – quasi Widerstände der E96 Reihe, aber nur die
Werte aus E24. Und wer wissen möchte, wie genau die Werte einer Reihe
hergeleitet bzw. berechnet wurden möge das gerne bei
&lt;a href="https://de.wikipedia.org/wiki/E-Reihe"&gt;Wikipedia&lt;/a&gt; nachlesen.&lt;/p&gt;
&lt;h2&gt;Bauform&lt;/h2&gt;
&lt;p&gt;Als nächstes ist zu beachten, dass Widerstände unterschiedlich groß sein
können. Bei SMD Bauteilen gibt es eine Menge verschiedener Standardgrößen. 
Freundlicherweise gibt die Bauform auch gleich die maximale Leistung vor.
Ein paar gängige Größen sind z.B.:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code inch&lt;/th&gt;
&lt;th&gt;Code metrisch&lt;/th&gt;
&lt;th&gt;Länge [mm]&lt;/th&gt;
&lt;th&gt;Breite [mm]&lt;/th&gt;
&lt;th&gt;Leistung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0402&lt;/td&gt;
&lt;td&gt;1005&lt;/td&gt;
&lt;td&gt;1.0&lt;/td&gt;
&lt;td&gt;0.5&lt;/td&gt;
&lt;td&gt;1/16 W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0603&lt;/td&gt;
&lt;td&gt;1608&lt;/td&gt;
&lt;td&gt;1.6&lt;/td&gt;
&lt;td&gt;0.8&lt;/td&gt;
&lt;td&gt;1/10 W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0805&lt;/td&gt;
&lt;td&gt;2012&lt;/td&gt;
&lt;td&gt;2.0&lt;/td&gt;
&lt;td&gt;1.25&lt;/td&gt;
&lt;td&gt;1/8 W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1206&lt;/td&gt;
&lt;td&gt;3216&lt;/td&gt;
&lt;td&gt;3.2&lt;/td&gt;
&lt;td&gt;1.6&lt;/td&gt;
&lt;td&gt;1/4 W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1210&lt;/td&gt;
&lt;td&gt;3225&lt;/td&gt;
&lt;td&gt;3.2&lt;/td&gt;
&lt;td&gt;2.5&lt;/td&gt;
&lt;td&gt;1/2 W&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Der metrische Code macht in unseren Breiten mehr Sinn, aber beim Teile-bestellen
braucht man meist den "imperialen".&lt;/p&gt;
&lt;h2&gt;Spannungsfestigkeit&lt;/h2&gt;
&lt;p&gt;Kauft man Markenwiderstände, bekommt man ein Datenblatt und kann das leicht
nachschlagen. Auf Ebay/Aliexpress &amp;amp; Co sieht es anders aus, da hilft nur raten
und hoffen.  Solange wir uns im Kleinspannungsbereich bewegen ist es wurscht,
aber wenn es z.B. um ein Schaltnetzteil oder gar einen Röhrenfernseher geht
sieht die Sache anders aus. Irgendwo im &lt;a href="https://www.mikrocontroller.net/topic/101221#880381"&gt;Microcontroller
Forum&lt;/a&gt; habe ich z.B.
diese Werte für Metallfilm Widerstände von Samsung gefunden:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bauform&lt;/th&gt;
&lt;th&gt;Working voltage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0201&lt;/td&gt;
&lt;td&gt;25 V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0402&lt;/td&gt;
&lt;td&gt;50 V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0603&lt;/td&gt;
&lt;td&gt;50 V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0805&lt;/td&gt;
&lt;td&gt;150 V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ab 1206&lt;/td&gt;
&lt;td&gt;200 V&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Als Richtwerte vermutlich brauchbar, aber ohne Gewähr und immer das Hirn
einschalten...&lt;/p&gt;
&lt;h1&gt;Ordnung schaffen&lt;/h1&gt;
&lt;p&gt;Das war interessant, aber eigentlich wollten wir ja Widerstände in Döschen
sortieren und sind etwas abgedriftet. Also zunächstmal zu den Döschen. Zwar
gibt es spezielle SMD Container, die man anreihen kann und mit so kleinen
Federdeckeln, aber die fand ich zu teuer. Außerdem sind sie nicht durchsichtig,
was ich schon praktisch fände. Also habe ich eine Weile Aliexpress durchforstet und 
letztlich etwas gefunden, das mir optimal erschien:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/smd-component-storage/sortimentbox.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Die werden als Aufbewahrungslösung für kleine Perlen und ähnliches angepriesen.
Die Boxen gibt es mit 28 oder 56 Mini-Döschen, die jeweils ca. 20x25x25mm haben.
Das finde ich sehr passend. 28 Döschen finde ich ebenfalls gut, denn dann habe
ich genug für eine E24 Reihe plus vier extra für Sonderwerte. Ich habe also mal
ein paar von den 56-er Boxen bestellt. Aber wieviele brauche ich nun?&lt;/p&gt;
&lt;p&gt;Aktuell habe ich Sortimente der E24 Reihe (wenn auch mit ein paar Lücken) über
6 Dekaden in vier verschiedenen Bauformen.  Also insgesamt &lt;span class="math"&gt;\(24 \cdot 6 \cdot 4
= 576\)&lt;/span&gt; verschiedene. Da wir 2 komplette Dekaden der E24 in eine 56er Box
bringen brauche ich also 3 solche Boxen pro Bauform, insgesamt also 12, auf die
Dauer mehr, wenn weitere Bauformen gebraucht werden. Wenn man das professionell
macht ist das vermutlich genau die richtige Herangehensweise, aber ich finde,
dass ziemlich viel Platzbedarf für einen Esslöffel voll Widerstände.&lt;/p&gt;
&lt;p&gt;Nun könnte man natürlich in jedem Schächtelchen ein paar Dinge gemeinsam
lagern. Z.B.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ein paar benachbarte Werte der Reihe: Z.B. 1.0 - 1.8, 2.0 - 2.7, etc.&lt;/li&gt;
&lt;li&gt;Ein paar (oder alle) Dekaden: 1.0Ω, 10Ω, 100Ω, 1kΩ, 10kΩ, 100kΩ etc.&lt;/li&gt;
&lt;li&gt;Verschiedene Bauformen (0402, 0603, 0805, ...)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Variante 1 ist mir unsympathisch. 24 Werte sind nicht die Welt und das würde
ich gerne separat halten, damit man schnell zum passenden Wert kommt. Auf der
anderen Seite hätte es den Vorteil, dass es egal wäre aus welcher Normreihe ein
Widerstand kommt.&lt;/p&gt;
&lt;p&gt;Variante 2 gefällt mir ganz gut. Wenn ich einen 75k Widerstand (&lt;code&gt;753&lt;/code&gt;) brauche,
gehe ich zum Schächtelchen mit dem Label "75" der Box der gewünschten Bauform
und suche nur noch nach der passenden Endziffer &lt;code&gt;3&lt;/code&gt;. Das sollte recht
effizient sein. In diesem Fall brauche ich eine halbe 56er Box pro Bauform, 
aktuell also 2 Boxen. Das klingt ok.&lt;/p&gt;
&lt;p&gt;Aber auch Variante 3 ist nicht ganz blöd: Zur Suche nach meinem 75K Widerstand
ginge ich also zum Schächtelchen &lt;code&gt;75&lt;/code&gt; in der Sektion für die 10kΩ Dekade und
müsste dann per Auge abschätzen welche Größe benötigt wird. Das dürfte in der
Praxis auch gut funktionieren. Insgesamt bräuchte ich dazu eine halbe 56er Box
pro Dekade, also alles in allem 3 solche Boxen. Auch das ist kein übertriebener
Aufwand.&lt;/p&gt;
&lt;p&gt;Nun habe ich also die Qual der Wahl. 2 oder 3?  Wie soll ich mich entscheiden?
Ein bisschen tendiere ich zu Variante 2, denn sie braucht die wenigsten Boxen
und erscheint mir sehr gut durchsuchbar. Andererseits lagere ich meine normalen
bedrahteten Widerstände nach System 3 in kleinen Papiertütchen.&lt;/p&gt;
&lt;p&gt;Mal ein anderer Gedanke: es gibt ja nicht nur Widerstände. Z.B. habe ich auch
Keramikkondensatoren im SMD Format in diversen Werten. Die haben den Nachteil,
dass sie eigentlich immer unbeschriftet sind, obwohl es einen standardisierten
Code dafür gäbe. D.h. ich darf nicht einfach verschiedene Dekaden
zusammenwürfeln. Die Bauform korreliert hier leider auch nicht so klar mit
irgendwelchen elektrischen Eigenschaften, obwohl große Kapazitäten tendenziell
größer sind, als kleinere und die Größe auch mit der Maximalspannung wächst.
D.h.  Variante 2 ist keine Option für Kondensatoren, während Variante 3 gut
möglich wäre.&lt;/p&gt;
&lt;p&gt;Letztlich habe ich mich für System 3 entschieden weil&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;es für Widerstände und Kondensatoren gleichermaßen funktioniert&lt;/li&gt;
&lt;li&gt;es konsistent mit meinen "großen" Widerständen ist&lt;/li&gt;
&lt;li&gt;der Bedarf an Boxen nur geringfügig höher ist, als in Variante 2&lt;/li&gt;
&lt;li&gt;der Platzbedarf nicht steigt, wenn ich zukünftig noch mehrere andere
  Bauformen kaufen muss.&lt;/li&gt;
&lt;li&gt;man die richtige Größe meist auf Anhieb mit bloßem Auge trifft, wenn man 
  einen Widerstand durch einen neuen ersetzen will während man zum suchen der
  richtigen Dekade die Beschriftung lesen muss. Dazu müsste ich wohl jedes mal das 
  Döschen ausleeren und mit Lupe oder Mikroskop auf Suche gehen.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also habe ich mich in den semi-erleuchteten meditativen
Zen-Bauteil-Sortiermodus gebracht und viele Stunden im Labor verbracht. Hier
das Ergebnis:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/smd-component-storage/result.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Ich weiß – das sieht fast leer aus, aber das war eine Schweinearbeit die ganzen
Widerstände aus den Streifen in die passenden Döschen zu füllen, ohne was
durcheinander zu bringen.  Und deshalb bin ich sehr stolz auf mein Werk, auch
wenn es nach wenig aussieht, jawohl!&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Samsung A53 5G Reparatur Fail</title><link href="https://techbotch.org/blog/samsung-A53-repair-fail/index.html" rel="alternate"/><published>2026-02-08T00:00:00+01:00</published><updated>2026-02-08T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2026-02-08:/blog/samsung-A53-repair-fail/index.html</id><summary type="html">&lt;p&gt;Heute haben wir mal wieder ein Handy hier. Diesmal ist es aber nicht der Akku,
der Probleme macht. Das Handy wurde als neu gekauft, erkennt aber die
eingelegte SIM-Karte nicht. Der Verkäufer hat die Reklamation wohl akzeptiert
und sendet Ersatz, will das defekte aber wohl nicht zurückhaben. Und so wurde …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Heute haben wir mal wieder ein Handy hier. Diesmal ist es aber nicht der Akku,
der Probleme macht. Das Handy wurde als neu gekauft, erkennt aber die
eingelegte SIM-Karte nicht. Der Verkäufer hat die Reklamation wohl akzeptiert
und sendet Ersatz, will das defekte aber wohl nicht zurückhaben. Und so wurde
ich gefragt, ob ich mal schauen kann, ob da evtl. noch was zu machen ist.&lt;/p&gt;
&lt;h1&gt;Erstmal testen&lt;/h1&gt;
&lt;p&gt;Zuerst will ich das mal mit eigenen Augen sehen. Also habe ich mal meine
SIM-Karte eingelegt und das Gerät eingeschaltet. Und wie beschrieben erkennt es
die Karte nicht (&lt;em&gt;No service&lt;/em&gt;). Bei einem nagelneuen Handy ist es zwar sehr
unwahrscheinlich, aber bevor wir es öffnen, versuchen wir noch einen sanfteren
Weg: Wir gehen zu &lt;em&gt;Settings &amp;gt; Apps&lt;/em&gt;, suchen dort das &lt;em&gt;SIM tool&lt;/em&gt; und öffnen
es. Dann tippen wir auf &lt;em&gt;Storage&lt;/em&gt; und wählen &lt;em&gt;Clear Cache&lt;/em&gt;. Handy neu starten
und hoffen.  Nee – das hat nichts gebracht. Die gleiche Übung nochmal – diesmal
mit &lt;em&gt;Clear data&lt;/em&gt;, aber auch das hat nicht geholfen.&lt;/p&gt;
&lt;p&gt;Beim einlegen der SIM fiel auf, dass das SIM-Tray nicht ganz neu
wirkt, sondern eine kleine blanke Stelle aufweist. Komisch.&lt;/p&gt;
&lt;h1&gt;Aufmachen&lt;/h1&gt;
&lt;p&gt;Also öffnen wir es mal. Dazu heizen wir die Handy-Wärmematte auf ca. 85°C und
legen das gute Stück drauf. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/samsung-A53-repair-fail/heating-pad.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Ein oder zwei Minuten warten und dann mit einem
Plastik-Plektrum vorsichtig die Rückwand ablösen. Das ging völlig problemlos
und nun sehen wir das Innenleben vor uns:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/samsung-A53-repair-fail/open.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Sehr gut. Aber Moment mal! Das sieht nun nicht wirklich nach einem neuen Handy
aus! Zum Einen ist diese graue Folie ziemlich zerknittert und zum Anderen
findet sich einiger Schmutz im Rahmen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/samsung-A53-repair-fail/dirt.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/samsung-A53-repair-fail/dirt2.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und auch der Eindruck, dass das SIM-Tray nicht ganz makellos ist verfestigt
sich weiter, denn es ist leicht verbogen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/samsung-A53-repair-fail/SIM-tray2.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/samsung-A53-repair-fail/SIM-tray.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Nicht gut. Da bin ich gespannt, was mich erwartet.&lt;/p&gt;
&lt;p&gt;Als erstes lösen wir mal die ganzen kleinen Schräubchen am unteren Ende,
die das schwarze Plastikteil halten. Darunter liegt der SIM-Slot.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/samsung-A53-repair-fail/SIM-pcb.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Das sieht soweit ok aus, aber da sind auch blaue Markierungen auf den beiden
Steckerchen, sowie einem der Kontakte an der Kante. Ist das normal?&lt;/p&gt;
&lt;p&gt;Nun lösen wir die diversen Stecker und die kleine schwarze Schraube und nehmen
die Platine heraus. Auf der Unterseite findet sich der Slot für SIM und
SD-Karte, sowie der USB-C Port. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/samsung-A53-repair-fail/sim-slot-pcb.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Beides sieht von außen gut aus. Und auch die Kontakte im Inneren des SIM-Slots
sehen ok aus. Keiner scheint verbogen oder abgebrochen. Ich würde Euch das sehr
gerne im Bild zeigen, aber es ist mir nicht gelungen, in den schmalen Schlitz
hinein zu photographieren, d.h. Ihr müsst es mir einfach glauben. Schade, denn
darauf hatte ich gehofft und hätte dann zunächst versucht, das gerade zu biegen
und ggf. nach einer Ersatzplatine gesucht.&lt;/p&gt;
&lt;p&gt;Für den Fall der Fälle habe ich noch die ganzen Pins des SIM-Ports nachgelötet –
einer sah mäßig verdächtig aus. Aber auch das hat das Problem nicht behoben.&lt;/p&gt;
&lt;p&gt;Was kann aber noch die Ursache sein? Das Flachbandkabel kommt in Frage, aber es
sieht auch bei genauer Inspektion völlig OK aus. Also bauen wir das wieder
zusammen und sehen uns mal auf der Oberseite um, wo das Kabel hinführt. Auch
hier erstmal diverse Schräubchen lösen und die schwarze Kunsstoffabdeckung
entfernen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/samsung-A53-repair-fail/top-pcb.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Alles unter dem Mikroskop inspizieren und auch hier sehe ich nichts
offensichtliches. Hm.&lt;/p&gt;
&lt;p&gt;Was nun? Als nächstes müsste man nun versuchen, alles durchzumessen und eine
Unterbrechung im Signalweg zu finden. Aber das ist eine furchtbare Fummelei,
weil ich irgendwie an die Kontakte im SIM-Slot herankommen müsste. Und die
Kontakte in den Verbindungssteckern sind so winzig, dass ich gerade garnicht
weiß, womit ich die zuverlässig kontaktieren könnte, ohne gleich mehrere Pins
auf einmal zu erwischen. Dann könnte man evtl. auf die Suche nach irgendwelchen
defekten Kondensatoren oder gar Chips gehen, aber auch das ist auf einer
Handyplatine kein Spaß.&lt;/p&gt;
&lt;p&gt;So unsportlich es klingt: ich gebe auf.&lt;/p&gt;
&lt;p&gt;Also alles wieder zusammenbauen, frischen Kleber auf die Rückwand und mit
Federklemmen fixieren, bis der Kleber fest ist. &lt;/p&gt;
&lt;p&gt;Und dann der Super-Gau: Das Display ist gesplittert. Na toll, das hat gerade
noch gefehlt.  &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/samsung-A53-repair-fail/cracked-display.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und mir ist auch völlig unklar, wie das passiert ist. Das sowas beim
Displaywechsel passieren kann ist klar, aber beim Einkleben der Rückwand?
Vielleicht hatte es einen Sturz hinter sich und daher auch die verbogene
SIM-Schublade? Der Ort würde gut zu der Theorie passen. Aber vorher waren mir
keinerlei Risse aufgefallen. Ich kann also auch falsch liegen.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Das war ja mal ein Totalreinfall! Nicht nur hat mein Reparaturversuch zu nichts
geführt, am Ende habe ich auch noch das Display geschrottet. Grumpf!&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Neuer Homeserver</title><link href="https://techbotch.org/blog/new-homeserver/index.html" rel="alternate"/><published>2026-01-03T00:00:00+01:00</published><updated>2026-01-03T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2026-01-03:/blog/new-homeserver/index.html</id><summary type="html">&lt;p&gt;Wie Ihr sicher wisst, liebe ich meinen Homeserver. Und so verkünde ich heute
schweren Herzens, dass er nach 10 Jahren zuverlässigem Dauerbetrieb in den
wohlverdienten Ruhestand geht.&lt;/p&gt;
&lt;p&gt;Ich habe diesen Sever geliebt, weil er ein &lt;em&gt;richtiger&lt;/em&gt; Server ist – ein HP
Proliant Microserver Gen8 um genau zu sein. Das heißt, dass …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wie Ihr sicher wisst, liebe ich meinen Homeserver. Und so verkünde ich heute
schweren Herzens, dass er nach 10 Jahren zuverlässigem Dauerbetrieb in den
wohlverdienten Ruhestand geht.&lt;/p&gt;
&lt;p&gt;Ich habe diesen Sever geliebt, weil er ein &lt;em&gt;richtiger&lt;/em&gt; Server ist – ein HP
Proliant Microserver Gen8 um genau zu sein. Das heißt, dass er sehr
wartungsfreundlich gebaut ist und vor allem über ein eigenständiges
Fernwartungssystem (HP iLo) verfügt. Das erfreut das Nerd-Herz!  Aber nun
laufen die beiden Harddisks als RAID1 schon seit 10 Jahren 24/7 und die SSD mit
dem Betriebssystem ist auch nicht mehr ganz neu. Und so hatte ich ohnehin schon
überlegt, neue Platten zu kaufen, oder vielleicht besser SSDs. &lt;/p&gt;
&lt;p&gt;Und dann brachte er plötzlich eine Fehlermeldung bezüglich des Filesystems der
Datenplatten. Zwar war es kein Problem, das in Ordnung zu bringen (&lt;code&gt;fsck&lt;/code&gt;),
aber ich nehme das dennoch zum Anlass, ihn in den Ruhestand zu versetzen.&lt;/p&gt;
&lt;h1&gt;Der Neue&lt;/h1&gt;
&lt;p&gt;Der Posten des Homeservers wird selbstverständlich nachbesetzt und so habe ich
erstmal Hardware besorgt. Diesmal wird es kein echter Server mehr, sondern ein
Mini-PC. Der braucht weniger Raum und Strom: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lenovo ThinkCentre tiny M920x&lt;/li&gt;
&lt;li&gt;Intel Core i7-9700T (8 cores, 8 threads)&lt;/li&gt;
&lt;li&gt;32GB RAM&lt;/li&gt;
&lt;li&gt;System disk: 1TB SATA SSD&lt;/li&gt;
&lt;li&gt;Data disks: 2x 2TB NVME&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Für die Lenovo ThinCentre tiny Serie habe ich eine Schwäche. Die sehen super
aus (fast wie Puppenstuben-Server), sind solide gebaut und ebenfalls ziemlich
wartungsfreundlich. Nur das Fernwartungsmodul werde ich vermissen.&lt;/p&gt;
&lt;h1&gt;System aufsetzen&lt;/h1&gt;
&lt;p&gt;Viele Leute haben einen Horror davor, ihren Server neu aufsetzen zu müssen. Ich
nicht. Die Betriebssystem-Installation ist simpel, die Konfiguration habe ich
im Wesentlichen in Ansible Playbooks und compose files und ich mache jede Nacht
automatische Backups.  Also kein Stress.&lt;/p&gt;
&lt;p&gt;Fangen wir mit dem Betriebssystem an: Debian 13 (Trixie). Eine
Minimalinstallation, d.h. nur das Basissystem vom &lt;em&gt;Netinst&lt;/em&gt;-Medium plus den Task
&lt;em&gt;SSH Server&lt;/em&gt;. Keine Desktop Umgebung oder normale User-Software:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/new-homeserver/task-selection.png" class="Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Konfiguration&lt;/h1&gt;
&lt;p&gt;Als erstes fügen wir meinen user mal der Gruppe &lt;code&gt;sudo&lt;/code&gt; hinzu&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;adduser phil sudo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Dann installieren wir vom Laptop aus meinen Public Key für bequemeren (und
sicheren) ssh Zugriff:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ssh-copy-id hal
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Daten SSDs einrichten&lt;/h1&gt;
&lt;p&gt;Ich habe insgesamt 3 SSDs eingebaut. Die erste ist die Systemplatte.  Damit die
ein wenig geschont wird, tragen wir in &lt;code&gt;/etc/fstab&lt;/code&gt; noch die Option &lt;code&gt;noatime&lt;/code&gt;
für dieses Device ein und reduzieren die Neigung zum Swappen ein wenig, indem
wir ein File &lt;code&gt;/etc/sysctl.d/local.conf&lt;/code&gt; anlegen und &lt;code&gt;vm.swappiness=1&lt;/code&gt;
hineinschreiben.&lt;/p&gt;
&lt;p&gt;Die beiden anderen sollen als mirror eingerichtet werden, um im Falle eines
Falles nicht gleich das Backup bemühen zu müssen. Dazu gibt es verschiedene
Optionen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hardware RAID&lt;br&gt;
   Das benötigt einen entsprechenden RAID Controller und den habe ich nicht.
   Außerdem macht das Probleme, wenn man im Ernstfall auf einen anderen Controller
   umsteigen muss.&lt;/li&gt;
&lt;li&gt;Software RAID&lt;br&gt;
   Das hatte ich bisher und es hat gut funktioniert. Es ist vermutlich nicht ganz 
   so robust wie Hardware RAID, dafür sehr portabel.&lt;/li&gt;
&lt;li&gt;ZFS&lt;br&gt;
   Das hat einen hervorragenden Ruf in der Server-Welt und bietet diverse Vorteile.
   Leider ist es aus Lizenzgründen kein Standardbestandteil des LINUX-Kernels.
   Man kann es aber problemlos installieren, muss dann aber bei jedem 
   Kernel-update die Module neu bauen. In der Praxis geht das aber automatisch.&lt;/li&gt;
&lt;li&gt;BTRFS&lt;br&gt;
   Soll auch  gut sein, scheint mir aber weniger reif und ich lasse vorerst die 
   Finger davon.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;ZFS&lt;/h2&gt;
&lt;p&gt;Bezüglich der Daten-Platten habe ich beschlossen, von RAID1 auf &lt;code&gt;zfs&lt;/code&gt;
umzusteigen.  Erstmal ein paar Sachen installieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apt install zfs-dkms zfsutils-linux
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nicht vergessen, das dann auch gleich in mein Ansible Playbook aufzunehmen.
Dann bauen wir einen &lt;em&gt;zmirror&lt;/em&gt; Pool mit unseren beiden NVMEs:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;#               __________________________ label / mount point
#              |      ____________________ make a mirror group     
#              |     |       _____________ device1
#              |     |      |        _____ device2
#              |     |      |       |
zpool create data mirror nvme0n1 nvme1n1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;data&lt;/code&gt; ist dabei der Name meines Pools und zugleich der Mountpoint (&lt;code&gt;/data/&lt;/code&gt;).
ZFS kümmert sich um den Rest, also Filesystem erstellen und mounten. Einen
Eintrag in &lt;code&gt;/etc/fstab&lt;/code&gt; braucht es nicht.&lt;/p&gt;
&lt;p&gt;Und weil das SSDs sind, schalten wir das schreiben von access times ab, um die
Flash-Zellen etwas zu schonen (analog zu &lt;code&gt;noatime&lt;/code&gt; für die Systemplatte):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;zfs set atime=off data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Schauen wir mal nach:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
data  1.81T   609G  1.22T        -         -     0%    32%  1.00x    ONLINE  -


$ zpool status
  pool: data
 state: ONLINE
config:

    NAME         STATE     READ WRITE CKSUM
    data         ONLINE       0     0     0
      mirror-0   ONLINE       0     0     0
        nvme0n1  ONLINE       0     0     0
        nvme1n1  ONLINE       0     0     0

errors: No known data errors
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;&lt;code&gt;home&lt;/code&gt; und &lt;code&gt;srv&lt;/code&gt; verschieben&lt;/h2&gt;
&lt;p&gt;Damit dieser Platz auch genutzt wird müssen wir noch &lt;code&gt;/home&lt;/code&gt; und &lt;code&gt;/srv&lt;/code&gt; dorthin
verschieben. Dazu werden wir erstmal &lt;em&gt;root&lt;/em&gt; und schieben die Folder dann durch
die Gegend:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mv /home /data/ 
ln -s /data/home /home
mv /srv /data/
ln -s /data/srv /srv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sehr gut. Damit sind die manuellen Vorarbeiten beendet.&lt;/p&gt;
&lt;h2&gt;Ansible&lt;/h2&gt;
&lt;p&gt;Nun lassen wir das Ansible Playbook laufen, um die Konfiguration abzuschließen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ansible-playbook -K install-homeserver.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das installiert automatisch diverse essentielle Pakete, wie z.B. vim, aptitude,
unison, podman, nmap, fwupd, borgbackup, mosquitto etc. Außerdem konfiguriert
es den ssh Server, so dass Logins nur noch mit key und nicht mit Passwort
möglich sind und kopiert diverse &lt;code&gt;compose.yaml&lt;/code&gt; Files in Ordner unter &lt;code&gt;/srv/&lt;/code&gt;.
Homeassistant und Paperless-ngx zum Beispiel. Das entsprechende Playbook,
passende Roles etc. hatte ich mir schon früher mal erstellt, um in genau diesem
Fall nicht stundenlang von Hand jede Menge Zeug konfigurieren zu müssen.&lt;/p&gt;
&lt;p&gt;Nachdem das durchgelaufen ist, können die Daten wiederhergestellt werden.&lt;/p&gt;
&lt;h1&gt;Daten kopieren&lt;/h1&gt;
&lt;p&gt;Grundsätzlich gibt es zwei mögliche Wege, die Daten auf den neuen Server zu
bekommen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Restore aus dem Backup&lt;/li&gt;
&lt;li&gt;Direkt von der alten Festplatte kopieren.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ich mache heute mal Option 2, denn das Array ist OK und das Problem im Filesystem
ließ sich mit &lt;code&gt;fsck&lt;/code&gt; schnell reparieren.&lt;/p&gt;
&lt;h2&gt;Halben RAID Array lesen&lt;/h2&gt;
&lt;p&gt;Im Prinzip könnten wir die Daten vom kompletten RAID Array lesen: mit zwei
USB-SATA Adaptern an den neuen Server, mounten und los geht's. Oder via
Netzwerk.&lt;/p&gt;
&lt;p&gt;Aber weil ich es so schön finde, zeige ich hier noch schnell, wie das auch mit
einer der beiden Platten des Arrays geht – vorausgesetzt, das Array ist gesund
oder im Notfall, wenn eine der beiden Platten im Mirror den Geist aufgegeben
hat (dann mit der anderen). Also ziehen wir eine der beiden Platten aus dem
Slot am alten Server, nehmen sie aus dem Wechselrahmen und stecken sie in den
SATA-USB-Adapter.  &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/new-homeserver/restore-data.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;An den neuen Server anschließen und schon sehen wir sie:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ lsblk
sdb           8:16   0   3.6T  0 disk  
└─sdb1        8:17   0   3.6T  0 part  
  └─md0       9:0    0   3.6T  0 raid1 
    └─md0p1 259:6    0   3.6T  0 part  /mnt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Im Netz hatte ich gelesen, dass man zunächst das RAID1 Array wiederherstellen müsse
(&lt;code&gt;mdadm --assemble --readonly --run /dev/md0 /dev/sdb1&lt;/code&gt;), allerdings
scheint es, dass mein System das RAID1 Volume ganz von selbst erkannt hat.
Und wir können es mounten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ sudo mount -O ro /dev/md0p1 /mnt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;und die Daten in ihr neues Zuhause kopieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ cp -ar /mnt/home /data/
$ cp -ar /mnt/srv /data/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Benchmark&lt;/h1&gt;
&lt;p&gt;Und wie lang hat der Spaß nun gedauert?&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Schritt&lt;/th&gt;
&lt;th&gt;Zeit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Debian Installation&lt;/td&gt;
&lt;td&gt;06min 04s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ZFS einrichten&lt;/td&gt;
&lt;td&gt;ca.5min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ansible Playbook&lt;/td&gt;
&lt;td&gt;ca. 8 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Restore data&lt;/td&gt;
&lt;td&gt;01h 43min&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Alles in allem also knapp über 2h. Etwa 20 Minuten Arbeit muss man
investieren, der Rest ist Wartezeit bis die Daten wieder da sind.  Und auch
während der Installation überarbeitet man sich nicht wirklich. Die Zahlen finde
ich erfreulich und ich bleibe bei meiner Strategie, nur die Daten zu sichern
und keine OS Backups zu machen – das lohnt den Aufwand nicht.&lt;/p&gt;
&lt;p&gt;In Wahrheit hat die ganze Prozedur aber länger gedauert, weil ich nicht
einfach alles wieder hergestellt habe, sondern bei der Gelegenheit diverse
Änderungen an meinen Ansible Playbook vorgenommen habe, aber das habe ich hier
bewusst nicht eingepreist, weil es mir darum ging, zu ermitteln, wie lang eine
unveränderte Disaster-Recovery dauert.&lt;/p&gt;
&lt;p&gt;Streng genommen könnte ich auch das Einrichten von RAID oder ZFS automatisiert 
mit Ansible machen, tue das aber bewusst nicht. Wer weiß schon, welche Ideen ich
beim nächsten mal habe und der Aufwand ist echt minimal.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Neuer Homeserver läuft wie geschmiert. Sehr schön.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>VDE Gerätetester</title><link href="https://techbotch.org/blog/pat-tester/index.html" rel="alternate"/><published>2025-12-18T00:00:00+01:00</published><updated>2025-12-18T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-12-18:/blog/pat-tester/index.html</id><summary type="html">&lt;p&gt;Wenn ich ein Gerät repariere das mit Netzspannung läuft, oder eines aus China
kaufe, mache ich typischerweise einen kleinen Sicherheitscheck, bevor ich es in
Betrieb nehme. Mit Multimeter, Isolationstester und Leckstromzange kann ich
alle nötigen Dinge messen. Das ist lehrreich und funktioniert, ist aber etwas
aufwändig. Es gibt auch halbautomatische …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wenn ich ein Gerät repariere das mit Netzspannung läuft, oder eines aus China
kaufe, mache ich typischerweise einen kleinen Sicherheitscheck, bevor ich es in
Betrieb nehme. Mit Multimeter, Isolationstester und Leckstromzange kann ich
alle nötigen Dinge messen. Das ist lehrreich und funktioniert, ist aber etwas
aufwändig. Es gibt auch halbautomatische Gerätetester für diesen Zweck, aber
leider kosten die Dinger neu so zwischen 500 und ein paar tausend Euro Das ist
es mir nicht wert. Aber so hin und wieder schaue ich mal auf einschlägigen
Auktions- und Kleinanzeigenportalen, ob vielleicht ein Schnäppchen zu machen
ist.&lt;/p&gt;
&lt;p&gt;Und so fand ich kürzlich eine Annonce für ein Benning ST720 in Neuzustand.
D.h. es ist neu und alt zugleich – also einige Jahre alt, aber unbenutzt.
Dieses Modell wurde schon vor Jahren vom ST725 abgelöst, das auch
Datenspeicherung und einen Drucker unterstützt. Aber sowas brauche ich echt
nicht und so scheint mir das ST720 perfekt. Im Gegensatz zum ST710, das nur
Ersatzableitstrom messen kann, bietet das ST720 auch die echte
Differenzstrommessung im Betrieb, was v.a. bei Geräten mit internen Relais ein
riesen Vorteil ist. Der Preis war auch ok und da konnte ich nicht widerstehen
und hab das Teil gekauft.&lt;/p&gt;
&lt;h1&gt;Auspacken&lt;/h1&gt;
&lt;p&gt;Ein paar Tage später war es da. Gut verpackt und offenbar wohlbehalten.
Also Tester aus der Tragetasche nehmen und in Augenschein nehmen. Sieht gut aus
– wie in der Anzeige beschrieben sind keine Gebrauchsspuren zu erkennen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pat-tester/benning-st720.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das ist doch schomal gut. Also Messkabel dranmachen und einschalten – nix.  Hm.
OK, da werden keine Batterien drin sein. Also schnell 6 AA Zellen herauskramen
und Batteriefach öffnen. Oh, Schreck:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pat-tester/batterien1.jpg" class="Large"&gt;
&lt;img src="https://techbotch.org/blog/pat-tester/batterien2.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Mist! Da sind 2 Zellen massiv ausgelaufen und haben einigen Korrosionsschaden
angerichtet. In einer der Mulden steht etwas Flüssigkeit. Nicht gut. Ich hoffe,
der Schaden ist auf das Batteriefach begrenzt und dieser weißliche Mist ist
nicht auf die Platine gelaufen und hat dort Leiterbahnen oder Kontakte
zerfressen. :-(&lt;/p&gt;
&lt;h1&gt;Instandsetzung&lt;/h1&gt;
&lt;p&gt;Also erstmal die defekten Zellen entsorgen und das Batteriefach provisorisch
saubermachen. Dann neue Zellen rein und testen, ob er überhaupt geht.
Ja – tut er. &lt;/p&gt;
&lt;p&gt;Als nächstes habe ich dann erstmal den Verkäufer kontaktiert und wir haben uns
geeinigt, dass ich das Ding öffne, um die Lage im Inneren zu beurteilen. Wenn
der Schaden nicht zu groß und mit vertretbarem Aufwand reparabel ist, behalte
ich es und bekomme einen Preisnachlass, andernfalls gebe ich es zurück.
Hoffentlich ist es nicht zu schlimm, denn ich hatte mich schon &lt;em&gt;sehr&lt;/em&gt; auf den
Tester gefreut!&lt;/p&gt;
&lt;p&gt;Zunächst sind mal 6 Schrauben zu entfernen. Dann muss man die schwarzen
Gummiteile am oberen und unteren Ende abziehen und schon lässt sich der Boden
abnehmen. Vorsichtig kann man den dann etwas anheben, bevor man dann zwei
Stecker aus ihren Buchsen zieht, um das Ganze dann vernünftig auseinandernehmen
zu können. Im Gerät finden sich zwei Platinen: Die Hauptplatine ist direkt
unter der Gerätefront und enthält die meisten Bauteile. In der unteren Schale
ist unter einer Art Papptrenner eine Tochterplatine. Um diese entnehmen zu
können, müssen weitere Schrauben gelöst werden.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pat-tester/st720-open.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Die Hauptplatine sieht tiptop aus – da ist nichts korrodiert. Offenbar war
sie durch die zweite Platine und dieses Trennblatt geschützt. Leider sind ein
paar Lötstellen und Kontakte auf der anderen Platine aber grünlich korrodiert.
Soweit ich es erkennen kann, ist aber nichts durchgefressen. D.h. das sollte
sich reparieren und konservieren lassen. Also wende mein übliches Verfahren auf
Batteriefach, Gehäuseschale und Platine an:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mit Essigsäure das ätzende Alkali-Zeug auflösen (schäumt schön)&lt;/li&gt;
&lt;li&gt;Großzügig mit destilliertem Wasser spülen&lt;/li&gt;
&lt;li&gt;Mit Bürstchen, Glasfaserpinsel und Schleifpapier verbliebene Krusten entfernen&lt;/li&gt;
&lt;li&gt;Nochmal mit destilliertem Wasser spülen&lt;/li&gt;
&lt;li&gt;Trockentupfen&lt;/li&gt;
&lt;li&gt;Angegriffene Lötstellen nachlöten (frisches Lot zugeben)&lt;/li&gt;
&lt;li&gt;Mit Isopropanol putzen&lt;/li&gt;
&lt;li&gt;Vollständig trocken lassen&lt;/li&gt;
&lt;li&gt;Platine, Kontakte etc. mit &lt;em&gt;Kontakt 61&lt;/em&gt; einsprühen, um restliches Wasser zu
  verdrängen und alles mit einem schützenden Film zu überziehen.&lt;/li&gt;
&lt;li&gt;Die korrodieren Batteriekontakte haben zudem noch ein bisschen Polfett bekommen.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An den Batteriekontakten ist teils die Nickelbeschichtung abgeplatzt – ich
hoffe, das hält so auf die Dauer. Notfalls muss ich irgendwann die Kontakte
tauschen.&lt;/p&gt;
&lt;p&gt;Alles wieder zusammenbauen und testen: Gerät schaltet ein und scheint zu
funktionieren:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pat-tester/benning-st720-on.jpg" class="Large"&gt;&lt;/p&gt;
&lt;h1&gt;Probelauf&lt;/h1&gt;
&lt;p&gt;Nun ist es an der Zeit, mal ein paar Geräte damit zu prüfen. &lt;/p&gt;
&lt;p&gt;Als erstes nehmen wir einen simplen Weller 80W Lötkolben. Stecker in den Tester
und Krokoklemme an die Lötspitze. Taste für Geräte Klasse I drücken und kurz
warten.  Es klicken ein paar Relais und nach ein paar Sekunden bekommen wir
das Ergebnis:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pat-tester/pat-soldering-iron.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Also der Lötkolben ist betriebssicher. :-)&lt;/p&gt;
&lt;p&gt;Als nächstes schnappen wir uns ein Kaltegrätekabel aus der Kabelkiste. Auch
hier kommt der Stecker wieder in die Dose am Tester und für den
Kaltgerätestecker gibt es eine passende Buchse auf der Oberseite des Testers.
Auch hier wieder die Klasse I Taste drücken:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pat-tester/pat-power-cable.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und auch das Kabel ist elektrisch sicher. Leider habe ich gerade kein defektes
Gerät zur Hand, um auch mal ein Problem zu demonstrieren. Aber egal. Es gibt
momentan keinen Grund zur Annahme, dass das Gerät out of spec sein könnte. Und
die Erfahrung mit meinen zahlreichen Multimetern legt nahe, dass die meisten
Messgeräte auch über längere Zeiträume echt stabil sind.&lt;/p&gt;
&lt;p&gt;Nichtsdestotrotz würde es mich schon wahnsinnig reizen, mal die Kalibrierung
systematischer zu testen. Aber das machen wir ein andermal – bis dahin denke
ich mir was aus, wie ich das angehe.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Das war jetzt schon Arbeit, aber ich denke es hat sich gelohnt. So ein Tester
ist schon eine praktische Sache und ich freue mich schon, ihn bei den nächsten
Reparatur-Projekten zum Einsatz zu bringen. Entweder nach Reparatur, oder auch
mal davor, um mir den Gang zum Sicherungskasten zu ersparen. Und ich werde mich
bemühen, das Gerät immer brav ohne Batterien zu lagern...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Werkzeugakkus – echt und falsch</title><link href="https://techbotch.org/blog/fake-makita-batteries/index.html" rel="alternate"/><published>2025-11-16T00:00:00+01:00</published><updated>2025-11-16T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-11-16:/blog/fake-makita-batteries/index.html</id><summary type="html">&lt;p&gt;Akkuwerkzeug ist eine ambivalente Angelegenheit. Auf der einen Seite kann es
sehr praktisch sein, nicht auf irgendwelche Kabel achten zu müssen.  Auf der
anderen Seite bedeutet ein Akku zusätzliches Gewicht und erfordert
zwischendurch Pausen zum Laden bzw. das Mitnehmen von Ersatzakkus und natürlich
langfristige Zusatzkosten. Zu allem Überfluss verwendet jeder …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Akkuwerkzeug ist eine ambivalente Angelegenheit. Auf der einen Seite kann es
sehr praktisch sein, nicht auf irgendwelche Kabel achten zu müssen.  Auf der
anderen Seite bedeutet ein Akku zusätzliches Gewicht und erfordert
zwischendurch Pausen zum Laden bzw. das Mitnehmen von Ersatzakkus und natürlich
langfristige Zusatzkosten. Zu allem Überfluss verwendet jeder Hersteller
andere Akkus, so dass man entweder mit einer Flut verschiedener Akkus und
Ladegeräte leben muss, oder sich an einen Hersteller bindet.&lt;/p&gt;
&lt;p&gt;Ich habe mich auf das Makita 18V System festgelegt und habe diverse Geräte
dafür (Akkuschrauber, kleiner Bohrhammer, Rasentrimmer, etc.). Einzige Ausnahme
ist mein kleiner 10.8V Bosch Akkuschrauber. So hin und wieder stirbt so ein
Werkzeugakku auch mal und man kauft dann einen neuen.  Und die sind nicht
billig. Da reizen einen schon die Angebote der Drittanbieter, die z.B.
Makita-kompatible Akkus erheblich billiger verkaufen.  Aber taugen die auch
was?&lt;/p&gt;
&lt;p&gt;Dieser Frage wollen wir heute mal ein wenig auf den Grund gehen. Der Zeitpunkt
ist günstig, denn ich musste eh mal wieder ein paar neue Akkus besorgen und
habe einen originalen von Makita (nominell 5.0Ah) und zwei identische
fernöstliche No-name Akkus (nominell 6.0Ah, Aliexpress) erworben. Und so können
wir die vergleichen, ohne Alterungseffekte berücksichtigen zu müssen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fake-makita-batteries/batteries.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und spaßeshalber nehmen wir noch zwei alte Akkus mit in die Analyse: einen
original Makita-Akku mit 3.0Ah, der ca. aus der späten Bronzezeit stammt und
vermutlich total ausgelutscht ist (Ich glaube er war bei meiner ersten Makita
Schrauber dabei, was bedeutet, dass er gute 12 Jahre alt ist). Der Zweite ist
wieder ein No-Name, mit dem ich subjektiv zufrieden war. Er behauptet 4.5Ah zu
haben und ich habe ihn vor 9 Jahren gekauft.&lt;/p&gt;
&lt;h1&gt;Messaufbau&lt;/h1&gt;
&lt;p&gt;Der Plan ist, beide mit einem original Makita-Ladegerät vollständig aufzuladen
und dann unter kontrollierten Bedingungen zu entladen, um so die Kapazität zu
ermitteln. Dazu verwenden wir eine Electronic Load (East-Tester ET5410A+). Als
erstes stellt sich nun also die Frage, wie stark wir den Akku belasten können,
ohne ihn kaputt zu machen. Ich habe zunächst das getan, was kein klar denkender
Mensch je tun würde und an Makita geschrieben und nach Spezifikationen oder
Datenblatt gefragt. Erwartungsgemäß bekam ich eine inhaltsleere Antwort mit
viel Blabla:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sehr geehrter Kunde,&lt;/p&gt;
&lt;p&gt;da unsere 18Volt LXT-Akkus- Serie in Kombination mit den jeweiligen Maschinen,
elektronische Sicherheitskomponenten verbaut haben, können wir zu Ihrer Anfrage
leider keine Auskunft geben.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OK – ich glaube der Makita-Support hat sich noch nie mit formaler Logik
befasst. Die Worte &lt;em&gt;weil&lt;/em&gt; und &lt;em&gt;da&lt;/em&gt; bedeuten in dieser Verwendung, dass es einen
&lt;em&gt;Kausalzusammenhang&lt;/em&gt; zwischen den beiden Aussagen gibt – d.h. &lt;span class="math"&gt;\(A \Rightarrow B\)&lt;/span&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A&lt;/em&gt;: unsere 18Volt LXT-Akkus- Serie hat in Kombination mit den jeweiligen Maschinen,
     elektronische Sicherheitskomponenten verbaut&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;und &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;B&lt;/em&gt;: wir können zu Ihrer Anfrage leider keine Auskunft geben.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Einen solchen kann ich aber beim besten Willen nicht erkennen, denn wie sollte
das Vorhandensein von Sicherheitskomponenten es verhindern, ein Datenblatt mit
Spezifikationen zu maximalem Entladestrom und minimaler Spannung zu erstellen und
seinen Kunden zu schicken? &lt;/p&gt;
&lt;p&gt;Doch die Textanalyse gibt noch mehr her: Der interessierte Leser wird sich
fragen, wie man Sicherheitskomponenten &lt;em&gt;in Kombination&lt;/em&gt; mit den Geräten verbauen
kann. Traditionell finden sich Sicherheitsschaltungen, wie etwa ein
Tiefentladeschutz, eine Strombegrenzung oder Temperatursicherungen eindeutig
bestimmbar in einem der beiden Elemente Maschine oder Akku. Aber vielleicht bin
ich einfach nicht auf dem Stand der Technik und die Japaner haben sowas wie
die Heisenberg'sche Schutzschaltung erfunden, von der man Funktion und Aufenthaltsort
niemals gleichzeitig bestimmen kann.&lt;/p&gt;
&lt;p&gt;Und um auch der Spitzfindigkeit Raum zu geben, weise ich noch darauf hin, dass
es "LXT-Akku-Serie" heißen muss und nicht "LXT-Akku&lt;strong&gt;s&lt;/strong&gt;- Serie" und dann auch
"verbaut haben" im Singular stehen muss. Hier hätte man durch besonnenere
Statzkonstruktion verhindern können, sich selbst ein grammatikalisches Bein zu
stellen.&lt;/p&gt;
&lt;p&gt;Eigentlich fehlt nur noch ein 🖕Emoji, um den Text inhaltlich abzurunden.
Setzen, mangelhaft.&lt;/p&gt;
&lt;p&gt;Aber egal, jeder Maker/Hacker kennt das und weiß sich auch ohne Datenblatt zu
helfen. Also machen wir mal eine Überschlagsrechnung. Stromhungrige Geräte wie
z.B.  Laubbläser machen so einen Akku innerhalb von vielleicht 10-15 Minuten
leer, wenn man ordentlich Gas gibt. Aber wir wollen es nicht übertreiben und so
schauen wir mal, welchen Strom wir brauchen, wenn wir den Akku z.B. in 30
Minuten leeren wollen:&lt;/p&gt;
&lt;div class="math"&gt;$$5Ah / 0.5h = 10A$$&lt;/div&gt;
&lt;p&gt;Das sind &lt;span class="math"&gt;\(10A \cdot 18V = 170W\)&lt;/span&gt;. Das packt meine Last problemlos und sollte
auch die Akkus nicht sonderlich stressen.&lt;/p&gt;
&lt;p&gt;Nun darf man so einen Akku nicht einfach auf 0V entleeren. Zumindest nicht,
wenn man ihn danach nochmal benutzen will. Also müssen wir einen Cutoff
festlegen, bei dem die Entladung stoppen soll, um den Prüfling nicht zu
beschädigen. So als Faustregel soll man eine Lithiumzelle nicht unter 2.5V
entladen. Unser Makita Akku hat nominell 18V, eine einzelne Zelle 3.6V, also
dürften da &lt;span class="math"&gt;\(18/3.6 = 5\)&lt;/span&gt; Zellen in Serie geschaltet sein. Und vermutlich dann
auch mehrere parallel, um auf die nötige Kapazität zu kommen. Bleibt zum
Schluss noch die Frage, ob die Last einen konstanten Strom, Widerstand oder
Leistung abgreifen soll. Ich bin für konstanten Strom. Also sind unsere
Parameter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Constant current, 10A Entladestrom&lt;/li&gt;
&lt;li&gt;12.5V cutoff Spannung&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es kann aber sein, dass das BMS (Battery Managment System) in den Akkus uns
garnicht so weit entladen lässt und die Batterie schon bei einer höheren
Zellenspannung abriegelt. Wir werden sehen...&lt;/p&gt;
&lt;p&gt;Um den Akku anzuschließen kann man normale Flachstecker für Kabelschuhe
verwenden, oder eine passende Makita-Akkuaufnahme. Sowas gibt's beim
freundlichen Chinesen zu kaufen. Mein Messaufbau sieht so aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fake-makita-batteries/setup.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wenn es uns nur um die reine Kapazitätsmessung geht, könnten wir nun einfach an
der Last den CC Batterie-Test Modus einstellen und am Ende der Entladung die
Kapazität ablesen. Ich würde aber gerne auch die Entladekurve aufnehmen und
deshalb verbinden wir die Last mit dem PC und verwenden meine
&lt;a href="https://github.com/philpagel/ET54.py"&gt;Python-Klasse&lt;/a&gt; für das Gerät.
Damit bauen wir schnell ein kleines Entladeskript zusammen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;
&lt;span class="normal"&gt;18&lt;/span&gt;
&lt;span class="normal"&gt;19&lt;/span&gt;
&lt;span class="normal"&gt;20&lt;/span&gt;
&lt;span class="normal"&gt;21&lt;/span&gt;
&lt;span class="normal"&gt;22&lt;/span&gt;
&lt;span class="normal"&gt;23&lt;/span&gt;
&lt;span class="normal"&gt;24&lt;/span&gt;
&lt;span class="normal"&gt;25&lt;/span&gt;
&lt;span class="normal"&gt;26&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/bin/env python3&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;ET54&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ET54&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ET54&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ASRL/dev/ttyUSB1::INSTR&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ch1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;off&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ch1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Vrange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;low&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ch1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Crange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;high&amp;quot;&lt;/span&gt; 
    &lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ch1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BATT_mode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;CC&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;V&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;12.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ch1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;t0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;time,V,I,Ah&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ch1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;ON&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;V&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ch1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_voltage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;Ah&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;el&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ch1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BATT_capacity&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; 
                &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;t0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_seconds&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Ah&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;]),&lt;/span&gt; 
            &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;__main__&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nun alle Akkus frisch aufladen und dann kann's losgehen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ./discharge.py &amp;gt; discharge-makita1-10A.csv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;etc.&lt;/p&gt;
&lt;p&gt;Das sollte dann theoretisch jeweils bis zu 30 Minuten laufen und abbrechen sobald 
der Akku auf 12.5V gefallen ist.&lt;/p&gt;
&lt;h1&gt;Ergebnisse&lt;/h1&gt;
&lt;p&gt;Und so sehen die Entladekurven aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fake-makita-batteries/discharge.png"&gt;&lt;/p&gt;
&lt;p&gt;Das ist &lt;em&gt;krass&lt;/em&gt;!!! Die chinesischen "6Ah" Akkus sind &lt;em&gt;völliger Schrott&lt;/em&gt;!
Sogar der prähistorische 3Ah Akku von Makita hält fast doppelt so lang, wie diese.
Und auch der alte Drittanbieterakku deklassiert seine Landsleute.&lt;/p&gt;
&lt;p&gt;Zusammenfassend ist das Ergebnis also folgendes:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Akku&lt;/th&gt;
&lt;th&gt;Alter&lt;/th&gt;
&lt;th&gt;Nennkapazität&lt;/th&gt;
&lt;th&gt;gemessene Kapazität&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Makita1&lt;/td&gt;
&lt;td&gt;neu&lt;/td&gt;
&lt;td&gt;5.0Ah&lt;/td&gt;
&lt;td&gt;4.3Ah (86%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Makita2&lt;/td&gt;
&lt;td&gt;12 Jahre&lt;/td&gt;
&lt;td&gt;3.0Ah&lt;/td&gt;
&lt;td&gt;2.3Ah (77%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No-Name1&lt;/td&gt;
&lt;td&gt;neu&lt;/td&gt;
&lt;td&gt;6.0Ah&lt;/td&gt;
&lt;td&gt;1.3Ah (22%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No-Name2&lt;/td&gt;
&lt;td&gt;neu&lt;/td&gt;
&lt;td&gt;6.0Ah&lt;/td&gt;
&lt;td&gt;1.1Ah (18%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No-Name3&lt;/td&gt;
&lt;td&gt;8 Jahre&lt;/td&gt;
&lt;td&gt;4.5Ah&lt;/td&gt;
&lt;td&gt;2.9Ah (64%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Keiner der Akkus kommt auf seine Nennkapazität, aber wir wissen leider auch
nicht, unter welchen Bedingungen diese spezifiziert ist. Also v.a. bei welchem
Entladestrom und welcher Endspannung die Nennkapazität erreicht werden soll.
Dennoch sind die Unterschiede der Wahnsinn in Dosen...&lt;/p&gt;
&lt;h1&gt;Autopsie&lt;/h1&gt;
&lt;p&gt;Jetzt will ich aber schon mal wissen, was die in den Fake-Akkus verbaut haben.
Also schrauben wir mal so einen Schwindelakku auf und werfen einen Blick hinein. 
Vier Torxschrauben später finden wir dies:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fake-makita-batteries/inside1.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/fake-makita-batteries/inside2.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/fake-makita-batteries/inside3.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Hm – irgendwie hatte ich mit einer CR2032 und ein paar Kieselsteinen gerechnet,
aber da sind scheinbar echt 10 Zellen verbaut. Und eigentlich wirkt alles
ordentlich verarbeitet. Die Zellen selbst haben keinerlei Beschriftung und so
kann ich nicht nachvollziehen welche Kapazität sich rechnerisch ergeben müsste.
Aber es steht wohl außer Frage, dass die Zellen fake sind.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Caveat emptor! Da bin ich ja mal ordentlich beschissen worden.&lt;/p&gt;
&lt;p&gt;Nach Fake-Komponenten, wie MOSFETS &amp;amp; Co sind Fake-Akkus natürlich keine 
echte Überraschung...&lt;/p&gt;
&lt;p&gt;Allerdings heißt das natürlich nicht, dass alles außer Original-Akkus Mist sein
muss. Es gibt auch seriöse Anbieter da draußen, aber vor dem Kauf weiß man das
halt nicht und auch danach misst wohl kaum jemand nach. Mein alter
Drittanbieter-Akku wirkt zumindest plausibel.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="DIY &amp; Workshop"/></entry><entry><title>Optokoppler testen</title><link href="https://techbotch.org/blog/testing-opto-isolators/index.html" rel="alternate"/><published>2025-11-09T00:00:00+01:00</published><updated>2025-11-09T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-11-09:/blog/testing-opto-isolators/index.html</id><summary type="html">&lt;p&gt;Neulich im Repair-Cafe kam ein LCD-Fernseher rein, der fast nix mehr tut. D.h.
eine LED blinkt noch irgendeinen Fehlercode, aber es gibt kein Bild mehr. Also
haben wir ihn aufgemacht und uns umgeschaut. Dabei haben wir drei Testpunkte
gefunden: 5V, 16V und 64V. Der erste und der letzte hatten …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Neulich im Repair-Cafe kam ein LCD-Fernseher rein, der fast nix mehr tut. D.h.
eine LED blinkt noch irgendeinen Fehlercode, aber es gibt kein Bild mehr. Also
haben wir ihn aufgemacht und uns umgeschaut. Dabei haben wir drei Testpunkte
gefunden: 5V, 16V und 64V. Der erste und der letzte hatten die erwartete
Spannung, aber die 16V fehlten komplett. Also haben wir uns weiter umgesehen und
so dies und das durchgemessen. Letztlich fanden wir drei Optokoppler, die
wohl das Feedback für die drei Spannungen sein dürften.&lt;/p&gt;
&lt;p&gt;Also Optokoppler testen. Aber wie macht man das eigentlich? Das wollen wir
heute mal als kleine Trockenübung durchprobieren, denn im Repair-Cafe habe ich
keine Photos gemacht.&lt;/p&gt;
&lt;h1&gt;Prüflinge&lt;/h1&gt;
&lt;p&gt;Zunächst tauchen wir mal in die Bauteilekiste ab und ziehen zwei Optokoppler
hervor: Einen PC817 und einen 4N35. So ein Optokoppler besteht ja aus zwei
Bauteilen in einem gemeinsamen Gehäuse: einer LED (meist infrarot) und einem
Phototransistor. Hier das Schema aus dem Datenblatt des PC817:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/testing-opto-isolators/PC817.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wie versprochen: LED und NPN-Transistor.&lt;/p&gt;
&lt;p&gt;Also stecken wir die beiden mal auf ein Breadboard und machen Leitungen dran,
damit wir da was messen können.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/testing-opto-isolators/pc817.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/testing-opto-isolators/4N35.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h2&gt;LED&lt;/h2&gt;
&lt;p&gt;Als erstes messen wir die LED, wie wir es mit jeder anderen Diode auch machen
würden: Dioden-Test-Modus an und in beiden Richtungen messen. In beiden
Optokopplern ist die LED auf Pins 1 und 2. In Sperrrichtung bekommen wir &lt;em&gt;open
circuit&lt;/em&gt; aber in der Durchlassrichtung finden wir den Spannungsabfall der Diode:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/testing-opto-isolators/pc817-voltage-drop.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Da es eine Leuchtdiode ist, sind 1.1V völlig in Ordnung. D.h. die LED in diesem
Optokoppler ist ok.  Und auch der zweite (4N35) sieht genauso aus.&lt;/p&gt;
&lt;h2&gt;Phototransistor&lt;/h2&gt;
&lt;p&gt;Als nächstes ist der Phototransistor dran. Beim 4N35 ist die Basis auf Pin 6
herausgeführt, so dass man den messen könnte, wie jeden anderen Transistor
auch, aber der PC817 hat nur vier Pins und so kommen wir nicht an die Basis
ran. Also messen wir einfach mal den Widerstand der Kollektor-Emitter-Strecke
in beiden Richtungen. Da der Optokoppler nicht angesteuert wird, ist sie
hochohmig:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/testing-opto-isolators/pc817-resistance0.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das ist schonmal was – also kein Kurzschluss, aber noch wissen wir nicht
wirklich, ob der Optokoppler wirklich funktioniert. Nun könnte man eine
Testschaltung bauen und z.B. über ein Netzteil und einen Vorwiderstand Strom
auf die LED geben, aber wenn wir ein zweites Multimeter zur Hand haben, brauchen
wir das garnicht. Wir messen einfach so:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/testing-opto-isolators/setup.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Also Multimeter 1 im diodentest-Modus auf die LED und Multimeter 2 im
Widerstandsmodus über Kollektor und Emitter des NPN-Transistors.  Ein paarmal
mit Multimeter 1 hin und wieder weg vom Pin und schon sieht man, ob und wie der
Transistor schaltet.&lt;/p&gt;
&lt;p&gt;Mein Handmultimeter bringt LEDs beim Diodentest typischerweise zum leuchten.
Das können wir in diesem Fall nicht sehen, denn es ist eine Infrarot-LED und
sie steckt in einem lichtundurchlässigen Gehäuse, aber das ist egal. Wenn wir
mal schnell nachmessen, welche Spannung mein Multimeter für den Diodentest
anlegt, finden wir 7.3V:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/testing-opto-isolators/fluke87V-test-voltage.jpg" class="Medium" alt="Tishcmultimeter, Anzeige: 7.31V"&gt;&lt;/p&gt;
&lt;p&gt;Das sollte genügen, um eine Reaktion im Phototransistor zu erzeugen. Also
Diodentest nochmal an und an PIN 1 und 2 ran. Dann den Widerstand des
Transistors messen (achtung, Polung beachten).&lt;/p&gt;
&lt;p&gt;170Ω beim PC817:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/testing-opto-isolators/pc817-resistance1.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;und 533Ω beim 4N35:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/testing-opto-isolators/4N35-resistance1.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Aber auch wenn man das mit der Polung verbaselt, sieht man zumindest eine kleine
Veränderung:&lt;/p&gt;
&lt;p&gt;PC817:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/testing-opto-isolators/pc817-resistance-reverse.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;4N35:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/testing-opto-isolators/4N35-resistance-reverse.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Perfekt! Beide sind eindeutig in Ordnung.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Wenn man zwei Multimeter hat, kann man so einen Optokoppler vollständig auf
Funktion prüfen. In der Regel klappt das auch ohne Auslöten gut. Und so haben
wir bei obigem Fernseher entdeckt, dass einer der Optokoppler im Eimer ist. Nun
heißt es einen neuen besorgen und dann schauen, ob das der einzige Fehler war,
denn eigentlich sind Optokoppler keine der üblichen Verdächtigen, die einfach
so sterben. Wir werden sehen...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>LED-Strahler defekt – mal wieder</title><link href="https://techbotch.org/blog/led-spot2/index.html" rel="alternate"/><published>2025-10-01T00:00:00+02:00</published><updated>2025-10-01T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-10-01:/blog/led-spot2/index.html</id><summary type="html">&lt;p&gt;Heute haben wir etwas langweiliges: einen defekten LED-Spot – mal
wieder.  Es handelt sich um einen A5068T der Firma Nobile. Davon haben wir jede
Menge und einer davon war hier auch &lt;a href="https://techbotch.org/blog/broken-LED-light/index.html"&gt;schonmal zu
Gast&lt;/a&gt;.  Der war damals
komplett ausgefallen und der Treiber leider irreparabel. &lt;/p&gt;
&lt;p&gt;Der heutige Patient ist noch nicht ganz …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Heute haben wir etwas langweiliges: einen defekten LED-Spot – mal
wieder.  Es handelt sich um einen A5068T der Firma Nobile. Davon haben wir jede
Menge und einer davon war hier auch &lt;a href="https://techbotch.org/blog/broken-LED-light/index.html"&gt;schonmal zu
Gast&lt;/a&gt;.  Der war damals
komplett ausgefallen und der Treiber leider irreparabel. &lt;/p&gt;
&lt;p&gt;Der heutige Patient ist noch nicht ganz tot, sondern wirkt neuerdings weniger
hell und flackert/blinkt etwas.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/led-spot2/led-spot.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Also mal den Treiber (EL-8R-230 D) öffnen und nachsehen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/led-spot2/driver-front.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/led-spot2/driver-back.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;So auf den ersten Blick sieht eigentlich alles gut aus. Nichts wirkt verkohlt
und die drei Elkos weisen keine Wölbungen oder ähnliches auf. Nichts desto
trotz werden wir die mal vermessen.&lt;/p&gt;
&lt;p&gt;Der Glättungs-Elko auf der Primärseite ist ein 10µF, 450V, 105°C Exemplar von
Fujicon. Markenware also. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/led-spot2/Elko-primär.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Entladen, auslöten messen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/led-spot2/Elko-120Hz.jpg" class="Medium" alt="ESR meter @120Hz: 11.6µF, 50.77Ω"&gt;
&lt;img src="https://techbotch.org/blog/led-spot2/Elko-100kHz.jpg" class="Medium" alt="ESR meter @100kHz: 1.3µF, 9.6Ω"&gt;&lt;/p&gt;
&lt;p&gt;Hm – die Kapazität ist eigentlich ok, aber der ESR geht garnicht.
Also tauschen wir den. &lt;/p&gt;
&lt;p&gt;Testen. Flackert immernoch :-(&lt;/p&gt;
&lt;h1&gt;Weitersuchen&lt;/h1&gt;
&lt;p&gt;Als nächstes schaue ich mir den mini-Elko an. Mir scheint, der gehört zur
Bootstrap-Schaltung für den Controller. Die Beschriftung sagt 100µF, 25V,
105°C. Ich messe dies:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/led-spot2/Elko2-100Hz.jpg" class="Medium" alt="ESR meter @100Hz: 95µF, 1.96Ω"&gt;
&lt;img src="https://techbotch.org/blog/led-spot2/Elko2-100kHz.jpg" class="Medium" alt="ESR meter @100kHz: -23.3µF, 0.369Ω"&gt;&lt;/p&gt;
&lt;p&gt;Eigentlich sieht er gut aus, aber egal – ich baue einen neuen ein. Alles
zusammenbauen, Strom an, Trommelwirbel, blinkt immernoch. Grrrrr.&lt;/p&gt;
&lt;p&gt;Also löten wir noch den Filterkondensator am Ausgang raus und messen auch den:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/led-spot2/Elko3-100Hz.jpg" class="Medium" alt="ESR meter @100Hz: 208µF, 0.36Ω"&gt;
&lt;img src="https://techbotch.org/blog/led-spot2/Elko3-100kHz.jpg" class="Medium" alt="ESR meter @100kHz: -12.4µF, 0.08Ω"&gt;&lt;/p&gt;
&lt;p&gt;Spezifiziert ist er als 220µF, 50V, 105°C und die Messwerte sehen gut aus. Es
gibt keinen Grund den zu tauschen, aber wir tun es dennoch. Haben wir es
repariert? Nein – haben wir nicht. Das nervt jetzt aber echt!&lt;/p&gt;
&lt;h1&gt;LED prüfen&lt;/h1&gt;
&lt;p&gt;Also eigentlich predige ich ja immer, dass nie die LEDs ausfallen, sondern
immer die Treiber, aber diesmal beschleicht mich der Verdacht,
dass ich die LED doch mal genauer prüfen sollte. Also den LED-Tester
rauskramen und auf 1mA einstellen. Potztausend! Da sind echt LEDs ausgefallen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/led-spot2/LEDs-broken.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und wenn ich den LED-Tester mit Vollgas laufen lasse, kommt auch das
Blinken wieder! D.h. diesmal ist es nicht der Treiber, oder zumindest nicht
allein.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Das lief anders als erwartet, aber immerhin ließ sich der Fehler finden. Und
das Auswechseln der gealterten Elkos bereue ich auch nicht, denn so kann ich
den Treiber als Ersatzteil verwenden, wenn der nächste Decken-Spot den Geist
aufgibt.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Fluke 17B Batterie ausgelaufen</title><link href="https://techbotch.org/blog/fluke17b-battery-leak/index.html" rel="alternate"/><published>2025-09-14T00:00:00+02:00</published><updated>2025-09-14T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-09-14:/blog/fluke17b-battery-leak/index.html</id><summary type="html">&lt;p&gt;Wie Ihr wisst, liebe ich Messgeräte – vor allem Multimeter natürlich. Ich habe
&lt;em&gt;viele&lt;/em&gt; davon, schätze jedes einzelne und versuche, sie auch alle hin und
wieder zu benutzen. Und so war neulich mal mein Fluke 17b wieder an der Reihe.
Das ist ein Modell, das Fluke rein für den chinesischen Markt …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wie Ihr wisst, liebe ich Messgeräte – vor allem Multimeter natürlich. Ich habe
&lt;em&gt;viele&lt;/em&gt; davon, schätze jedes einzelne und versuche, sie auch alle hin und
wieder zu benutzen. Und so war neulich mal mein Fluke 17b wieder an der Reihe.
Das ist ein Modell, das Fluke rein für den chinesischen Markt herausgebracht
hat und das damals sehr preiswert war. Heute ist es kein Problem, das bei Ebay
oder Aliexpress zu bestellen, aber als es neu rauskam, war das schwierig und ich
habe es nur bekommen, weil ein chinesischer Doktorand es mir damals netterweise
während seines Heimaturlaubs gekauft und mitgebracht hatte (Danke nochmal Qibin!).&lt;/p&gt;
&lt;p&gt;Dem Preis entsprechend ist es ein relativ basales Instrument und es kann auch
keine True-RMS Messung, aber es ist absolut nicht schlecht und ich freue mich,
es in der Sammlung zu haben. &lt;/p&gt;
&lt;p&gt;Also messen wir mal ein paar Dinge damit. Doch wollte es sich nicht einschalten
lassen.  Vermutlich Batterie leer. Also Batteriefach öffnen und schnell neue
rein.  Doch, oh Schreck, die Batterien sind nicht nur leer, sondern eine ist
ausgelaufen! Mist!&lt;/p&gt;
&lt;h1&gt;Reinigungsarbeiten&lt;/h1&gt;
&lt;p&gt;Also erstmal das Gehäuse ganz öffnen, um den Schaden beurteilen zu können und
sauber zu machen. Zum Glück hat sich das weißliche Zeug aus der Batterie nicht
ausgebreitet, sondern pappt nur auf den Kontaktfedern. Der Batteriehalter
selbst ist aus Plastik und nicht betroffen – den hab ich nur schnell mit
destilliertem Wasser ausgespült. Aber eine der Kontaktfedern hat es schwer
erwischt.  Zunächst mal des weiße Zeug mit Essigessenz betupfen – das schäumt
schön. Mit einem Wattestäbchen die Kruste bearbeiten bis alles weg ist.&lt;/p&gt;
&lt;p&gt;Die Flüssigkeit in &lt;em&gt;Alkali&lt;/em&gt;batterien ist, wie der Name schon sagt, alkalisch.
Also muss man mit Säure putzen. Aber auch die will man nicht lange auf Platine
oder Kontakten haben, also danach sehr gründlich mit destilliertem Wasser
nachspülen und alles gut trocknen. ggf noch mit Sandpapier oder feiner
Drahtbürste nacharbeiten. Normalerweise reibe ich die korrodierten Kontakte
dann noch zum Schutz mit etwas Kriechöl ein. Aber dieses mal war die Lage
schlimmer, denn der eine Federkontakt war nicht nur sehr dunkelgrau korrodiert,
sondern am oberen Knick beim Putzen endgültig abgebrochen. Sch***e!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fluke17b-battery-leak/damage.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Reparatur&lt;/h1&gt;
&lt;p&gt;Diese Feder ist zu allem Unglück auch noch direkt auf die Platine gelötet, was
es schwierig macht hier etwas zu improvisieren. Zunächst habe ich über den
Eigenbau eines passenden Kontakts nachgedacht, aber dann begab ich mich in die
Wunderwelt orientalischen online Shoppings und fand etwas passendes:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fluke17b-battery-leak/spare-part.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Perfekt. Das hab ich bestellt und kaum 6 Wochen später lag es im Briefkasten&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fluke17b-battery-leak/spring.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Erstmal die Platine ausbauen. Dazu muss man vier Schrauben lösen, die die 4mm
Buchsen halten, sowie vier kleinere mit denen die Platine gehalten wird. Dann
noch zwei kleine Plastikclips an den Seiten ausrasten und auch den runden Clip
in der Mitte. Platine rausnehmen und die Lötstation anheizen und erstmal die
Reste der gebrochenen Feder auslöten.  Dazu braucht man ordentlich Leistung,
denn diese ist nicht nur an den beiden kleinen Beinchen eingelötet, sondern
auf der ganzen unteren Fläche. Aber das war kein Problem:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fluke17b-battery-leak/desoldered.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Nun alles schön mit Wattestäbchen und Isopropanol sauber machen und dann
das Ersatzteil einlöten:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fluke17b-battery-leak/soldered-in.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Alles wieder zusammenbauen, neue Batterien rein und einschalten:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fluke17b-battery-leak/fluke-17b.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Sehr schön! Es geht wieder.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Alkalibatterien sind die Pest! Zwar liefern sie meist über Jahre problemlos
Strom, aber wenn sie auslaufen, dann richten sie oft schwere Zerstörungen an.
Nun arbeite ich an einer Strategie solche Havarien zukünftig zu vermeiden und ziehe 
die folgenden Optionen in Betracht:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Batterien aller Messgeräte jährlich wechseln.&lt;br&gt;
   Con: Verschwenderisch, denn eigentlich halten Batterien sehr lang.&lt;/li&gt;
&lt;li&gt;Messgeräte die ich nicht ständig brauche ohne Batterien lagern.&lt;br&gt;
   Con: Batterien einlegen und wieder entnehmen wenn man ein Gerät mal braucht
   ist sehr lästig.&lt;/li&gt;
&lt;li&gt;Lithiumakkus mit eingebautem Buck-Converter nehmen&lt;br&gt;
   Con: Buck Konverter dürften ordentlich Ripple &amp;amp; Noise haben und RF Rauschen
   abstrahen.  Beides &lt;em&gt;könnte&lt;/em&gt; die Messergebnisse beeinträchtigen. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ich denke, ich werde mit einer Mischung aus allen dreien starten und mal
Erfahrungen mit diesen Lithumzellen sammeln, die als AAA,AA oder 9V-Block
Ersatz angeboten werden.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Tote USB-Festplatte</title><link href="https://techbotch.org/blog/dead-usb-disk/index.html" rel="alternate"/><published>2025-07-28T00:00:00+02:00</published><updated>2025-07-28T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-07-28:/blog/dead-usb-disk/index.html</id><summary type="html">&lt;p&gt;Heute haben wir wieder eine Festplatte. Es handelt sich um eine große dicke 3.5" Disk mit 1.5TB in einem externen USB-Gehäuse. Und die geht nicht mehr, sagt ihre Besitzerin. Und dummerweise sind da Daten von großem persönlichem Wert drauf, für die es teils kein Backup gibt. Also sind wir im Datenrettungs-Modus.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Heute haben wir wieder eine Festplatte. Es handelt sich um eine große dicke
3.5" Disk mit 1.5TB in einem externen USB-Gehäuse:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-usb-disk/external-disk.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und die geht nicht mehr, sagt ihre Besitzerin. Und dummerweise sind da Daten
von großem persönlichem Wert drauf, für die es teils kein Backup gibt. Also sind
wir im Datenrettungs-Modus.&lt;/p&gt;
&lt;p&gt;Zunächst aber mal ausprobieren – Netzteil anschließen, USB-Kabel rein,
abwarten. Und in der Tat registriert der Computer absolut garnix.&lt;/p&gt;
&lt;p&gt;Hm – vielleicht ein Strom-Problem? Also messen wir mal das Steckernetzteil
nach.  Es soll 12V liefern (innen positiv) und das tut es:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-usb-disk/power-supply.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Also aufmachen. Wie heute üblich, ist das Gehäuse geklipst und muss mit Geduld
und Spucke aufgehebelt werden:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-usb-disk/cracking-open.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Voilà:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-usb-disk/inside.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht, handelt es sich um eine stinknormale SATA-Platte, die über eine
Adapterplatine zur USB-Platte konvertiert wurde. Nun ein paar Schräubchen lösen
und die Disk samt USB-Platine herausnehmen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-usb-disk/disk-and-pcb.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/dead-usb-disk/disk-and-pcb-back.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und das USB-Board von der Platte trennen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-usb-disk/usb-board.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Sehr gut. Nun kann das Problem auf der USB-Seite liegen, oder bei der
Festplatte selbst. Mein Bauchgefühl sagt USB, denn sonst müsste sich das Gerät
zumindest am Rechner bemerkbar machen. Und um das abschließend zu testen,
stecken wir die Festplatte nun in meine SATA Docking-Station und versuchen
erneut, sie mit dem Computer zu lesen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-usb-disk/docking-station.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ dmesg -Tx
[...]
kern  :info  : [Mon Jul 28 23:35:00 2025] scsi host0: uas
kern  :notice: [Mon Jul 28 23:35:00 2025] scsi 0:0:0:0: Direct-Access     ASMT     USB 3.0 Destop H 0    PQ: 0 ANSI: 6
kern  :notice: [Mon Jul 28 23:35:00 2025] sd 0:0:0:0: Attached scsi generic sg0 type 0
kern  :notice: [Mon Jul 28 23:35:00 2025] sd 0:0:0:0: [sda] 2930277168 512-byte logical blocks: (1.50 TB/1.36 TiB)
kern  :notice: [Mon Jul 28 23:35:00 2025] sd 0:0:0:0: [sda] Write Protect is off
kern  :debug : [Mon Jul 28 23:35:00 2025] sd 0:0:0:0: [sda] Mode Sense: 43 00 00 00
kern  :notice: [Mon Jul 28 23:35:00 2025] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn&amp;#39;t support DPO or FUA
kern  :info  : [Mon Jul 28 23:35:00 2025] sd 0:0:0:0: [sda] Preferred minimum I/O size 512 bytes
kern  :info  : [Mon Jul 28 23:35:00 2025] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes
kern  :info  : [Mon Jul 28 23:35:00 2025]  sda: sda1
kern  :notice: [Mon Jul 28 23:35:00 2025] sd 0:0:0:0: [sda] Attached SCSI disk
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Da ist sie ja – sehr schön! Zur Sicherheit schauen wir uns noch die SMART-Werte
an, aber die sehen alle bestens aus für eine 15 Jahre alte Platte:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ sudo smartctl -a /dev/sda
smartctl 7.3 2022-02-28 r5338 [x86_64-linux-6.1.0-37-amd64] (local build)
Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Caviar Green
Device Model:     WDC WD15EADS-00S2B0
Serial Number:    WD-WCAVY3659624
LU WWN Device Id: 5 0014ee 2047bca91
Firmware Version: 01.00A01
User Capacity:    1,500,301,910,016 bytes [1.50 TB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    5400 rpm
Device is:        In smartctl database 7.3/5319
ATA Version is:   ATA8-ACS (minor revision not indicated)
SATA Version is:  SATA 2.6, 3.0 Gb/s
Local Time is:    Mon Jul 28 21:16:57 2025 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x82) Offline data collection activity
                    was completed without error.
                    Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0) The previous self-test routine completed
                    without error or no self-test has ever 
                    been run.
Total time to complete Offline 
data collection:        (31560) seconds.
Offline data collection
capabilities:            (0x7b) SMART execute Offline immediate.
                    Auto Offline data collection on/off support.
                    Suspend Offline collection upon new
                    command.
                    Offline surface scan supported.
                    Self-test supported.
                    Conveyance Self-test supported.
                    Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                    power-saving mode.
                    Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                    General Purpose Logging supported.
Short self-test routine 
recommended polling time:    (   2) minutes.
Extended self-test routine
recommended polling time:    ( 361) minutes.
Conveyance self-test routine
recommended polling time:    (   5) minutes.
SCT capabilities:          (0x303f) SCT Status supported.
                    SCT Error Recovery Control supported.
                    SCT Feature Control supported.
                    SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       1
  3 Spin_Up_Time            0x0027   196   151   021    Pre-fail  Always       -       7183
  4 Start_Stop_Count        0x0032   084   084   000    Old_age   Always       -       16401
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   100   253   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   078   078   000    Old_age   Always       -       16095
 10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   091   091   000    Old_age   Always       -       9456
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       19
193 Load_Cycle_Count        0x0032   174   174   000    Old_age   Always       -       79098
194 Temperature_Celsius     0x0022   126   090   000    Old_age   Always       -       26
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   200   200   000    Old_age   Offline      -       0

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;An dieser Stelle könnten wir eigentlich aufhören. Die Diagnose ist gestellt:
die Festpatte ist OK, aber die USB-Platine ist defekt. Und die Therapie klar:
es muss ein neues USB-Gehäuse her. Aber ich will eigentlich schon wissen, was
genau auf der USB-Platine ausgefallen ist und so schauen wir uns die nochmal
genauer an. Schon auf den ersten Blick fällt auf, dass der USB-Port irgendwie
krumm aussieht. Also mal unter das Mikroskop und genauer hinsehen. Und da
offenbart sich uns ein nicht unerheblicher Schaden: Auf der rechten Seite sind
beide Ground–Pads abgelöst:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-usb-disk/lifted-pad1.png" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/dead-usb-disk/lifted-pad2.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Zwar sieht es so aus, als wären sie noch leitend verbunden und da es Ground ist
und die andere Seite gut aussieht, wäre das eh egal, aber da sind wir wohl dem
Problem auf der Spur. Und so schauen wir uns mal die Kontakte der
Datenleitungen an:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-usb-disk/cracked-solder-joints.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Man muss sehr genau hinsehen und das Bild lässt es kaum erkennen, aber die
drei rechten Lötkontakte sind gebrochen. Das sieht man völlig eindeutig, wenn
man mit der Skalpellspitze gegen die einzelnen Kontakte drückt. Die beiden
linken sind fest, aber die anderen bewegen sich.&lt;/p&gt;
&lt;p&gt;Also Lötstation an, eine dünne Lötspitze rein und alle Kontakte unter dem
Mikroskop nachlöten. Nun sollte das alles wieder Kontakt haben. Also Platte und
USB-Platine wieder verbinden, Strom an, an den Computer anschließen und:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ dmesg -Tx
[...]
kern  :info  : [Tue Jul 29 00:29:33 2025] usb 1-2: new high-speed USB device number 10 using xhci_hcd
kern  :info  : [Tue Jul 29 00:29:33 2025] usb 1-2: New USB device found, idVendor=1058, idProduct=1021, bcdDevice=20.02
kern  :info  : [Tue Jul 29 00:29:33 2025] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
kern  :info  : [Tue Jul 29 00:29:33 2025] usb 1-2: Product: Ext HDD 1021
kern  :info  : [Tue Jul 29 00:29:33 2025] usb 1-2: Manufacturer: Western Digital
kern  :info  : [Tue Jul 29 00:29:33 2025] usb 1-2: SerialNumber: 574341565933363539363234
kern  :info  : [Tue Jul 29 00:29:33 2025] usb-storage 1-2:1.0: USB Mass Storage device detected
kern  :info  : [Tue Jul 29 00:29:33 2025] scsi host0: usb-storage 1-2:1.0
kern  :notice: [Tue Jul 29 00:29:34 2025] scsi 0:0:0:0: Direct-Access     WD       Ext HDD 1021     2002 PQ: 0 ANSI: 4
kern  :notice: [Tue Jul 29 00:29:34 2025] sd 0:0:0:0: Attached scsi generic sg0 type 0
kern  :notice: [Tue Jul 29 00:29:34 2025] sd 0:0:0:0: [sda] 2930272256 512-byte logical blocks: (1.50 TB/1.36 TiB)
kern  :warn  : [Tue Jul 29 00:29:34 2025] sd 0:0:0:0: [sda] Test WP failed, assume Write Enabled
kern  :err   : [Tue Jul 29 00:29:34 2025] sd 0:0:0:0: [sda] Asking for cache data failed
kern  :warn  : [Tue Jul 29 00:29:34 2025] sd 0:0:0:0: [sda] Assuming drive cache: write through
kern  :info  : [Tue Jul 29 00:29:34 2025]  sda: sda1
kern  :notice: [Tue Jul 29 00:29:34 2025] sd 0:0:0:0: [sda] Attached SCSI disk
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sie geht wieder :-)&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Cool! Das war eine schöne Reparatur. Aber obwohl die Platte wieder läuft, werde
ich der Eigentümerin empfehlen, ein neues Gehäuse anzuschaffen, denn
so eine Platte sollte zverlässig laufen und man will nicht mit einem nur halb
festen USB-Port arbeiten. Ja – man könnte da vielleicht UV-Harz drüberpappen
oder sowas, aber bei den Preisen für USB-Gehäuse lohnt sich der Aufwand nicht.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Garmin S2 Batterie tauschen</title><link href="https://techbotch.org/blog/garmin-s2-battery-change/index.html" rel="alternate"/><published>2025-07-24T00:00:00+02:00</published><updated>2025-07-24T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-07-24:/blog/garmin-s2-battery-change/index.html</id><summary type="html">&lt;p&gt;Meine Schwiegermutter hat eine Garmin Approach S2 Golf Uhr. Und die ist schon ziemlich alt – also die Uhr. Wobei ... eigentlich auch. Im Grunde geht sie (die Uhr) noch und v.a. kennt sie (die Schwiegermutter) sich gut mit deren Bedienung aus und so präferiert sie (die Schwiegermutter) die alte (Uhr) gegenüber einer neueren.  Leider hält der Akku keine 18 Loch mehr durch und so ist sie (die Uhr) bei mir gelandet, um die Lage zu verbessern.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Meine Schwiegermutter hat eine Garmin Approach S2 Golf Uhr. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/garmin-s2-battery-change/garmin-approach-s2.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und die ist schon ziemlich alt – also die Uhr. Wobei ... eigentlich auch. Im
Grunde geht sie (die Uhr) noch und v.a. kennt sie (die Schwiegermutter) sich
gut mit deren Bedienung aus und so präferiert sie (die Schwiegermutter) die
alte (Uhr) gegenüber einer neueren.  Leider hält der Akku keine 18 Loch mehr
durch und so ist sie (die Uhr) bei mir gelandet, um die Lage zu verbessern.&lt;/p&gt;
&lt;p&gt;Ein kurzer Blick ergab, dass sich das Gehäuse mit einem Torx 5 Bit öffnen lässt
...&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/garmin-s2-battery-change/back.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;... und bei Aliexpress Ersatzakkus für gute 10€ zu finden sind.  Also habe ich
einen bestellt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/garmin-s2-battery-change/new-battery.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Mal reinschau'n&lt;/h1&gt;
&lt;p&gt;Also Gehäuse öffnen, vorsichtig die Platine entnehmen und umsehen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/garmin-s2-battery-change/open.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/garmin-s2-battery-change/old-battery.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht, führen die beiden Anschlussleitungen des Akkus gemeinsam mit den
Leitungen zu den Ladekontakten in einen sehr filigranen Stecker. Ich habe sehr
wenig Lust, die Leitungen des Ersatzakkus in diesen Mikrostecker
reinzupfriemeln und so habe ich mich entschlossen, die Leitungen an der
Miniplatine beider Akkus lieber abzulöten und die des alten an den neuen wieder
anzulöten. Der Akku ist eingeklebt, lässt sich aber mit sanftem Hebeln mit dem
Spatel gut lösen. Dann Kapton-Tape abziehen, Lötstation anheizen und los
geht's. Das ging eigentlich recht einfach, nur eine Lupenbrille war schon sehr
hilfreich bei den Dimensionen.&lt;/p&gt;
&lt;p&gt;Jetzt den neuen Akku mit einem Streifen Tape isolieren, damit da nirgends ein
Kurzer entstehen kann und mit etwas Silikonkleber wieder an die Gehäuserückwand 
pappen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/garmin-s2-battery-change/new-battery-in.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Stecker rein und alles wieder zusammenbauen. Am schwierigsten war die
Positionierung der Dichtung, die die Uhr wasserfest macht – das war ein
fürchterliches Gefummel. Aber letztlich hat es geklappt und die Uhr ist wieder
einsatzklar.&lt;/p&gt;
&lt;h1&gt;Feddich&lt;/h1&gt;
&lt;p&gt;Das ging gut und hat Spaß gemacht. Nun lade ich das gute Stück noch einmal
komplett auf und dann geb ich's zurück und hoffe, die neue Laufzeit ist
zufriedenstellend.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Logitech Bluetooth Adapter Netzteil</title><link href="https://techbotch.org/blog/logi-bluetoth-adapter/index.html" rel="alternate"/><published>2025-07-21T00:00:00+02:00</published><updated>2025-07-21T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-07-21:/blog/logi-bluetoth-adapter/index.html</id><summary type="html">&lt;p&gt;Ich habe eine Stereoanlage – bzw. was davon übrig ist, denn während man früher
einen stolzen Turm mit Verstärker, Doppel-Kassettendeck, Tuner, CD-Player und
Plattenspieler als Monument der musikalischen Coolness im Zentrum seiner
Studentenbude stehen hatte, ist es heute ja eher üblich, Musik aus minderwertig
quäkenden Mini-Lautsprechern vom Telefon aus abzuspielen. Kassetten …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich habe eine Stereoanlage – bzw. was davon übrig ist, denn während man früher
einen stolzen Turm mit Verstärker, Doppel-Kassettendeck, Tuner, CD-Player und
Plattenspieler als Monument der musikalischen Coolness im Zentrum seiner
Studentenbude stehen hatte, ist es heute ja eher üblich, Musik aus minderwertig
quäkenden Mini-Lautsprechern vom Telefon aus abzuspielen. Kassetten gibt es
schon lange nicht mehr und auch den Plattenspieler habe ich vor Ewigkeiten
abgeschafft und wenig später zog auch der CD-Player zunächst auf den Dachboden
und schließlich auf den Wertstoffhof. Was blieb waren ein Receiver und ein
Kabel zum Laptop. Und etwas später dann ein kleiner Logitech Bluetooth
Audioadapter, der mehr Beweglichkeit erlaubte.&lt;/p&gt;
&lt;p&gt;Und dann kam DAB. Zunächst habe ich es ignoriert, aber schließlich wollte ich
einen neuen Receiver der das kann und hab mir einen Yamaha R-S202D angeschafft.
Der hatte ordentlichen DAB+ Empfang, aber in allen anderen Aspekten ist er das
größte Scheißding, dass ich je hatte. Ich glaube das User-Interface wurde von
Sadisten entworfen: Es gibt am Gerät keine Stationstasten, so dass man mühsam
mit den Pfeiltasten durch eine Million Sender klicken muss. Und das dauert
ewig, denn bevor man was hört, oder den Sendernamen angezeigt bekommt, muss er
erstmal tunen und das dauert jedesmal ein paar Sekunden. Die Fernbedienung hat
immerhin Zahlentasten ist aber ansonsten unübersichtlich und der Receiver
reagiert sehr langsam auf den Input. Und zuguterletzt ist das Display an der
Front winzig und kontrastarm, so dass man entweder direkt davor stehen, oder
ein Fernglas bemühen muss.&lt;/p&gt;
&lt;p&gt;Mit anderen Worten – den hab ich schleunigst auf den Dachboden getragen und den
alten wieder in Betrieb genommen und um einen DAB-Tuner ergänzt. Und da kommt
nun der Logitech Bluetooth Adapter wieder ins Spiel, denn ich will ja auch mal
Musik vom Laptop hören. Der war schnell gefunden, aber das dazugehörige
Netzteil ist absolut und völlig unauffindbar. Macht ja nix, dachte ich mir, ich
habe ja wirklich keinen Mangel an Steckernetzteilen und 5V bei maximal 150mA
sind nun keine schwierigen Anforderungen. Also in die Stecknetzteilkiste
abtauchen und was passendes suchen. Pustekuchen: keines hat den passenden
Tonnenstecker – grumpf!&lt;/p&gt;
&lt;h1&gt;Selbst ist der Mann&lt;/h1&gt;
&lt;p&gt;Na gut, dann eben mit manueller Anpassung: einfach irgendein 5V Netzteil
nehmen, Stecker ab und direkt auf die Platine löten, so der Plan.&lt;/p&gt;
&lt;p&gt;Zuerst aber muss ich den Adapter mal aufkriegen. Nach viel Suchen, Hebeln und
Knibbeln habe ich auch die Schraube gefunden, die das
Ding zusammenhält und schon lassen sich die Clips auch lösen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/logi-bluetoth-adapter/logitech-BT-adapter.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/logi-bluetoth-adapter/schraube.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/logi-bluetoth-adapter/rückabdeckung.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/logi-bluetoth-adapter/spudger.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Nun können wir die Platine entnehmen, die kleine Tonnenbuchse auslöten und die
Lötstellen schön sauber machen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/logi-bluetoth-adapter/platine.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Kabel vom Netzteil durch das Loch im Gehäuse ziehen, Enden abisolieren und in
die passenden Löcher einlöten. Noch mit einem Blob Lötzinn die beiden GND
Löcher verbinden – fertig.&lt;/p&gt;
&lt;p&gt;Zuguterletzt einen Mini-Kabelbinder fest aufs Kabelende ziehen – als Zugentlastung.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/logi-bluetoth-adapter/zugentlastung.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Dann noch mit einem ordentlichen Schuß Heißkleber im Gehäuse fixieren, alles
zusammenbauen, Schraube rein und nochmal einen Tropfen Heißkleber von außen
durchs Loch.  Und schon ist das Ganze endgültig fertig.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/logi-bluetoth-adapter/heißkleber.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/logi-bluetoth-adapter/mehr-heißkleber.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das war ein schönes kleines Feierabendprojekt! Und weil meine Frau grade nicht
da ist, mach ich mir jetzt ein Bier auf, dreh die Lautstärke auf 11 und höre
meine Lieblingskrawallmusik.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Bezahlbarer Isolationstester: VC4060AT</title><link href="https://techbotch.org/blog/vici-vc4060at-insulation-tester/index.html" rel="alternate"/><published>2025-07-20T00:00:00+02:00</published><updated>2025-07-20T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-07-20:/blog/vici-vc4060at-insulation-tester/index.html</id><summary type="html">&lt;p&gt;Ich weiß – so langsam hängen Euch die Isolationstester-Posts vermutlich zum
Hals raus, aber dieser eine muss noch sein. Ich habe mich nämlich gefragt, wie
weit man preislich für so ein Gerät runter kommt, wenn man hartnäckig genug
sucht. Die Auswahl ist schließlich riesig: Am oberen Ende findet man die großen …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich weiß – so langsam hängen Euch die Isolationstester-Posts vermutlich zum
Hals raus, aber dieser eine muss noch sein. Ich habe mich nämlich gefragt, wie
weit man preislich für so ein Gerät runter kommt, wenn man hartnäckig genug
sucht. Die Auswahl ist schließlich riesig: Am oberen Ende findet man die großen
Namen wie Fluke, Gossen Metrawatt &amp;amp; Co – die kosten so 750 bis mehrere Tausend
Euro. Wer nicht so viel ausgeben kann oder will wird, wie ich, bei Uni-T
fündig. Aber es gibt auch noch ein Segment darunter. Aber sind die brauchbar? &lt;/p&gt;
&lt;h1&gt;Mein Referenzgerät&lt;/h1&gt;
&lt;p&gt;Seien wir ehrlich: mein UT505A ist natürlich kein Referenzgerät; dazu bräuchte
ich ein Fluke 1507 oder besser noch ein fettes Gossen Metrawatt oder sowas.
Aber das Uni-T ist das teuerste Gerät dieser Art auf das ich Zugriff habe und
so dient es als Massstab in der folgenden Betrachtung.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/ut505a.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Es kann Isolationsmessung bei 50, 100, 250, 500 oder 1000V durchführen und bietet
zusätzliche Messbereiche für Gleich- und Wechselspannung sowie einen speziellen
Niederohm-Bereich, der den vorgeschrieben Messstrom nach VDE701 verwendet und
auf 10mΩ genau auflöst. Die mitgelieferten Messkabel sind ordentliche Qualität
und man kann als Sonderzubehör eine Testsonde mit Taste (UT-L31) kaufen,
um die Isolationsmessung zu starten, ohne direkt am Gerät was drücken zu
müssen. Bisher bin ich sehr zufrieden mit dem Gerät – auch weil ich es für nur
150€ bekommen habe, während es in vielen Shops deutlich teurer angeboten wird.&lt;/p&gt;
&lt;p&gt;Im folgenden wollen wir mal erforschen, was die billigen Geräte zu bieten haben
und ob etwas dabei ist, das empfehlenswert sein könnte. Denn der Preis spielt
für Hobby oder Repair-Cafe durchaus eine Rolle.&lt;/p&gt;
&lt;h1&gt;Billigheimer&lt;/h1&gt;
&lt;p&gt;Und so habe ich mich auf eine Expedition quer durch das Aliexpressland gemacht
und viele Angebot gefunden.&lt;/p&gt;
&lt;p&gt;Das billigste Gerät, dass ich finden konnte, ist das &lt;em&gt;SZBJ BM500A&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/BM500.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Es ist schon für ca 15€ zu bekommen und kann genau eine Sache:
Isolationswiderstand messen. Und das bei 250, 500 oder 1000V.  Für den Preis
ist das nicht übel, allerdings hatte ich dieses Gerät in einem Video von &lt;em&gt;IMSAI
Guy&lt;/em&gt; gesehen und da schien es eher &lt;a href="https://youtu.be/1t5k6UFyImY?feature=shared&amp;amp;t=174"&gt;nicht richtig zu
funktionieren&lt;/a&gt; und so habe
ich davon Abstand genommen, eines zu kaufen.&lt;/p&gt;
&lt;p&gt;Das nächste im Preis-Ranking ist ein &lt;em&gt;SDKY IT811&lt;/em&gt;. Das äußerliche
Erscheinugsbild ähnelt dem Uni-T und es misst bei 100, 250, 500 oder 1000V
den Isolationswiderstand und bietet zudem eine Wechselspannungmessung bis 750V.
Es ist für knapp 40€ zu bekommen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/IT811.png" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Und dann gibt es noch ein Angebot von Zoyi (ZT1000R, aktuell 43€):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/zt1000r.png" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Und eins von einer "Marke" von der ich noch nie gehört habe: Snakol (SK-505a,
aktuell 39€):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/sk-505a.png" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Auf dem Papier sehen beide sehr ähnlich aus, was die Daten betrifft und ähneln
sehr dem Funktionsumfang des UT505a. Das ZT1000R scheint, wie das UT505a 0.01Ω
auflösen zu können, das SN-505a scheinbar nur 0.1Ω, aber verlassen würde ich
mich darauf nicht, ohne es getestet zu haben, da die chinesischen Datentabellen
auf Aliexpress oft schwer zu interpretieren sind.  Nur zum Thema Messstrom im
Niedrig-Ohm konnte ich für beide keine Angaben finden.&lt;/p&gt;
&lt;p&gt;Schließlich bin ich dann auf das &lt;em&gt;Vici VC4060&lt;/em&gt; gestoßen. Davon gibt es
verschiedene Varianten, die sich in Funktionsumfang und Preis unterscheiden.
Alle Modelle haben Messbereiche für V, A, mA (jeweils AC und DC), Widerstand,
Diodentest, Kapazität und Temperatur. Einige Modelle bieten NCV (non-contact
voltage detection) und/oder können Induktivitäten messen oder haben einen µA
Range. &lt;/p&gt;
&lt;p&gt;Alle diese Geräte haben eine Funktion zur Isolationswiderstandsmessung. Die
Basismodelle &lt;em&gt;VC4060A&lt;/em&gt; und &lt;em&gt;VC4060B&lt;/em&gt; können Isolation nur bei 1000V messen,
wohingegen das &lt;em&gt;VC4060B+&lt;/em&gt; schon 1000V und 500V bietet und das &lt;em&gt;VC4060AT&lt;/em&gt; kann
100V, 500V und 250V. Die Preise bewegen sich, je nach Modell zwischen 35 und
52€. Teils werden sie als &lt;em&gt;Motortester&lt;/em&gt; angepriesen.&lt;/p&gt;
&lt;p&gt;Vici ist immerhin ein richtiger Hersteller, der für seine Multimeter im unteren
Preissegment bekannt ist. Der eine oder andere hatte vielleicht mal ein VC99
oder VC8145. Letzeres hat M.J. Lorton vor Jahren mal auf seinem Youtube Kanal
auf Herz und Nieren getestet und trotz diverser Einschränkungen &lt;a href="https://www.youtube.com/watch?v=znu1v-5sflw"&gt;für durchaus
brauchbar befunden&lt;/a&gt;. Wie gesagt –
das sind keine super hochwertigen Instrumente, aber es hat mich neugierig
gemacht und so habe ich mir ein &lt;em&gt;VC4060AT&lt;/em&gt; besorgt (war in einer Sonderaktion für
unter 50€ zu haben).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/vc4060at.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Eindrücke&lt;/h1&gt;
&lt;p&gt;Und das wollen wir jetzt mal genauer untersuchen. Die Verarbeitung wirkt auf
den ersten Blick billig, aber nicht fürchterlich. Sofort fällt auf, dass der
ausklappbare Standfuß auf der Rückseite klemmt und nur ausgeklappt werden kann,
wenn man etwas Gewalt anwendet. Das liegt daran, dass der Ausschnitt im
Gummiholster nicht optimal geformt ist. Als nächstes legen wir mal Batterien
ein: 6x AA.  Und schon erlebe ich die nächste Überraschung – sie passen nicht!
D.h einzeln passen sie schon, aber alle sechs nebeneinander gehen nicht und
mindestens eine springt immer heraus, wenn man die vermeintlich letzte einlegt.
Sowas hab ich noch nie erlebt! Nach etwas rumprobieren und mit viel Nachdruck
ist es mir letztlich gelungen, Batterien eines anderen Herstellers gerade so
hineinzuquetschen. Uff!&lt;/p&gt;
&lt;p&gt;Einschalten und testen. Die Bedienung geht in Ordnung, der Drehschalter fühlt
sich gut an und die Gummitasten sind ok, aber nicht toll. Die LCD-Beleuchtung
ist ebenfalls ok und die mitgelieferten Messleitungen (2 Paar: einmal mit
Prüfspitzen und einmal mit Krokoklemmen) sind sichtlich günstig aber in
Ordnung.&lt;/p&gt;
&lt;p&gt;Nun wollen wir mal sehen, wie gut die Messungen zwischen den beiden
Instrumenten übereinstimmen. Zuerst hatte ich es mit dem Trenntrafo und anderen
Elektrogeräten versucht, aber beide Geräte zeigten einfach nur an, dass der
Widerstand jenseits des Messbereichs lag (&amp;gt;500MΩ). Das ist im Sinn der
Geräteprüfung natürlich erfreulich, aber hilft uns wenig, die Messgeräte zu
vergleichen. Also anders: Ich habe wie in meinen Handschuh-Isolationsmessungen
einen Pol an einen Ball mit Messingwolle geklemmt und den andern an eine
Messingschiene. Nun brauchen wir nur noch einen nicht zu perfekten Isolator.
Und da fiel mein Blick auf einen Radiergummi von Staedtler (Modell Mars
Plastic). Wolltet Ihr nicht auch schon immer wissen, wie gut ein Radiergummi
Euch schützt, wenn Ihr die Beschriftung spannungsführender Teile wegradiert?
Ich schon!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/insulation-test-vc4060at.jpg" class="Medium" alt="VC4060a zeigt 289MΩ"&gt;
&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/insulation-test-ut505a.jpg" class="Medium" alt="UT505a zeigt 328MΩ"&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht, liegen die Messwerte recht nah beieinander. Perfektion würde ich
hier kaum warten, denn der exakte Wert hängt auch ziemlich davon ab wie stark
ich mit der Messspitze aufdrücke. Ich finde das Ergebnis völlig OK.&lt;/p&gt;
&lt;p&gt;Und nun zu einer zweiten Disziplin: Sehr niedrige Widerstände. Diese Messung
ist wichtig, wenn man den Schutzleiterwiderstand bei der Geräteprüfung
bestimmen will, denn die VDE701 fordert einen Widerstand &amp;gt;0.3Ω. Zum Test
schließen wir die Krokoklemmen einfach kurz und messen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/low-ohm-vc4060at.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/low-ohm-ut505a.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Auch hier zeigen beide Geräte, dass der Widerstand vernachlässigbar ist, aber
das UT505a punktet mit einer Auflösung von 0.01Ω, während das VC4060AT nur 0.1Ω
Auflösung hat. Bei einer so eindeutigen Messung ist das OK, aber in Grenzfällen
(tatsächlicher Widerstand 0.2Ω oder 0.25Ω) kann das günstigere im Zweifel
keine eindeutige Aussage liefern bzw falsch liegen. Außerdem ist ein Messstrom
von mindestens 200mA gefordert. Das UT505a liefert den laut Datenblatt, beim
VC4060AT findet man nichts dazu im Datenblatt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/current-vc4060at.jpg" class="Medium" alt="Stromzange zeigt 0.01A"&gt;
&lt;img src="https://techbotch.org/blog/vici-vc4060at-insulation-tester/current-ut505a.jpg" class="Medium" alt="Stromzange zeigt 0.23A"&gt;&lt;/p&gt;
&lt;p&gt;Wie man klar erkennen kann, hält sich das UT505a an die Vorgabe, während beim
VC4060AT extrem wenig Strom fließt. &lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Für Sparfüchse ist das keine schlechte Lösung, ich rate aber unbedingt dazu,
die &lt;em&gt;AT&lt;/em&gt; Version zu nehmen, weil nur die bei der Isolationsmessung bis auf
250V runterkommt, was ich bei etwas empfindlicheren Prüflingen wichtig finde.
Die ganzen Multimeterfunktionen hätte ich nicht gebraucht, denn im Vergleich zu
"richtigen" Multimetern sind die Messbereiche nicht so toll, das Autoranging
zäh und ein ordentliches Multimeter habe ich eh immer parat.&lt;/p&gt;
&lt;p&gt;Insofern ist mir mein &lt;em&gt;UT505A&lt;/em&gt; lieber – es ist viel besser verarbeitet,
reagiert prompt auf Eingaben und fokussiert klar auf die Dinge, die ein
normales Multimeter eben nicht kann: Isolationsmessung von 50V bis 1000V, PI,
DAR und Werte speichern und ein Niederohm-Messbereich, der die vorgeschriebenen
200mA verwendet und auf 10mΩ genau auflöst. Vor allem letzteres können die Vici
Geräte nicht, so dass eine unangenehme Lücke bei der Testung von Elektrogeräten
bleibt. Wer aber vor allem Fehlersuche im Auge hat und keine offiziellen VDE701
Tests, der kann mit dem &lt;em&gt;VC4060AT&lt;/em&gt; in meinen Augen ein Schnäppchen machen.  Die
Geräte von Zoyi oder SNAKOL könnten vielleicht auch eine gute Alternative sein,
aber ich habe keins zum Testen.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Schutz gegen Stromschläge?</title><link href="https://techbotch.org/blog/glove-insulation-test/index.html" rel="alternate"/><published>2025-06-27T00:00:00+02:00</published><updated>2025-06-27T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-06-27:/blog/glove-insulation-test/index.html</id><summary type="html">&lt;p&gt;Wie Ihr zweifellos im Laufe der letzten Posts bemerkt habt, habe ich einen
hübschen kleinen Isolationstester. Und sicher kennt Ihr den Spruch "If all you
have is a hammer, everything looks like a nail.". Nun habe ich nicht &lt;em&gt;nur&lt;/em&gt; den
Isolationstester, aber ich habe ihn und insofern sehen aktuell schon …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wie Ihr zweifellos im Laufe der letzten Posts bemerkt habt, habe ich einen
hübschen kleinen Isolationstester. Und sicher kennt Ihr den Spruch "If all you
have is a hammer, everything looks like a nail.". Nun habe ich nicht &lt;em&gt;nur&lt;/em&gt; den
Isolationstester, aber ich habe ihn und insofern sehen aktuell schon viele
Dinge aus wie Isolationsprobleme. Z.B. Arbeitshandschuhe.&lt;/p&gt;
&lt;p&gt;In der Tat habe ich irgendwo schonmal richtige Elektrikerhandschuhe gesehen,
mich aber wenig dafür interessiert, denn sie waren groß und dick und
unhandlich. Nichts für filigrane Reparaturen, wohl eher für die Arbeit an
irgendwelchen elektrischen Anlagen, die aus irgendwelchen Gründen nicht
abgeschaltet werden können oder sowas.&lt;/p&gt;
&lt;p&gt;Aber das Grundprinzip fand ich schon einleuchtend und habe mich gefragt, ob 
normale Mechanikerhandschuhe vielleicht zumindest ein bisschen was bringen,
wenn man versehentlich an ein spannungsführendes Teil kommt. Und dann habe ich
auf Aliexpress welche gefunden, die sogar speziell für elektrische Arbeiten
angepriesen wurden. Und so kam mir der Gedanke, doch mal eine kleine Testreihe
zu machen, um herauszufinden, ob improvisierter Handschutz gegen Strom eine
gute Idee ist, oder totaler Quatsch.&lt;/p&gt;
&lt;p&gt;Also prüfen wir heute mal ein paar verschiedene Versionen auf ihre
Isolationswirkung.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; Alles was ich im folgenden mache oder schreibe ist eine blöde
Idee, die ihr nicht nachmachen solltet. Wenn ihr es trotzdem tut und tot
umfallt, seid ihr selber schuld.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;Versuchsaufbau&lt;/h1&gt;
&lt;p&gt;Die Anordnung ist simpel. Zunächst brauchen wir mal einen Finger-Dummy. Dazu
nehme ich ein kurzes Stück Messingschiene (15x1x100mm). Die polieren wir
erstmal blank, damit sie schön leitet. Unser Prüf-Finger wird dann auf
verschiedene Weise geschützt (z.B. in den Handschuh gesteckt) und so auf einen
Ball aus Messingwolle gelegt. Damit das ganze möglichst realitätsnah ist,
tauchen wir den Messfinger vor jedem Versuch in Salzlösung (0.1g/ml), damit
auch die Situation mit schwitzenden Händen abgedeckt ist. Das Ganze beschweren
wir mit einem Buch, damit etwas Kraft auf dem Kontakt ist, wie wenn man den
Leiter mittelfest greift und nicht nur zart berührt. Messingwolle und
Messfinger werden dann an den Isolationstester angeschlossen und je eine
Messung bei 1000V und ggf. auch niedrigeren Prüfspannungen durchgeführt.&lt;/p&gt;
&lt;p&gt;Zunächst mal das Ganze bei der Referenzmessung ohne jeden Schutz.  Natürlich
finden wir keine Isolation und müssen das Ganze auch nochmal im
niedrig-Widerstands-Modus nachmessen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/baseline-resistance.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;0.09Ω.&lt;/p&gt;
&lt;h1&gt;Testreihe&lt;/h1&gt;
&lt;p&gt;Zuerst stellen wir mal die verschiedenen Varianten der zu testenden
Schutzmaßnahmen vor.&lt;/p&gt;
&lt;h2&gt;Aliexpress Elektrikerhandschuh&lt;/h2&gt;
&lt;p&gt;Die erste Schutzmaßnahme ist ein Elektrikerhandschuh von Aliexpress, der
angeblich bis 400V isoliert. Er hat keinerlei Prüfzeichen (CE/VDE oder
ähnliches), daher ist unklar, ob er bei uns für diesen Zweck überhaupt zulässig
wäre.  Der Aufbau des Handschuhs ist wie bei vielen Modellen dieser Art: ein
dünner Textilhandschuh, der mit Kunststoff getränkt ist. Die Gummierung ist
wohl als mittelstark einzuordnen – ähnlich wie bei vielen Gartenhandschuhen. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/Elektrician-gloves.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Im Gegensatz zu vielen Mechanikerhandschuhen gleicher Machart reicht die
Gummierung auch über den Handrücken, wenn auch nicht so dick, wie an Fingern
und Handfläche.  Das spricht zumindest ein bisschen dafür, dass er tatsächlich
für den Schutz gegen Strom entworfen wurde.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/isolation-electrician.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das sieht doch schonmal vielversprechend aus! Lässt man die Messung eine Weile
weiterlaufen, sinkt der Wert im Laufe von ca. einer Minute von anfänglich 595MΩ
auf knapp unter 500MΩ. Klarerweise sehen auch die Messwerte bei niedrigeren
Spannungen hervorragend aus und das Gerät zeigt dort immer einen Range Overflow
("&amp;gt;500MΩ", "&amp;gt;200MΩ", etc. – je nach Messbereich).&lt;/p&gt;
&lt;p&gt;Und weil das so schön war, testen wir nun auch noch die Isolation am
Handrücken.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/isolation-electrician-back.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;303MΩ – nicht so perfekt, wie an den Fingern, aber immer noch sehr gut.&lt;/p&gt;
&lt;h2&gt;Hase Arbeitshandschuh&lt;/h2&gt;
&lt;p&gt;Der Nächste ist ein Mechanikerhandschuh der Firma Hase (Modell Padua Pro). Er
ist recht dünn und die Beschichtung fühlt sich wie Gummi an. Laut Hersteller
ist das Gewebe aus Nylon und die Gummierung ist Nitrilschaum. Das vorgesehene 
Einsatzgebiet sind Montagearbeiten. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/hase-padua-pro.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Elektrischen Schutz verspricht er nicht.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/isolation-hase-1000v.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wow! Das isoliert mal so gut wie garnicht. Der Tester schlägt sofort Alarm und
piepst und blinkt wie wild. Das ändert sich auch nicht, wenn ich die
Prüfspannung auf 500V, 250V, 100V oder 50V senke. Der Isolationswert schwankt
ziemlich und liegt in der Größenordnung von 20kΩ.&lt;/p&gt;
&lt;h2&gt;Aliexpress Arbeitshandschuh&lt;/h2&gt;
&lt;p&gt;Als nächstes prüfen wir einen dünnen Mechanikerhandschuh von Aliexpress. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/aliexpress-pu.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Der ist genauso aufgebaut (Textil mit Plastik, hier laut Hersteller PU).
Gedacht ist er für feine Arbeiten mit geringer mechanischer Beanspruchung. Es
ist ziemlich dünn und sehr angenehm zu tragen. Der Handrücken ist hier nur mit
Stoff bedeckt und nicht gummiert. Ich würde sowas z.B. für Fahrradreparaturen
nehmen. Einen Schutz gegen Elektrizität nimmt auch er nicht für sich in Anspruch.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/isolation-aliexpress.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und das ist auch gut so, denn auch dieser Handschuh fällt in Sachen Isolation
komplett durch: Wie beim vorigen, schlägt der Isolationstester Alarm bei allen
Spannungen. Der Messwert in der Größenordnung von 10–200kΩ wild herum.&lt;/p&gt;
&lt;h2&gt;Nitril-Einmalhandschuh&lt;/h2&gt;
&lt;p&gt;Als nächstes prüfen wir einen Einmalhandschuh aus Nitril, wie man ihn im
medizinischen Bereich verwendet oder auch zum Lackieren und ähnlichen Arbeiten.
Hier müssen wir nicht zwischen Fingern und Handrücken unterscheiden, da er
völlig homogen aufgebaut ist.  &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/einmalhandschuh.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Es ist wenig überraschend, dass auch der versagt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/isolation-einmalhandschuh.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h2&gt;Elektrikerhandcreme&lt;/h2&gt;
&lt;p&gt;Zuguterletzt prüfen wir noch die gute alte Elektrikerhandcreme:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/elektrikerhandcreme.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Dazu verteile ich einen ca. erbsgroßen Klecks der Creme so gleichmäßig wie
möglich auf dem Prüf-Finger und lasse sie gemäß Anleitung 10 Minuten trocknen.
Anfeuchten, Buch drauf und:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/glove-insulation-test/isolation-creme.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wow! 90MΩ – das hätte ich nicht erwartet. &lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Das war extrem aufschlussreich! Der fernöstliche Elektrikerhandschuh leistet
tatsächlich ganz gute Dienste, wohingegen man die Mechanikerhandschuhe absolut
vergessen kann, weil sie keinerlei Schutz bieten. Ich hatte nicht erwartet,
dass der Unterschied so groß ausfallen würde. Der Einmalhandschuh aus Nitril
taugt ebenfalls nicht als Schutz gegen Strom, zudem ist er völlig ungeeignet,
weil er sehr leicht reißen oder z.B. von scharfen Teilen durchbohrt werden kann
(scharfe Kanten, Anschlussdrähte, etc.).&lt;/p&gt;
&lt;p&gt;Ich denke ich werde unseren Testsieger wohl tatsächlich zukünftig verwenden.
Wer aber sicher gehen will, nimmt einen richtigen Elektrikerhandschuh mit
Prüfzeichen, oder lässt seine Pfoten komplett aus Spannungsführenden Geräten.&lt;/p&gt;
&lt;p&gt;Und Elektrikerhandcreme gibt es natürlich nicht.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Trennen nicht alle Trafos?</title><link href="https://techbotch.org/blog/isolation-transformer2/index.html" rel="alternate"/><published>2025-06-24T00:00:00+02:00</published><updated>2025-06-24T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-06-24:/blog/isolation-transformer2/index.html</id><summary type="html">&lt;p&gt;Im letzten Post hatten wir uns mit meinem Trenntrafo befasst und überprüft, ob
er sicher ist.  "&lt;em&gt;Aber halt mal&lt;/em&gt;" hat der eine oder andere da vermutlich
gerufen – "&lt;em&gt;sind nicht alle Trafos isoliert&lt;/em&gt;?".  Schließlich ist ihr Job
normalerweise, eine andere Spannung als am Eingang zu liefern und diese beiden
Spannungen gefälligst …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Im letzten Post hatten wir uns mit meinem Trenntrafo befasst und überprüft, ob
er sicher ist.  "&lt;em&gt;Aber halt mal&lt;/em&gt;" hat der eine oder andere da vermutlich
gerufen – "&lt;em&gt;sind nicht alle Trafos isoliert&lt;/em&gt;?".  Schließlich ist ihr Job
normalerweise, eine andere Spannung als am Eingang zu liefern und diese beiden
Spannungen gefälligst nicht zu vermischen – trennen also!?!&lt;/p&gt;
&lt;p&gt;Da ist natürlich was dran: zwischen der primären und der sekundären Wicklung
sollte eine Isolierung sein. Nicht umsonst sieht man schon auf dem
Schaltzeichen, dass die beiden Spulen separiert sind:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer2/transformer-symbol.png" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Die Kontakte 1 und 2 sind die Primärseite, in der Regel 230V, 3 und 4 sind die
Sekundärseite, z.B. 12V. Und wie man sieht, ist da keine Verbindung zwischen
den Seiten. Aber vielleicht ist das in der Realität ja anders? Also schnappen
wir uns einen beliebigen Trafo aus der Bastelkiste (dieser stammt aus einem
uralten Nokia Ladegerät und hat noch einen Brückengleichrichter an Bord)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer2/transformer.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;... und messen mit dem Isolationstester nach.  Wie beim letzten mal bei 500V:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer2/transformer-isolation.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;OK – komplett isoliert. Das ist gut. Aber wieso dann der Wirbel um spezielle
&lt;em&gt;Trenn&lt;/em&gt;trafos? Liegt es an dem ungewöhnlichen Windungsverhältnis von 1:1 und
dass der Trafo eben nichts tut außer trennen?  Sicherlich auch, denn für alle
anderen Anwendungen, als galvanische Trennung würde das ja wenig Sinn machen.
Aber es hält uns auch nichts davon ab, einen Trenntrafo mit anderem Verhältnis
zu bauen. Und ganz praktisch kann man auch welche kaufen, die 1:2 bzw. 2:1
haben, um z.B. USA Geräte in Europa zu reparieren. Und es gibt auch Trenntrafos
mit 12V Ausgangsspannung für die Beleuchtung in Pools.  Trenntrafos sind
normalerweise besonders gut/doppelt isoliert, da galvanische Trennung ihr
Hauptberuf ist.&lt;/p&gt;
&lt;h1&gt;Variacs&lt;/h1&gt;
&lt;p&gt;Heißt das also, dass ich mir den Trenntrafo sparen kann, wenn ich einen
Stelltrafo (aka Variac) habe? Nein! Jedenfalls in der Regel nicht. Zwar gibt es
Stelltrafos, die auch trennen, aber das preisgünstige Modell, dass ich habe
(und Ihr bestimmt auch) bietet &lt;em&gt;keine Trennung&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Aber haben wir nicht gerade gesehen, das eigentlich alle Trafos grundsätzlich
trennen können?  Kann ich nicht einfach die intern offenbar vorhandene
Erdungsverbindung abzwicken und fertig ist der Trenn-Stelltrafo?  Leider nein,
denn diese Stelltrafos sind keine normalen Transformatoren, sondern sogenannte
&lt;a href="https://de.wikipedia.org/wiki/Spartransformator"&gt;Spartransformatoren&lt;/a&gt; (engl.
Autotransformer). Und die haben nur &lt;em&gt;eine&lt;/em&gt; Spule, an der man dann durch einen
verschiebbaren Kontakt an verschiedenen Stellen Spannung abgreifen kann, um die
gewünschte Spannung zu liefern. Diese Dinger trennen prinzipbedingt nie.&lt;/p&gt;
&lt;p&gt;Aber man kann natürlich einen Trenntrafo davor schalten oder einen regelbaren
Trafo mit zwei Spulen bauen. Beides gibt es zu kaufen, aber sie sind teurer, als
die normalen Variacs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Achtung Lebensgefahr:&lt;/strong&gt; Gerade fernöstliche Firmen kennen den Unterschied oft
selber nicht und schreiben fälschlicherweise "Trenntrafo", auch wenn es keiner
ist! Z.B. dieses Gerät der renomierten Marke &lt;em&gt;VoOqo&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer2/amazon.png"&gt;&lt;/p&gt;
&lt;p&gt;Ich vermute, dass "&lt;strong&gt;Vo Oqo!&lt;/strong&gt;" der in China übliche Aufschrei bei elektrischem
Schlag ist und in etwa mit "Scheiße hab ich eine gewischt gekriegt" zu
übersetzen ist.&lt;/p&gt;
&lt;p&gt;Im Zweifel also immer selber prüfen! Mein Variac trennt definitiv &lt;em&gt;nicht&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer2/variac-isolation.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Augen auf beim Trafokauf und immer schön die Pfoten von spannungsführenden
Teilen fernhalten – mit oder ohne Trenntrafo.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Trenntrafo Sicherheitsprüfung</title><link href="https://techbotch.org/blog/isolation-transformer/index.html" rel="alternate"/><published>2025-06-20T00:00:00+02:00</published><updated>2025-06-20T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-06-20:/blog/isolation-transformer/index.html</id><summary type="html">&lt;p&gt;Wer hier hin und wieder mitliest, weiß: Ich bastle gerne an elektrischen
Sachen. Die meisten sind elektronische Geräte, die von einem externen Netzteil
mit irgendwo zwischen 3 und 20V versorgt werden. Das bedeutet, dass es meist
ungefährlich ist, an diesen herumzumessen, -löten oder -schrauben, selbst wenn
sie in Betrieb sind …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wer hier hin und wieder mitliest, weiß: Ich bastle gerne an elektrischen
Sachen. Die meisten sind elektronische Geräte, die von einem externen Netzteil
mit irgendwo zwischen 3 und 20V versorgt werden. Das bedeutet, dass es meist
ungefährlich ist, an diesen herumzumessen, -löten oder -schrauben, selbst wenn
sie in Betrieb sind (Ausnahmen bestätigen die Regel).  Ganz anders sieht das
aus, wenn ein Gerät direkt mit 230V versorgt wird und/oder man sogar direkt am
Netzteil arbeitet. Da kann man im Zweifel ordentlich eine gewischt kriegen, wenn
man seine Pfoten nicht unter Kontrolle hat. Deshalb ist die erste Regel: Immer
Stecker ziehen, bevor man sich ans Innere heranwagt. Es gibt allerdings manchmal
Situationen, in denen es nötig ist, am eingeschalteten Gerät zu messen.
Natürlich muss man dann extrem vorsichtig sein, um nicht tot umzufallen. Ein
Trenntrafo kann helfen, die Gefahr etwas zu reduzieren, wenn man versteht, was
der tut.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; Ich bin keine Elektrofachkraft, sondern Hobbybastler. Ich
gebe mir größte Mühe, die Dinge die ich hier mache, so korrekt wie möglich zu
tun und darzustellen. Obwohl ich hoffe, dass dieser Post hilfreich ist,
handelt es sich nicht um eine erschöpfende Referenz zur Geräteprüfung. Und es
wäre auch ziemlich dämlich, sein Leben einem Blog-Post anzuvertrauen, ohne
sich auch seriöser Quellen zu bedienen.  Wenn Ihr also am offenen Gerät
basteln wollt, macht Euch vorher mittels Fachliteratur oder ähnlichem klug
und beschwert Euch nicht bei mir, wenn Ihre eine gewischt bekommt.&lt;/p&gt;
&lt;p&gt;Solltest Du selbst Elektrofachkraft sein und hier sicherheitsrelevante Fehler
entdecken, lass es mich gerne wissen.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;Was macht ein Trenntrafo?&lt;/h1&gt;
&lt;p&gt;Ein Trenntrafo hat gewöhnlich ein Windungsverhältnis von 1:1. Auf den ersten
Blick scheint er also recht sinnlos: 230V gehen rein und 230V kommen wieder
raus. Was also soll das? &lt;/p&gt;
&lt;p&gt;Um das zu verstehen, muss man kurz überlegen, wie bei uns eine
Elektroverteilung aufgebaut ist.&lt;/p&gt;
&lt;h2&gt;Elektroverkabelung im Haushalt&lt;/h2&gt;
&lt;p&gt;Da sind zunächst mal die beiden Leiter, die den Strom liefern – das sind die
beiden runden Metall-Nupsies am normalen Schuko- oder Euro-stecker. Zumindest
bei uns in Deutschland, kann man den Stecker in zwei verschiedenen
Orientierungen in die Steckdose stecken ohne einen Unterschied zu bemerken.
Dennoch sind die beiden Leiter nicht das gleiche: Einer heißt &lt;em&gt;Neutralleiter&lt;/em&gt;
(aka &lt;em&gt;N&lt;/em&gt;. Bei uns blaues Kabel) und der andere heißt &lt;em&gt;Außenleiter&lt;/em&gt; (aka &lt;em&gt;Phase&lt;/em&gt;
oder &lt;em&gt;L&lt;/em&gt;. Bei uns braunes Kabel). Der Unterschied zwischen beiden besteht u.a.
darin, dass der &lt;em&gt;Neutralleiter&lt;/em&gt; bei uns normalerweise &lt;em&gt;geerdet&lt;/em&gt; ist.&lt;/p&gt;
&lt;p&gt;Wenn Du also mit einem Nagel in der Steckdose popelst und den Neutralleiter
erwischst passiert nichts. Berührst Du aber den Außenleiter, fließt Strom durch
den Nagel, durch Deine Pfoten, den Arm, den Körper und wieder raus aus den Füßen
und durch die Erde zurück zur Verteilung. Stromkreis geschlossen – alles
perfekt. Also außer für Dich, denn Du wirst dabei möglicherweise sterben.&lt;/p&gt;
&lt;p&gt;Außerdem gibt es noch den Schutzleiter (aka &lt;em&gt;PE&lt;/em&gt; oder &lt;em&gt;Schutzerde&lt;/em&gt;. Bei uns
Grün-Gelb). Der ist bei uns normalerweise im Hauptanschluss des Hauses mit dem
Neutralleiter &lt;em&gt;verbunden&lt;/em&gt;. Dieser Schutzleiter wird in einem eingesteckten
Gerät dann z.B.  mit dem Metallgehäuse verbunden. Wenn nun aus irgendwelchen
Gründen das Kabel des Außenleiters Kontakt mit dem Gehäuse bekommt, kann der
Strom über den Schutzleiter abfließen und wenn Du das Gehäuse berührst, ist
dieser Schutzleiter (hoffentlich) der geringere Widerstand und Du bekommst
nicht so viel Strom ab.&lt;/p&gt;
&lt;h2&gt;Und was soll nun der Trafo?&lt;/h2&gt;
&lt;p&gt;Der Trenntrafo trennt die Verbindung zur Erdung. D.h. wenn Du den Nagel von
vorhin noch hast und ihn in die Steckdose am Trafo steckst, gibt es &lt;em&gt;keinen&lt;/em&gt;
Stromfluss, egal welche Seite Du nimmst, weil es keinen Erdbezug mehr gibt.
Und das macht das Basteln am Gerät ein kleines bisschen sicherer. Allerdings
sollte man sich auch nicht allzu sicher fühlen, denn wenn Du es schaffst, beide
Leiter zu berühren (was bei geöffneten Geräten oft erschreckend leicht ist),
hilft der Trenntrafo kein bisschen. Also weiterhin Augen auf und keine Hektik
bei der Arbeit! Auch sollte erwähnt werden, dass der RCD (aka FI-Schalter) in
Deiner Hausverteilung &lt;em&gt;nicht auslöst&lt;/em&gt; wenn Du auf der Sekundärseite des Trafos
irgendwas anfasst. &lt;/p&gt;
&lt;h1&gt;Darf ich vorstellen? Mr. Bronson&lt;/h1&gt;
&lt;p&gt;Mein Trenntrafo ist ein Bronson TT1000. Wie der Name suggeriert, ist er ein
ganz harter Typ und kann kurzfristig bis zu 1000W liefern. Auf die Dauer
verträgt er 800W. Das ist massig genug für meine Zwecke – das meiste, mit dem
ich so bastle, hat vermutlich unter 300W und er hat genügend Reserven, um auch
mal eine kleine Bohrmaschine daran zu testen oder so.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/bronson-tt1000.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Ja – der scheint auf dem Kopf zu stehen, denn er ist eigentlich dafür entworfen,
irgendwo fest eingebaut zu werden und dann wird er mit der "Unterseite" irgendwo
oben angeschraubt. Vielleicht ist er ja auch für den australischen Markt gedacht
– egal.&lt;/p&gt;
&lt;p&gt;Und weil wir den ja als Sicherheitseinrichtung benutzen wollen, kann es nicht
schaden, ihn einer Sicherheitsprüfung zu unterziehen, z.B. sich davon zu
überzeugen, dass er auch wirklich trennt, aber auch die übrigen Test, die zu
einem eCheck gehören.  Dazu werden wir im Folgenden ein paar Dinge
prüfen/durchmessen. &lt;/p&gt;
&lt;h2&gt;Sichtprüfung&lt;/h2&gt;
&lt;p&gt;Bevor wir irgendwelche Messgeräte zücken, schauen wir uns den Trafo erstmal
gründlich an. Dabei geht es darum, ob irgendwelche Schäden zu sehen sind.
Ich gehe sehr pfleglich mit meinen Sachen um und so schaut er von allen Seiten
bestens aus: Keine beschädigten Kabel, lose Schalter oder sowas und auch im
Inneren klappert nix. Gut.&lt;/p&gt;
&lt;h2&gt;Messungen&lt;/h2&gt;
&lt;p&gt;Das Messprogramm richtet sich nach der VDE 701 und sieht folgendermaßen aus:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Schutzleiterwiderstand&lt;/li&gt;
&lt;li&gt;Isolationswiderstand&lt;/li&gt;
&lt;li&gt;Ableitstrom (Leckstrom)&lt;/li&gt;
&lt;li&gt;Berührungsstrom&lt;/li&gt;
&lt;li&gt;Ausgangsspannung&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Für Widerstände und Spannungen nehme ich meinen Isolationstester
(UT505A). Die Ströme messe ich mit dem Multimeter und einer Leckstromzange.&lt;/p&gt;
&lt;p&gt;Gute Hinweise speziell zu Trenntrafos fand ich in &lt;a href="https://www.fbz-e.de/downloads/info/geraetepruefungen_2017_9.pdf"&gt;diesem
Artikel&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Schutzleiterwiderstand&lt;/h3&gt;
&lt;p&gt;Zunächst machen wir einen ganz basalen Test: Wir prüfen, ob der Schutzleiter
angeschlossen ist und den geforderten geringen Widerstand von &amp;lt;0.3Ω aufweist.&lt;/p&gt;
&lt;h4&gt;Gehäuse&lt;/h4&gt;
&lt;p&gt;Dazu klemmen wir uns mit einer Messspitze auf den Schutzleiteranschluss an der
Kaltgerätebuchse und prüfen den Widerstand zu diversen Metallteilen am Gehäuse.
Solche berührbaren leitfähigen Teile sollten entweder sehr niederohmig mit dem
PE verbunden, oder sehr gut isoliert sein.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/pe1.jpg" class="Medium" alt="Messung an Gehäuseschraube: 0.09Ω"&gt;
&lt;img src="https://techbotch.org/blog/isolation-transformer/img/pe2.jpg" class="Medium" alt="Messung an LED-Fassung: 1.56Ω"&gt;
&lt;img src="https://techbotch.org/blog/isolation-transformer/img/pe3.jpg" class="Medium" alt="Messung an anderer Gehäuseschraube: 0.11Ω"&gt;&lt;/p&gt;
&lt;p&gt;Hm – an den Schrauben ist alles bestens, aber die LED-Fassung hat einen
Widerstand von 1.56Ω – also ist sie schon mit dem Schutzleiter verbunden (über
das Gehäuse), aber nicht so gut, wie es sein soll. Ich schätze mal, da ist
zuviel Lack dazwischen. Das müssen wir beheben, bevor es weitergehen kann.  Also
Gehäuse öffenen, LED ausbauen und am Blechgehäuse ein bisschen Lack
abschmirgeln, damit der Kontakt besser wird. Danach besteht auch dieser
Messpunkt den Test und wir können weitermachen.&lt;/p&gt;
&lt;p&gt;Nun sieht es sehr gut aus: Wir liegen unter dem vorgeschriebenen Grenzwert von
0.3Ω. &lt;/p&gt;
&lt;p&gt;Wenn Ihr die Messung normgerecht machen wollt, muss das Messgerät übrigens
einen Prüfstrom von mindestens 200mA verwenden. Das tun die meisten Multimeter
nicht und viele haben auch nicht die nötige Auflösung im mΩ Bereich:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/pe-fluke.jpg" class="Medium" alt="Messung Gehäuseschraube mit Fluke Multimert: 0.1Ω"&gt;&lt;/p&gt;
&lt;p&gt;Dennoch gibt es einen guten Anhaltspunkt. Das Multimeter im Bild zeigt klar
unter 0.3Ω, aber man würde sich wünschen, dass es um eine Stelle mehr Auflösung
hätte, um in Grenzfällen Klarheit zu haben. Bei so kleinen Widerständen spielt
auch der Widerstand der Messleitung eine Rolle, also vorher prüfen, wie hoch
der ist und mit der &lt;em&gt;Rel&lt;/em&gt; Funktion ausgleichen, wenn vorhanden.&lt;/p&gt;
&lt;p&gt;Und lest unbedingt den echten Widerstandswert ab und verlasst Euch nicht auf
die Durchgangsprüfung! Die piepst, je nach Modell, oft schon bei 30-50Ω.  Ich
hatte da mal ein chinesisches Anschlusskabel mit 5Ω PE-Widerstand – da piepst
es fröhlich, ist aber um den Faktor 16 zu hoch.&lt;/p&gt;
&lt;h4&gt;Sekundärseite&lt;/h4&gt;
&lt;p&gt;Aber was ist mit dem Schutzleiter an der &lt;em&gt;Sekundärseite&lt;/em&gt;? Bei einem Trenntrafo
zum Schutz bei Reparaturen sollte dieser &lt;em&gt;nicht&lt;/em&gt; mit dem Schutzleiter am
Stecker verbunden sein, denn sonst wäre die gewünschte Potentialtrennung in
Gefahr.  Wird der Trenntrafo hingegen eingesetzt, um irgendwelche
Brummschleifen zu unterbrechen und nicht als Sicherheitseinrichtung, sollte auch
dieser Schutzleiter verbunden sein. D.h. es lohnt sich sehr, diesen Punkt zu
überprüfen bevor man das Ding zu Schutzzwecken nutzt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/pe-pe.jpg" class="Medium" alt="Messung an Sekundär-PE: &amp;gt;22kΩ"&gt;&lt;/p&gt;
&lt;p&gt;22kΩ? Das klingt nicht gut, aber aufgepasst: da steht "&amp;gt;22kΩ" und das will uns
sagen, dass wir am oberen Ende des Messbereichs für "normale"
Widerstandsmessung angekommen sind und der wahre Widerstand auch erheblich
höher sein kann. Messe ich das mit dem Multimeter nach, sagt selbiges &lt;em&gt;OL&lt;/em&gt; –
also open circuit (bei meinem Multimeter also &amp;gt;50MΩ).&lt;/p&gt;
&lt;h3&gt;Isolationswiderstand&lt;/h3&gt;
&lt;p&gt;Als Nächstes wollen wir wissen, wie gut der Trafo isoliert ist. D.h. welcher
Widerstand zwischen der eingehenden Netzspannung und Gehäuse bzw. Sekundärseite
ist. Gefordert sind Isolationswiderstände von &amp;gt;1MΩ (&amp;gt;2MΩ bei Schutzklasse II),
wobei man bei gesunden Geräten typischerweise Werte im GΩ-Bereich findet
(ausgenommen Heizlüfter, Kochplatten etc.).&lt;/p&gt;
&lt;p&gt;Zur Messung muss der Hauptschalter des Trafos auf &lt;em&gt;An&lt;/em&gt; stehen, damit auch Strom
reinkommt. Dann klemmen wir uns mit dem Isolationstester auf beide Pole (N und
L), so dass diese verbunden sind:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/iso-setup.jpg" class="Medium" alt="Krokoklemme an N und L in der Kaltgerötebuchse geklemmt"&gt;&lt;/p&gt;
&lt;p&gt;Nun eine Messspannung von 500V (ja, echt) einstellen und los geht's.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Achtung:&lt;/strong&gt; Mein Trenntrafo wird diese Spannung problemlos abkönnen, aber
viele sensiblere elektronische Geräte könnten das &lt;em&gt;sehr&lt;/em&gt; übel nehmen. In
solchen Fällen ist es zulässig, den Isolationstest bei 250V zu machen oder bei
empfindlichen Geräten auch ganz zu übergehen.&lt;/p&gt;
&lt;h4&gt;Berührbare Teile&lt;/h4&gt;
&lt;p&gt;Zunächst mit der Prüfspitze die ganzen Metallteile am Gehäuse testen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/iso1.jpg" class="Medium" alt="Messung an Gehäuseschraube: &amp;gt;500MΩ"&gt;
&lt;img src="https://techbotch.org/blog/isolation-transformer/img/iso2.jpg" class="Medium" alt="Messung an LED-Fassung: &amp;gt;500MΩ"&gt;
&lt;img src="https://techbotch.org/blog/isolation-transformer/img/iso3.jpg" class="Medium" alt="Messung an anderer Gehäuseschraube: &amp;gt;500MΩ"&gt;&lt;/p&gt;
&lt;p&gt;Passt: alle Messungen zeigen einen Isolationswiderstand &amp;gt;500MΩ – das ist vom 
Grenzwert meilenweit entfernt.&lt;/p&gt;
&lt;h4&gt;Sekundärseite&lt;/h4&gt;
&lt;p&gt;Bei einem normalen Gerät wäre die Isolationsmessung hier beendet, aber bei
einem Trenntrafo interessiert uns natürlich auch die Isolation gegenüber der
Sekundärseite! Also messen wir noch die beiden Pole der Steckdose am Trafo:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/iso1-sekundär.jpg" class="Medium" alt="Messung an unterem Pol: &amp;gt;500MΩ"&gt;
&lt;img src="https://techbotch.org/blog/isolation-transformer/img/iso2-sekundär.jpg" class="Medium" alt="Messung an oberem Pol: &amp;gt;500MΩ"&gt;&lt;/p&gt;
&lt;p&gt;Passt – der Trenntrafo trennt wirklich.&lt;/p&gt;
&lt;p&gt;Zuguterletzt schauen wir uns auch nochmal die Isolation des sekundärseitigen PE
Kontakts an:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/iso-pe-sekundär.jpg" class="Medium" alt="Messung an sekundärem PE: &amp;gt;500MΩ"&gt;&lt;/p&gt;
&lt;p&gt;Und auch das sieht gut aus.&lt;/p&gt;
&lt;p&gt;Die Isolationstests sind mit dem Multimeter kaum machbar. Mein Fluke 87V z.B.
kann zwar bis zu 50MΩ messen, aber die Messspannung liegt typischerweise bei
nur ein paar Volt. Aber auch hier gilt: im Hobby-Bereich ist das besser als
hoffen.&lt;/p&gt;
&lt;h3&gt;Ableitstrommessung&lt;/h3&gt;
&lt;p&gt;Nun wollen wir noch wissen, ob es irgendwelche Leckströme gibt. D.h.
ob Strom auf anderen Wegen fließt als Außenleiter und Neutralleiter. Dazu nehme
ich eine sehr sensitive Stromzange und messe gemeinsam den Außen- und
Neutralleiter. Dafür habe ich einen speziellen Adapter:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/leak-adaptor.jpg" class="Medium" alt="Messadaper: kurzes Verlängerungskabel mit freiliegenden Einzeladern"&gt;&lt;/p&gt;
&lt;p&gt;Der ermöglicht es, nach Wunsch PE, N oder L einzeln oder gemeinsam mit einer
Stromzange zu messen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/leak-current1.jpg" class="Medium" alt="Stromzange um N und L am Messapdapter: 0.025mA"&gt;&lt;/p&gt;
&lt;p&gt;Alternativ ist es auch möglich, den Strom im Schutzleiter zu messen, was dann
ggf. auch mit einem normalen Multimeter möglich wäre, aber die Stromzangenmethode
ist aus verschiedenen Gründen besser.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/leak-current2.jpg" class="Medium" alt="Stromzange um PE am Messapdapter: 0.013mA"&gt;&lt;/p&gt;
&lt;p&gt;Wenn alles mit rechten Dingen zugeht, sollte dieser Differenzstrom genau Null
sein.  Die Norm fordert &amp;lt;3.5mA. Also hat unser Trafo auch diesen Test
bestanden. Zwar differieren die Werte beider Methoden, aber beide sind klar im
grünen Bereich (25 bzw. 13µA).&lt;/p&gt;
&lt;p&gt;Und wie beim Berührungsstrom auch nochmal mit umgedrehtem Stecker messen.
Passt alles.&lt;/p&gt;
&lt;h3&gt;Berührungsstrom&lt;/h3&gt;
&lt;p&gt;Nun ist der sog. Berührungsstrom an der Reihe. D.h. der Strom, der fließt, wenn
man das Ding mit einem geerdeten Kabel berührt. Der muss unter 0.5mA liegen.
Für diesen Test muss der Trafo &lt;em&gt;in Betrieb&lt;/em&gt; sein, also &lt;em&gt;eingeschaltet und ans
Netz angeschlossen&lt;/em&gt; und wir messen einfach den Strom zwischen Schutzleiter
und Metallteilen am Gehäuse. Dafür ist mein Multimeter wieder gut geeignet und
eine Mehrfachsteckdose liefert leichten Zugang zum Schutzleiter. In den µA
Bereich schalten, Messleitungen richtig einstöpseln und messen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/berührungsstrom1.jpg" class="Medium" alt="Messung an Gehäuseschraube: 0.0 µA"&gt;
&lt;img src="https://techbotch.org/blog/isolation-transformer/img/berührungsstrom2.jpg" class="Medium" alt="Messung an sekundärem PE: 0.1 µA"&gt;&lt;/p&gt;
&lt;p&gt;Wunnebar – alles im grünen Bereich.&lt;/p&gt;
&lt;p&gt;Und weil das so viel Spaß gemacht hat, drehen wir nun den Stecker um und
wiederholen die Messung mit umgekehrter Polung. Also Stecker abziehen und
andersrum wieder in die Steckdose. Ja – das ist ernst gemeint, denn wir wissen
bei unseren deutschen Steckdosen und Steckern nicht, welche Seite der
Außenleiter ist und welche Neutral.&lt;/p&gt;
&lt;p&gt;Auch diese Messungen sind OK.&lt;/p&gt;
&lt;h3&gt;Prüfung der Ausgangsspannung&lt;/h3&gt;
&lt;p&gt;Als Letztes prüfen wir, ob die Ausgangsspannung eigentlich korrekt erzeugt wird
und der Trafo nicht auf die Idee kommt, z.B. 1000V zu liefern, denn unser Trafo
sollte laut Spezifikation am Ausgang mehr oder weniger die gleiche Spannung
haben, wie am Eingang. Also Trafo in Betrieb nehmen und messen, was da rein
und wieder rausgeht:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/isolation-transformer/img/input-voltage.jpg" class="Medium" alt="Spannungsmessung an Mehrfachsteckdose: 225.0V AC"&gt;
&lt;img src="https://techbotch.org/blog/isolation-transformer/img/output-voltage.jpg" class="Medium" alt="Spannungsmessung an Ausgangssteckdose: 224.9V AC"&gt;&lt;/p&gt;
&lt;p&gt;Ebenfalls in Ordnung – die Spannungen stimmen nahezu perfekt überein.  Im Falle
unseres Trenntrafos ist das gleichzeitig auch die abschließende
Funktionsprüfung.&lt;/p&gt;
&lt;h1&gt;Werkzeugüberlegungen&lt;/h1&gt;
&lt;p&gt;All diese Messungen kann man am einfachsten mit einem speziellen VDE
Gerätetester machen. Im Repair-Cafe haben wir z.B. einen Benning ST-710, um
nach einer Reparatur zu prüfen, ob ein Gerät ruhigen Gewissens an den Besitzer
ausgehändigt werden kann. Diese Dinger sind nahezu idiotensicher, führen einen
durch die verschiedenen Messungen, sind speziell zu diesem Zweck gebaut und
haben diverse Prüfzeichen. Leider sind sie sehr teuer – das geht so bei 500€
los und man kann auch ein Vielfaches dafür ausgeben. Für den professionellen
Einsatz spielt das keine Rolle, privat oder im Repair-Cafe schon.&lt;/p&gt;
&lt;p&gt;Außerdem finde ich es sehr förderlich für das Verständnis, alle Tests auch
selbst und ohne automatische Führung durchführen zu können. Auch kann die
automatische Führung Einschränkungen mit sich bringen – z.B. wenn das
Messprogramm nur einen einzigen Messpunkt für PE-Widerstand oder
Berührungsstrom vorsieht. Ich verwende deshalb gerne meinen UT505A
Isolationstester. Der kann ebenfalls nach den Regeln der Kunst messen und deckt
alles außer der Strommessung ab. Für diese verwende ich Multimeter und
Leckstromzange.&lt;/p&gt;
&lt;p&gt;Ein Isolationstester hat noch einen weiteren Vorteil: Er kann bei einem
defekten Gerät nicht nur diagnostizieren, &lt;em&gt;dass&lt;/em&gt; ein Isolationsfeher vorliegt,
sondern auch helfen, die diversen Komponenten im Inneren zu prüfen, um die
Quelle des Fehlers zu finden und so ggf. eine Reparatur zu ermöglichen.&lt;/p&gt;
&lt;p&gt;Auch wenn mein Isolationstester mit ca. 150€ deutlich günstiger ist als ein
automatischer Gerätetester, ist das im privaten Bereich allerdings ein eher
exotisches Messgerät.&lt;/p&gt;
&lt;p&gt;Die Messung mit dem Multimeter ist, je nach Modell, nicht normgerecht, weil
sie in der Regel nicht alle geforderten Auflösungen/Messbedingungen (10mΩ bei
200mA Prüfstrom, &lt;span class="math"&gt;\(\ge\)&lt;/span&gt;10MΩ bei 500V Prüfspannung) abdeckt, aber im privaten Bereich
ist das besser als nichts. Wer sichergehen will, kann sich an einen Elektriker
wenden, aber auch viele Repair-Cafes haben Gerätetester und helfen
Privatbastlern hier gerne weiter – Prüfplaketten dürfen sie aber normalerweise
nicht verteilen.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Mein Trenntrafo ist bis auf eine Kleinigkeit in Ordnung – diese habe ich gleich
behoben und nun passt alles. Ich bin froh, ihn zu haben. &lt;/p&gt;
&lt;p&gt;Die oben beschriebenen Messungen sind auch für ganz normale Geräte (der
Schutzklasse I) relevant – v.a. nachdem man an ihnen herumgeschraubt hat.  Aber
auch für &lt;a href="https://techbotch.org/blog/another-demagnetizer/index.html"&gt;Neugeräte aus
Fernost&lt;/a&gt; ist ein
Sicherheitscheck erfahrungsgemäß keine schlechte Idee.&lt;/p&gt;
&lt;p&gt;Und wenn das Gerät Schutzklasse II oder III hat? Dann sind einige der Messungen
nicht anwendbar – ich bin sicher, Ihr merkt selber welche. Und es gelten zum
Teil andere Grenzwerte. Aber das führt hier zu weit und ich empfehle das in der
Norm oder einem entsprechenden Fachartikel nachzuschlagen – die sind leicht zu
finden und manche enthalten schöne Diagramme, was wann zu tun ist und welche
Grenzwerte gelten.&lt;/p&gt;
&lt;h4&gt;PS&lt;/h4&gt;
&lt;p&gt;Sorry für die schlechte Qualität der Photos. Als ich das gemacht habe, war es
schon spät und dunkel und ich musste den Kontrast im Nachhinein deutlich
anheben, damit die Messgeräte ablesbar werden.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Elektrische Fliegenklatsche</title><link href="https://techbotch.org/blog/electric-fly-swatter/index.html" rel="alternate"/><published>2025-06-15T00:00:00+02:00</published><updated>2025-06-15T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-06-15:/blog/electric-fly-swatter/index.html</id><summary type="html">&lt;p&gt;Sommerzeit – Insektenzeit. Das freut Blumen, Vögel und
Fliegenschwammhersteller, mich aber freut es nicht, denn die blöden Viecher
versuchen mein Blut zu trinken und mir durch ihr Surren nachts den Schlaf zu
rauben. Deshalb habe ich im Haus verteilt mehrere Insektenabwehrsysteme, die in
etwa die Form eines Tennisschlägers haben und die …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Sommerzeit – Insektenzeit. Das freut Blumen, Vögel und
Fliegenschwammhersteller, mich aber freut es nicht, denn die blöden Viecher
versuchen mein Blut zu trinken und mir durch ihr Surren nachts den Schlaf zu
rauben. Deshalb habe ich im Haus verteilt mehrere Insektenabwehrsysteme, die in
etwa die Form eines Tennisschlägers haben und die blöden Biester bei Kontakt
mit dem Metallgeflecht elektrisch verbrutzeln. Das ist effektiv und höchst
befriedigend für den Nutzer.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/electric-fly-swatter/fly-swatter.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Doch als ich gestern nach dem Ding griff um eine besonders lästige Mucke zu
vernichten zeigte es keine Wirkung. Batterie leer? Also Deckel auf, Batterien
raus und schon zeigt sich das ganze Ausmaß der Misere:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/electric-fly-swatter/batteries.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/electric-fly-swatter/battery-holder.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Was ist hier geschehen? Fox News titelt sofort "&lt;em&gt;Breaking News: Migrant
Mosquito Terrorist Attack in Germany&lt;/em&gt;". Gemäßigtere Nachrichtenportale ziehen
ein gewöhnliches Auslaufen von Alkalibatterien in Betracht. Ich schließe mich
letzterer Meinung an.&lt;/p&gt;
&lt;p&gt;Glücklicherweise ist das Krisengebiet auf Batteriefach mit Kontakten und dem
Anschlusskabel begrenzt, so dass eine Rettung möglich erscheint.&lt;/p&gt;
&lt;h1&gt;Zur Tat!&lt;/h1&gt;
&lt;p&gt;Erstmal alles auseinanderbauen: Schrauben raus, Gehäuse auf:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/electric-fly-swatter/springs1.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/electric-fly-swatter/springs2.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Dann die Federkontakte rausziehen und  alle befallenen Teile mittels
Wattestäbchen mit Essigessenz betupfen. Das schäumt sehr unterhaltsam und löst
die basischen weißen Verkrustungen auf. Ein paar Minuten einwirken lassen,
alles gründlich mit Wasser spülen und trocken. Zum Schluss habe ich die
Metallteile noch mit einem kleinen Spritzer Brunox Turbo-Spray versehen – in der
Hoffnung, dass das ein bisschen gegen künftige Korrosion der angegriffenen
Metallteile helfen möge.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/electric-fly-swatter/disassembled.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Beim Zusammenbau ist mir dann natürlich noch ein kleines Kabel abgebrochen  – Grrr.
Also wieder anlöten. Das war weniger leicht als erwartet, denn das Kabel war sehr
steif und nahm auch das Lötzinn nur widerwillig an. Definitiv keine
Kupferlitze – eher Stahl. Billigprodukt halt...&lt;/p&gt;
&lt;p&gt;Egal. Nun sind alle Schrauben wieder drin und es ist an der Zeit frische
Batterien einzulegen und einen kleinen Test zu machen. Also eine Mücke suchen,
Knopf betätigen und Mücke berühren – Brrrzzzzzzzzz – Rauch steigt auf – Mücke
verkohlt. Schön – die Welt wie sie sein soll!&lt;/p&gt;</content><category term="Electronics &amp; Computer"/></entry><entry><title>Seagate Barracuda Datenrettung</title><link href="https://techbotch.org/blog/seagate-data-rescue/index.html" rel="alternate"/><published>2025-06-03T00:00:00+02:00</published><updated>2025-06-03T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-06-03:/blog/seagate-data-rescue/index.html</id><summary type="html">&lt;p&gt;Heute haben wir eine defekte Festplatte. Konkret handelt es sich um eine
Seagate Barracuda ST31000528AS mit 1TB Speicher. Der Besitzer hatte sie in
seinem PC laufen, als er einen brenzlichen Geruch verspürte und die Platte
nicht mehr ging.  Die Platte ist schon älter und nicht irre viel Wert, aber es …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Heute haben wir eine defekte Festplatte. Konkret handelt es sich um eine
Seagate Barracuda ST31000528AS mit 1TB Speicher. Der Besitzer hatte sie in
seinem PC laufen, als er einen brenzlichen Geruch verspürte und die Platte
nicht mehr ging.  Die Platte ist schon älter und nicht irre viel Wert, aber es
könnte sein, dass sich noch Daten darauf befinden, die dem Eigentümer etwas
bedeuten und so versuchen wir uns heute an einer Datenrettung.&lt;/p&gt;
&lt;p&gt;Werfen wir mal einen Blick darauf:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/seagate-data-rescue/SATA-connector.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Der Plastik-Konnektor sieht in der Tat ziemlich verschmort aus. Also Platine
ausbauen und mal einen Blick von der anderen Seite werfen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/seagate-data-rescue/SATA-connector2.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Wow! Da hat's ordentlich gebrannt. Und eines der kleinen Bauteile ist zu einer
kleinen schwarzen Kugel verbrutzelt und auch die Nachbarn sind well-done.&lt;/p&gt;
&lt;p&gt;Nun könnte man versuchen, einfach den Konnektor und die verschmorten Bauteile
zu ersetzen, aber das birgt ein nicht unerhebliches Risiko, denn wenn wir was
wichtiges übersehen ist es nicht auszuschließen, dass die Platte den Controller
beschädigt.&lt;/p&gt;
&lt;p&gt;Der sicherere Weg ist, die ganze Platine zu tauschen. Auf Ebay finden sich
diverse Anbieter (in der Regel aus China) bei denen man gebrauchte
Festplattenplatinen bekommen kann. Aber welche brauchen wir genau? Dazu sollten
wir uns nicht allein auf die Modellnummer oder gar den Namen verlassen unter
dem die Platte verkauft wurde, denn Hersteller vertreiben häufig verschiedene
Versionen und manchmal sogar völlig andere Hardware unter dem gleichen Namen.
Was wir brauchen ist die Teilenummer der Platine. Die finden wir auf selbiger:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/seagate-data-rescue/pcb-id.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Also suchen wir nach dem Board &lt;code&gt;100536501 Rev A&lt;/code&gt;. Also auf
in die Bucht und eine Ersatzplatine suchen. Die kostet nicht die Welt. Die
Angebot liegen so zwischen $20 und $50. Diese hier habe ich dann genommen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/seagate-data-rescue/ebay.png"&gt;
&lt;img src="https://techbotch.org/blog/seagate-data-rescue/ebay2.png"&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht wird das gleiche Board für verschiedene Plattenmodelle eingesetzt
und unser konkretes ist nichtmal in der Liste des Verkäufers, aber das sollte
eigentlich keine Rolle spielen solange wir das richtige Platinenmodell haben.&lt;/p&gt;
&lt;h1&gt;Platinentransplantation&lt;/h1&gt;
&lt;p&gt;Nun heißt es also Platine tauschen. Aber halt – nicht so eilig!  Zwar haben wir
die richtige Platine besorgt, aber sie würde mit großer Wahrscheinlichkeit
nicht korrekt funktionieren, denn jede Platte hat einen Flash-Chip (oder auch
mal mehrere), der Firmware und quasi persönliche Daten genau seiner Platte
enthält. Z.B.  Seriennummer, SMART data, die Map defekter Sektoren und welche
nun ersatzweise verwendet werden und evtl. auch irgendwelche Kalibrierdaten.
Diese Daten sind essentiell für eine korrekte Funktion.&lt;/p&gt;
&lt;p&gt;Also suchen wir den mal:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/seagate-data-rescue/pcb.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;OK – neben diversen kleinen SMD Widerständen und Kondensatoren haben wir da:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;TI SH6968B&lt;/em&gt;: Microcontroller&lt;br&gt;
  Dieser scheint direkt mit dem Schreib-Lesekopf verbunden zu sein&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ST V60131&lt;/em&gt; Microcontroller&lt;br&gt;
  Dieser scheint das SATA Interface zu bedienen&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Samsung K4H561638J-LCCC&lt;/em&gt;: 256MB DDR SDRAM &lt;/li&gt;
&lt;li&gt;&lt;em&gt;Fairchild 2P102A&lt;/em&gt;: Integrated P-Channel MOSFET and Schottky Diode&lt;br&gt;
  Motorsteuerung?&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Winbond 25X40ALS15&lt;/em&gt;: 4Mbit/512KB SPI Flash&lt;br&gt;
  Das dürfte unser Firmware Chip zu sein&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Diese Typenbezeichnungen sind der Ersatzplatine entnommen – auf der originalen
sind teils leicht andere (bzw. von anderen Herstellern) verbaut, die aber
kompatibel sein dürften.&lt;/p&gt;
&lt;h1&gt;Firmware-Transfer&lt;/h1&gt;
&lt;p&gt;Als nächstes müssen wir die Daten des original-Firmware-Chips auf die
Ersatzplatine bringen. In der Regel macht man das einfach durch aus- und wieder
einlöten. Alternativ könnte man die Daten auch auslesen und den Chip der neuen
Platine damit programmieren. Beides hat seine Vor- und Nachteile: Auslöten
erfordert eine Heißluftstation und etwas Übung. Auch ist in diesem speziellen
Fall darauf zu achten, dass der Chip direkt neben dem SATA Konnektor liegt und
der somit geschützt werden muss damit er nicht wieder schmilzt. Da klingt
umprogrammieren besser, aber das wiederum setzt ein entsprechendes
Programmiergerät voraus und in der Praxis kann es manchmal Schwierigkeiten
geben Flash-Chips in-circuit auszulesen und zu programmieren, was dann auch
wieder Auslöten nach sich ziehen würde. &lt;/p&gt;
&lt;h2&gt;Flash!&lt;/h2&gt;
&lt;p&gt;Als erstes habe ich mal meinen CH341A Programmer herausgekramt und mit einem Clip
an den Flash-Chip angeschlossen. IMSprog starten, autodetect anklicken und:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/seagate-data-rescue/IMSprog.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Hm. Doof. Aber gut – dann eben auslöten. &lt;/p&gt;
&lt;h2&gt;Oder eben doch auf die heiße Art...&lt;/h2&gt;
&lt;p&gt;Zunächst löten wir mal den Chip von der verbruzelten Platine runter. Dazu
verwenden wir die Heißluftstattion – 400°C, 70% Luftstrom:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/seagate-data-rescue/hot-air.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Da die Platine eh entsorgt wird mache ich mir nicht die Mühe den bereits
geschmolzenen Konnektor irgendwie zu schützen. Ein paar Sekunden draufhalten
und der Chip kann mit der Pinzette abgehoben werden. Erfreulicherweise zeigte
das Plastik des Konnektors keinerlei Tendenzen zu schmelzen, d.h. das
Abschirmen können wir uns vermutlich auch bei der neuen Platine sparen.&lt;/p&gt;
&lt;p&gt;Nun also auf die gleiche Weise den Chip von der Neuen Platine entfernen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/seagate-data-rescue/chip-off.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Dann erstmal sauber machen: Mit etwas Entlötlitze und dem Lötkolben alles
Lötzinn von den Pads entfernen und mit Isopropylalkohol putzen. Dann die Pads
mit etwas bleihaltigem Lot verzinnen und ein bisschen Flussmittel auf das
Ganze und den Chip schonmal daneben legen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/seagate-data-rescue/flux.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Nun den alten Chip vorsichtig darauf positionieren, so dass die Ausrichtung
stimmt und die Beinchen schon in etwa auf den Pads liegen. Heißluft an und
einlöten. Zuletzt nochmal kurz mit dem Lötkolben nacharbeiten, alles mit Isoprop
putzen, fertig.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/seagate-data-rescue/done.jpg" class="Large"&gt;&lt;/p&gt;
&lt;h1&gt;Testen&lt;/h1&gt;
&lt;p&gt;Das ging problemlos von der Hand – aber geht die Platte nun auch?
Also erstmal den IDE/SATA2USB-Adapter anschließen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/seagate-data-rescue/sata2usb.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Strom drauf und an den Rechner anschließen. Die Platte läuft hörbar hoch – gut.
Wird sie detektiert?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ lsblk
NAME                        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                           8:0    0 931.5G  0 disk
└─sda1                        8:1    0 931.4G  0 part
nvme0n1                     259:0    0   1.8T  0 disk
├─nvme0n1p1                 259:1    0   512M  0 part  /boot/efi
├─nvme0n1p2                 259:2    0   488M  0 part  /boot
└─nvme0n1p3                 259:3    0   1.8T  0 part
  └─nvme0n1p3_crypt         254:0    0   1.8T  0 crypt
    ├─wintermute--vg-root   254:1    0   1.8T  0 lvm   /
    └─wintermute--vg-swap_1 254:2    0   976M  0 lvm   [SWAP]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;nvme0n1&lt;/code&gt; ist meine Laptop SSD und &lt;code&gt;sda&lt;/code&gt; ist die reparierte Platte – cool. Als
nächstes auf konkretere Lebenszeichen testen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ sudo smartctl -a /dev/sda
smartctl 7.3 2022-02-28 r5338 [x86_64-linux-6.1.0-37-amd64] (local build)
Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate Barracuda 7200.12
Device Model:     ST31000528AS
Serial Number:    9VP39LTJ
LU WWN Device Id: 5 000c50 01a20815b
Firmware Version: CC38
User Capacity:    1,000,203,804,160 bytes [1.00 TB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    7200 rpm
Device is:        In smartctl database 7.3/5319
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 2.6, 3.0 Gb/s
Local Time is:    Tue Jun  3 20:23:53 2025 CEST

==&amp;gt; WARNING: A firmware update for this drive may be available,
see the following Seagate web pages:
http://knowledge.seagate.com/articles/en_US/FAQ/207931en
http://knowledge.seagate.com/articles/en_US/FAQ/213891en

SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART Status command failed: Connection timed out
SMART overall-health self-assessment test result: PASSED
Warning: This result is based on an Attribute check.

General SMART Values:
Offline data collection status:  (0x82) Offline data collection activity
                    was completed without error.
                    Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0) The previous self-test routine completed
                    without error or no self-test has ever 
                    been run.
Total time to complete Offline 
data collection:        (  600) seconds.
Offline data collection
capabilities:            (0x7b) SMART execute Offline immediate.
                    Auto Offline data collection on/off support.
                    Suspend Offline collection upon new
                    command.
                    Offline surface scan supported.
                    Self-test supported.
                    Conveyance Self-test supported.
                    Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                    power-saving mode.
                    Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                    General Purpose Logging supported.
Short self-test routine 
recommended polling time:    (   1) minutes.
Extended self-test routine
recommended polling time:    ( 176) minutes.
Conveyance self-test routine
recommended polling time:    (   2) minutes.
SCT capabilities:          (0x103f) SCT Status supported.
                    SCT Error Recovery Control supported.
                    SCT Feature Control supported.
                    SCT Data Table supported.

SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   112   099   006    Pre-fail  Always       -       46938546
  3 Spin_Up_Time            0x0003   095   094   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   098   098   020    Old_age   Always       -       2698
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   075   060   030    Pre-fail  Always       -       33428981
  9 Power_On_Hours          0x0032   096   096   000    Old_age   Always       -       4186
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       597
183 Runtime_Bad_Block       0x0032   100   100   000    Old_age   Always       -       0
184 End-to-End_Error        0x0032   100   100   099    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   098   000    Old_age   Always       -       29
189 High_Fly_Writes         0x003a   098   098   000    Old_age   Always       -       2
190 Airflow_Temperature_Cel 0x0022   077   053   045    Old_age   Always       -       23 (Min/Max 23/23)
194 Temperature_Celsius     0x0022   023   047   000    Old_age   Always       -       23 (0 15 0 0 0)
195 Hardware_ECC_Recovered  0x001a   036   027   000    Old_age   Always       -       46938546
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
240 Head_Flying_Hours       0x0000   100   253   000    Old_age   Offline      -       6303 (79 5 0)
241 Total_LBAs_Written      0x0000   100   253   000    Old_age   Offline      -       3319003999
242 Total_LBAs_Read         0x0000   100   253   000    Old_age   Offline      -       3300937566

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das sieht &lt;em&gt;hervorragend&lt;/em&gt; aus. Als nächstes mounten und einen Blick werfen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ df -h
Filesystem                       Size  Used Avail Use% Mounted on
[...]
/dev/sda1                        932G  767G  165G  83% /media/phil/RESCUE
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Top! Die Platte läuft wieder. Allerdings sollte man sie nicht einfach
weiterverwenden, sondern umgehend alle Daten in Sicherheit bringen.
Also&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cp -ar /media/phil/RESCUE /media/phil/BACKUP/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und laaange laufen lassen. &lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Es ist uns wirklich gelungen die Patte wiederzubeleben und alle Daten zu
retten. Solche Projekte machen Spaß! &lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Neue Strombegrenzer Glühbirne</title><link href="https://techbotch.org/blog/compact-dim-bulb-tester/index.html" rel="alternate"/><published>2025-03-31T00:00:00+02:00</published><updated>2025-03-31T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-03-31:/blog/compact-dim-bulb-tester/index.html</id><summary type="html">&lt;p&gt;Vor einer ganzen Weile hatte ich mal meinen luxuriösen &lt;a href="https://techbotch.org/blog/current-limiter-lamp/index.html"&gt;&lt;em&gt;dim bulb
tester&lt;/em&gt;&lt;/a&gt; aka
Strombegrenzer-Glühbirne vorgestellt. Den benutze ich nach wie vor und bin sehr
glücklich damit.  Neuerdings hatte ich aber das Bedürfnis, eine kleinere,
einfachere Version zu bauen, die man leichter mitschleppen kann (Repair-Cafe).&lt;/p&gt;
&lt;p&gt;Also habe ich den ursprünglichen Schaltplan …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Vor einer ganzen Weile hatte ich mal meinen luxuriösen &lt;a href="https://techbotch.org/blog/current-limiter-lamp/index.html"&gt;&lt;em&gt;dim bulb
tester&lt;/em&gt;&lt;/a&gt; aka
Strombegrenzer-Glühbirne vorgestellt. Den benutze ich nach wie vor und bin sehr
glücklich damit.  Neuerdings hatte ich aber das Bedürfnis, eine kleinere,
einfachere Version zu bauen, die man leichter mitschleppen kann (Repair-Cafe).&lt;/p&gt;
&lt;p&gt;Also habe ich den ursprünglichen Schaltplan ein bisschen zusammengestrichen
und ein kleineres Gehäuse, sowie ein digitales Einbauinstrument für Strom und
Spannung besorgt. Hier meine Einkaufsliste:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gehäuse 120120x90mm (8,60€, Aliexpress)&lt;/li&gt;
&lt;li&gt;E27 Lampenfassung (3€, Amazon)&lt;/li&gt;
&lt;li&gt;Wippschalter mit 3 Positionen (3€, Amazon)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.aliexpress.com/item/1005003749533483.html"&gt;Digitales Panel-Meter&lt;/a&gt;, 230V, (4,20€, Aliexpress)&lt;/li&gt;
&lt;li&gt;Schuko-Verlängerungskabel, 1m (8€, Amazon)&lt;/li&gt;
&lt;li&gt;Kleiner Sicherungsautomat 10A (ca. 3-5€)&lt;/li&gt;
&lt;li&gt;2 Kabelverschraubungen (ca. 2€ wenn man eine ganze Tüte nimmt, Amazon)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also um die 30€, das finde ich OK.&lt;/p&gt;
&lt;p&gt;Zudem brauchen wir ein bisschen Litze (1.5mm²) und Material zum Kabel verbinden,
Laubsäge, Teppichmesser und Feile zur Gehäusebarbeitung, sowie natürlich eine
Glühbirne.&lt;/p&gt;
&lt;h1&gt;Planung&lt;/h1&gt;
&lt;p&gt;Diesmal halten wir die Dinge einfacher als beim letzten mal. D.h. mein
Schaltplan sieht so aus:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://techbotch.org/blog/compact-dim-bulb-tester/dim-bulb-tester.pdf"&gt;&lt;img src="https://techbotch.org/blog/compact-dim-bulb-tester/schematics.png" class="Large"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Achtung: das eingezeichnete Amperemeter ist in Wahrheit Teil des
Kombi-Instrument und funktioniert berührungslos in Form eines kleinen
&lt;a href="https://de.wikipedia.org/wiki/Stromwandler"&gt;Stromwandlers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mit einer Sache habe ich eine Weile gehadert: der Position des Voltmeters.
Grundsätzlich haben wir nämlich zwei Optionen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Vor der Lampe (wie oben eingezeichnet)&lt;/li&gt;
&lt;li&gt;Hinter Lampe und Schalter&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Variante 1 hat den Nachteil, dass die Netzspannung auch angezeigt wird, wenn
der Schalter auf &lt;em&gt;Off&lt;/em&gt; steht, was evtl. irreführend sein kann. Variante 2 wirkt
von daher sauberer, hat aber das Problem, dass das Panelmeter eine
Mindestspannung braucht und wenn wir eine stromhungrige Last anschließen bricht
diese hinter der Glühbirne zusammen und die Anzeige geht nicht mehr. Also habe
ich Variante 1 gebaut.&lt;/p&gt;
&lt;p&gt;Letztlich habe ich dann auch den &lt;em&gt;Lamp Test&lt;/em&gt; Taster weggelassen, weil man auch
ohne klarkommt und Taster für 230V ziemlich groß sind, wenn sie auch ein
bisschen Strom vertragen.&lt;/p&gt;
&lt;p&gt;Bei der Sicherung habe ich mich für 10A entscheiden – das ist genug für
eigentlich alle Geräte, die man mit sowas in Testbetrieb nehmen würde und
deutlich unter den 16A in der Verteilung, so dass im Falle eines Falles im
Repair Cafe nicht der Hausmeister gerufen werden muss, weil die lokale
Sicherung zuerst auslöst.&lt;/p&gt;
&lt;h1&gt;Frisch ans Werk&lt;/h1&gt;
&lt;p&gt;Also erstmal wieder die Ausschnitte für Schalter und Panelmeter anzeichnen,
mit dem Teppichmesser nachziehen, hübsche Löcher in die Ecken der Ausschnitte
bohren und den Rest mit Laubsäge, Feile und Messer erledigen bis die
Ausschnitte perfekt sind. Dann noch die Löcher für die Kabelverschraubungen
machen und schon sind die Gehäusearbeiten beendet.&lt;/p&gt;
&lt;p&gt;Nun alle Elemente in die frisch gesägten Löcher einbauen, Verlängerungskabel
durchschneiden, abmanteln und durch die Verschraubungen popeln. Dann die
Adern abisolieren und alles nach Plan verkabeln. Dabei habe ich diesmal keine
Wagoklemmen verwendet, sondern so Crimp-Kappen (CE1, CE2 und CE5 je nach Anzahl
und Querschnitt der Kabel, die rein müssen). Oh – und nicht vergessen, den
Stromwandler für die Stommessung über die braune Ader zu schieben, bevor man
diese anklemmt. Fragt nicht, woher ich das weiß. ;-)&lt;/p&gt;
&lt;p&gt;Fertig. Und so sieht das Ganze dann live und in Farbe aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/compact-dim-bulb-tester/dim-bulb1.jpg" class="Large"&gt;
&lt;img src="https://techbotch.org/blog/compact-dim-bulb-tester/dim-bulb2.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Sehr schön – gefällt mir gut. &lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Noch eine LED-Leuchte reparieren</title><link href="https://techbotch.org/blog/another-LED-light-repair/index.html" rel="alternate"/><published>2025-03-07T00:00:00+01:00</published><updated>2025-03-07T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-03-07:/blog/another-LED-light-repair/index.html</id><summary type="html">&lt;p&gt;Irgendwas scheint gerade in der Luft zu liegen, denn kaum habe ich die eine
LED-Leuchte repariert fängt die nächste an zu spinnen. Die Symptome sind recht
ähnlich wie beim letzten mal: Die Leuchte geht an, aber manchmal auch einfach
so wieder aus und je nach Lust und Laune irgendwann wieder …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Irgendwas scheint gerade in der Luft zu liegen, denn kaum habe ich die eine
LED-Leuchte repariert fängt die nächste an zu spinnen. Die Symptome sind recht
ähnlich wie beim letzten mal: Die Leuchte geht an, aber manchmal auch einfach
so wieder aus und je nach Lust und Laune irgendwann wieder an. Also vermute ich
mal, dass das heute langweilig wird und wir wieder die Ausgangs-Elkos wechseln
werden – gäääähn.&lt;/p&gt;
&lt;p&gt;Aber Eins nach dem Anderen. Erstmal Lampe von der Decke holen und einen Blick
darauf werfen: &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/another-LED-light-repair/led-driver.jpg" class="Large"&gt;&lt;/p&gt;
&lt;h1&gt;Schwester – Zange&lt;/h1&gt;
&lt;p&gt;Gehäuse von der Leuchte abschrauben, mit einem kleinen Schraubenzieher den
Deckel abklipsen und schon können wir die Platine herausnehmen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/another-LED-light-repair/pcb-top.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Das&lt;/em&gt; nenne ich mal eine wirklich billige Platine! Sie ist leicht verzogen,
alles wirkt billig und mäßig vertrauenerweckend. Dafür sehen die beiden
Ausgangs-Elkos eigentlich unauffällig aus. Und auch eine Messung von Kapazität
und ESR macht sie nicht verdächtig. Ja – nur in der Schaltung gemessen, aber
...&lt;/p&gt;
&lt;p&gt;Dafür findet sich an der unteren Kante leicht links von der Mitte ein sehr
dekorativer Brandfleck.&lt;/p&gt;
&lt;p&gt;Also Platine umdrehen und mal nachsehen, was sich auf der anderen Seite des 
Flecks findet:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/another-LED-light-repair/resistors.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Zwei Widerstände (R31, R32). Und sie sehen aus, als hätten sie ein hartes Leben 
gehabt, jedenfalls sind sie schön knusprig gebraten und die Lötstellen sehen 
sehr unglücklich aus. Noch viel unglücklicher sehen sie aber von der anderen 
Seite betrachtet aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/another-LED-light-repair/resistors2.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Die linke ist hauchdünn und die rechte existiert im Grunde nicht (mehr?).
Schlecht.&lt;/p&gt;
&lt;h1&gt;Operation&lt;/h1&gt;
&lt;p&gt;Also erstmal raus mit den beiden, Lötzinn schön mit etwas Entlötlitze aufsaugen
und alles mit Alkohol putzen. Die beiden sind parallel geschaltet und tragen
die Aufschrift &lt;code&gt;7502&lt;/code&gt; – also 75kΩ. Dann frische Widerstände suchen. In meiner
SMD-Widerstandsschachtel habe ich nach einigem Kramen zwei passende gefunden.
(ich muss die dringend mal besser sortieren...) Beide einlöten, alles wieder
zusammenbauen und die Lampe aufhängen. Strom an und geht wieder :-)&lt;/p&gt;
&lt;h1&gt;Unschuldsvermutung&lt;/h1&gt;
&lt;p&gt;Hiermit entschuldige ich mich förmlich bei den beiden Ausgangs-Elkos und
gelobe zukünftig immer die Unschuldsvermutung zu respektieren wenn ich einen
Blog-Post schreibe oder was repariere.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>LED-Leuchte reparieren</title><link href="https://techbotch.org/blog/LED-light-repair/index.html" rel="alternate"/><published>2025-02-23T00:00:00+01:00</published><updated>2025-02-23T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-02-23:/blog/LED-light-repair/index.html</id><summary type="html">&lt;p&gt;Die Umwelt ist was schönes und deswegen versuchen wir ja auch, sie zu
beschützen. Z.B.  indem wir alle Glühbirnen weggeschmissen und durch
LED-Leuchtmittel ersetzt haben. Das spart Strom und so eine LED hält viel
länger als ein Glühwendel. Leider ist das nur die halbe Wahrheit, denn mit der
LED …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Die Umwelt ist was schönes und deswegen versuchen wir ja auch, sie zu
beschützen. Z.B.  indem wir alle Glühbirnen weggeschmissen und durch
LED-Leuchtmittel ersetzt haben. Das spart Strom und so eine LED hält viel
länger als ein Glühwendel. Leider ist das nur die halbe Wahrheit, denn mit der
LED hat sich auch die Bauform "mit fest verbautem Leuchtmittel" verbreitet und so
muss man im Defektfall nicht nur die LED ersetzen, sondern oft die ganze Lampe.
Und so eine Lampe kostet schnell mal 50 bis mehrere hundert Euro. &lt;/p&gt;
&lt;p&gt;Warum sterben die so schnell? Ich dachte LED laufen ewig? Tun sie eigentlich
auch, aber die Lampenhersteller wollen natürlich möglichst günstig produzieren
und entsprechend billig sehen die LED-Treiber dann aus. Und um die Sache
schlimmer zu machen, müssen die Treiber hohe Temperaturen ertragen, weil sie in
der Regel in enge Gehäuse eingebaut und/oder unter abgehängten Decken verborgen
werden. Das stresst die Billigkomponenten über Gebühr und so sind es fast
immer die Treiber, die sterben – nicht die LEDs.  Leider hat das den gleichen
Effekt: neue Lampe kaufen. Geld spart man also durch die LEDs ganz sicher nicht
und ob es wirklich ökologischer ist, wenn man dauernd ganze Lampen wegwerfen
muss ist auch fraglich. Da machen Reparaturen total Sinn. Leider kann man die
Treibermodule nur in den seltensten Fällen als Original-Ersatzteil bekommen und
ist dann auf generische Treiber unbekannter Herkunft angewiesen, wobei man gut
aufpassen muss, dass sie auch wirklich zur Lampe passen. Oder besser: selber
reparieren.&lt;/p&gt;
&lt;p&gt;Heute war es mal wieder so weit: Es hat eine große Deckenleuchte erwischt.
Konkret ist es eine etwa 6 Jahre alte &lt;em&gt;Eglo Sarsina-C&lt;/em&gt;. Die leuchtet zwar noch,
verhält sich beim Einschalten aber ungewöhnlich: Sie geht kurz an, dann für ca.
eine Sekunde wieder aus bevor sie dann doch zu funktionieren beliebt. Ich
denke, darum sollte ich mich sofort kümmern und nicht abwarten, bis die
endgültig stirbt.&lt;/p&gt;
&lt;h1&gt;Obduktion&lt;/h1&gt;
&lt;p&gt;Also erstmal Lampe von der Decke holen und einen Blick hinein werfen. In der Blende
finden wir den LED-Treiber:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/LED-light-repair/LED-driver.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Deckel runter und hineinschauen und das Problem springt uns förmlich an:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/LED-light-repair/elkos.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Die beiden Elkos (820µF, 50V, 105°C) sehen deutlich gerundet aus. Sie liegen
auf der Sekundärseite und haben den Job, die Ausgangsspannung zu glätten.&lt;/p&gt;
&lt;p&gt;Die Lampe ist ca. 6 Jahre in Betrieb und im Laufe der Zeit steigt dann der ESR
(Equivalent series resistance = Serienwiderstand) der Kondensatoren, wodurch
sie noch heißer laufen und schließlich die Elektrolytflüssigkeit vor sich hin
köchelt und die Elkos bläht.&lt;/p&gt;
&lt;p&gt;Also löten wir die mal aus und vermessen sie:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/LED-light-repair/lcr1.jpg" class="Small"&gt;
&lt;img src="https://techbotch.org/blog/LED-light-repair/lcr2.jpg" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;OK – die sind hin. Nicht nur ist die Kapazität von 820 auf 34 bzw. 22 µF
gesunken, auch der ESR ist wie schon vermutet auf ca. 5-7 Ohm gestiegen. Zwar
haben wir kein Datenblatt für die konkreten Elkos, aber man kann Tabellen
finden, die ungefähre Richtwerte liefern. Und nach diesen Tabellen sollte ein
820 µF Elko, der für 50V ausgelegt ist einen ESR in der Größenordnung von 0.1 Ohm
haben.&lt;/p&gt;
&lt;h1&gt;Reparieren&lt;/h1&gt;
&lt;p&gt;Also müssen wir neue Elkos einbauen. Gesagt, getan: neue Elkos rein, Netzteil
wieder einbauen und Lampe an die Decke zurück hängen. Runter von der Leiter und
Strom an.  Trommelwirbel – geht wieder :-)&lt;/p&gt;
&lt;h1&gt;Nachtrag&lt;/h1&gt;
&lt;p&gt;Wer genau hingeschaut hat wird vielleicht gemerkt haben, dass meine Messung
nicht nach den Regeln der Kunst ausgeführt wurde: Um den ESR von Elkos zu
bestimmen, sollte man bei 100kHz messen während ich oben nur 1kHz eingestellt
hatte. Für die Kapazitätsmessung hingegen wären so ca. 100Hz besser gewesen.
Das verfälscht das Ergebnis. Leider habe ich die defekten Elkos schon entsorgt
und kann somit keine korrigierte Messung nachliefern. Aber es besteht dennoch
kein Zweifel, dass beide total im Eimer sind...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>eBooks unter LINUX nutzen</title><link href="https://techbotch.org/blog/eBooks-on-linux/index.html" rel="alternate"/><published>2025-02-11T00:00:00+01:00</published><updated>2025-02-11T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2025-02-11:/blog/eBooks-on-linux/index.html</id><summary type="html">&lt;p&gt;Wie Ihr sicher schon mitbekommen habt, interessiere ich mich für Elektronik und
da bleibt es nicht aus, dass ich mir Bücher zum Thema kaufe. Die meisten Bücher
meiner Elektronik-Bibliothek sind auf Englisch, denn irgendwie schaffen es
deutsche Autoren scheinbar nicht, den langatmig belehrenden Stil von
Schulbüchern der 50er Jahre abzustreifen …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wie Ihr sicher schon mitbekommen habt, interessiere ich mich für Elektronik und
da bleibt es nicht aus, dass ich mir Bücher zum Thema kaufe. Die meisten Bücher
meiner Elektronik-Bibliothek sind auf Englisch, denn irgendwie schaffen es
deutsche Autoren scheinbar nicht, den langatmig belehrenden Stil von
Schulbüchern der 50er Jahre abzustreifen. Englische Werke sind in der Regel
viel zugänglicher, ansprechender illustriert und einfach angenehmer zu lesen.
Allerdings gibt es auch Ausnahmen; so stehen seit vielen Jahren ein paar Bücher
aus der Reihe "Beuth Elektronik" in meinem Schrank, die ich recht gut fand.&lt;/p&gt;
&lt;h1&gt;Kein gutes Werk bleibt ungestraft&lt;/h1&gt;
&lt;p&gt;Nun juckte es mich neulich, mal wieder in den dritten Band (Grundschaltungen)
hineinzuschauen und ich finde das Buch nach wie vor gut (ich habe die 8.
Auflage, aktuell ist die 18.). Nun liest man so ein Buch ja normalerweise
nicht von Anfang bis Ende, wie einen Roman, sondern schlägt es eher gezielt
auf, wenn man ein konkretes Problem hat und da wünsche ich mir oft ein PDF. Das
kann man schnell durchsuchen und ich kann es immer auf meinem Rechner haben und
auch unterwegs hineinschauen. Also habe ich ein wenig im Netz recherchiert und
bin auch schnell fündig geworden. Buecher.de hat es im Angebot:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/eBooks-on-linux/buecher.de.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Sehr gut. Und umso besser, dass es nicht dieses blöde epub Format ist, sondern
ein richtiges PDF! Und 28€ ist es mir wert auch wenn ich das Buch eigentlich
schon habe. Also schnell auf &lt;em&gt;Bestellen&lt;/em&gt; klicken, bezahlen und sich auf den 
Download freuen.&lt;/p&gt;
&lt;p&gt;Umso größer war die Ernüchterung, als ich das File vor mir hatte:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ls
Beuth_Grundschaltungen_7968143316389.acsm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;acsm&lt;/code&gt; – WTF!?!&lt;/p&gt;
&lt;p&gt;Was in aller Welt ist ein acsm File? Okular oder Atril können es jedenfalls
nicht öffnen und das System hat keinen sinnvollen Vorschlag, womit man das
lesen kann.  Bei genauerer Betrachtung ist das auch kein Wunder, denn mit 1167
Byte ist es eindeutig zu klein, um tatsächlich ein Buch zu enthalten. Was also
ist das?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ file Beuth_Grundschaltungen_7968143316389.acsm
Beuth_Grundschaltungen_7968143316389.acsm: ASCII text
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Aha. Text also. Mal reinschauen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;fulfillmentToken&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;fulfillmentType=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;buy&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://ns.adobe.com/adept&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;xmlns:dc=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;distributor&amp;gt;&lt;/span&gt;urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;span class="nt"&gt;&amp;lt;/distributor&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;operatorURL&amp;gt;&lt;/span&gt;https://acs.pageplace.de/fulfillment&lt;span class="nt"&gt;&amp;lt;/operatorURL&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;expiration&amp;gt;&lt;/span&gt;2025-03-10T20:32:27Z&lt;span class="nt"&gt;&amp;lt;/expiration&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;transaction&amp;gt;&lt;/span&gt;SHBUECHER.BWS_xxxxxxxxx.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;span class="nt"&gt;&amp;lt;/transaction&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;resourceItemInfo&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;resource&amp;gt;&lt;/span&gt;urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;span class="nt"&gt;&amp;lt;/resource&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;resourceItem&amp;gt;&lt;/span&gt;0&lt;span class="nt"&gt;&amp;lt;/resourceItem&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;metadata&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;dc:title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;xmlns:dc=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Grundschaltungen&lt;span class="nt"&gt;&amp;lt;/dc:title&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;dc:format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;xmlns:dc=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;application/pdf&lt;span class="nt"&gt;&amp;lt;/dc:format&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;dc:identifier&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;xmlns:dc=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;span class="nt"&gt;&amp;lt;/dc:identifier&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/metadata&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;src&amp;gt;&lt;/span&gt;https://api.pageplace.de/v1/files/adrm/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/DT0xxx.xxxxxxxxxxxxx_xxxxxxxxx.pdf&lt;span class="nt"&gt;&amp;lt;/src&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;downloadType&amp;gt;&lt;/span&gt;simple&lt;span class="nt"&gt;&amp;lt;/downloadType&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/resourceItemInfo&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hmac&amp;gt;&lt;/span&gt;xxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;span class="nt"&gt;&amp;lt;/hmac&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/fulfillmentToken&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Die ganzen UUIDs und ähnliches habe ich zensiert, da zu vermuten ist, dass das
mein Zugangs-Schlüssel ist. Das erste das mir ins Auge sticht ist, dass da ein
Expiration Datum drin ist – in 1 Monat!?! Soll das heißen, dass ich danach den
Zugriff verliere? Oder zumindest der erneute Download nicht mehr möglich ist?
Das wäre sehr problematisch, denn was, wenn ich mal einen neuen Rechner habe
und das File irgendwo in den Tiefen des Adobe Systems verborgen ist und ich
garkein echtes PDF habe, das sich in meinem Backup findet?&lt;/p&gt;
&lt;p&gt;Also tun wir das was eigentlich nie jemand tut: wir lesen das Kleingedruckte.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/eBooks-on-linux/DRM.png"&gt;&lt;/p&gt;
&lt;p&gt;Na toll – da bin ich auf so ein blödes Digital Restriction Management
reingefallen.  Also kein PDF. Stattdessen ein Key-File für irgendein System von
Adobe, das (selbstverständlich) nicht für LINUX zur Verfügung steht.&lt;/p&gt;
&lt;p&gt;Also habe ich Buecher.de kontaktiert und sinngemäß wurde mir mitgeteilt: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ätsche-bätsch ist kein richtiges PDF. Stand ja auch da, dass mit "PDF" kein
PDF gemeint ist, sondern ein DRM Dings. Wer lesen kann ist echt im Vorteil.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bin ich hier bei den Simpsons oder was?&lt;/p&gt;
&lt;p&gt;Also habe ich zurückgeschrieben, dass ich das sehr betrüblich finde und man
halt nicht "PDF" schreiben soll, wenn man das garnicht so meint. Und überhaupt
würde ich das Buch gerne zurückgeben, wenn ich es schon nicht nutzen kann. &lt;/p&gt;
&lt;p&gt;Aber da habe ich wenig Hoffnung. Grrrrr.&lt;/p&gt;
&lt;h1&gt;Hilfe zur Selbsthilfe&lt;/h1&gt;
&lt;p&gt;Aber was kann man da sonst noch tun? &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Laute Flüche und Verwünschungen ausstoßen – das erleichtert.&lt;/li&gt;
&lt;li&gt;Sich ein bisschen mit dem DRM System befassen&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Zunächst habe ich einen Online-Konverter probiert, der aber nur endlos eine
"Bitte Warten" Animation gezeigt hat. Nach 10 Minuten hatte ich keine
Lust mehr zu warten.&lt;/p&gt;
&lt;p&gt;Also habe ich mich dann schnell Punkt 2 zugewandt und ein wenig recherchiert.
Es scheint verschiedene Wege zu geben – der einfachste ist wohl unter Windows,
denn soweit ich das lesen konnte bietet dieses Adobe Digital Editions Ding die
Möglichkeit, das PDF (oder in anderen Fällen ePub) herunterzuladen und lokal zu
speichern. Vermutlich braucht man dann immernoch das ACSM File oder ein
Passwort oder so, aber immerhin kann man das PDF speichern und verliert es
nicht. Aber das geht eben nur unter Windows oder MacOS.&lt;/p&gt;
&lt;p&gt;Also erforschen wir mal, ob wir das unter LINUX hinkriegen.&lt;/p&gt;
&lt;p&gt;Als erstes brauchen wir
&lt;a href="https://forge.soutade.fr/soutade/libgourou"&gt;libgourou&lt;/a&gt;.  Leider gibt es kein
fertiges Debian Package, also selber bauen.&lt;/p&gt;
&lt;p&gt;Zunächst müssen wir ein paar Dependencies installieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo apt install libcurl4-openssl-dev openssl libzip-dev libpugixml1v5-dev
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und dann klonen wir das git repository:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git clone https://forge.soutade.fr/soutade/libgourou.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und versuchen das zu kompilieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd libgourou
make all
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Doch leider:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Building libgourou 0.8.6
mkdir lib
./scripts/setup.sh
Cloning into &amp;#39;lib/updfparser&amp;#39;...
fatal: remote error: access denied or repository not exported: /updfparser.git
./scripts/setup.sh: line 6: pushd: lib/updfparser: No such file or directory
make[1]: Entering directory &amp;#39;/home/pagel/tmp/libgourou&amp;#39;
Building libgourou 0.8.6
mkdir obj
g++ -Wall -fPIC -I./include -I./usr/include/pugixml -I./lib/updfparser/include -O2 -c src/libgourou.cpp -o obj/libgourou.o
src/libgourou.cpp:25:10: fatal error: uPDFParser.h: No such file or directory
   25 | #include &amp;lt;uPDFParser.h&amp;gt;
      |          ^~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:72: obj/libgourou.o] Error 1
make[1]: Leaving directory &amp;#39;/home/pagel/tmp/libgourou&amp;#39;
./scripts/setup.sh: line 8: popd: directory stack empty
make: *** [Makefile:63: lib] Error 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hm. Nach kurzer Fehlersuche wird klar: da ist ein Fehler in &lt;code&gt;scripts/setup.sh&lt;/code&gt;. 
dort steht in Zeile 5:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git clone git://soutade.fr/updfparser.git lib/updfparser
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Der Pfad stimmt nicht. Korrekt muss es heißen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git clone git://soutade.fr/soutade/updfparser.git lib/updfparser
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;(Inzwischen ist das Problem im repository korrigiert worden.)&lt;/p&gt;
&lt;p&gt;Also neuer Versuch:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make ultraclean
make all
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Passt – der Build läuft brav durch. Sehr schön.&lt;/p&gt;
&lt;p&gt;Die Tools liegen nun unter &lt;code&gt;./utils&lt;/code&gt;. Nun könnte man das ganze mittels &lt;code&gt;sudo
make install&lt;/code&gt; installieren, aber eigentlich glaube ich nicht, dass ich das so
oft brauche. Also einfach lokal laufen lassen – ohne installation. Damit die
&lt;code&gt;gourou&lt;/code&gt; library von den Tools gefunden wird müssen wir erstmal eine
Umgebungsvariable setzen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;LD_LIBRARY_PATH=$PWD
export LD_LIBRARY_PATH
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun können wir die tools aufrufen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ./utils/adept_activate
adept_activate create new device files used by ADEPT DRM

Usage: adept_activate OPTIONS

Global Options:
  -a|--anonymous    Anonymous account, no need for username/password (Use it only with a DRM removal software)
  -u|--username     AdobeID username (ie adobe.com email account)
  -p|--password     AdobeID password (asked if not set via command line)
  -O|--output-dir   Optional output directory were to put result (default ./.adept). This directory must not already exists
  -H|--hobbes-version   Force RMSDK version to a specific value (default: version of current librmsdk)
  -r|--random-serial    Generate a random device serial (if not set, it will be dependent of your current configuration)
  -v|--verbose      Increase verbosity, can be set multiple times
  -V|--version      Display libgourou version
  -h|--help     This help
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sehr gut. &lt;/p&gt;
&lt;p&gt;Als nächstes brauche ich einen Account bei diesem Adobe-Dienst. Dazu muss ich
mich &lt;a href="https://account.adobe.com/"&gt;hier&lt;/a&gt; registrieren. Nun können wir ein config
File erstellen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ./utils/adept_activate -u phil@techbotch.org
Enter password:
phil@techbotch.org fully signed and device activated in /home/phil/.config/adept/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Als nächstes laden wir das verschlüsselte PDF herunter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ./utils/acsmdownloader ~/media/books/electronics/Beuth_Grundschaltungen_9783834361769.acsm
Download 100%
Created Grundschaltungen Elektronik 3.pdf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das PDF file ist passwortgeschützt. D.h. Okular &amp;amp; Co können es im Prinzip
öffnen, aber Ihr müsst jedes mal das Passwort eingeben. Das Passwort, dass Ihr 
nicht kennt. Nun kann man das sicher aus den Daten im &lt;code&gt;acsm&lt;/code&gt; File konstruieren,
aber dazu habe ich gerade keine Lust. &lt;/p&gt;
&lt;p&gt;Einfacher ist es, den Passwortschutz einfach zu entfernen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ./utils/adept_remove Grundschaltungen\ Elektronik\ 3.pdf -o Grundschaltungen\ Elektronik\ 3_unlocked.pdf
DRM removed into new file Grundschaltungen Elektronik 3_unlocked.pdf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und schon kann man das Ganze ohne lästige Passworteingabe nutzen. Und um
sicherzustellen, dass ihr das gekaufte PDF nicht versehentlich verbreitet,
könnt Ihr mit &lt;code&gt;pdftk&lt;/code&gt; wieder ein neues Passwort vergeben, das Ihr dann kennt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pdftk Grundschaltungen\ Elektronik\ 3_unlocked.pdf output Grundschaltungen\ Elektronik\ 3_locked.pdf user_pwd GreaTsEaCret
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sehr schön. Nun bin ich wieder versöhnt und kann das Buch so verwenden, wie
gedacht.&lt;/p&gt;
&lt;p&gt;Lustigerweise hat sich Buecher.de gerade als ich fertig war wieder gemeldet:
Sie würden das Buch kulanzweise zurücknehmen und mir eine Gutschrift geben. Ich
glaube das wird nicht nötig sein und sie werden die Begründung nicht gut
finden.&lt;/p&gt;
&lt;p&gt;Immerhin ist das Buch immer noch so gut wie früher – nur die Abbildungen sind
eine Katastrophe: Die wurden vom Verlag bei niedriger Auflösung und hoher
Kompression als JPG eingebunden und sind entsprechend unscharf und voller
Kompressionsartefakte. Da waren echte Profis am Werk ...&lt;/p&gt;
&lt;h1&gt;Darf man das?&lt;/h1&gt;
&lt;p&gt;Schwierige Frage. Einerseits haben die großen Medienkonzerne ja durchgesetzt,
dass die Umgehung von derartigen Nutzungseinschränkungen als Kaptitalverbrechen
gilt und mit dem Tode bestraft werden sollte. Andererseits gibt es da die
Sache mit der Privatkopie. Wobei ich ja nicht mal eine Kopie gemacht,
sondern einfach das Produkt nutzbar gemacht habe. D.h. wenn Ihr eine kompetente
Antwort auf die Fragen haben wollt, müsst Ihr mit einem Anwalt reden. Ob die
Antwort verständlich ausfällt wage ich nicht zu prognostizieren.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>8858 Heißluft "Station"</title><link href="https://techbotch.org/blog/hot-air-8858/index.html" rel="alternate"/><published>2024-12-28T00:00:00+01:00</published><updated>2024-12-28T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-12-28:/blog/hot-air-8858/index.html</id><summary type="html">&lt;p&gt;Manchmal muss man Zeug auslöten und wenn es sich dabei um SMD Bauteile handelt,
dann ist ein Lötkolben nicht die erste Wahl. Deshalb habe ich eine
Heißluftstation (Aoyue 852A++) – die war damals ziemlich billig und ist sicher
nicht das Gelbe vom Ei, aber sie funktioniert einigermaßen. Hin und wieder liebäugle …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Manchmal muss man Zeug auslöten und wenn es sich dabei um SMD Bauteile handelt,
dann ist ein Lötkolben nicht die erste Wahl. Deshalb habe ich eine
Heißluftstation (Aoyue 852A++) – die war damals ziemlich billig und ist sicher
nicht das Gelbe vom Ei, aber sie funktioniert einigermaßen. Hin und wieder liebäugle
ich mit dem Gedanken, mir eine moderne von Atten oder Quick zuzulegen, aber
bisher hat die alte gereicht.&lt;/p&gt;
&lt;p&gt;Neuerdings hatte ich aber manchmal das Bedürfnis nach einer mobilen Lösung
(Repair-Cafe) und da will man keine ganze Heißluftstation rumschleppen.  Also
habe ich mich mal umgesehen und bin auf Aliexpress fündig geworden.  Die
Beschreibung &lt;em&gt;Hot air gun 8858 Micro Rework soldering station LED Digital Hair
dryer for soldering 650W Heat Gun welding repair tools Heat Gun&lt;/em&gt; klingt
natürlich vielversprechend und der Preis war sehr verlockend. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/hot-air-8858/AliExpress.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Ja – kann gut sein, dass sie Müll ist, aber das wollte ich ausprobieren und
ich will sie ja auch nicht verwenden, um Laptopprozessoren zu wechseln,
sondern eher für Kleinkram, wie den gelegentlichen MOSFET oder Kondensator
oder auch mal für Schrumpfschlauch.&lt;/p&gt;
&lt;h1&gt;Erster Eindruck&lt;/h1&gt;
&lt;p&gt;Was bekommt man also für so kleines Geld? Zunächstmal ein Handstück, in das der
Ventilator für den Luftstrom eingebaut ist. Selbiges wird über einen 8-poligen
Stecker angeschlossen. Die Stromversorgung und Regelung erfolgt dann über ein
externes Netzteil, das größenmäßig an übliche Laptopnetzteile erinnert, aber
auch ein Display und drei Folientasten zur Einstellung von Temperatur und
Luftstrom beherbergt. Außerdem bekam ich drei verschiedene Düsen, ein
Ersatz-Heizelement und eine Ablage für das Handstück.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/hot-air-8858/hot-air-station.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/hot-air-8858/handpiece.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Laut Hersteller hat das Ding eine Leistung von max 700W, anderswo steht
100-650W Heizleistung. Die Temperatur lässt sich auf Werte zwischen 100 und 480
°C einstellen. Das Gebläse schaltet man in Stufen von 1 bis 10. &lt;/p&gt;
&lt;p&gt;Die Düsen werden aufgesteckt und haben eine Art Bajonettverschluss, der
allerdings wenig vertauenerweckend wirkt. Aber sie halten.&lt;/p&gt;
&lt;h1&gt;Innenleben&lt;/h1&gt;
&lt;p&gt;Also erstmal Gehäuse aufmachen. Das ist unerwartet einfach, denn es gilt nur,
vier Philips Schrauben zu lösen und schon sind wir drin. Keine Verklebung oder
irgendwelche "Tamper-Proof" Albernheiten. Deckel ab und schon sehen wir die
Platine:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/hot-air-8858/control-unit.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/hot-air-8858/pcb-detail.jpg" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Insgesamt recht aufgeräumt. Und freundlicherweise sind alle Buchsen ordentlich
beschriftet – das macht das Leben leichter. Zum Handstück gehen 8 Leitungen.
Zwei davon sind merklich dicker als die anderen – die dürften für die Heizung
sein. Zwei steuern vermutlich das Gebläse und zwei gehören zum
Temperatursensor. Der PE Anschluss ist ebenfalls zum Handstück geführt und der
achte Pin dürfte zum Magnetschalter gehen, der das Gerät abschaltet, wenn man
das Handstück in die Halterung legt.&lt;/p&gt;
&lt;p&gt;Messen wir mal nach, wieviel Spannung da verwendet wird. Die Heizung wird mit
240V betrieben, während der Lüfter nur 12 V bekommt. Auf der Platine kann man
gut den dicken Triac sehen, der das Heizelement steuert – leider ist er
unbeschriftet, so dass man im Falle einer Reparatur Spaß haben wird.&lt;/p&gt;
&lt;h1&gt;Test&lt;/h1&gt;
&lt;p&gt;Also probieren wir das Ding mal aus. Die Verarbeitung fühlt sich
erwartungsgemäß eher billig an, aber nicht unterirdisch.&lt;/p&gt;
&lt;h2&gt;Sicherheit&lt;/h2&gt;
&lt;p&gt;In der Vergangenheit hatte ich ein paar "interessante" Erlebnisse bezüglich
Sicherheit bei Billigimporten technischer Geräte. Deshalb prüfen wir zunächst
mal grob, ob zu erwarten ist, dass wir bei der Benutzung tot umfallen oder
nicht. Ich habe keinen richtigen Gerätetester, aber zumindest schauen wir mal
ein paar Basics an:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es sind keine Schäden zu erkennen und auch keine exponierten Teile, die so
  aussehen, als &lt;em&gt;sollen&lt;/em&gt; sie Strom führen.&lt;/li&gt;
&lt;li&gt;Das Netzkabel hat einen Schutzleiterkontakt und mündet in einen
  Kaltgerätestecker.&lt;/li&gt;
&lt;li&gt;Es gibt zwei offenliegende Metallteile: die Überwurfmutter am Stecker ist
  nicht an den Schutzleiter angeschlossen, das Metallrohr des Handstücks schon.
  Ich messe ca. 0.4-0.5Ω bis zum Schutzleiter am Netzstecker.&lt;/li&gt;
&lt;li&gt;Im eingeschalteten Zustand messe ich am Metallrohr so ca. 10-50 mV (AC) gegen
  den Schutzleiter und einen Strom von &amp;lt; 1 µA (AC). Im DC Modus messe ich
  garkeine Spannung oder Strom.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die Widerstandswerte sind vermutlich überschätzt, denn ich hab das mit normalen
Prüfspitzen gemacht und bei so kleinen Werten macht es einen großen
Unterschied, wie groß die Kontaktfläche ist und wie gut man andrückt.&lt;/p&gt;
&lt;p&gt;Ich bin keine Elektrofachkraft, aber ich hätte das Gerät nach obigen
Erkenntnissen in Schutzklasse I eingeordnet und dann sollten nach meinem
Verständnis auch Buchsengehäuse und Überwurfmutter geerdet sein. Im Großen und
Ganzen erscheint mir der Betrieb aber sicher.&lt;/p&gt;
&lt;h2&gt;Bedienung&lt;/h2&gt;
&lt;p&gt;Sobald das Gerät Strom bekommt leuchtet das Display auf ("OFF"), aber das Gerät
ist inaktiv.  Um es aufzuwecken drückt man &lt;code&gt;Set/ON&lt;/code&gt; und schon laufen Heizung
und  Gebläse an. Beim Aufheizen zeigt das Display dann die aktuelle Temperatur
des Heizelements.&lt;/p&gt;
&lt;p&gt;Die Temperatur lässt sich einfach durch die beiden Pfeiltasten verstellen.
Durch Drücken der &lt;code&gt;Set/On&lt;/code&gt; Taste wechselt man zur Gebläseeinstellung.  Hält man
eine Pfeiltaste länger gedrückt geht sie in den Speed-Modus und man kann zügig
die Zieltemperatur einstellen.  Positiv ist auch zu erwähnen, dass das
Handstück erkennt, ob es in der Halterung liegt, oder nicht und dann die
Heizung abschaltet und das Handstück kühlt, bevor das Gebläse dann abschaltet.&lt;/p&gt;
&lt;p&gt;Kurz: die Bedienung ist voll OK. Einzig das geringe Gewicht der Halterung stört
etwas, denn so fällt sie schnell um und man schiebt sie leicht ungewollt durch
die Gegend – ich glaube die ist dazu gedacht irgendwo festgeschraubt zu werden.
Vielleicht spendiere ich ihr mal eine kleine Stahlplatte als Fuß, um das zu
stabilisieren.&lt;/p&gt;
&lt;h2&gt;Temperatur&lt;/h2&gt;
&lt;p&gt;Der Pedant in mir will natürlich eine möglichst perfekte Übereinstimmung
zwischen Soll- und Ist-Temperatur. Aber wenn man ehrlich ist, hat das bei einer
Heißluftstation eher untergeordnete Bedeutung, da man in der Praxis ohnehin
eher heiß loslegt und einfach aufhört, wenn das Lötzinn geschmolzen ist.
Dennoch will ich wissen, wie gut die Kalibrierung ist. Nachkalibrieren ist
weder in der Firmware vorgesehen, noch findet sich irgendwo etwas zum
einstellen auf der Platine.&lt;/p&gt;
&lt;p&gt;Also messen: K-Typ Temperatursensor wenige Millimeter vor der Düsenöffnung
platzieren und in verschiedenen Einstellungen messen:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flow&lt;/th&gt;
&lt;th&gt;&lt;span class="math"&gt;\(\vartheta_{set}\)&lt;/span&gt; [°C]&lt;/th&gt;
&lt;th&gt;&lt;span class="math"&gt;\(\vartheta_{meas}\)&lt;/span&gt; [°C]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;165&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;199&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;155&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;278&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;350&lt;/td&gt;
&lt;td&gt;319&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;370&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;147&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;273&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;350&lt;/td&gt;
&lt;td&gt;321&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;371&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Besser als ich erwartet hätte. Erst wenn das Gebläse stärker pustet kommt es zu
deutlichen Abweichungen. Es ist noch anzumerken, dass beim Anheizen oder höher
schalten die Temperaturanzeige des Displays der wahren Luftstromtemperatur um
etliche Sekunden vorauseilt.&lt;/p&gt;
&lt;h2&gt;Luftstrom&lt;/h2&gt;
&lt;p&gt;Der Luftstrom ist auch auf höchster Stufe nicht gerade orkanartig. Ich würde
das für mein Leben gerne quantifizieren, habe aber kein geeignetes Messgerät.
(Schnappatmung setzt ein – &lt;em&gt;mir fehlt ein Messgerät&lt;/em&gt; – aaaahhhhh).&lt;/p&gt;
&lt;h2&gt;Praxistest&lt;/h2&gt;
&lt;p&gt;Nach all den Trockenübungen ist es nun an der Zeit das Gerät mal im vorgesehenen
Einsatzfeld auszubrobieren. Also suchen wir eine alte Platine aus der Bastelkiste
und löten mal wahllos ein paar Sachen aus. Einstellung: 380°C, Gebläse auf 9.&lt;/p&gt;
&lt;p&gt;Als Erstes habe ich ein paar kleine SMD Kondensatoren ausgelötet – das flutschte
wie geschmiert. Als nächstes probieren wir mal einen Atmega 8 (TQFP Package):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/hot-air-8858/atmega8a.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/hot-air-8858/Atmega8a-off.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Ging problemlos. Die Zeit habe ich jetzt nicht gestoppt, aber ich würde tippen,
dass es so 20-40 Sekunden waren bis ich den Chip abheben konnte.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Alles in Allem bin ich positiv überrascht. Der Fön funktioniert ordentlich und
bietet für den Preis wirklich einiges. Wenn Ihr professionell Laptops repariert
ist er sicher nicht die richtige Wahl, aber für den Hobbybereich durchaus
brauchbar – v.a. wenn man wenig Platz hat und/oder eine mobile Lösung braucht.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Unterputzradio reparieren</title><link href="https://techbotch.org/blog/unterputz-radio-repair/index.html" rel="alternate"/><published>2024-12-26T00:00:00+01:00</published><updated>2024-12-26T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-12-26:/blog/unterputz-radio-repair/index.html</id><summary type="html">&lt;p&gt;Gerade ist Weihnachten und da sind wir normalerweise bei den Schwiegereltern.
Und die haben im Gästebad ein Unterputzradio. Also ein kleines Radio, das in
einer Unterputzdose montiert ist, wie sie normalerweise von Lichtschaltern oder
Steckdosen bevölkert werden. Das hat zwar nicht gerade Hifi Qualität, aber
fördert doch den frühmorgendlichen Erwachensvorgang …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Gerade ist Weihnachten und da sind wir normalerweise bei den Schwiegereltern.
Und die haben im Gästebad ein Unterputzradio. Also ein kleines Radio, das in
einer Unterputzdose montiert ist, wie sie normalerweise von Lichtschaltern oder
Steckdosen bevölkert werden. Das hat zwar nicht gerade Hifi Qualität, aber
fördert doch den frühmorgendlichen Erwachensvorgang. In letzter Zeit leistete
es aber keinen merklichen Beitrag zur Munterkeit mehr, weil es kaputt ist und
keinen Mucks mehr macht.  Das sollte geändert werden. Also habe ich es
ausgebaut und mitgenommen, um es mal gründlicher zu untersuchen und falls
möglich zu reparieren:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/unterputz-radio-repair/radio.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Autopsie&lt;/h1&gt;
&lt;p&gt;Als erstes gilt es das Ganze auszubauen und zu öffnen. Das war erfreulich
einfach. Zunächst muss man die Platte mit dem Display und den Tasten einfach
abziehen, dann kann man das Gehäuse aus der Unterputzdose herausschrauben.  Nun
muss man vier Clips anheben und die Rückseite des Gehäuses entfernen und schon
kann man das Netzteil entnehmen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/unterputz-radio-repair/netzteil.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/unterputz-radio-repair/netzteil2.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Die 14polige Buchsenleiste auf der Sekundärseite ist die Verbindung zum
Bedienteil.&lt;/p&gt;
&lt;p&gt;Und auch die Bedieneinheit ist geklipst und lässt sich mit einem Spatel und
etwas Geschick schnell öffnen, so dass wir freien Blick auf die Hauptplatine
bekommen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/unterputz-radio-repair/main-pcb.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Nachdem das Display völlig dunkel bleibt und das Radio auf nichts zu reagieren
scheint, liegt die Vermutung nahe, dass das Netzteil defekt ist. Also mal
genauer unter die Lupe nehmen. Die Sicherung ist ok.  Die beiden Elkos sehen
äußerlich gut aus und wenn man sie in der Schaltung misst, passen auch die
Kapazitätswerte ganz gut.  Das ist zwar noch kein Beweis, dass sie ok sind,
aber fürs erste schaue ich weiter. Der Gleichrichter wirkt beim Durchmessen
auch ok. Die Widerstände zeigen alle Werte, die zumindest in der richtigen
Größenordnung liegen und das gleiche gilt für die kleinen Keramikondensatoren.
Zunächst kommt mir die Schottky-Diode neben der Buchsenleiste spanisch vor,
aber nachdem ich sie ausgelötet habe, messe ich nichts auffälliges mehr. Also
wieder einlöten. Da ist noch ein MOSFET, der keine Zeichen von Kurzschluss
zeigt.&lt;/p&gt;
&lt;p&gt;Also mal an den Trenntrafo hängen und Netzspannung draufgeben. Über dem großen
Elko liegen ca. 220V an. Und hinter dem Gleichrichter messe ich 310V
Gleichspannung. Passt. Mal auf die Sekundärseite wechseln. An dem
Glättungs-Elko messe ich ca. 5V und finde diese auch an der Buchsenleiste
wieder. Wie es aussieht ist das Netzteil in Ordnung.&lt;/p&gt;
&lt;p&gt;Hm. Dann sehen wir uns mal auf der Hauptplatine um. Die visuelle Inspektion
ergibt nichts auffälliges. Um sicherzugehen, dass es nicht doch noch was mit
der Spannungsversorgung ist, habe ich die Platine an mein Labornetzteil gehängt
und auf 5V eingestellt. Kanal an und mal sehen, ob das Ding nun evtl. auf die
Sensortasten auf der Rückseite reagiert...&lt;/p&gt;
&lt;p&gt;AUA! Da hab ich mir doch glatt die Pfoten verbrannt! Irgendwas auf der Platine
wird sehr unangenehm heiß! Also Platine fallen lassen, Spannung aus und alles
schön auf die Silikonmatte legen. Wärmebildkamera herauskramen und einschalten
– Pustekuchen – Akku leer. Dann eben anders: Finger auf die Platine und Strom
kurz an.  Aha – die Hitzequelle liegt also in der Nähe der Platinenkante in
Verlängerung der Steckerleiste (oben rechts auf obigem Bild). Da finden sich
zwei Kondensatoren, ein paar Spulen und so ein kleines Insekt. Etwas
Isopropanol draufspritzen, Strom wieder an und beobachten wo der Alkohol am
schnellsten verdampft. Es ist ganz eindeutig einer der beiden Kondensatoren.
Beide mal nachmessen: Durchgang. Also ist der heißere vermutlich abgebrannt und
nun leitend. Also auslöten. Nun ist der Kurzschluss weg.  Sicherheitshalber den
anderen auch auslöten und isoliert vermessen: 100µF. &lt;/p&gt;
&lt;h1&gt;Reparatur&lt;/h1&gt;
&lt;p&gt;Mal sehen, ob ich so einen da habe. Zwar finde ich in meiner SMD Sammlung
Kondensatoren der passenden Größe, aber leider keinen mit so hoher Kapazität –
bei 4.7µF ist Schluss.  Grumpf!&lt;/p&gt;
&lt;p&gt;Dann eben Plan B: in der Bastelkiste wühlen und ein PC-Motherboard hervorkramen
und mal alle Kondensatoren messen, die in etwa die richtige Größe haben. Und
nach einer Weile werde ich fündig. &lt;em&gt;PC085&lt;/em&gt; hat 100µF. Perfekt. Heißluft an,
Pinzette im Anschlag und Kondensator auslöten. Er ist zwar physisch etwas
kleiner, als das Original, aber das wird schon gehen. Einlöten und alles wieder 
zusammenbauen. Strom dran und:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/unterputz-radio-repair/working.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das Radio reagiert wieder. Sicherheitshalber habe ich dann noch einen
kleinen Lautsprecher rausgesucht und angeschlossen und ihm waren Töne zu
entlocken. Sieg!&lt;/p&gt;
&lt;p&gt;Allerdings werde ich noch einen neuen Kondensator bestellen, denn der aktuell
verbaute verträgt nur die Hälfte der Leistung des Originals. &lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>0b100 Advent</title><link href="https://techbotch.org/blog/2024-advent-0b100/index.html" rel="alternate"/><published>2024-12-22T00:00:00+01:00</published><updated>2024-12-22T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-12-22:/blog/2024-advent-0b100/index.html</id><content type="html">&lt;p&gt;&lt;img src="https://techbotch.org/blog/2024-advent-0b100/advent004.jpg" class="Medium"&gt;&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Lötkolbenwettstreit</title><link href="https://techbotch.org/blog/soldering-iron-shootout/index.html" rel="alternate"/><published>2024-12-12T00:00:00+01:00</published><updated>2024-12-12T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-12-12:/blog/soldering-iron-shootout/index.html</id><summary type="html">&lt;p&gt;Zum Elektronikbasteln muss man oft löten. Und so habe ich schon seit
Jahrzehnten einen Lötkolben. Mein erster war ein Ersa Tip 16. Der hatte wenig
Leistung und keine Temperaturregelung, hat mir aber lange Zeit gute Dienste
geleistet wenn es darum ging kleine Bauteile ein- oder auszulöten. Er
funktioniert bis heute …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Zum Elektronikbasteln muss man oft löten. Und so habe ich schon seit
Jahrzehnten einen Lötkolben. Mein erster war ein Ersa Tip 16. Der hatte wenig
Leistung und keine Temperaturregelung, hat mir aber lange Zeit gute Dienste
geleistet wenn es darum ging kleine Bauteile ein- oder auszulöten. Er
funktioniert bis heute und ich habe ihn erst kürzlich verschenkt.&lt;/p&gt;
&lt;p&gt;Lange Zeit habe ich nicht verstanden wieso man viel Geld für eine Lötstation
ausgeben sollte. Bis ich dann eine hatte: eine Weller WS 81. Ich weiß nicht
mehr wann ich sie gekauft habe oder was sie gekostet hat, aber ich schätze dass
sie bestimmt 20 Jahre alt ist. Die gibt es immer noch und man muss inzwischen
deutlich über 300€ dafür hinblättern. Soviel habe ich mit Sicherheit nicht
bezahlt...  Auf alle Fälle hat sie mir die Augen geöffnet, wozu man eine
geregelte Station mit 80W braucht: während mein Tip 16 konstant mit 16W heizte
und dann eben erstmal ordentlich eingebrochen ist, sobald man die Lötstelle
berührte, heizt die Station mit Volldampf nach, sobald die Spitzentemperatur
unter den Sollwert sinkt. Das macht viel mehr Spaß und auch dicke fette Stecker
auf einer großen Kupferebene sind plötzlich kein Problem mehr und auf der
anderen Seite gehen auch die fitzelich kleinsten SMD Krümel ohne
Kollateralschäden.&lt;/p&gt;
&lt;p&gt;Später habe ich mir noch einen TS100 Lötkolben angeschafft, weil der sich
aufgrund seiner Größe gut für unterwegs eignet. Allerdings wird der selten
benutzt.&lt;/p&gt;
&lt;p&gt;Und kürzlich wünschte ich mir des öfteren, ich hätte eine zweite Lötstation, um
sehr hartnäckige, eher größere Bauteile von zwei Seiten beheizen zu können,
damit das Auslöten besser geht. Über 300€ für eine zweite Weller kamen nicht in
Frage und so habe ich mich mal umgesehen, was es sonst noch so gibt. Und so bin
ich natürlich auf die üblichen Verdächtigen gestoßen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ersa&lt;/li&gt;
&lt;li&gt;Weller&lt;/li&gt;
&lt;li&gt;JBC&lt;/li&gt;
&lt;li&gt;Metcal&lt;/li&gt;
&lt;li&gt;Hakko&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Alle sehr gut, aber teuer. Zu teuer für ein Zweitgerät, außer man nimmt eine
der neueren mit viel weniger Leistung. Und so bin ich nach einiger Recherche auf
diverse chinesische Angebote gestoßen, die preislich attraktiver waren. Viele
wirkten wenig vertrauenerweckend, aber einige sahen sehr ordentlich aus und
konnten auch gute Reviews im Netz vorweisen. Eine stach für mich aus der Masse
heraus: Aifen A9 Plus. Die ist stilistisch einer JBC Station nachempfunden und
verwendet die selben Spitzen. Und sie war für etwas über 100€ zu bekommen. Und
das etwas ältere Modell A9E kann man teils für 60€ ergattern. Also habe ich
eine bestellt. Sie kam erstaunlich schnell an, obwohl sie den halben Globus
umrunden musste. Allerdings bedeutet das auch, dass im Falle eines Defekts eine
Rücksendung praktisch unmöglich ist (Versandkosten!).&lt;/p&gt;
&lt;p&gt;Mein erster Eindruck ist sehr gut: Alles fühlt sich vernünftig verarbeitet an,
die Spitze ist ruckzuck auf Temperatur und erste Lötversuche verliefen sehr
angenehm. Aber das wollen wir heute mal objektivieren. Und wo wir schon dabei
sind mache ich einen Vergleich meiner drei Lötgeräte daraus. Hier nochmal die
Wettbewerber:&lt;/p&gt;
&lt;h4&gt;Weller WS 81&lt;/h4&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/soldering-iron-shootout/Weller-WS-81.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h4&gt;Miniware TS100&lt;/h4&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/soldering-iron-shootout/miniware-TS100.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h4&gt;Aifen A9 plus&lt;/h4&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/soldering-iron-shootout/aifen-A9Plus.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h2&gt;Leistung&lt;/h2&gt;
&lt;p&gt;Als erstes schauen wir uns mal an, welche Leistung die drei haben. Dazu sehen
wir zunächst ins Datenblatt und messen dann auch selber nach – mit einem
normalen Energiemessgerät in der initialen Aufheizphase, wenn eigentlich alles
auf Vollgas laufen sollte.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Modell&lt;/th&gt;
&lt;th&gt;Nennleistung&lt;/th&gt;
&lt;th&gt;max. Leistung, gemessen&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Weller WS 81&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;82&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Miniware TS100&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aifen A9 Plus&lt;/td&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;105&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;D.h. die Aifen Station hat nominell fast doppelt so viel Leistung wie der
TS100.  Bei letzterem ist darauf zu achten, dass die 65 W nur bei einem 24V
Netzteil zur Verfügung stehen und sich die Leistung proportional zur Spannung
reduziert wenn man z.B. eines der gängigen 19V Laptop-Netzteile verwendet.
Meine Messwerte sind mit ziemlicher Vorsicht zu genießen, denn mein
Energiemessgerät ist nicht das schnellste. Also bitte nur als grobe
Orientierung betrachten.&lt;/p&gt;
&lt;h2&gt;Haptik&lt;/h2&gt;
&lt;p&gt;Der Lötkolben der Weller Station (WSP 80) ist schlank und liegt sehr angenehm
in der Hand. Das Kabel ist lang genug (150cm) und flexibel. Zum Wechseln der
Lötspitzen (LT-Serie) muss man die Hülse des Lötkolbens abschrauben, was
problemlos funktioniert, aber etwas umständlicher als bei der Aifen. Dank eines
Plastikrings geht das aber auch wenn er heiß ist.&lt;/p&gt;
&lt;p&gt;Der TS100 ist etwas klobiger und auch nicht rund, sondern eher oval. In der
Praxis liegt er aber viel besser in der Hand als ich ursprünglich vermutet
hatte. Für industrielles Löten im Akkord ist das nix, aber für
Reparaturarbeiten oder Hobby voll ok. Die Kabellänge und Qualität hängt vom
verwendeten Netzteil ab (leider nur 115cm bei meinem). Der Spitzenwechsel ist
eine Qual, denn die Spitze wird nicht einfach nur eingesteckt, sondern mit
einer winzigen Imbusschraube gesichert und der dazugehörige Imbusschlüssel ist
natürlich immer unauffindbar. Beim Nachfolgemodell TS101 ist stattdessen eine
Schlitzschraube verbaut. Das Netzteil das ich dazu habe funktioniert gut, stört
aber beim Aufheizen merklich den Radioempfang in der Männerhöhle.&lt;/p&gt;
&lt;p&gt;Das T245 Handstück der Aifen Station liegt, genau wie das der Weller, super in
der Hand. Wie auch beim Vorbild von JCB ist am vorderen Ende des Handstücks
eine giftgrüne Schaumstoffhülse drübergestülpt, die wohl mehr Grip geben soll.
Ich finde sie gewöhnungsbedürftig, aber vielleicht lerne ich das im Laufe der
Zeit noch lieben.  Auch hier hat man genug Kabellänge (135cm) und ordentliche
Flexibilität.  Der Spitzenwechsel ist der angenehmste der drei Konkurrenten:
einfach stecken bzw. rausziehen. Zudem hat die Station ein Blech mit dessen
Hilfe man die Spitzen auch im heißen Zustand gut wechseln kann.&lt;/p&gt;
&lt;h2&gt;Anheizzeit&lt;/h2&gt;
&lt;p&gt;Wir starten komplett kalt, also bei Raumtemperatur, Schalten die Station ein
und messen, wie lange es dauert, bis die Station bei der Zieltemperatur
angekommen ist. Dabei verwende ich 350°C, außer bei dem TS100, denn der steht
beim Einschalten immer erstmal auf 300°C. Bis 350°C braucht er dann noch ein
paar Sekunden.&lt;/p&gt;
&lt;p&gt;WS81:    13s&lt;br&gt;
TS100:   9s (300°C)&lt;br&gt;
A9Plus:  2-4s  &lt;/p&gt;
&lt;p&gt;Die Werte beruhen, wie gesagt, auf den Messwerten des internen Sensors des
jeweiligen Lötkolbens. Wie genau die sind sehen wir später. Außerdem hinkt die
extern gemessene Temperatur an der Spitze ein paar Sekunden hinterher. Das
einigermaßen genau zu quantifizieren ist mir nicht wirklich gelungen, aber
vermutlich auch nicht kriegsentscheidend.&lt;/p&gt;
&lt;h2&gt;Kalibrierung&lt;/h2&gt;
&lt;p&gt;Als nächstes will ich wissen, ob die eingestellte bzw. angezeigte Temperatur
auch einigermaßen stimmt. Das sollte man nicht überbewerten, denn auf ein paar
Grad rauf oder runter kommt es normalerweise eh nicht an. Zur Messung verwende
ich ein original gefälschtes FG-100 Lötspitzenthermometer von Aliexpress.&lt;/p&gt;
&lt;p&gt;Hier die Ergebnisse:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Station&lt;/th&gt;
&lt;th&gt;Solltemperatur [°C]&lt;/th&gt;
&lt;th&gt;Messwerte im Gleichgewicht [°C]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;WS81&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;194-198&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;286-295&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;350&lt;/td&gt;
&lt;td&gt;348-352&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;386-391&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS100&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;203-208&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;291-295&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;350&lt;/td&gt;
&lt;td&gt;343-344&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;390-394&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A9 Plus&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;213-214&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;317-318&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;350&lt;/td&gt;
&lt;td&gt;357-359&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;411-413&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Alle drei Lötstationen lassen sich auch nachkalibrieren. So kann man beim TS100
und bei der Aifen Station eine Temperaturkorrektur über die Software einstellen
und bei der Weller Station kann man mit einem Schraubenzieher einen kleinen
Poti an der Front unter dem Einstellkopf verstellen (vorher Abdeckkappe
entfernen).&lt;/p&gt;
&lt;h2&gt;Overshoot&lt;/h2&gt;
&lt;p&gt;Eine andere interessante Frage ist die Qualität der Temperaturregelung. Vor
allem ob und wieviel die Spitzentemperatur über das eigentliche Ziel
hinausschießt und so unter Umständen ein sehr empfindliches Bauteil beschädigen
könnte.&lt;/p&gt;
&lt;p&gt;Um das zu untersuchen, starten wir den Lötkolben kalt (&amp;lt;100 °C) und beobachten
die Temperaturanzeige des Thermometers. Bei einer Zieltemperatur von 350°C
habe ich die folgenden Maximaltemperaturen beobachtet:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Station&lt;/th&gt;
&lt;th&gt;T [°C]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;WS81&lt;/td&gt;
&lt;td&gt;382&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS100&lt;/td&gt;
&lt;td&gt;364&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A9Plus&lt;/td&gt;
&lt;td&gt;382&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;D.h. alle drei haben einen gewissen Overshoot. Die mit mehr Leistung schießen
stärker über das Ziel hinaus.&lt;/p&gt;
&lt;h2&gt;Wärme-output&lt;/h2&gt;
&lt;p&gt;Als nächstes wollen wir die Kandidaten mal Stress-testen indem wir versuchen,
eine schöne große Lötzinnpfütze auf einem 5 Cent Stück zu schmelzen. Das ist
schwer zu quantifizieren und so gebe ich hier meinen 100% subjektiven Eindruck
wieder.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/soldering-iron-shootout/5cent.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Vorab: Alle drei Wettbewerber schaffen die Aufgabe. Der TS100 tut sich
erwartungsgemäß am schwersten, aber letztlich ist das Lot flüssig und lässt
sich auf der Kupfermünze verteilen. Die beiden richtigen Stationen schaffen die
Aufgabe geradezu erstaunlich schnell.  Ja – ein paar Sekunden Geduld braucht
man schon, aber wir reden hier auch von dem fettesten Kühlkörper auf dem ich je
herumgelötet habe.&lt;/p&gt;
&lt;h2&gt;Erdung&lt;/h2&gt;
&lt;p&gt;Manchmal wäre es wünschenswert, mit einem geerdeten Lötkolben zu arbeiten, um
Schäden durch elektrostatische Entladungen zu verhindern. Also prüfen wir mal
den Widerstand zwischen Lötspitze und Schutzerdung. Die Spitze der Weller
Station ist geerdet – das kann man ändern und das Handbuch gibt konkrete
Instruktionen, wie ein 3.5mm Klinkenstecker zu beschalten ist um verschiedene
Effekte zu erzielen. Auch bei der Aifen Station messe ich Durchgang zwischen
Spitze und Schutzleiter. Einzig beim TS100 gibt es zunächst keine Erdung. Die
kann man aber herstellen, indem man ein Erdungskabel an der dafür vorgesehen
Erdungsschraube anbringt und es mit dem Schutzleiter verbindet. Etwas
umständlich ist das allerdings schon.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Es gibt nichts zu meckern. Ich finde alle drei Lötstationen gut – je nach
Einsatzzweck. &lt;/p&gt;
&lt;p&gt;Mein TS100 ist praktisch für unterwegs, wenn auch mit weniger Leistung als
seine großen Geschwister. Die beiden großen Stationen funktionieren beide super
und sind gut verarbeitet. Die Aifen Station bietet natürlich viel mehr
digitalen Schnickschnack, aber wenn ich ehrlich bin ist ein simpler Poti das
beste User-Interface, dass ich mir für eine Lötstation vorstellen kann. Dennoch
hat mich die Aifen Station besonders positiv überrascht, weil sie nur ein
Drittel der Weller kostet und noch mehr Wumms hat als diese. Damit ist sie
meine neue Empfehlung für Leute, die eine Lötstation suchen und keinen
Geldscheißer haben (evtl. auch in der noch preiswerteren A9e Variante oder
sogar als A5 für ca. 50€).&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>FG-200 Funktionsgenerator auf USB-C umrüsten</title><link href="https://techbotch.org/blog/fg200-function-generator-usb-c/index.html" rel="alternate"/><published>2024-11-30T00:00:00+01:00</published><updated>2024-11-30T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-11-30:/blog/fg200-function-generator-usb-c/index.html</id><summary type="html">&lt;p&gt;Manchmal muss man bei Reparaturen und Experimenten ein Test-Signal generieren –
z.B. um das Verhalten einer Schaltung bei verschiedenen Frequenzen oder
Signalformen zu prüfen. Dazu habe ich einen Juntec PSG-9080 Funktionsgenerator.
Der ist wohl nicht die Krone der Messtechnik, hat aber für meine bisherigen
Bedürfnisse völlig ausgereicht.&lt;/p&gt;
&lt;p&gt;Kürzlich habe ich …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Manchmal muss man bei Reparaturen und Experimenten ein Test-Signal generieren –
z.B. um das Verhalten einer Schaltung bei verschiedenen Frequenzen oder
Signalformen zu prüfen. Dazu habe ich einen Juntec PSG-9080 Funktionsgenerator.
Der ist wohl nicht die Krone der Messtechnik, hat aber für meine bisherigen
Bedürfnisse völlig ausgereicht.&lt;/p&gt;
&lt;p&gt;Kürzlich habe ich mir zudem einen FG-200 Funktionsgenerator zugelegt. Nicht weil
der besser wäre – ganz im Gegenteil! Ich wollte den haben, weil er etwa so groß
ist wie eine Zigarettenschachtel und somit optimal, wenn man mal unterwegs oder
im Repair-Cafe ein Signal braucht und es nicht so auf Perfektion ankommt. Z.B.
ein einfaches Tonsignal.&lt;/p&gt;
&lt;p&gt;Ich hab ihn noch nicht oft benutzt und muss mich erstmal ein bisschen in das
Gerät einarbeiten, aber bisher erschien er mir für den geplanten Zweck
tauglich. Aber es gibt jetzt schon eine Sache, die ich lästig finde: Das Ding
hat zur Stromversorgung eine Tonnenbuchse und kam mit einem USB-Kabel mit dem
passenden Stecker. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fg200-function-generator-usb-c/fg200.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/fg200-function-generator-usb-c/power-socket.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/fg200-function-generator-usb-c/power-cable.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das verliere ich bestimmt und überhaupt hat sich die Welt doch schon lange auf
USB zur Stromversorgung solcher Kleingeräte geeinigt. Warum also keine USB-C
Buchse?  Da ich den Hersteller nicht persönlich kennengelernt habe, werde ich
wohl keine Antwort auf meine Frage bekommen, aber umrüsten kann ich ihn!&lt;/p&gt;
&lt;h1&gt;Auf geht's&lt;/h1&gt;
&lt;p&gt;Die Originalbuchse ist denkbar simpel und schnell ausgelötet. Als Ersatz habe ich so eine
USB-C Buchse mit Kabeln vorgesehen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fg200-function-generator-usb-c/usb-c-cable.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Also Leitungen kürzen und abisolieren, leicht verzinnen und anstelle der
ursprünglichen Buchse einlöten und mit Laubsäge und Nadelfeile das Loch für die
Buche passend vergrößern.  Die neue USB-C Buchse musste ich noch ein bisschen
zurecht schnitzen, damit das Gehäuse nach der Operation vernünftig zugeht, aber
das war kein Problem. &lt;/p&gt;
&lt;p&gt;Ich finde das Ergebnis sieht professionell aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fg200-function-generator-usb-c/usb-c-socket.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und funktioniert sogar:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fg200-function-generator-usb-c/done.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Manöverkritik&lt;/h1&gt;
&lt;p&gt;Das war einfach und nützlich. Einen Wermutstropfen gibt es aber: Die Buchse die
ich zur Hand hatte besitzt nur zwei Kabel – für +5V und Masse. Mit
traditionellen USB-A auf USB-C Kabeln funktioniert das wunderbar. USB-C auf
USB-C Kabel hingegen gehen nicht, denn der Standard fordert, dass das Gerät die
Pins &lt;code&gt;CC1&lt;/code&gt; und &lt;code&gt;CC2&lt;/code&gt; über je einen 5.1kΩ Widerstand auf Masse zieht und so
signalisiert, dass es gerne 5V hätte. Streng genommen signalisiert das wohl
auch, dass man bis zu 3A will, was natürlich nicht jedes Netzteil liefern kann.
Aber das würde nicht stören, denn das schöpfen wir eh nicht aus. Details findet
Ihr in diesem
&lt;a href="https://forum.digikey.com/t/simple-way-to-use-usb-type-c-to-get-5v-at-up-to-3a-15w/7016"&gt;Post&lt;/a&gt;
im Digikey Forum.&lt;/p&gt;
&lt;p&gt;Aber ich hatte keine passende Buchse da und für den Moment habe ich auch genug
USB-A auf C Kabel und Ladegeräte griffbereit. Vielleicht rüste ich das aber
später irgendwann mal nach...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Multimeter post-Halloween Schreck</title><link href="https://techbotch.org/blog/Multimeter/index.html" rel="alternate"/><published>2024-11-02T00:00:00+01:00</published><updated>2024-11-02T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-11-02:/blog/Multimeter/index.html</id><summary type="html">&lt;p&gt;Jeder der auch nur im entferntestes mit Elektronik oder Mikrocontrollern
rumspielt, verwendet immer wieder ein Multimeter um mal schnell Spannung,
Strom, Widerstand oder auch einfach nur Durchgang zu messen. Das Multimeter ist 
einfach das wichtigste Instrument eines jeden Elektronikbastlers. &lt;/p&gt;
&lt;p&gt;Laut &lt;a href="https://de.wikipedia.org/wiki/Multimeter"&gt;Wikipedia&lt;/a&gt; leitet sich das Wort
&lt;em&gt;Multimeter&lt;/em&gt; von lat. multus „viel …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Jeder der auch nur im entferntestes mit Elektronik oder Mikrocontrollern
rumspielt, verwendet immer wieder ein Multimeter um mal schnell Spannung,
Strom, Widerstand oder auch einfach nur Durchgang zu messen. Das Multimeter ist 
einfach das wichtigste Instrument eines jeden Elektronikbastlers. &lt;/p&gt;
&lt;p&gt;Laut &lt;a href="https://de.wikipedia.org/wiki/Multimeter"&gt;Wikipedia&lt;/a&gt; leitet sich das Wort
&lt;em&gt;Multimeter&lt;/em&gt; von lat. multus „viel“ sowie altgriechisch μέτρον métron „Werkzeug
zum Messen“ ab. &lt;/p&gt;
&lt;p&gt;Viele Leute interpretieren das als "Messwerkzeug mit dem man vieles messen
kann". Wobei es eigentlich nur Spannungen messen kann – fast der ganze Rest
wird dann über das Ohm'sche Gesetz berechnet und/oder über eine zusätzliche
Zeitmessung.&lt;/p&gt;
&lt;p&gt;Und überhaupt weiß ohnehin jeder, dass in Wahrheit gemeint ist, dass man im
Laufe der Jahre sehr viele Messgeräte anhäuft (&lt;em&gt;multi metros&lt;/em&gt; = viele
Messgeräte): billige und teure, große und kleine, Hand- oder Tisch-Geräte,
gelbe, rote oder blaue, mit und ohne Computerschnittstelle, TRMS oder mittelnd,
etc.&lt;/p&gt;
&lt;p&gt;Und auch ich habe jede Menge davon. Einige habe ich im Laufe der Jahre wieder
verschenkt: Z.B. mein Uni-T UT-61E, das Uni-T UT-8803E, ein Extech EX430, das
Voltcraft M-3850 (mein erstes Digitalmultimeter), oder mein allererstes
analoges Multimeter.  Aber keine Sorge, es sind noch genügend viele übrig ;-)
Z.B.:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AEG analog Messgerät&lt;/li&gt;
&lt;li&gt;Benning MM P3&lt;/li&gt;
&lt;li&gt;Brymen 789&lt;/li&gt;
&lt;li&gt;Brymen 869s&lt;/li&gt;
&lt;li&gt;Fluke 179&lt;/li&gt;
&lt;li&gt;Fluke 17b&lt;/li&gt;
&lt;li&gt;Fluke 87V&lt;/li&gt;
&lt;li&gt;Keithley DMM6500&lt;/li&gt;
&lt;li&gt;Siglent SDM3065X&lt;/li&gt;
&lt;li&gt;Uni-T UT216C&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Braucht man so viele? Nein, natürlich nicht. Zwei oder drei sind eigentlich
völlig ausreichend und auch mit einem einzigen kommt man recht weit. Aber ich
liebe die Dinger und jedes hat so seine Stärken und Schwächen und so verwende
ich Sie je nach Fragestellung, Präferenz und Mondphase.&lt;/p&gt;
&lt;h1&gt;Aaaaahhhrggg!&lt;/h1&gt;
&lt;p&gt;Und so begab es sich, dass ich einen kürzlich aus dem fernen Orient
eingetroffenen Encoder ausprobieren wollte und schnell zwei Pull-Up Widerstände
prüfen musste, bevor ich sie ins Breadboard stecke. Meine Wahl fiel auf das
Siglent SDM3065X. Schnell in den Widerstandsmodus schalten, Messspitzen an den
Widerstand und – nix! Hä? Nochmal probieren. Mal testweise eine Spannung messen
– auch nix. Was ist da los?  Messleitungen prüfen. Die sind ok. Hm...&lt;/p&gt;
&lt;p&gt;Nach viel Hin und Her habe ich den Selbsttest gestartet und, oh Schreck:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/Multimeter/sdm3065x-fault.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Nicht nur weisen die Spalten der Tabelle ein ästhetisch inakzeptabeles Alignment
auf, nein – das Ding ist im Eimer!!! Das gibt's doch nicht. Es ist vielleicht 1
1/2 Jahre alt und ich war immer sehr sorgsam bei meinen Messungen und habe ihm
nichts besonderes zugemutet. Tot – einfach so!?!&lt;/p&gt;
&lt;p&gt;Also habe ich gleich den Händler kontaktiert, von dem ich es gekauft hatte.
Aber es ist Wochenende und so werde ich wohl erst am Montag was hören. Immerhin
steht auf der Siglent-EU Seite was von 3 Jahren Garantie. Also bin ich
optimistisch. Wäre auch sehr schade, denn ich mag dieses Multimeter sehr.&lt;/p&gt;
&lt;h2&gt;Update 2024-11-26&lt;/h2&gt;
&lt;p&gt;Alles wieder gut. Siglent hat das Gerät zur Garantiereparatur angenommen und
heute habe ich es wiederbekommen nd erwartungsgemäß geht nun alles wieder.
Leider hatte ich meine Seriennummer nicht notiert, so kann ich nicht prüfen, ob
sie sich geändert hat. Aber ich glaube das komplette Board oder Gerät wurde
getauscht, denn es meldet nun es sei erst dreimal gestartet worden.
Aber Ende gut, alles gut. &lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Heizung einschalten</title><link href="https://techbotch.org/blog/turn-on-heating/index.html" rel="alternate"/><published>2024-09-15T00:00:00+02:00</published><updated>2024-09-15T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-09-15:/blog/turn-on-heating/index.html</id><summary type="html">&lt;p&gt;Seit einer Woche ist es saukalt draußen. Und seit gestern auch drinnen. Das
verdrießt mich. Offenbar ist es an der Zeit die Heizung in Betrieb zu nehmen.
Aber dazu müsste ich vom Sofa aufstehen, den Heizungsraum aufsuchen und mich
erinnern, welchen Knopf man da drücken muss. Ich finde das ist …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Seit einer Woche ist es saukalt draußen. Und seit gestern auch drinnen. Das
verdrießt mich. Offenbar ist es an der Zeit die Heizung in Betrieb zu nehmen.
Aber dazu müsste ich vom Sofa aufstehen, den Heizungsraum aufsuchen und mich
erinnern, welchen Knopf man da drücken muss. Ich finde das ist ein unzumutbarer
Aufwand und so gehen wir das anders an.&lt;/p&gt;
&lt;h1&gt;BSB-LAN&lt;/h1&gt;
&lt;p&gt;In einem &lt;a href="https://techbotch.org/blog/bsb-lan/index.html"&gt;früheren Beitrag&lt;/a&gt; hatte ich
ja schonmal von BSB-LAN berichtet und wie schön man damit die ganzen
Heizungsparameter auslesen kann. Auch hatten wir dann schon einen Haufen
MQTT-Sensoren definiert und seitdem kann ich der Heizung bequem bei der Arbeit
zusehen. Aber heute ist Schluss mit der reinen Zuschauerrolle – wir wollen was
schalten!&lt;/p&gt;
&lt;p&gt;Was wir dazu brauchen ist ein
&lt;a href="https://www.home-assistant.io/integrations/switch.mqtt/"&gt;MQTT-Switch&lt;/a&gt; – oder
mehrere, je nachdem wieviele Heizkreise Ihr so habt und ob das Trinkwasser
ebenfalls geschaltet werden soll.&lt;/p&gt;
&lt;p&gt;Gesagt – getan:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mqtt:
  switch:
    - name: &amp;quot;Modus Fussbodenheizung&amp;quot;
      state_topic: &amp;quot;BSB-LAN/700&amp;quot;
      command_topic: &amp;quot;BSB-LAN&amp;quot;
      payload_on: &amp;quot;S700=1&amp;quot;
      payload_off: &amp;quot;S700=0&amp;quot;
      state_on: &amp;quot;1 - Automatik&amp;quot;
      state_off: &amp;quot;0 - Schutzbetrieb&amp;quot;
      optimistic: false
      qos: 0
      retain: true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und falls wir das Trinkwasser ebenfalls schalten wollen fügen wir noch dies hinzu:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;- name: &amp;quot;Modus Trinkwasser&amp;quot;
  state_topic: &amp;quot;BSB-LAN/1600&amp;quot;
  command_topic: &amp;quot;BSB-LAN&amp;quot;
  payload_on: &amp;quot;S1600=1&amp;quot;
  payload_off: &amp;quot;S1600=0&amp;quot;
  state_on: &amp;quot;1 - Ein&amp;quot;
  state_off: &amp;quot;0 - Aus&amp;quot;
  optimistic: false
  qos: 0
  retain: true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Per Default, ist BSB-LAN auf read-only gesetzt. Das müsst Ihr ggf. noch ändern
(im Web Interface unter &lt;em&gt;Einstellungen&lt;/em&gt;):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/turn-on-heating/write-access.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und schon können wir das in die HASSIO GUI einfügen&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/turn-on-heating/gui-switch.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;... und können die Heizung bequem vom Sofa nach Belieben ein- oder ausschalten.
Die Welt wie sie sein sollte!&lt;/p&gt;</content><category term="DIY &amp; Workshop"/></entry><entry><title>SCPI Nervenzusammenbruch</title><link href="https://techbotch.org/blog/scpi-weirdness/index.html" rel="alternate"/><published>2024-09-06T00:00:00+02:00</published><updated>2024-09-06T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-09-06:/blog/scpi-weirdness/index.html</id><summary type="html">&lt;p&gt;Ich liebe es meine diversen Messgeräte fernsteuern zu können. Und deshalb achte
ich darauf, dass Neuanschaffungen eine entsprechende Schnittstelle bieten –
RS232, LAN, WLAN oder USB. Der Industriestandard in puncto
Kommunikationsprotokoll heißt
&lt;a href="https://www.ivifoundation.org/About-IVI/scpi.html"&gt;SCPI&lt;/a&gt; und wird von den
meisten meiner Geräte unterstützt. Wie das mit Standards aber oft so ist, hält
sich …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich liebe es meine diversen Messgeräte fernsteuern zu können. Und deshalb achte
ich darauf, dass Neuanschaffungen eine entsprechende Schnittstelle bieten –
RS232, LAN, WLAN oder USB. Der Industriestandard in puncto
Kommunikationsprotokoll heißt
&lt;a href="https://www.ivifoundation.org/About-IVI/scpi.html"&gt;SCPI&lt;/a&gt; und wird von den
meisten meiner Geräte unterstützt. Wie das mit Standards aber oft so ist, hält
sich die tatsächliche Standardisierung sehr in Grenzen und abgesehen von der
Kommandostruktur unterscheiden sich die verschiedenen Gerät doch erheblich und
v.a. billige Hersteller kochen da manchmal sehr ihr eigenes Süppchen. Und
spätestens bei Features, die sehr gerätespezifisch sind muss der Hersteller
sich eh was ausdenken.  Und so bin ich gerade dabei, für meine diversen Geräte
je eine Python Klasse zu schreiben, um die Steuerung zu vereinfachen und nicht
jedes Mal in das SCPI Handbuch des Geräts schauen zu müssen und dann diese eher
sperrigen Kommandos einzutippen. Dabei lerne ich gerade viel über die
Instrumente, weil ich ja ihre diversen Funktionen alle umsetzen will.  So zum
Beispiel für mein Uni-T UDP3305S Netzteil, oder meine ET5410A+ Elektronische
Last. &lt;/p&gt;
&lt;h1&gt;UDP3305S Labornetzteil&lt;/h1&gt;
&lt;p&gt;Im Großen und Ganzen klappt die Ansteuerung sehr gut.&lt;/p&gt;
&lt;p&gt;Und wenn ich nun z.B. die Spannung auf 12V setzen möchte, dann geht das so:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;SOURCE:VOLT 12
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und wenn ich wissen will, auf welchen Wert die Spannung eingestellt ist, dann 
schreibt man dies:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;SOURCE:VOLT?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Aus Gründen, die ich auch nicht verstehe gibt es aber ein weiteres Kommando,
das das selbe tut:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;APPLY: 12V
APPLY? VOLT
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So weit so einfach. Aber manchmal fragt man sich auch, ob das der Praktikant
entworfen hat. &lt;/p&gt;
&lt;h1&gt;Kanalauswahl&lt;/h1&gt;
&lt;p&gt;Das Netzteil hat drei echte Kanäle und zwei virtuelle Kanäle:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ch1 (0-30V, 5A)&lt;/li&gt;
&lt;li&gt;Ch2 (0-30V, 5A)&lt;/li&gt;
&lt;li&gt;Ch3 (0-6V, 3A)&lt;/li&gt;
&lt;li&gt;SER : Dabei werden Ch1 und Ch2 in Serie geschaltet, so dass bis
   zu 60V zur Verfügung stehen&lt;/li&gt;
&lt;li&gt;PARA: Hier sind Ch1 und Ch2 parallel geschaltet so dass wir bis zu 10A
   kriegen können.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Verwendet man nun die obigen Kommandos, dann beziehen diese sich auf den
aktuell &lt;em&gt;aktiven&lt;/em&gt; Kanal. Das ist nicht sehr elegant und deshalb ist es
natürlich möglich, im Kommando den gewünschten Kanal explizit anzugeben. Leider
ist die Syntax hier überraschend inkonsistent.&lt;/p&gt;
&lt;p&gt;Sagen wir mal, wir wollen Kanal 2 auf 24V setzen, dann lauten die Befehle&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;APPLY CH2: 24V
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;oder&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;SOURCE2:VOLT 24
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;What??  Warum in aller Welt ist das so total unterschiedlich implementiert?
Aber es wird noch besser. Stellen wir mal &lt;code&gt;SER&lt;/code&gt; auf 9V:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;APPLY SER: 9V
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;bzw.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;SOURCE5:VOLT 9
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Quizfrage: Wie lauten die Befehle im Falle von &lt;code&gt;PAR&lt;/code&gt;? So:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;APPLY PARA: 9V
SOURCE6:VOLT 9
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;D.h. die Kanal IDs sind so zugeordnet:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;APPLY&lt;/th&gt;
&lt;th&gt;SOURCE&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CH1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CH2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CH3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SER&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PARA&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;D.h. &lt;code&gt;SOURCE4&lt;/code&gt; gibt es nicht. Waaaaaaaaaaaaaaarum??? @§$%&amp;amp;#*
Wer denkt sich denn sowas aus?&lt;/p&gt;
&lt;h1&gt;ET5410A+ Electronic Load&lt;/h1&gt;
&lt;p&gt;Aber es geht noch spaßiger. So bei meiner Last von EastTester. Zugegebenermaßen
ist die preislich am unteren Ende angesiedelt. Und das merkt man bei der
Firmware ziemlich. Erfahrungsgemäß ist das bei fernöstlichen Billiggeräten oft
so, dass Software und Firmware weit hinter der Qualität der Hardware
zurückbleiben, so auch hier.  Mit dem Gerät an sich bin ich eigentlich für den
Preis ganz zufrieden, aber die SCPI-Implementierung hat mich teilweise schon an
den Rand der Verzweiflung gebracht.&lt;/p&gt;
&lt;p&gt;Z.B. &lt;code&gt;*IDN?&lt;/code&gt; – dieser Befehl soll laut Standard vier Felder liefern:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hersteller&lt;/li&gt;
&lt;li&gt;Modell&lt;/li&gt;
&lt;li&gt;Seriennummer&lt;/li&gt;
&lt;li&gt;Firmware version&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Und was sagt meine Load?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ET5410A+ 09937662737 V1.00.2213.016 V1.00.2213.016
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hm. Hersteller Fehlanzeige, Reihenfolge anders und Feld 3 ist die Hardware revision. 
Und die Beschreibung im Handbuch stimmt nullkommanull damit überein:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Query returns &lt;code&gt;&amp;lt;model&amp;gt;,&amp;lt;SN&amp;gt;,&amp;lt;software&amp;gt;,&amp;lt;NL&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note &lt;code&gt;&amp;lt;model&amp;gt;&lt;/code&gt; gives the machine model number as ET54XX,&lt;code&gt;&amp;lt; SN&amp;gt;&lt;/code&gt; gives the serial
number,&lt;code&gt;&amp;lt;software&amp;gt;&lt;/code&gt; gives the software version number, and
&lt;code&gt;&amp;lt;hardware&amp;gt;&lt;/code&gt; gives the hardware version number.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What? Das ist ja schon in sich nicht konsistent...&lt;/p&gt;
&lt;p&gt;Noch besser wird es bei dem baugleichen Gerät mit "Mustool" Branding:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;XXXXXX   V1.01.2251.018 V1.06.2247.016
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Kein Modell, und anstatt einer Seriennummer gibt es einen Space(!). Das macht
es wirklich zum Vergnügen, das zu parsen und dennoch beide Geräte korrekt zu
behandeln...&lt;/p&gt;
&lt;p&gt;Die nächste Überraschung ist, dass die Load keinen &lt;code&gt;*RST&lt;/code&gt; Befehl unterstützt.
Warum zum Geier? So ein Geräte-Reset ist schon eine sehr nützliche Sache und
bisher hatte absolut jedes Gerät, mit dem ich gespielt habe diese Kommando.&lt;/p&gt;
&lt;p&gt;Und der dritte Schmerzpunkt bei diesem Gerät ist das SCPI-Handbuch.  Es fängt
schon damit an, dass es nirgends zum Download angeboten wird und man den
Support nerven muss, um es zu bekommen. Hält man es dann in (virtuellen)
Händen, stellt sich schnell heraus, dass es in wirklich schwierig
verständlichem Englisch ist und allen Ernstes mit der Free-Version des Word-PDF
Konverters von &lt;code&gt;pdf.youdao.com&lt;/code&gt; erstellt wurde, denn dessen Banner prangt
jedenfalls quer über allen Seiten. Ist es echt zuviel verlangt die paar Kröten
für Adobe auszugeben, oder einfach LibreOffice zu verwenden???&lt;/p&gt;
&lt;p&gt;Dafür deckt es inhaltlich scheinbar alles ab, auch wenn man es oft mehrfach
lesen muss bis man versteht was gemeint ist.&lt;/p&gt;
&lt;p&gt;Zuguterletzt ist es mir mehrfach gelungen, das Instrument durch zügiges Senden
von SCPI-Befehlen ins Nirvana zu schicken, auch wenn diese bei der manuellen
Überprüfung dann problemlos liefen. &lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Ich bin sowas von froh, wenn meine Python Implementierung fertig ist und ich im
normalen Betrieb nie wieder manuell SCPI-Befehle eingeben muss...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Eismaschine</title><link href="https://techbotch.org/blog/ice-cream-machine/index.html" rel="alternate"/><published>2024-08-31T00:00:00+02:00</published><updated>2024-08-31T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-08-31:/blog/ice-cream-machine/index.html</id><summary type="html">&lt;p&gt;Ich liebe Eiscreme! Und seit wir vor Jahren mal günstig eine Eismaschine
ergattert haben, kann ich leider kein Eis mehr im Supermarkt kaufen, weil es
einfach sch***e schmeckt. Und so hat besagte Eismaschine den Sommer über
einen festen Platz in unserer Küche. Und wie ich feststellen muss, scheint die …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich liebe Eiscreme! Und seit wir vor Jahren mal günstig eine Eismaschine
ergattert haben, kann ich leider kein Eis mehr im Supermarkt kaufen, weil es
einfach sch***e schmeckt. Und so hat besagte Eismaschine den Sommer über
einen festen Platz in unserer Küche. Und wie ich feststellen muss, scheint die
Eismaschinenkrankheit sehr ansteckend zu sein – jedenfalls kaufen sich gerade
diverse unserer Freunde ebenfalls solche Geräte nachdem sie unser Eis probiert
haben. Nun war es so, dass ich ein paar Versuche benötigt habe, bis das Eis so
wurde wie es soll. Es galt ein paar Parameter zu optimieren und zu lernen,
worauf es ankommt:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Exakt&lt;/em&gt; an das Rezept halten. Experimente kommen später.&lt;/li&gt;
&lt;li&gt;Die Behälter in die wir das Eis am Ende füllen sollten aus Glas sein und
   müssen unbedingt vorgekühlt werden.&lt;/li&gt;
&lt;li&gt;Das Eis nicht zu früh abfüllen, sondern geduldig abwarten bis es wirklich
   fertig ist.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Diese Tips habe ich an meine Freunde weitergegeben – nur der dritte Punkt war
problematisch, denn was in aller Welt heißt "wirklich fertig"? Woran erkennt
man das? Nun, ich erkenne es inzwischen am Geräusch der Eismaschine und durch
visuelle Überprüfung. Ich sehe es einfach wenn die Konsistenz stimmt. Nur hilft
das dem ambitionierten Eisneuling wenig. Die Rezepte enthalten in der Regel
Zeitangaben, aber die sind von der Menge, Anfangstemperatur sowie der
Kühlleistung der Maschine abhängig und somit schlecht übertragbar. Also muss das
unbedingt genauer erforscht werden, um soetwas wie das Urmeter der
Speiseeisproduktion zu bekommen, damit die Nachwelt zuverlässig gutes Eis
produzieren kann.&lt;/p&gt;
&lt;h1&gt;Science!&lt;/h1&gt;
&lt;p&gt;Primär wäre es wohl die Viskosität, die bestimmt, wann das Eis fertig ist, aber 
wer hat schon ein Viskosimeter zur Hand? Das zweitbeste dürfte bei einigermaßen
konsistentem Eisrezept wohl die Temperatur sein, bei der die gewünschte Konsistenz 
erreicht wird. Also brauchen wir zunächst mal ein IR-Thermometer:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ice-cream-machine/thermometer.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Aber wenn wir schon dabei sind messen wir nicht einfach nur die Endtemperatur
vor dem Abfüllen, sondern erheben mal die Kühlkurve. D.h. wir Messen die
Temperatur der Eismasse im Verlauf während die Eismaschine das ganze unter
dauerndem Rühren herunterkühlt. Wenn man diese Kurve hat kann man zukünftig die
Starttemperatur ablesen und weiß, wie lange es in etwa dauern wird bis das Eis
fertig ist. &lt;/p&gt;
&lt;p&gt;Also frisches Eis ansetzen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;400 ml Sahne&lt;/li&gt;
&lt;li&gt;400 ml Milch&lt;/li&gt;
&lt;li&gt;300g Zucker&lt;/li&gt;
&lt;li&gt;eine Prise Salz&lt;/li&gt;
&lt;li&gt;einen großen Teelöffel Vanillepaste (oder eine halbierte und ausgekratze
  Vanilleschote)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Alles in den Topf, aufkochen, abkühlen lassen, so lange die Geduld hält und
rein in die bereits vorgekühlte Eismaschine gießen. Und dann immer wieder die
Temperatur messen und in einem CSV File protokollieren.&lt;/p&gt;
&lt;p&gt;Daten einlesen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;dat = read.csv(&amp;quot;vanille.csv&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und schnell prüfen, ob alles OK aussieht:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;    time  temp
1  12.00   6.3
2  15.50   1.5
3  17.00  -0.2
4  19.00  -4.3
5  20.00  -3.4
6  21.50  -2.7
7  24.00  -3.3
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ja – passt.&lt;/p&gt;
&lt;p&gt;Das ganze schnell plotten und auch gleich einen LOESS-Smoother inkl.
95%-Konfidenzintervall mit einbauen, damit wir es besser einschätzen können.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ggplot(dat) + aes(x=time, y=temp) + 
    geom_point() + 
    geom_smooth() + 
    ggtitle(&amp;quot;Vanille&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="https://techbotch.org/blog/ice-cream-machine/vanille.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das sieht doch schon ganz gut aus. Wie man sieht habe ich die erste
Temperaturmessung erst nach 12 Minuten gemacht und die Masse auch nicht auf
Kühlschranktemperatur vorgekühlt, sondern lauwarm eingefüllt und es der
Maschine überlassen, das herunter zu kühlen.&lt;/p&gt;
&lt;p&gt;Und noch eine Runde – diesmal Karamelleis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;400 ml Sahne&lt;/li&gt;
&lt;li&gt;400 ml Milch&lt;/li&gt;
&lt;li&gt;300 g Zucker&lt;/li&gt;
&lt;li&gt;2-3 Prisen Salz&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die hälfte des Zuckers in einen Topf geben und bei mittlerer Hitze schmelzen
und erhitzen bis er schön braun ist. Dabei mit dem Kugelbesen langsam rühren.
Dann Milch-Sahne-Gemisch schwungvoll zugießen, restlichen Zucker und Salz dazu,
aufkochen rühren bis das Karamell vollständig aufgelöst ist. Alles Abkühlen
lassen und in die vorgekühlte Eismaschine geben. Diesmal hab ich mir Zeit
gelassen und wirklich kühlschrankkalte Eismasse eingefüllt. Wie gehabt, die
Temperatur protokollieren und plotten:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ice-cream-machine/karamell.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Sehr schön. Wie man sehen kann streuen die Messwerte ein bisschen. Das kann an
meinem sehr günstigen Thermometer liegen, aber ich denke es ist eher die
manuelle Messung, die in Sachen Reproduzierbarkeit zu wünschen übrig lässt.
Wie auch immer – die Kurve macht schon Sinn, auch wenn sie nicht exakt ist.&lt;/p&gt;
&lt;p&gt;So aus dem Bauch heraus würde ich erwarten, dass die Temperaturkurve Eine Art
"Zerfallskurve" ist, also einen exponentiellen Abfall darstellt. Also erstmal
recherchieren. Und lag richtig. Das ganze folgt der &lt;a href="https://en.wikipedia.org/wiki/Newton%27s_law_of_cooling"&gt;Newton'schen
Kühlkurve&lt;/a&gt;:&lt;/p&gt;
&lt;div class="math"&gt;$$
    T_t = T_{env} + (T_0 - T_{env}) \cdot e^ {-rt}
$$&lt;/div&gt;
&lt;p&gt;wobei &lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(t\)&lt;/span&gt;: Zeit&lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(T_0\)&lt;/span&gt;: Anfangstemperatur [K] &lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(T_t\)&lt;/span&gt;: Temperatur zum Zeitpunkt &lt;span class="math"&gt;\(t\)&lt;/span&gt; [K]&lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(T_{env}\)&lt;/span&gt;: Umgebungstemperatur (= Endtemperatur) [K]&lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(r\)&lt;/span&gt;: &lt;a href="https://de.wikipedia.org/wiki/W%C3%A4rme%C3%BCbergangskoeffizient"&gt;Wärmeübergangskoeffizient&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Der zu fittende Parameter ist dann also &lt;span class="math"&gt;\(r\)&lt;/span&gt; – und irgendwie auch &lt;span class="math"&gt;\(T_{env}\)&lt;/span&gt;,
denn das haben wir, zumindest bei der ersten Runde, auch nicht gemessen und wo wir
schon dabei sind, lassen wir das Modelle auch &lt;span class="math"&gt;\(T_0\)&lt;/span&gt; schätzen. Also auf geht's.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;model = nls(
    temp ~ T_env + (T_0 - T_env) * exp(-r*time),
    dat,
    start = list(r=0.1, T_0=8.9, T_env=-15)
)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Streng genommen sind alle Temperaturangaben der Formel in Kelvin und nicht in
°C, aber das können wir an der Stelle ignorieren, weil der letzte Term die
Temperatur&lt;em&gt;differenz&lt;/em&gt; enthält und die ist in K und °C identisch.&lt;br&gt;
Außerdem brauchten wir ungefähre Startwerte für die drei Parameter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="math"&gt;\(T_0\)&lt;/span&gt;: da habe ich einfach mal den Startwert der Messreihe genommen.
  Tatsächlich waren es aber sicher über 25 °C.&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(T_{env}\)&lt;/span&gt;: geratene -15 °C&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(r\)&lt;/span&gt;: das ist schwieriger, denn ich hab keine Ahnung in welcher Größenordnung
  sich das zu bewegen hat. Also hatte ich vorab ein paar Plots gemacht mit  &lt;span class="math"&gt;\(r
  = 1, 10, 100, 0.1, 0.01\)&lt;/span&gt; und bei 0.1 sah es nicht total verrückt aus. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Und nun
lassen wir uns mal das Modell anzeigen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; summary(model)

Formula: temp ~ T_env + (T_0 - T_env) * exp(-r * time)

Parameters:
      Estimate Std. Error t value Pr(&amp;gt;|t|)
r      0.08197    0.01297   6.319 5.90e-06 ***
T_0   30.01423    6.92980   4.331 0.000402 ***
T_env -9.75786    0.70998 -13.744 5.52e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9918 on 18 degrees of freedom

Number of iterations to convergence: 9
Achieved convergence tolerance: 2.394e-06
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und weil das so viel Spaß gemacht hat erledigen wir das auch noch für die
Vanille Daten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Formula: temp ~ T_env + (T_0 - T_env) * exp(-r * time)

Parameters:
      Estimate Std. Error t value Pr(&amp;gt;|t|)
r      0.13499    0.01091   12.38 7.18e-13 ***
T_0    8.58448    0.56838   15.10 5.50e-15 ***
T_env -8.79020    0.35013  -25.11  &amp;lt; 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8194 on 28 degrees of freedom

Number of iterations to convergence: 7
Achieved convergence tolerance: 3.665e-06
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und plotten beide:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ice-cream-machine/vanille2.png" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/ice-cream-machine/karamell2.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Alles in allem haben wir also gefunden, dass &lt;span class="math"&gt;\(r ≈ 0.1\)&lt;/span&gt; und &lt;span class="math"&gt;\(T_{env} ≈ -9\)&lt;/span&gt; °C.
Und wir haben gelernt, dass die Vanillemasse noch ca 30 °C hatte, als ich sie
eingefüllt habe. Ich finde das ist schon eine ganze Menge für so ein einfaches
Experiment und so bin ich hochzufrieden.&lt;/p&gt;
&lt;p&gt;Allerdings fällt auf, dass die Datenpunkte gerade so ein bisschen unter 0 °C
doch deutlich abweichen, während sie anfangs und später viel "glatter"
verlaufen.  Etwas Nachdenken und Recherche ergaben, dass hier neben der reinen
Abkühlung noch ein anderer Effekt am Werke ist: Kristallisation. Konkret
kristallisiert das Wasser in der Mischung und das ist ein exothermer Vorgang.
Und so flacht die Kurve etwas unter Null ab oder steigt sogar wieder an bevor
sie später wieder schön regelmäßig fällt. In den Daten ist das tatsächlich zu
sehen: Bei etwa -4 °C steigt die Temperatur plötzlich wieder auf etwa -2.5°C an
bevor sie dann wieder sinkt. Im Extremfall kommt es sogar zur sog.
Unterkühlung – d.h. Wasser bleibt unter 0°C zunächst flüssig und gefriert dann
schlagartig, wobei dann die Temperatur wieder ansteigt. Ein Unterkühlen in der
Eismaschine eigentlich nicht zu erwarten, da das Rühren und die teils rauhe
Oberfläche des Behälters das verhindern/vermindern sollten, aber dennoch muss
wird die Kristallisationswärme freigesetzt. Mehr Info dazu findet Ihr z.B.
&lt;a href="https://www.fachreferent-chemie.de/wp-content/uploads/Wasser_gefrieren.pdf"&gt;hier&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ich finde, all das sollten die Hersteller von Eismaschinen so
in ihre Bedienungsanleitungen aufnehmen – das würde den Neulingen der
Eisherstellung sicher sehr helfen. &lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Science &amp; Medicine"/></entry><entry><title>Warum vertragen kleine Hunde keine Hitze?</title><link href="https://techbotch.org/blog/dog-volume-area-ratio/index.html" rel="alternate"/><published>2024-08-21T00:00:00+02:00</published><updated>2024-08-21T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-08-21:/blog/dog-volume-area-ratio/index.html</id><summary type="html">&lt;p&gt;Wir haben seit einer Weile einen Hund – einen Rauhaardackel um genau zu sein.
Und der hat so seine Eigenarten: Er ist stur wie ein Esel, entscheidet im
Zweifelsfall selbst ob mein Kommando oder der vorbeifahrende Trecker von
größerer Bedeutung ist und hat einen sehr ausgeprägten Freiheitsdrang. Außerdem
hasst er Hitze …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wir haben seit einer Weile einen Hund – einen Rauhaardackel um genau zu sein.
Und der hat so seine Eigenarten: Er ist stur wie ein Esel, entscheidet im
Zweifelsfall selbst ob mein Kommando oder der vorbeifahrende Trecker von
größerer Bedeutung ist und hat einen sehr ausgeprägten Freiheitsdrang. Außerdem
hasst er Hitze – seine Wohlfühltemperatur endet so bei 18°C – alles darüber
findet er eigentlich unzumutbar und so habe ich die "Dackeldusche" erfunden und
gehe im Sommer immer mit einer Blumenspritze auf unsere Spaziergänge. 
Das sieht albern aus, hilft aber etwas.&lt;/p&gt;
&lt;p&gt;Einige dieser Eigenarten kannte ich natürlich schon als "dackeltypisch", aber
das mit der Temperatur hatte ich nicht erwartet. Von den Labradoren die wir
früher hatten kannte ich diese Temperatursensibilität nicht (und auch manch
anderes...).&lt;/p&gt;
&lt;p&gt;Und so stellt sich die Frage: "Warum sind kleine Hunde im Vergleich zu großen so
temperaturempfindlich?" Eine Umfrage unter Hundebesitzern scheint genau dies
zu ergeben. Im Netz fand ich den Erklärungsversuch, die kleinen Hunde seien halt 
näher am heißen Asphalt und würden daher überhitzen. Das klingt für mich nach 
kreativem Unsinn. Ein so weltbewegendes Problem darf nicht ungelöst bleiben und so
versuchen wir uns dem mal wissenschaftlich zu nähern.&lt;/p&gt;
&lt;p&gt;Ich vermute, das hat eher etwas mit der Aufnahme und Abstrahlung von Wärme zu tun.&lt;/p&gt;
&lt;h1&gt;Annahmen&lt;/h1&gt;
&lt;p&gt;Gegeben sei ein Dackel &lt;span class="math"&gt;\(d\)&lt;/span&gt; und diverse andere Hunde &lt;span class="math"&gt;\(h_1\)&lt;/span&gt;, &lt;span class="math"&gt;\(h_2\)&lt;/span&gt;, etc.
unterschiedlicher Größe&lt;/p&gt;
&lt;p&gt;Die &lt;a href="https://de.wikipedia.org/wiki/W%C3%A4rmekapazit%C3%A4t"&gt;Wärmekapazität&lt;/a&gt;
&lt;span class="math"&gt;\(C\)&lt;/span&gt; eines Hundes ist das Verhältnis der zugeführten Wärme &lt;span class="math"&gt;\(Q\)&lt;/span&gt; zur dadurch
bewirkten Temperaturerhöhung. Nehmen wir an, dass der Hund homogen ist, ergibt
sie sich aus dem Produkt der spezifischen Wärmekapazität und der Masse:&lt;/p&gt;
&lt;div class="math"&gt;$$C_h = c_h \cdot m_h $$&lt;/div&gt;
&lt;p&gt;Die Wärmezufuhr erfolgt durch Sonnenbestrahlung, sowie die warme Luft, die den
Hund umgibt und ist somit proportional zur Oberfläche des Hundes. Die Masse des
Hundes hingegen ist proportional zum Volumen.&lt;/p&gt;
&lt;p&gt;Um unsere Betrachtungen zu erleichtern gehen wir von
&lt;a href="https://en.wikipedia.org/wiki/Spherical_cow"&gt;sphärischen&lt;/a&gt; Hunden aus. Damit
ergibt sich für Volumen und Oberfläche:&lt;/p&gt;
&lt;div class="math"&gt;$$V_h = \frac{4}{3} \cdot r_h^3 \cdot \pi$$&lt;/div&gt;
&lt;p&gt;und&lt;/p&gt;
&lt;div class="math"&gt;$$A_h = 4 \cdot r_h^2 \cdot \pi$$&lt;/div&gt;
&lt;p&gt;Hier eine kleine Illustration der geometrischen Situation:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dog-volume-area-ratio/geometry.png" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Wie man nun leicht erkennen kann hängt die Erwärmung des Hundes also vom
Verhältnis von Oberfläche zu Wärmekapazität ab und somit vom Quotienten
Oberfläche zu Volumen:&lt;/p&gt;
&lt;div class="math"&gt;$$\frac{a_h}{v_h} = 
  \frac{4 \cdot r_h^2 \cdot \pi}{\frac{4}{3} \cdot r_h^3 \cdot \pi} = 
  3 \cdot \frac{r_h^2}{r_h^3} 
$$&lt;/div&gt;
&lt;p&gt;Betrachten wir nun die Abhängigkeit dieses Quotienten vom Radius des Hundes, so
ergibt sich folgendes Bild:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dog-volume-area-ratio/plot1.png" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/dog-volume-area-ratio/plot2.png" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/dog-volume-area-ratio/plot3.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Um das Ganze etwas praxistauglicher zu machen zeigen wir das auch nochmal gegen
das Gewicht des Hundes, das in der Praxis einfacher zu bestimmen ist als der
Radius. Hunde bestehen neben Wasser auch aus Fett, Knochen und Fell. Die
typische Dichte dürfte also bei ca. &lt;span class="math"&gt;\(\rho_h = 937 kg/m^3\)&lt;/span&gt;. liegen.&lt;/p&gt;
&lt;p&gt;In der folgenden Grafik habe ich beispielhaft einen Dackel mit 7kg und einen
Labrador mit 30kg eingezeichnet:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dog-volume-area-ratio/plot4edit.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das gleiche Prinzip gilt natürlich auch bei Kälte. Ich denke damit dürfte ein
weiteres Rätsel der Welt aufgeklärt sein. Die einzig offene Frage ist, warum
Katzen mit 3-8 kg Hitze ohne Probleme ertragen und sogar genießen. Meine
Theorie ist, dass Katzen die Physik einfach völlig egal ist – die leben eh nach
ihren eigenen Regeln.&lt;/p&gt;
&lt;h1&gt;Hausaufgabe&lt;/h1&gt;
&lt;p&gt;In obigen Betrachtungen gingen wir davon aus, Hunde seien sphärisch. Dackel
sind aber in der Praxis zylindrisch. &lt;/p&gt;
&lt;p&gt;a) Berechne Oberfläche und Volumen für Dackel der länge &lt;span class="math"&gt;\(l_d ∈ [0.5m, 0.8m]\)&lt;/span&gt; unter 
   der Annahme &lt;span class="math"&gt;\(\frac{l_d}{r_d} = 9.82\)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;b) Zeichne das Masse zu &lt;span class="math"&gt;\(A/V\)&lt;/span&gt; Diagramm&lt;/p&gt;
&lt;p&gt;c) Kauf ein Wiener Würstchen und gib es dem Dackel.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Science &amp; Medicine"/></entry><entry><title>iPhone SE 2020 Batteriewechsel</title><link href="https://techbotch.org/blog/iphone-SE-battery%20change/index.html" rel="alternate"/><published>2024-08-11T00:00:00+02:00</published><updated>2024-08-11T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-08-11:/blog/iphone-SE-battery change/index.html</id><summary type="html">&lt;p&gt;Meine Frau hat so ein Obst-Handy und bei dem hat die Akkukapazität merklich nachgelassen.  Das Betriebssystem sagt, der Akku habe noch ca 70% der ursprünglichen Kapazität, was die Laufzeit merklich vermindert. Das missfällt ihr.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Meine Frau hat so ein Obst-Handy und bei dem hat die Akkukapazität merklich
nachgelassen.  Das Betriebssystem sagt, der Akku habe noch ca 70% der
ursprünglichen Kapazität, was die Laufzeit merklich vermindert. Das missfällt ihr.&lt;/p&gt;
&lt;p&gt;Also habe ich einen Ersatzakku bestellt und versuche mich am Akkutausch.&lt;/p&gt;
&lt;h1&gt;Auf geht's&lt;/h1&gt;
&lt;p&gt;Zunächst legen wir mal Handy und das nötige Werkzeug bereit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pentalobe Schraubenzieher&lt;/li&gt;
&lt;li&gt;Plastikwerkzeug zur Gehäuseöffnung&lt;/li&gt;
&lt;li&gt;Saugnapf&lt;/li&gt;
&lt;li&gt;Vorwärm-Matte&lt;/li&gt;
&lt;li&gt;B-7000 Kleber&lt;/li&gt;
&lt;li&gt;Ersatzakku&lt;/li&gt;
&lt;li&gt;Handy-Zwingen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Und los geht's:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/iphone-SE-battery change/startklar.jpg", class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Zunächst die Vorwämmatte auf ca. 70°C aufheizen und währenddessen die beiden
winzigen Pentalobe-Schrauben neben dem Lightning Connector entfernen. Dann das
Handy drauflegen und eine Weile warten, bis der Kleber weich wird.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/iphone-SE-battery change/preheating.jpg", class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Wenn sich das Handy ordentlich warm anfühlt fahren wir am unteren Ende mit
einem dünnen Werkzeug zwischen Display und Gehäuse. Gaaaaanz vorsichtig, damit
es keine Kratzer gibt. Dann mit einem Plastik-Werkzeug langsam und vorsichtig
einmal rund um den Rahmen fahren, damit das Display überall abgelöst wird.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/iphone-SE-battery change/pry-open.jpg", class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Nun können wir das Display um ein paar Millimeter in Richtung Home Button ziehen
und dann langsam nach rechts aufklappen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/iphone-SE-battery change/inside.jpg", class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Jetzt müssen wir die beiden Blechabdeckungen über den Display-Kabeln
abschrauben. Achtung: Die sind nicht alle gleich, also gut merken, welche wohin
gehört. Ich nehme dafür immer eine kleine Magnetmatte auf der ich die Schrauben
dann so ablege, dass sie ursprüngliche Position klar ist.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/iphone-SE-battery change/unscrew.jpg", class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Nun ziehen wir die drei (!) Display-Stecker ab und auch den vom Akku.&lt;/p&gt;
&lt;h1&gt;Akku lösen&lt;/h1&gt;
&lt;p&gt;Der Akku ist auf dern Unterseite mit doppelseitigem Klebeband angepappt. Um
keinen Schaden anzurichten darf man den nicht einfach heraushebeln, sondern
muss die Streifen vorsichtig lösen.  Dazu erstmal rund um den Akku etwas
Isopropyl-Alkohol ins Handy tropfen. Ja – wirklich.&lt;/p&gt;
&lt;p&gt;Und während der Alkohol seine Arbeit tut popeln wir rund um den Rahmen den
alten Kleber weg. Mit Pinzette, Zahnstocher, Alkohol und Wattestäbchen schön
alles putzen bis kein Kleber mehr zu sehen ist.&lt;/p&gt;
&lt;p&gt;Dann machen wir uns an den Akku: Die Klebestreifen sind praktischerweise auf
die Oberseite des Akkus geführt. Das sind diese vier kleinen Laschen, wie man
sieht. Die muss man vorsichtig abknibbeln und dann kann man schön langsam nach
außen ziehen und der Klebestreifen dehnt sich und kommt ganz langsam raus.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/iphone-SE-battery change/remove-adhesive-strips.jpg", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Jedenfalls auf der einen Seite. Auf der andern waren sie irgendwie total spröde
und es ist mir nicht gelungen sie rauszubekommen. Also mehr Alkohol und doch
ganz vorsichtig mit einem Spatel unter den Akku fahren und alles lösen.
Geschafft!  Nun wir können zum konstruktiven Teil übergehen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/iphone-SE-battery change/ready-for-new-battery.jpg", class="Large"&gt;&lt;/p&gt;
&lt;h1&gt;Neuer Akku rein&lt;/h1&gt;
&lt;p&gt;Der Ersatzakku war schon mit solchen Klebestreifen ausgestattet so dass wir nur
die Schutzfolie ablösen müssen und schon kann er rein. Dazu am besten als
erstes den Akkustecker einstecken, denn dann weiß man genau, wie er
positioniert werden muss und nix unter mechanischer Spannung steht. Dann an Ort
und Stelle positionieren, kurz andrücken, fertig.&lt;/p&gt;
&lt;p&gt;Als nächstes ziehen wir den Akkustecker wieder raus, damit das Handy stromlos
ist und stecken die Display-Stecker alle wieder rein. Dann Akku einstecken und
die beiden Blechabdeckungen wieder montieren. &lt;/p&gt;
&lt;p&gt;Zuguterletzt vorsichtig einen dünnen Faden Klebstoff (B-7000) einmal rund um
den Rahmen ziehen. Original war das ein Klebenstreifen und die kann man auch
fertig mit den Ersatzakkus kaufen, aber der Kleber tuts auch wenn man etwas
Geschick hat und ich hatte halt vergessen den mitzubestellen...&lt;/p&gt;
&lt;p&gt;Dann das Display wieder einsetzen bis es einrastet und mit Klemmen (mit
Gummibacken!) sichern und diese handfest anziehen. Noch die beiden Schräubchen
wieder rein und wir sind fertig.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/iphone-SE-battery change/clamped.jpg", class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Jetzt können wir das Handy in Ruhe aufladen während der Kleber trocknet. Dabei
darauf achten, dass es wirklich 100% voll ist und am besten dann noch eine
Stunde am Ladegerät lassen. Wenn es absolut sicher komplett voll ist nehmen wir
es vom Ladegerät, entfernen die Klemmen und putzen das Ganze ordentlich. &lt;/p&gt;
&lt;p&gt;Damit sich das Handy wieder auf die neue Akkukapazität kalibrieren kann müssen
wir es nun komplett leer machen. Also Verwenden, bis es ausgeht. Dann wieder
komplett aufladen. Nun sollte es wieder wissen, wieviel Saft in den Akku passt.&lt;/p&gt;
&lt;p&gt;Hurra! Wir haben es erfolgreich "repariert".&lt;/p&gt;
&lt;p&gt;Zwei Wermutstropfen gibt es aber: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Der Obstfabrikant will nicht, dass man das reparieren kann und deswegen wird
   das Handy fortan meckern dass es mit einem unlizensierten ekligen Fremdakku
   läuft. &lt;/li&gt;
&lt;li&gt;Ich hab offenbar eine der Klemmen zu fest angezogen und nun ist da ein
   kleiner Fleck auf dem Display, d.h. dort is alles etwas heller als normal.
   Grumpf! Naja – erstmal abwarten. Vielleicht gibt sich das ja auch nach einer
   Weile wieder.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Toter eBike Akku</title><link href="https://techbotch.org/blog/dead-ebike-battery/index.html" rel="alternate"/><published>2024-07-24T00:00:00+02:00</published><updated>2024-07-24T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-07-24:/blog/dead-ebike-battery/index.html</id><summary type="html">&lt;p&gt;Heute haben wir hier einen Akku eines eBikes. Selbiges hat längere Zeit unbenutzt herumgestanden und nun weigert sich das Ladegerät, den Akku zu laden.  Und so sind Akku und Ladegerät bei mir gelandet mit der Frage, ob da noch was zu machen ist.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Heute haben wir hier einen Akku eines eBikes. Selbiges hat längere Zeit
unbenutzt herumgestanden und nun weigert sich das Ladegerät, den Akku zu laden.
Und so sind Akku und Ladegerät bei mir gelandet mit der Frage, ob da noch was
zu machen ist.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-ebike-battery/ebike-battery.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Steckt man das Ladegerät an den Akku hört man zwei kurze Piepstöne. Mehr
erfährt man nicht, denn es gibt keine Statusanzeige. Was aber schnell auffällt
ist ein Defekt der Isolation am Stecker:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-ebike-battery/charging-connector.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Ob das schon unser Problem ist? Mal durchmessen. Zwischen dem äußeren Zylinder
und der Innenseite des selbigen liegen 26V an. Das entspricht der Sollspannung
laut Aufdruck. Zwischen dem zentralen Pin und den Zylinderseiten des
Tonnensteckers gibt es keine Spannung und ich konnte auch keinen Widerstand
messen. Vielleicht redet das Ladegerät digital mit dem BMS. Jedenfalls scheint
das Ladegerät zu funktionieren. Also nur die offene Stelle mit Klebeband
isolieren und weiter zum Akku.&lt;/p&gt;
&lt;p&gt;Vermutlich haben sich die Zellen mit der Zeit allmählich entladen und sind nun
unter die empfohlene Minimalspannung gefallen.  Möglicherweise haben die Zellen
nun auch verschiedene Spannungen. Akkupacks enthalten aber nicht nur die
Zellen, sondern auch ein Batterie-Management-System (BMS).  Selbiges hat die
Aufgabe zu erkennen, wenn mit den Zellen etwas nicht stimmt und dann aus
Sicherheitsgründen den regulären Betrieb zu verweigern. Wenn wir etwas Glück
haben, sind die Zellen aber nicht unwiederbringlich defekt, sondern können
manuell, also unter Umgehung des BMS, wieder über die kritische Schwelle
geladen werden. Wenn wir aber Pech haben sind alle oder manche Zellen komplett
im Eimer.&lt;/p&gt;
&lt;p&gt;Apropos Eimer:&lt;/p&gt;
&lt;h2&gt;Sicherheit&lt;/h2&gt;
&lt;p&gt;Lithium Ionen Akkus sind normalerweise sehr friedliche Geschöpfe und gut an das
Zusammenleben mit dem Menschen angepasst. Fühlt sich eine Lithiumzelle aber
bedroht, v.a. wenn sie verletzt ist oder Jungtiere hat, dann kann sie in
Ausnahmefällen aggressiv reagieren, überhitzen und im Extremfall in Brand
geraten. Da wir im Folgenden in das Revier der Zellen eindringen werden, sollten
wir auf einen solchen Fall vorbereitet sein. D.h. wir arbeiten auf einer
hitzefesten Unterlage (Silikonmatte, die ich auch gerne zum Löten nehme) und
stellen einen Blecheimer mit Deckel bereit. Ein paar Zentimeter Sand am
Eimerboden schaden auch nicht und zuguterletzt haben wir ein paar
Silikon-Ofenhandschuhe griffbereit, um im Falle eines Falles den heißen Akku in
den Eimer schubsen zu können. Dann können wir ihn in Ruhe nach draußen tragen
und gefahrlos abbrennen lassen.&lt;/p&gt;
&lt;h1&gt;Diagnostik&lt;/h1&gt;
&lt;p&gt;Zuerst müssen wir den Akku mal öffnen. Das war einfach – nur drei
Imbusschrauben lösen und die Plastikschale lässt sich auseinander nehmen. Im
Inneren finden wir einen Haufen Zellen, die in einem großen schwarzen
Schrumpfschlauch verpackt sind und an den Seiten klebt je ein dicker Blob
Silikon drauf:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-ebike-battery/inside1.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Links sieht man eine kleine Platine – das ist das BMS:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-ebike-battery/inside-bms2.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/dead-ebike-battery/bms.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Der Akkupack hat einen Aufkleber mit ein bisschen Information:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-ebike-battery/battery-label.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Laut Label is das ein 48V Akku in 13s4p Konfiguration. Das heißt, dass er 13 in
Serie geschaltete Pakete von je 4 parallelen Zellen enthält. Also insgesamt 52
Zellen. Da wir 13 in Serie haben kommen wir auf 13∙3.7V = 48.1V.  Die
Parallelschaltung dient dazu, eine höhere Kapazität zu bekommen und die
Serienschaltung stellt die hohe Spannung sicher. So sieht das also aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-ebike-battery/schematic.png" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Als erstes habe ich nun das Zellenpaket vom BMS abgezogen.  In die positive
Leitung ist eine 30A Sicherung eingeschleift. Eine kurze Prüfung ergibt, dass
die in Ordnung ist.&lt;/p&gt;
&lt;p&gt;Als nächstes die Ausgangsspannung des Akkupacks messen: 0.562V. Hm – das ist
&lt;em&gt;sehr&lt;/em&gt; wenig. Bei vollem Akku sollten bis zu 4.2V pro Zelle anliegen und
unter 2.5V sollte die Zellenspannung nicht sinken, also erwarten wir so 32.5
bis 54.6V.&lt;/p&gt;
&lt;p&gt;Vom BMS gehen 14 dünne Überwachungsleitungen zu den Viererpacks – eine an Minus,
der Rest an die Pluspole der dreizehn Vierpacks. So weiß das BMS immer, welche
Spannung auf den einzelnen Packungen anliegt. Und genau die wollen wir nun mal
mit dem Multimeter überprüfen. Dazu muss die Schrumpfverpackung weg. Also
aufschneiden und die Zellen freilegen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dead-ebike-battery/cells.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Immerhin: das sind 18650er Zellen von Samsung. Also vernünftige Qualität.&lt;/p&gt;
&lt;p&gt;Aber die Prüfung der Spannungen ist ernüchternd. Wir messen jeweils gegen
Minus. Ergebnisse in aufsteigender Reihenfolge:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nr.&lt;/th&gt;
&lt;th&gt;Spannung [V]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0.015&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0.035&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0.047&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;0.075&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;0.116&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;0.12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;0.163&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;0.224&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;0.33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;0.38&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;0.562&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;An zwei Leitungen bin ich nicht rangekommen – dazu hätte ich die nächste
Verpackungsschicht entfernen müssen und das dürfte unnötig sein, so eindeutig,
wie das Ergebnis ist. Das sieht überhaupt nicht gut aus: Die Zellen scheinen
samt und sonders tiefentladen zu sein. Ich hatte auf eine Restspannung von 2V
oder so gehofft. In dem Fall wäre es den Versuch wert gewesen, die Viererpakete
mit dem Labornetzeil bei ganz geringem Strom wieder auf ca. 2.5V zu laden in
der Hoffung, dass das BMS sie dann wieder akzeptiert und normal lädt.  Aber
bei unter einem Volt ist davon auszugehen, dass die Zellen unwiederbringlich
hinüber sind und so ein Boosterversuch eher gefährlich ist und eh nix bringt.&lt;/p&gt;
&lt;p&gt;Da bleibt nur, alle Zellen auszutauschen und das ist ein teurer Spaß: eine
schnelle Online-Suche ergab, dass ich pro Original-Zelle mit ca. 7.50€ rechnen
muss – also insgesamt 390€ nur für Zellen. Hinzu kommen dann die Nickelstreifen
zum Verbinden und Isolierringe, sowie eine neue Schrumpfschlaufverpackung.
D.h.  wir kommen auf über 400€. Wenn es auch andere als die Original-Zellen
sein dürfen landet man so bei ca 5€ pro Zelle aber auch hier summiert sich das
dann immerhin auf 260€ für die Zellen. Das günstigste was ich finden konnte
waren 2.73€ pro Zelle unklarer Herkunft – das würde sich lohnen, auch wenn die
Qualität unbekannt ist.  Aber leider ist auch das keine Lösung, denn ich habe kein
Punktschweißgerät und das wäre nötig, um die Nickelstreifen mit den Zellen zu
verbinden. Professionelle Anbieter verlangen für den Neuaufbau dieses Modells
360€ – das wäre dann wohl die bessere Option.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Schade – diese Reparatur ist nix geworden. Aber der Ausflug in die Akkutechnik
war trotzdem spannend.  Vielleicht wird's ja beim nächsten mal was....&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>LINUX auf dem GPD Pocket 3</title><link href="https://techbotch.org/blog/linux-gpd-pocket3/index.html" rel="alternate"/><published>2024-07-11T00:00:00+02:00</published><updated>2024-07-11T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-07-11:/blog/linux-gpd-pocket3/index.html</id><summary type="html">&lt;p&gt;Ich habe ein neues Spielzeug: einen &lt;a href="https://www.gpd.hk/gpdpocket3"&gt;GPD Pocket
3&lt;/a&gt; Mini Laptop. Aber natürlich ist der nicht zu
meinem Vergnügen, nein nein – der ist ein essentielles Arbeitsmittel, wenn ich
mal unterwegs bin und dennoch für Notfälle einen richtigen Computer brauche, um
bedeutende Dinge zu tun denen ein Smartphone nicht gewachsen ist …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich habe ein neues Spielzeug: einen &lt;a href="https://www.gpd.hk/gpdpocket3"&gt;GPD Pocket
3&lt;/a&gt; Mini Laptop. Aber natürlich ist der nicht zu
meinem Vergnügen, nein nein – der ist ein essentielles Arbeitsmittel, wenn ich
mal unterwegs bin und dennoch für Notfälle einen richtigen Computer brauche, um
bedeutende Dinge zu tun denen ein Smartphone nicht gewachsen ist.
Wie auch immer, ich fand das Ding sexy und wollte eins haben.&lt;/p&gt;
&lt;p&gt;Der Kleine fühlt sich eigentlich recht solide an und ist größenmäßig wirklich
putzig.  Ich glaube das wird seinen Zweck erfüllen. Jedenfalls nachdem wir die
Betriebssystemzumutung aus Redmond vom Gerät verbannt und durch einen
freundlichen Pinguin ersetzt haben.  Also frisch ans Werk.&lt;/p&gt;
&lt;h1&gt;Entfensterung&lt;/h1&gt;
&lt;p&gt;Es soll ein Debian drauf. Also schnell einen entsprechenden &lt;a href="https://www.debian.org/CD/netinst/"&gt;Debian
netinst&lt;/a&gt; Boot Stick vorbereiten, einstecken
und starten. Nach dem Einschalten dann dauerhaft &lt;code&gt;F7&lt;/code&gt; (&lt;code&gt;FN&lt;/code&gt;+&lt;code&gt;6&lt;/code&gt;) gedrückt
halten, damit wir in den Bootselector kommen. Wenn das nicht klappt (wie bei
mir), dann hat das halbfertig installierte Windows so einen Fast-boot
eingerichtet und wir müssen erstmal einen richtigen Kaltstart erzwingen damit
wir vom Stick booten können und das geht so:&lt;/p&gt;
&lt;p&gt;Laptop starten und abwarten bis das Windows gestartet ist. Dann &lt;code&gt;Shift&lt;/code&gt;+&lt;code&gt;F10&lt;/code&gt;
drücken um in eine Konsole zu gelangen. Und dort geben wir dies ein:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;shutdown /r /o /t 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Entgegen meiner Erwartung führt das nicht unmittelbar zum Reboot, sondern in
ein Menü in dem wir dann die Option &lt;code&gt;Restart Computer&lt;/code&gt; wählen.
Dabei drücken wir gleichzeitig die &lt;code&gt;Shift&lt;/code&gt;Taste, um
sicherzustellen, dass es ein richtiger Neustart wird.&lt;/p&gt;
&lt;p&gt;Sobald der Laptop neu startet, dann die &lt;code&gt;Del&lt;/code&gt;-Taste halten, um ins BIOS zu
gelangen.  Dort können wir dann die Bootreihenfolge so einstellen, dass unser
USB-Stick Vorrang bekommt (oder wieder &lt;code&gt;F7&lt;/code&gt; für den Boot-Selector). Gesagt,
getan und schon begrüßt uns der Debian-Installer.&lt;/p&gt;
&lt;p&gt;Äh – der ist ja um 90° gedreht! So mach das keinen Spaß.  Grundsätzlich könnte
man das vermutlich schon für den Installer irgendwie mit einem Kernel-Parameter
beheben, aber für den Moment ist mir das viel zu blöd und ich nehme einfach ein
&lt;a href="https://github.com/philpagel/debian-headless"&gt;headless installer&lt;/a&gt; image und
mach die Installation remote. Um die Rotation kümmere ich mich dann im
laufenden System.&lt;/p&gt;
&lt;p&gt;Also: Debian installieren, diverse Sachen hinzuinstallieren, die ich gewöhnlich so 
brauche/verwende und neu starten.&lt;/p&gt;
&lt;h1&gt;Bildschirmrotation&lt;/h1&gt;
&lt;p&gt;Nun ist es an der Zeit, sich um den gedrehten Bildschirm zu kümmern. Das muss
auf zwei bis drei Ebenen passieren.:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Konsole – braucht man selten, aber eben doch manchmal wenn die K***e am
   Dampfen ist und gerade dann möchte man den Kopf nicht stundenlang um 90° nach 
   links neigen.&lt;/li&gt;
&lt;li&gt;X11 – für die normale Arbeit.&lt;/li&gt;
&lt;li&gt;Grub – Wäre doch schön, wenn auch das GRUB Boot Menü die richtige
   Orientierung hätte&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ich habe dazu viel herumgegoogelt und mir diverse Sachen zusammengesucht. Am
hilfreichsten waren die folgenden Quellen aus denen das meiste stammt, das ich
hier mache:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wiki.archlinux.org/title/GPD_Pocket_3"&gt;Arch Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/defencore/gpd-pocket-3-linux"&gt;defencore/gpd-pocket-3-linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wimpysworld/umpc-ubuntu"&gt;wimpysworld/umpc-ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Konsole&lt;/h2&gt;
&lt;p&gt;Um die Konsole zu drehen setzen wir ein paar Kernel-Parameter. Dazu editieren
wir &lt;code&gt;/etc/default/grub&lt;/code&gt;. Das muss drinstehen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;quiet fbcon=rotate:1 video=panel_orientation=right_side_up&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.kernel.org/doc/html/latest/fb/fbcon.html"&gt;Hier&lt;/a&gt; und
&lt;a href="https://www.kernel.org/doc/html/latest/fb/fbcon.html"&gt;hier&lt;/a&gt; findet Ihr mehr
infos dazu.&lt;/p&gt;
&lt;p&gt;Damit die neue Einstellung auch aktiv wird müssen wir noch das tatsächliche
´grub.cfg´ File bauen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;grub-mkconfig -o /boot/grub/grub.cfg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Beim nächsten Reboot sollte die Konsole dann die richtige Orientierung haben.&lt;/p&gt;
&lt;h2&gt;X11&lt;/h2&gt;
&lt;p&gt;Hier führen verschiedene Wege nach Rom. Z.B. kann man das mit &lt;code&gt;xrandr&lt;/code&gt; machen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;xrandr -display DSI1 --rotate right
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und das könnte man dann nach dem Login automatisch ausführen. Allerdings wirkt
das eben erst nach dem Login, d.h. der Greeter (das Login-Fenster) ist noch
gedreht.  Auch das kann man konfigurieren, aber es ist besser das Übel an der
Wurzel packen und so früh wie möglich die Rotation machen.
Dazu können wir entsprechende Konfig-Schnipsel in 
&lt;code&gt;/etc/X11/xorg.conf.d/&lt;/code&gt; ablegen.&lt;/p&gt;
&lt;p&gt;Das File soll &lt;code&gt;40-gpd-pocket3-monitor.conf&lt;/code&gt; heißen und dies enthalten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# GPD Pocket 3 (modesetting)
Section &amp;quot;Monitor&amp;quot;
  Identifier &amp;quot;DSI-1&amp;quot;
  Option     &amp;quot;Rotate&amp;quot;  &amp;quot;right&amp;quot;
EndSection

# GPD Pocket 3 (xorg-video-intel)
Section &amp;quot;Monitor&amp;quot;
  Identifier &amp;quot;DSI1&amp;quot;
  Option     &amp;quot;Rotate&amp;quot;  &amp;quot;right&amp;quot;
EndSection
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Vertical Tearing&lt;/h1&gt;
&lt;p&gt;Das nächste, was ich loswerden wollte ist ein Effekt, der als "Vertical
tearing" bezeichnet wird.  Das sind so komische senkrechte Artefakte, die beim
Scrollen entstehen. Auch das lässt sich durch eine Konfig-Datei
in &lt;code&gt;/etc/X11/xorg.conf.d/&lt;/code&gt; beheben:&lt;/p&gt;
&lt;p&gt;Diese nennen wir &lt;code&gt;20-gpd-pocket3-device.conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Section &amp;quot;Device&amp;quot;
  Identifier &amp;quot;Device0&amp;quot;
  Driver     &amp;quot;intel&amp;quot;
  Option     &amp;quot;AccelMethod&amp;quot; &amp;quot;sna&amp;quot;
  Option     &amp;quot;TearFree&amp;quot;    &amp;quot;true&amp;quot;
  Option     &amp;quot;DRI&amp;quot;         &amp;quot;1&amp;quot;
EndSection
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun einfach den X-Server neu starten und schon greifen beide Konfigurationen
und der Bildschirm sieht super aus.&lt;/p&gt;
&lt;h1&gt;Touchscreen Rotation&lt;/h1&gt;
&lt;p&gt;Das letze Element, das noch nicht richtig mitspielt ist das touchscreen. Auch
das muss um 90 Grad gedreht werden, damit es zur Anzeige passt.  Und Ihr habt
es Euch sicher schon gedacht: auch diesmal schreiben wir ein Konfig-file in
&lt;code&gt;/etc/X11/xorg.conf.d/&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;99-touchscreen.conf&lt;/code&gt; soll es heißen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Section &amp;quot;InputClass&amp;quot;
  Identifier    &amp;quot;calibration&amp;quot;
  Driver        &amp;quot;wacom&amp;quot;
  MatchProduct  &amp;quot;GXTP7380&amp;quot;
  Option        &amp;quot;TransformationMatrix&amp;quot; &amp;quot;0 1 0 -1 0 1 0 0 1&amp;quot;
  Option        &amp;quot;Button2&amp;quot; &amp;quot;3&amp;quot;
EndSection
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Grub&lt;/h1&gt;
&lt;p&gt;Daran habe ich mir die Zähne ausgebissen. Ich konnte keinen Weg finden, das
Grub-Menü zu drehen – sorry. Ist aber auch nicht so schlimm.&lt;/p&gt;
&lt;h1&gt;Der ganze Rest&lt;/h1&gt;
&lt;p&gt;Und was machen wir mit all den anderen Hardware Komponenten? Nix, das
lief alles problemlos ohne dass ich irgendwas besonderes tun musste:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sound&lt;/li&gt;
&lt;li&gt;Mikrofon&lt;/li&gt;
&lt;li&gt;Wifi&lt;/li&gt;
&lt;li&gt;Ethernet&lt;/li&gt;
&lt;li&gt;HDMI&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Ich bin positiv überrascht. Es gab eigentlich wirklich wenige Hardware-
Herausforderungen unter Linux. Da habe ich schon ganz anderes erlebt. Und das
Mini-Laptop selbst ist erstaunlich gut zu gebrauchen. Klar, es ist winzig,
aber selbst die Tastatur ist garnicht schlecht – natürlich mit Abstrichen
bezüglich Layout, denn sonst hätten nicht alle Tasten drauf gepasst.&lt;/p&gt;
&lt;p&gt;Würde ich täglich damit arbeiten wollen? Nein - dafür ist es mir zu klein.
Aber es ist super, als Immerdabei-Maschine oder für Notfälle. Wenn mal der
Hauptcomputer die Grätsche macht.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Steuerkarte einer professionellen Schneidemaschine reparieren</title><link href="https://techbotch.org/blog/cutting-machine-pcb-repair/index.html" rel="alternate"/><published>2024-07-10T00:00:00+02:00</published><updated>2024-07-10T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-07-10:/blog/cutting-machine-pcb-repair/index.html</id><summary type="html">&lt;p&gt;Heute habe ich was besonderes: Ich habe hier eine defekte Platine aus einer
örtlichen Druckerei. Sie trägt die schöne Bezeichnung "Polar 020321 KUP" und
gehört zu einer Schneidemaschine. Selbige hat seit kurzem eine Fehlfunktion –
ganz habe ich es nicht verstanden, aber ich glaube irgendwas rauscht in einen
Endschalter oder ignoriert …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Heute habe ich was besonderes: Ich habe hier eine defekte Platine aus einer
örtlichen Druckerei. Sie trägt die schöne Bezeichnung "Polar 020321 KUP" und
gehört zu einer Schneidemaschine. Selbige hat seit kurzem eine Fehlfunktion –
ganz habe ich es nicht verstanden, aber ich glaube irgendwas rauscht in einen
Endschalter oder ignoriert ein Limit oder sowas.  Ein Service-Techniker hatte
sich das angeschaut und diagnostiziert, dass besagte Steuerkarte defekt sei.
Der Austausch sollte allerdings exorbitant teuer sein und so ist die Platine
bei mir gelandet mit der Frage, ob ich da evtl. was machen kann.&lt;/p&gt;
&lt;p&gt;Challenge accepted!&lt;/p&gt;
&lt;h1&gt;Erstinspektion&lt;/h1&gt;
&lt;p&gt;So sieht das gute Stück aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cutting-machine-pcb-repair/pcb-front.jpg" class="Large" alt="Vorderseite der Platine: nur eine Handvoll Bauteile."&gt;
&lt;img src="https://techbotch.org/blog/cutting-machine-pcb-repair/pcb-back.jpg" class="Large" alt="Rückseite der Platine: komplett leer."&gt;&lt;/p&gt;
&lt;p&gt;Das ist mal eine wirklich übersichtliche Platine: ein paar Dioden und
Widerstände, zwei Kondensatoren, zwei Relais und ein Transistor oder MOSFET
oder sowas. Alles Old-School mit klassischen Through-Hole Bauteilen. Also
vermutlich älterer Bauart.&lt;/p&gt;
&lt;p&gt;Das sollte man doch reparieren können, auch ohne detailierte Infos zur
Funktion. Erstmal genau ansehen. Sieht eigentlich alles bestens aus – keine
verdächtigen Lötstellen oder offensichtlich beschädigte Bauteile.&lt;/p&gt;
&lt;h1&gt;Durchmessen&lt;/h1&gt;
&lt;p&gt;Gehen wir also systematisch vor und prüfen mal alle Bauteile &lt;em&gt;in circuit&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;Widerstände&lt;/h2&gt;
&lt;p&gt;Vier Widerstände finden sich in der Schaltung. Deren Werte messen wir nun und 
vergleichen sie mit den aufgedruckten Nennwerten:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nr.&lt;/th&gt;
&lt;th&gt;Nennwert&lt;/th&gt;
&lt;th&gt;Messwert&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;390 Ω ±1%&lt;/td&gt;
&lt;td&gt;387 Ω&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R2&lt;/td&gt;
&lt;td&gt;100 Ω ±1%&lt;/td&gt;
&lt;td&gt;99.5 Ω&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R3&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;248.6 Ω&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R4&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;244.6 Ω&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Die beiden ersten sind tiptop, R3 und R4 sind dickere Widerstände aus deren
Beschriftung ich nicht schlau werde, auch weil sie teils auf der Unterseite
liegt. Sie sehen aus, als wären sie für größere Ströme gedacht. Da sie nahezu
identische Werte haben denke ich aber, dass sie ok sind.&lt;/p&gt;
&lt;p&gt;Beide sind vor die Spule je eines Relais geschaltet und so denke ich, dass sie
dazu dienen, den Strom durch die Spule zu begrenzen.&lt;/p&gt;
&lt;h2&gt;Kondensatoren&lt;/h2&gt;
&lt;p&gt;Es gibt zwei dicke 2.2µF Kondensatoren – der Optik nach dürften es
Folienkondensatoren sein. Die sind parallel geschaltet und die Messung ergibt
4.4µF.  Perfekt.&lt;/p&gt;
&lt;h2&gt;Dioden&lt;/h2&gt;
&lt;p&gt;Multimeter in den Diodentest-Modus schalten und alle prüfen:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nr.&lt;/th&gt;
&lt;th&gt;Typ&lt;/th&gt;
&lt;th&gt;Spannungsabfall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;V1&lt;/td&gt;
&lt;td&gt;4007&lt;/td&gt;
&lt;td&gt;0.394V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;V2&lt;/td&gt;
&lt;td&gt;5383&lt;/td&gt;
&lt;td&gt;0.54V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;V3&lt;/td&gt;
&lt;td&gt;P600G&lt;/td&gt;
&lt;td&gt;0.516V&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;V2 ist vermutlich eine 150V Zener-Diode. Die sieht also ok aus, auch wenn wir
die Funktion nicht 100% garantieren können.&lt;/p&gt;
&lt;p&gt;V3 ist eine dicke fette 400V 6A Gleichrichterdiode und der Spannungsabfall
scheint in Ordnung zu sein.&lt;/p&gt;
&lt;p&gt;In Sperrrichtung messen wir bei beiden, wie zu erwarten nichts (&lt;code&gt;OL&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Aber V1 wirkt nicht normal: eine 4007 Gleichrichterdiode sollte eigentlich so bei
0.65-0.7V liegen; allermindestens 0.5V würde ich erwarten. Und in Sperrrichtung
sollte das Multimeter &lt;code&gt;OL&lt;/code&gt; zeigen. Aber in beiden Richtungen messe ich den
selben Wert. Ist die defekt? Genauere Betrachtung zeigt, dass die aber parallel
zu &lt;em&gt;R1&lt;/em&gt; geschaltet ist. Das verfälscht die Messung. Also ein Beinchen auslöten
und nochmal messen. OK – jetzt passt es. Also falscher Alarm.&lt;/p&gt;
&lt;h2&gt;Relais&lt;/h2&gt;
&lt;p&gt;Kommen wir also zu den spannenden Komponenten: Die Relais sind meine
Hauptverdächtigen, denn nach jahrelanger Nutzung kann so ein mechanisches
Bauteil schonmal den Geist aufgeben. Relais neigen dazu nach Jahren mal zu
"kleben" – also nicht mehr auf allen Kontakten korrekt zu schalten.&lt;/p&gt;
&lt;p&gt;Die beiden Relais sind von Elesta und haben die Typenbezeichnung &lt;a href="http://www.elesta.com/pdf/en/PR.pdf"&gt;PR 4F&lt;/a&gt;.
Mal ins Datenblatt schauen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;24V Schaltspannung&lt;/li&gt;
&lt;li&gt;Vier geschaltete Kontakte: 2 Öffner und 2 Schließer&lt;/li&gt;
&lt;li&gt;Nomineller Spulenstrom: 54,5 mA&lt;/li&gt;
&lt;li&gt;Spulenwiderstand: 440Ω,&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zum Testen stellen wir das Labornetzteil auf 24V, setzen die Strombegrenzung
auf 55mA und klemmen uns auf ein Beinchen von R3 über den der Strom dann in
die Spule fließt und mit der anderen Klemme auf die andere Seite der Spule.&lt;/p&gt;
&lt;p&gt;Kanal aktivieren und schauen was passiert: wenig. Es fließt Strom, und das
Relais zuckt ein bisschen, aber es schaltet nicht komplett. Beide verhalten
sich gleich. Beide defekt? Nun habe ich leider keine Ahnung welche Spannung da
normalerweise anliegt und auch der Sollwert der Widerstände ist nicht klar,
also kann es gut sein, dass ich mehr anlegen müsste. Also erstmal anders: Wir
klemmen das Labornettzteil direkt auf die beiden Spulenkontakte. Dabei ist die
Strombegrenzung sehr wichtig, denn wir wollen die Spulen ja nicht durchbrennen.
Also: Kanal wieder an und voila – das Relais schaltet mit einem satten "Klick"
und man kann sehen, dass alle vier Kontakte arbeiten. Das zweite Relais liefert
das selbe Ergebnis. Also dürften die OK sein.&lt;/p&gt;
&lt;h2&gt;Transistor&lt;/h2&gt;
&lt;p&gt;Bleibt also noch der Transistor oder MOSFET. Er ist mit &lt;em&gt;ST9635 BU426A&lt;/em&gt;
beschriftet.  Eine kurze Recherche liefert das
&lt;a href="https://www.mouser.com/ds/2/54/bu426-54342.pdf"&gt;Datenblatt&lt;/a&gt;.
Also haben wir hier einen 400V, 6A NPN Transistor vor uns. &lt;/p&gt;
&lt;p&gt;Um den zu testen erinnern wir uns kurz, was wir eigentlich erwarten: Aus der
Perspektive des Multimeters gleicht ein Transistor zwei gegeneinander
geschalteten Dioden (Bildquelle: &lt;a href="https://commons.wikimedia.org/wiki/File:Transistor-diode-npn-pnp.svg"&gt;Biezl, Public domain, via Wikimedia Commons&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cutting-machine-pcb-repair/Transistor-diode-npn-pnp.png" class="Small" alt="Ersatzschaltbild eines Bipolartransistors"&gt;&lt;/p&gt;
&lt;p&gt;D.h. wenn wir im Diodentest-Modus mit der roten (positiven) Testspitze auf die
Basis und mit der schwarzen auf den Kollektor gehen, sollten wir den typischen
Spanungsabfall eines Silizium PN-Übergangs von etwa 0.6-0.7V sehen.  Auf diese
Weise messen wir alle möglichen Kombinationen in beiden Richtungen durch und
erwarten dies:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;↱&lt;/th&gt;
&lt;th&gt;B&lt;/th&gt;
&lt;th&gt;C&lt;/th&gt;
&lt;th&gt;E&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;0.65V&lt;/td&gt;
&lt;td&gt;0.65V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;OL&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;OL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;OL&lt;/td&gt;
&lt;td&gt;OL&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Bei einem PNP-Transistor analog, nur dass die Polung umgekehrt ist. 
Bleibt noch die Frage, welcher Pin wo zu finden ist und das Datenblatt weiß Rat:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cutting-machine-pcb-repair/BU426A-pinout.png" class="Small" alt="Pinout laut Datenblatt: 1:Base 2:Kollektor 3:Emitter"&gt;&lt;/p&gt;
&lt;p&gt;Und was messen wir bei unserem Transistor? Das:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;↱&lt;/th&gt;
&lt;th&gt;B&lt;/th&gt;
&lt;th&gt;C&lt;/th&gt;
&lt;th&gt;E&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;0.55V&lt;/td&gt;
&lt;td&gt;0.06V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;OL&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;OL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;0.06V&lt;/td&gt;
&lt;td&gt;0.57V&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Treffer – da ist was faul! Die 0.55V sind im Rahmen, aber 0.06V sind definitiv
nicht in Ordnung und schon garnicht in beiden Richtungen. Und die E-C Strecke
sollte &lt;code&gt;OL&lt;/code&gt; sein. Um sicher zu gehen löten wir den Transistor aus und messen
nochmal außerhalb der Schaltung – gleiches Ergebnis.  Ich denke wir haben
unseren Schuldigen.&lt;/p&gt;
&lt;p&gt;Also bestellen wir einen neuen. Das Bauteil kostet fast nix und
sicherheitshalber nehme ich gleich drei, falls doch noch was anderes im Argen
liegt und er gleich wieder durchbrennt und auch von diesen fetten Dioden hab
ich noch drei genommen – man weiß ja nie und wie so oft ist der Versand
das teuerste und so ist es besser ein bisschen Redundanz zu schaffen, bevor man
am Ende nochmal 6€ Porto für ein 1€ Bauteil bezahlt...&lt;/p&gt;
&lt;h1&gt;Reparatur&lt;/h1&gt;
&lt;p&gt;Ein paar Tage später war er da. Paranoid wie ich nunmal bin habe ich auch den
neuen ausgemessen und erwartungsgemäß ist alles wie es sein soll.  Nun die
Lötstelle schön sauber machen: Mit Entlötlitze das restliche Lötzinn entfernen
und dann alles mit Isopropanol putzen. Neuen Transistor einsetzen und verlöten
– Kühlkörper nicht vergessen. Fertig.&lt;/p&gt;
&lt;p&gt;Unmittelbar ausprobieren kann ich das Ganze nicht, weil ich ja die Schneidemaschine
nicht habe. Also Karte zurückgeben und auf Rückmeldung warten.&lt;/p&gt;
&lt;p&gt;Und siehe da: ich erfahre, die Maschine geht wieder! Sehr cool! Das hat Spaß
gemacht und auch noch jemandem geholfen.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>HP Microserver Gen8 BIOS Update</title><link href="https://techbotch.org/blog/HP-Microserver-gen8-BIOS-update/index.html" rel="alternate"/><published>2024-06-29T00:00:00+02:00</published><updated>2024-06-29T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-06-29:/blog/HP-Microserver-gen8-BIOS-update/index.html</id><summary type="html">&lt;p&gt;Ich habe immer noch meinen alten HP Microserver Gen8. Und bisher lief er immer
brav. Aber vor ein paar Tagen war er plötzlich nicht mehr erreichbar und die
LED an der Front blinkte rot. Also mal ins iLO Event Log schauen und da steht:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;2357   06/22/2024 08:29 …&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</summary><content type="html">&lt;p&gt;Ich habe immer noch meinen alten HP Microserver Gen8. Und bisher lief er immer
brav. Aber vor ein paar Tagen war er plötzlich nicht mehr erreichbar und die
LED an der Front blinkte rot. Also mal ins iLO Event Log schauen und da steht:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;2357   06/22/2024 08:29   Embedded Flash/SD-CARD: Restarted.
2358   06/22/2024 08:29   Server power removed.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Komisch – er hat doch eine &lt;a href="https://techbotch.org/blog/ups-setup/index.html"&gt;UPS&lt;/a&gt; und ich kann auch keinen Hinweis darauf finden,
dass es wirklich einen Stromausfall gab. Auch merkwürdig dass er nach dem
Stromverlust nicht automatisch wieder hochgefahren ist. Also habe ich den Server via 
iLO wieder eingeschaltet und dann lief er wieder brav.&lt;/p&gt;
&lt;p&gt;Bis heute Morgen: da passierte exakt das gleiche erneut:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;2363   06/29/2024 08:50   Embedded Flash/SD-CARD: Restarted.
2364   06/29/2024 08:50   Server power removed.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sehr merkwürdig. Sowas hatte er in all den Jahren noch nie gemacht. Keine
Ahnung was da los ist. Ich habe eine Weile im Netz recherchiert, aber letztlich
nichts wirklich hilfreiches gefunden. Kann natürlich sein, dass er in seinem
Alter nun einen Hardware-Defekt entwickelt. Manche Leute in diversen Foren
meinten aber auch, man solle in solchen Fällen zunächst versuchen, alle
Firmware auf den neusten Stand zu bringen. Mein iLO ist bereits aktuell – das
hatte ich neulich ja aus &lt;a href="https://techbotch.org/blog/locked-out-of-my-server/index.html"&gt;gegebenem Anlass&lt;/a&gt; schon
aktualisiert. Aber das BIOS Upgrade hatte ich damals dann doch nicht mehr
gemacht. Also holen wir das nun mal nach.&lt;/p&gt;
&lt;p&gt;Zum Glück konnte ich, im Gegensatz zum letzen mal, wieder eine offizielle Quelle
für das &lt;a href="https://support.hpe.com/connect/s/product?language=en_US&amp;amp;sp4ts.oid=5390291&amp;amp;kmpmoid=5379860&amp;amp;tab=driversAndSoftware&amp;amp;driversAndSoftwareFilter=8000012"&gt;BIOS
Update&lt;/a&gt;
finden. Leider gibt es die Version zum booten von USB Stick nicht mehr, aber
immerhin bietet HPE noch eine Version für LINUX an, wenn auch nur als RPM
Package.  Also herunterladen.&lt;/p&gt;
&lt;p&gt;Aber wie bekomme ich das nun unter Debian zum laufen? Auch das geht zum Glück
recht einfach. Eine Installation ist garnicht nötig. Wir müssen das rpm nur
irgendwo entpacken. Dazu brauchen wir das tool &lt;code&gt;rpm2cpio&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo apt install rpm2cpio
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun können wir das konvertieren ...&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rpm2archive firmware-system-j06-2019.04.04-1.1.i386.rpm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;und bekommen ein vernünftiges tgz Archiv:
&lt;code&gt;firmware-system-j06-2019.04.04-1.1.i386.rpm.tgz&lt;/code&gt; das wir ganz normal auspacken
können:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir tmp
cd tmp
tar xzf ../firmware-system-j06-2019.04.04-1.1.i386.rpm.tgz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Dann das Flash-Tool starten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd usr/lib/i386-linux-gnu/firmware-system-j06-2019.04.04-1.1/
sudo ./setup
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hurra – es funktioniert:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Flash Engine Version: Linux-1.5.9.5-2

Name: Online ROM Flash Component for Linux - HP ProLiant MicroServer Gen8 (J06) Servers
New Version: 04/04/2019

Current Version: 07/16/2015

Do you want to install this version (y/n) ?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sehr gut. Am Ende wie vorgeschlagen den Server rebooten und schon haben wir ein
taufrisches BIOS:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/HP-Microserver-gen8-BIOS-update/screenshot.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Bleibt nun abzuwarten, ob das mein Problem behebt, oder ich
mich evtl.  mit dem Gedanken anfreunden muss ein neues Serverchen
anzuschaffen. So richtig glaube ich ja nicht an ein BIOS Problem, denn er lief ja
jahrelang gut mit dieser Version. &lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Billige LED Taschenlampe</title><link href="https://techbotch.org/blog/cheap-led-flashlight/index.html" rel="alternate"/><published>2024-06-09T00:00:00+02:00</published><updated>2024-06-09T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-06-09:/blog/cheap-led-flashlight/index.html</id><summary type="html">&lt;p&gt;Ich liebe Taschenlampen und habe jede Menge davon. Wenn ich eine schöne
handliche LED-Lampe sehe kann ich einfach nicht widerstehen. Vor allem seit die
Dinger fast nichts mehr kosten haben sich ziemlich viele hier angesammelt.
Und so habe ich zum Beispiel dieses Modell:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cheap-led-flashlight/flashlight.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Die läuft wahlweise mit 3 AAA Batterien …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich liebe Taschenlampen und habe jede Menge davon. Wenn ich eine schöne
handliche LED-Lampe sehe kann ich einfach nicht widerstehen. Vor allem seit die
Dinger fast nichts mehr kosten haben sich ziemlich viele hier angesammelt.
Und so habe ich zum Beispiel dieses Modell:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cheap-led-flashlight/flashlight.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Die läuft wahlweise mit 3 AAA Batterien oder einem 18650 Lithium-Akku, was ich
ganz sinnvoll fand. Zwar muss man den Akku außerhalb der Lampe laden, aber das
finde ich ok. Sie leuchtet schön hell und liegt gut in der Hand.  Aber als ich
sie gestern mal wieder verwenden wollte spendete sie nicht das verheißene
Licht. Komisch – beim letzten mal war sie noch total hell. Hab ich sie evtl.
nicht ausgeschaltet?  Macht ja nix – einfach den Akku wieder laden und die Welt
ist gut. Denkste! Als ich den Akku ins Ladegerät eingelegt habe, zeigte es
etwas über 2V an. Garnicht gut! Hat die blöde Lampe den etwa tiefentladen?
Normale Lithium Ionen Akkus darf man bis maximal 2.5 V entladen, sonst nehmen
sie Schaden. Und es ist der Job des Geräts einen entsprechenden
Tiefentladeschutz zu implementieren, damit sowas verhindert wird. Nun nehmen es
chinesische Produktentwickler oft nicht so genau mit derartigen Kleinigkeiten,
also sollten wir diesem Anfangsverdacht mal auf den Grund gehen.&lt;/p&gt;
&lt;h1&gt;Evidenzlage&lt;/h1&gt;
&lt;p&gt;Also machen wir mal eine kleine Messreihe: Wir klemmen die Taschenlampe an das 
Labornetzteil und messen den Strom bei verschiedenen Spannungen von 4.3V bis runter 
auf 0V. 4.3V sind das Maximum, das ein pickepacke vollgeladener Akku liefern kann.&lt;/p&gt;
&lt;p&gt;Und weil das von Hand viel zu mühsam ist verwenden wir ein kleines Skript:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt; 1&lt;/span&gt;
&lt;span class="normal"&gt; 2&lt;/span&gt;
&lt;span class="normal"&gt; 3&lt;/span&gt;
&lt;span class="normal"&gt; 4&lt;/span&gt;
&lt;span class="normal"&gt; 5&lt;/span&gt;
&lt;span class="normal"&gt; 6&lt;/span&gt;
&lt;span class="normal"&gt; 7&lt;/span&gt;
&lt;span class="normal"&gt; 8&lt;/span&gt;
&lt;span class="normal"&gt; 9&lt;/span&gt;
&lt;span class="normal"&gt;10&lt;/span&gt;
&lt;span class="normal"&gt;11&lt;/span&gt;
&lt;span class="normal"&gt;12&lt;/span&gt;
&lt;span class="normal"&gt;13&lt;/span&gt;
&lt;span class="normal"&gt;14&lt;/span&gt;
&lt;span class="normal"&gt;15&lt;/span&gt;
&lt;span class="normal"&gt;16&lt;/span&gt;
&lt;span class="normal"&gt;17&lt;/span&gt;
&lt;span class="normal"&gt;18&lt;/span&gt;
&lt;span class="normal"&gt;19&lt;/span&gt;
&lt;span class="normal"&gt;20&lt;/span&gt;
&lt;span class="normal"&gt;21&lt;/span&gt;
&lt;span class="normal"&gt;22&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/bin/env python3&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;pyvisa&lt;/span&gt;

&lt;span class="n"&gt;rm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pyvisa&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResourceManager&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# prepare the PSU&lt;/span&gt;
&lt;span class="n"&gt;psu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open_resource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;TCPIP::192.168.0.66::INSTR&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;psu&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;:OUTPUT:STATE ALL,OFF&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;psu&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;:APPLY Ch1,0V,MAX&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;psu&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;:OUTPUT:STATE Ch1,on&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# run the series&lt;/span&gt;
&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;V,A&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;volts&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;43&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)]:&lt;/span&gt;
    &lt;span class="n"&gt;psu&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;:APPLY Ch1,&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;volts&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;psu&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;:MEASURE:ALL? Ch1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rstrip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;P&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;)]))&lt;/span&gt;

&lt;span class="n"&gt;psu&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;:OUTPUT:STATE Ch1,off&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nun müssen wir nur noch Kanal 1 mit den Kontakten der Taschenlampe verbinden.
Dazu braucht es ein bisschen Kreativität, weil einer davon sich ja in der Tiefe
des Lampengriffs befindet. Aber wozu hat man eine selbsthaltende Pinzette?
Selbige auf die Kontaktfeder klemmen, etwas Pappe als Isolation drum und mit
einer Krokoklemme auf die Pinzette und mit der zweiten auf das Lampengehäuse.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cheap-led-flashlight/connected.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und schon können wir die Messreihe starten.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./measure.py &amp;gt; dat.csv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Während die Messung abläuft kann man schön beobachten, wie die Lampe allmählich
immer dunkler wird. Manche Leute würden das schlecht finden, denn viele teurere
Lampen haben einen Boost-Converter und halten die Helligkeit konstant bis die
Batterie leer ist bzw. der Tiefentladungsschutz greift. Ich persönlich finde
das eigentlich ganz ok, denn es signalisiert mir wenn der Akku zur Neige geht und
ich stehe nicht überraschend im dunklen.  Alternativ kann man natürlich eine
Ladestandsanzeige integrieren, aber das haben so billige Lampen eher nicht.
Insofern voll OK für mich.&lt;/p&gt;
&lt;p&gt;Aber schauen wir uns mal die Strom-Spannungskurve an:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cheap-led-flashlight/plot.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Hm – das ist tatsächlich genau so wie es sein soll. Bei 2.5V geht der Strom auf
Null. Das hatte ich nicht erwartet. &lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Freispruch für die Taschenlampe, sie verhält sich vorschriftsmäßig. Vielleicht
spinnt ja auch mein Ladegerät? Mal weiter beobachten...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Maus Reparatur</title><link href="https://techbotch.org/blog/m720-mouse-repair/index.html" rel="alternate"/><published>2024-05-24T00:00:00+02:00</published><updated>2024-05-24T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-05-24:/blog/m720-mouse-repair/index.html</id><summary type="html">&lt;p&gt;Meine Maus ist runtergefallen und nun fühlt sich der Mausrad-Klick irgendwie
leblos an und funktioniert auch nur unzuverlässig. Da ich unter LINUX arbeite
brauche ich den oft, denn damit kann ich ohne viel Gedöns zuvor markierten Text
anderswo einfügen.  Konkret handelt es sich um eine Logitech M720 Maus die so …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Meine Maus ist runtergefallen und nun fühlt sich der Mausrad-Klick irgendwie
leblos an und funktioniert auch nur unzuverlässig. Da ich unter LINUX arbeite
brauche ich den oft, denn damit kann ich ohne viel Gedöns zuvor markierten Text
anderswo einfügen.  Konkret handelt es sich um eine Logitech M720 Maus die so
ca. 4 Jahre alt sein dürfte. Das sollte man doch reparieren können, oder?&lt;/p&gt;
&lt;h1&gt;Fehlersuche&lt;/h1&gt;
&lt;p&gt;Also zunächst mal die Maus aufschrauben. Dazu müssen wir aber erstmal alle
Schrauben finden. In diesem Fall relativ einfach: Batteriefach öffnen,
Batterie raus und schon sieht man die ersten drei. Die beiden letzten
verstecken sich unter dem Gleit-Pad am Vorderende. Wenn man geschickter ist als
ich bekommt man den evtl. ohne Beschädigung ab. Ich habe meinen aber kaputt
gemacht und werde ihn dann durch so einen universal Maus-Gleiter ersetzen. Hier
also die fünf Schrauben:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/m720-mouse-repair/bottom-view.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Vorsichtig das Gehäuse öffnen und dann das kleine Flachbandkabel ausstecken,
das die Maustasten mit der Platine verbindet. Dazu den kleinen hellbraunen
Riegel mit einer Pinzette nach oben klappen und Kabel raus.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/m720-mouse-repair/inside.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Nun geht das Puzzle-Spiel weiter: Der fragliche Schalter dürfte irgendwo unter
dem Mausrad inkl. Aufhängung stecken. Aber wie kommt man da ran? Nach viel
herumprobieren stellte sich heraus, dass man einen kleinen schwarzen
Plastikstift hinter dem Rad herausdrücken kann und schon lässt sich das ganze
nach oben herausnehmen. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/m720-mouse-repair/wheel-assembly-off.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Sehr gut. Bzw. sehr schlecht, denn nun sehen wir den Schalter vor uns und dem
sieht man sofort an, dass er eingedrückt ist. Im Grunde ist es nur so ein
gewölbtes Metallplättchen unter etwas Kapton-Tape. Das Plättchen sollte sich
hübsch nach oben wölben. Tut es aber nicht:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/m720-mouse-repair/defective-switch.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Immerhin scheint es ein eigenständiges Bauteil zu sein, denn da sind
Lötanschlüsse. Puh – ob man sowas nachkaufen kann? &lt;/p&gt;
&lt;p&gt;Also erstmal grob ausmessen. Ich würde sagen das Schalterchen hat so etwa
5x5x1mm.  Und ich habe tatsächlich ein Mikrotaster-Sortiment gefunden in dem es
auch 5x5x0.8mm Taster gibt. Das sieht gut aus. Also gleich bestellen und
hoffen, dass das passt. Hätte es sicher auch einzeln gegeben, aber diverse
Mikrotaster kann man immer brauchen.&lt;/p&gt;
&lt;h1&gt;Mikrochirurgie&lt;/h1&gt;
&lt;p&gt;Ein paar Tage später waren die Taster da. Nun muss die Platine ganz raus, damit
wir ordentlich löten können. Dazu muss man  weitere Schräubchen lösen: zwei
unter der Mausradaufhängung die so ein kleines schwarzes Plastikteil halten in
das das Mausradmodul eben noch eingeklinkt war und eine am hinteren Ende links.
Alles schön verstauen und nicht zu stark atmen, damit die Mikroschrauben nicht
weg geweht werden. Und auch darauf achten, dass neben unserem Mikroschalterchen
noch zwei kleine Federn sind, die sehr leicht verloren gehen...&lt;/p&gt;
&lt;p&gt;Nun die Heißluftstation anwerfen und das Schalterchen auslöten.  Aber ein paar
Sekunden nachdem ich die Heißluft auf das Teil gerichtet hatte machte das
Plättchen leise "klick" und war wieder ordnungsgemäß gewölbt. Cool. Offenbar
hat die Hitze das Plättchen wieder in seine Ursprungsform gebracht. Also
erstmal nicht auslöten sondern testen, ob der Schalter auch funktioniert.
Vorher aber mal schnell das Ersatzteil daneben legen, ob es denn überhaupt
passt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/m720-mouse-repair/switch-old-and-new.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Jepp – das sieht gut aus. Brauchen wir aber nun möglicherweise garnicht.&lt;/p&gt;
&lt;p&gt;Also schnell alles wieder zusammenbauen und ausprobieren.
Und siehe da: alles wieder bestens! Das war eine wirklich simple Reparatur.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Mit der Heizungssteuerung reden</title><link href="https://techbotch.org/blog/bsb-lan/index.html" rel="alternate"/><published>2024-04-22T00:00:00+02:00</published><updated>2024-04-22T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-04-22:/blog/bsb-lan/index.html</id><summary type="html">&lt;p&gt;Wie Ihr in vergangenen Posts lesen konntet, habe ich bereits meinen Gaszähler
in meine Heimüberwachung integriert. Das ist sehr praktisch, um den Verbrauch
zu überwachen. Aber eigentlich wäre es doch schön, auch etwas mehr über die
Einstellung der Heizung selbst zu erfahren, denn moderne Heizungen haben
natürlich eine digitale Steuerung …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wie Ihr in vergangenen Posts lesen konntet, habe ich bereits meinen Gaszähler
in meine Heimüberwachung integriert. Das ist sehr praktisch, um den Verbrauch
zu überwachen. Aber eigentlich wäre es doch schön, auch etwas mehr über die
Einstellung der Heizung selbst zu erfahren, denn moderne Heizungen haben
natürlich eine digitale Steuerung und es wäre doch toll, die anzapfen zu
können.&lt;/p&gt;
&lt;p&gt;Und man kann! Im Zwischennetz bin ich schon vor einer ganzen Weile auf das
&lt;a href="https://github.com/fredlcore/BSB-LAN"&gt;BSB-LAN&lt;/a&gt; Projekt gestoßen, das genau das
für viele gängige Heizungen realisiert. Und das wollen wir uns heute mal
genauer ansehen.&lt;/p&gt;
&lt;p&gt;Offenbar verwenden viele Hersteller sehr ähnliche Steuergeräte und die bieten
eine Schnittstelle namens &lt;em&gt;Boiler-System-Bus&lt;/em&gt; (BSB). Das scheint im
Wesentlichen ein serielles Interface zu sein und alles was fehlt ist ein
Adapter, um am Ende UART Signal-Pegel zu bekommen und eine Software, die das
dazugehörige Protokoll beherrscht. Und genau das ist BSB-LAN.&lt;/p&gt;
&lt;h1&gt;Hardware&lt;/h1&gt;
&lt;p&gt;Eine Adapterplatine hatte ich schon vor längerer Zeit mal vom Autor bestellt.
Deswegen habe ich die V2. Aktuell wäre V4.3, aber der Funktion tut das keinen
Abbruch.  Also los geht's. Zunächst mal die Adapterplatine bestücken, alles
schön verlöten und nicht vergessen, sie für 3.3V zu jumpern (ESP!).  Dann ein
paar Pin-header auf den Adapter löten für die Verbindung zum
Mikrocontroller-Board.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/adapter.jpg" class="Medium" style="aspect-ratio: 4000/3000"&gt;&lt;/p&gt;
&lt;p&gt;Ursprünglich wurde die Firmware für Arduino entwickelt, aber auch ESP32 wird
unterstützt und so nehme ich lieber das. Konkret nehme ich so ein ESP Devkit v1
Modul, von denen ich noch einige in der Bastelkiste habe.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/ESP32Devkit-connected.jpg" class="Medium" style="aspect-ratio: 4/3"&gt;&lt;/p&gt;
&lt;p&gt;Das Ganze bauen wir in ein kleines Gehäuse ein. Mit der üblichen Methode:
Plastik-Distanzhülsen anschrauben, Plastikkleber drauf und ins Gehäuse drücken.
Leider gab es dabei ein Problem: die blöde ESP32-Devkit Platine hat zwar vier
schöne Löcher, aber zwei davon sind nicht nutzbar, weil die beiden kleinen
Taster so nah dran sind, dass kein Platz für die Schraubenköpfe bleibt. Grumpf!
Also mussten die Taster weichen. Die brauche ich eh nicht. Und wenn doch kann
man was anlöten, oder das mit einer Pinzette kurzschließen. Für den ESP32
nehmen wir Nylon-Schrauben, weil zumindest zwei davon direkt neben der Antenne
sind und Metall dort Ärger machen kann.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/taster.jpg" class="Medium" style="aspect-ratio: 4/3"&gt;&lt;/p&gt;
&lt;p&gt;Nun also einkleben und warten, bis der Kleber fest ist. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/eingebaut.jpg" class="Medium" style="aspect-ratio: 4/3"&gt;&lt;/p&gt;
&lt;p&gt;Nun Platinen kurz wieder ausbauen und Löcher ins Gehäuse machen, damit das
USB-Kabel und eine Signalleitung für den Anschluss an die Heizung durchpassen.&lt;/p&gt;
&lt;h1&gt;Firmware bauen&lt;/h1&gt;
&lt;p&gt;Es gibt ein ausführliches
&lt;a href="https://1coderookie.github.io/BSB-LPB-LAN/kap02.html#212-installation-auf-dem-esp32"&gt;Handbuch&lt;/a&gt;
zur Soft- und Hardware. Ich gebe hier trotzdem mal meinen Installationsprozess
wieder.&lt;/p&gt;
&lt;p&gt;Erstmal das Repository clonen (alternativ ein Release-Zip herunterladen.):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git clone https://github.com/fredlcore/BSB-LAN.git --depth=1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und dann ins Quellverzeichnis wechseln und dort die beiden &lt;code&gt;*.default&lt;/code&gt; Dateien
umbenennen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd BSB_LAN/BSB_LAN
mv BSB_LAN_custom_defs.h.default BSB_LAN_custom_defs.h
mv BSB_LAN_config.h.default BSB_LAN_config.h
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In &lt;code&gt;BSB_LAN_config.h&lt;/code&gt; müssen wir nun noch das WLAN aktivieren und SSID und Passwort 
setzen. Beides kommt ziemlich weit oben in &lt;code&gt;BSB_LAN_config.h&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;uint8_t network_type = WLAN;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;und ein paar Zeilen später:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;char wifi_ssid[32] = &amp;quot;YourWiFiNetwork&amp;quot;; // enter your WiFi network name (SSID) here
char wifi_pass[64] = &amp;quot;YourWiFiPassword&amp;quot;;// enter your WiFi password here
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Damit ist das ganze erstmal konfiguriert und wir können die Firmware bauen. Dazu 
brauchen wir die &lt;a href="https://www.arduino.cc/en/software"&gt;Arduino IDE&lt;/a&gt;. Schnell noch das
ESP Board via USB-Kabel an den Computer anschließen und&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;arduino BSB_LAN.ino
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In der GUI müssen wir nun das korrekte Board auswählen 
(&lt;code&gt;tools &amp;gt; board &amp;gt; ESP32 &amp;gt; ESP32 Dev Module&lt;/code&gt;), sowie das korrekte serial device 
(&lt;code&gt;tools &amp;gt; Port &amp;gt; ttyUSB0&lt;/code&gt;) und die Baudrate (&lt;code&gt;tools &amp;gt; Upload Speed &amp;gt; 115200&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Nun sollte alles richtig eingestellt sein und wir können complieren und flashen 
(Sketch &amp;gt; Upload). Und wenn alles gutgegangen ist, dann sollten wir ihn über die 
serielle Schnittstelle belauschen können:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ cu -l /dev/ttyUSB0 -s 115200 
Microcontroller: ESP32/NodeMCU
Using RX/TX pins 16, 17
Bus type defined in config: BSB
PPS settings:
Starting network connection via WiFi/WLAN
...
Setting up WiFi interfaceNetwork-Event 2
......Network-Event 4
Network-Event 7
.
Start scanning for SSID philnet
Network-Event 5
Network-Event 1
Scan done.2 networks found:
0: BSSID: 3C:37:86:6E:15:A2  -51dBm,  98%  encrypted  philnet
1: BSSID: B0:39:56:E4:E5:E5  -81dBm,  38%  encrypted  philnet
SSID match found at 0. Connecting...
Attempting to connect to WPA SSID: philnetNetwork-Event 4
Network-Event 7

You&amp;#39;re connected to the network:
SSID: philnet
BSSID: 3C:37:86:6E:15:A2
IP Address: 192.168.0.43
Signal strength (RSSI): -51Bm
Waiting 3 seconds to give Ethernet shield time to get ready...
Trying to get NTP time...
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und schon ist er per Ping erreichbar&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ping 192.168.0.43
PING 192.168.0.43 (192.168.0.43) 56(84) bytes of data.
64 bytes from 192.168.0.43: icmp_seq=1 ttl=255 time=233 ms
64 bytes from 192.168.0.43: icmp_seq=2 ttl=255 time=256 ms
64 bytes from 192.168.0.43: icmp_seq=3 ttl=255 time=278 ms
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und nun kann man mit dem Browser die IP-Adresse aufrufen (achtung: nur http,
kein https!):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/web-interface.png" style="aspect-ratio: 1296 / 685;"&gt;&lt;/p&gt;
&lt;p&gt;Die Inhalte kann ich Euch noch nicht zeigen, denn wir haben uns ja noch nicht
mit der Heizungssteuerung verbunden. Und das holen wir jetzt nach.&lt;/p&gt;
&lt;h1&gt;An die Heizung anschließen&lt;/h1&gt;
&lt;p&gt;Für die ersten Tests verwenden wir die Diagnostik-Buchse an der Front:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/service-buchse.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Die Pinbelegung (von oben nach unten) lautet:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pin&lt;/th&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pin 1&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pin 2&lt;/td&gt;
&lt;td&gt;CL+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pin 3&lt;/td&gt;
&lt;td&gt;CL-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pin 4&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Also improvisieren wir schnell ein Kabel und stecken es hier an. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/service-buchse2.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Den ESP versorgen wir direkt vom Laptop über USB, dann können wir auch gleich
schauen, was passiert. Also:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Heizung aus&lt;/li&gt;
&lt;li&gt;Adapter an die Buchse an die Heizung anschließen&lt;/li&gt;
&lt;li&gt;Heizung wieder an und schnell auf Empfang gehen:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ cu -l /dev/ttyUSB0 -s 115200
Connected.
HFEPROM option 59: 2050
Size of cmdtbl: 3752
free RAM: 251948
BSB-LAN version: 3.4.4-20240331020948
Microcontroller: ESP32/NodeMCU
Using RX/TX pins 16, 17
Bus type defined in config: BSB
PPS settings:
Starting network connection via WiFi/WLAN
...
Setting up WiFi interfaceNetwork-Event 2
.....Network-Event 4
Network-Event 7
.
Start scanning for SSID philnet
Network-Event 5
Network-Event 1
Scan done.4 networks found:
0: BSSID: B0:39:56:E4:E5:E5  -76dBm,  48%  encrypted  philnet
1: BSSID: B0:39:56:E4:E5:EE  -78dBm,  44%  encrypted  philnet
2: BSSID: 5E:49:79:6C:62:67  -81dBm,  38%  encrypted  FritzAM Gastzugang
3: BSSID: 5C:49:79:6C:62:67  -82dBm,  36%  encrypted  FritzAM
SSID match found at 0. Connecting...
Attempting to connect to WPA SSID: philnetNetwork-Event 4
Network-Event 7

You&amp;#39;re connected to the network:
SSID: philnet
BSSID: B0:39:56:E4:E5:E5
IP Address: 192.168.0.43
Signal strength (RSSI): -77Bm
Waiting 3 seconds to give Ethernet shield time to get ready...
Trying to get NTP time...
Date and time acquired: 03.04.24 22:10:07
Device family: 162
Device variant: 5
Start network services
Starting MDNS service with hostname BSB-LAN
Setup complete
DSP1-&amp;gt;FUNK QUR      053D0064 
DC 8A 32 0B 06 3D 05 00 64 8F 8C
HEIZ-&amp;gt;ALL  INF      05000219 02 6F 00 00 1E 84 FF FF FF FF 00 0C
DC 80 7F 17 02 05 00 02 19 02 6F 00 00 1E 84 FF FF FF FF 00 0C 1E 34
HEIZ-&amp;gt;EM1 INF      05040254 00 00 00 64 00 00 00 64 00 00 00 00 00 00 00 00
DC 80 03 1B 02 05 04 02 54 00 00 00 64 00 00 00 64 00 00 00 00 00 00 00 00 AA 11
DSP1-&amp;gt;FUNK QUR      053D0064 
DC 8A 32 0B 06 3D 05 00 64 8F 8C
HEIZ-&amp;gt;ALL  QINF      05000229 
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und schon bekommen wir auch im Web-Interface was zu sehen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/bsb-lan-working.png"&gt;&lt;/p&gt;
&lt;p&gt;Cool!&lt;/p&gt;
&lt;h1&gt;Konfiguration&lt;/h1&gt;
&lt;p&gt;Nun ist es an der Zeit, mal unsere Heizung zu befragen, was sie so alles an
Parametern unterstützt und dann eine entsprechend angepasste Konfiguration zu
basteln. Dazu geht man im Web-Interface auf &lt;em&gt;Reglerspezifische Parameterliste&lt;/em&gt;
und dort auf &lt;em&gt;Download&lt;/em&gt;. Das dauert gefühlt ewig (etliche Minuten) – also nicht
die Geduld verlieren. Am Ende hat man dann eine Textdatei mit jeder Menge Hex
Codes drin. Um daraus eine funktionierende Konfiguration für die Firmware zu
bauen, muss man sie an die Autoren der Software senden und die Konvertieren das
dann...&lt;/p&gt;
&lt;p&gt;... und zwar wie der Wind. Schon Tags drauf hatte ich mein selbstpersönliches 
&lt;code&gt;BSB_LAN_custom_defs.h&lt;/code&gt; File. Cool! &lt;/p&gt;
&lt;p&gt;Also in den source Ordner kopieren, Firmware neu complieren und flashen. Wieder
an die Heizung anschließen und einen Blick ins Web interface werfen. Wow! Nun
haben ich Zugriff auf eine gefühlte Million Parameter:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/heizungsfunktionen.png", Class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Jede Zeile repräsentiert ein weiteres Menü in dem man dann einen Haufen
Parameter angezeigt bekommt und teils auch verändern kann. Allerdings
beschränke ich mich fürs Erste auf Daten-Lesen, bevor ich mich traue, an
irgendwelchen Werten rumzudrehen, deren Bedeutung ich momentan noch nicht
verstehe.&lt;/p&gt;
&lt;h1&gt;In Homeasistant einbinden&lt;/h1&gt;
&lt;p&gt;Nun ist es an der Zeit, das Ganze in Homeassistant einzubinden. Und tatsächlich
gibt es eine &lt;a href="https://www.home-assistant.io/integrations/bsblan/"&gt;BSB-LAN
Integration&lt;/a&gt;.  Leider ist
das kein guter Weg, denn diese Integration unterstützt nur uralte Versionen der
BSB-LAN Firmware. Aber das macht nix, denn BSB-LAN spricht MQTT und so müssen
wir nur die Zugangsdaten für unseren MQTT-Server konfigurieren und schon haben
wir einen Kommunikationsweg.  Details dazu gibt es wieder im &lt;a href="https://1coderookie.github.io/BSB-LPB-LAN/kap05.html#52-mqtt"&gt;BSB-LAN
Handbuch&lt;/a&gt;.
Das logging-Format setze ich auf &lt;em&gt;Rich JSON&lt;/em&gt; und die logging Periode auf 60s.
Dann noch die gewünschten Parameter auswählen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/mqtt-config.png"&gt;&lt;/p&gt;
&lt;p&gt;Schnell auf &lt;em&gt;Speichern&lt;/em&gt; drücken und schon kann es losgehen. Also gleich mal
lauschen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ mosquitto_sub -h hal -u phil -P verysecretpassword -t &amp;#39;BSB-LAN/#&amp;#39; -v
BSB-LAN/status online
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8700,&amp;quot;name&amp;quot;:&amp;quot;Aussentemperatur&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;4.6&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8743,&amp;quot;name&amp;quot;:&amp;quot;Vorlauftemperatur Istwert Heizkreis 1&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;33.4&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8773,&amp;quot;name&amp;quot;:&amp;quot;Vorlauftemperatur Istwert Heizkreis 2&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;---&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8314,&amp;quot;name&amp;quot;:&amp;quot;Rücklauftemperatur-Istwert&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;55.1&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8310,&amp;quot;name&amp;quot;:&amp;quot;Kesseltemperatur-Istwert&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;65.2&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:6700,&amp;quot;name&amp;quot;:&amp;quot;Fehlermeldung&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;000000000000000000000000&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;error&amp;quot;: 260}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8830,&amp;quot;name&amp;quot;:&amp;quot;Trinkwassertemperatur-Istwert Oben (B3)&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;48.8&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8700,&amp;quot;name&amp;quot;:&amp;quot;Aussentemperatur&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;4.6&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8743,&amp;quot;name&amp;quot;:&amp;quot;Vorlauftemperatur Istwert Heizkreis 1&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;33.4&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8773,&amp;quot;name&amp;quot;:&amp;quot;Vorlauftemperatur Istwert Heizkreis 2&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;---&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8314,&amp;quot;name&amp;quot;:&amp;quot;Rücklauftemperatur-Istwert&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;55.2&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8310,&amp;quot;name&amp;quot;:&amp;quot;Kesseltemperatur-Istwert&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;65.0&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:6700,&amp;quot;name&amp;quot;:&amp;quot;Fehlermeldung&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;000000000000000000000000&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;error&amp;quot;: 260}}
BSB-LAN/json {&amp;quot;BSB-LAN&amp;quot;:{&amp;quot;id&amp;quot;:8830,&amp;quot;name&amp;quot;:&amp;quot;Trinkwassertemperatur-Istwert Oben (B3)&amp;quot;,&amp;quot;value&amp;quot;: &amp;quot;48.8&amp;quot;,&amp;quot;desc&amp;quot;: &amp;quot;&amp;quot;,&amp;quot;unit&amp;quot;: &amp;quot;°C&amp;quot;,&amp;quot;error&amp;quot;: 0}}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sehr schön – das ist doch erfreulich! Aber nun setzen wir das Logging-Format
wieder zurück auf &lt;em&gt;Plain Text&lt;/em&gt;, denn das ist in HASSIO einfacher zu
konfigurieren. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;BSB-LAN/status online
BSB-LAN/8700 5.7
BSB-LAN/8743 37.9
BSB-LAN/8773 ---
BSB-LAN/8314 53.0
BSB-LAN/8310 58.8
BSB-LAN/6700 000000000000000000000000
BSB-LAN/8830 47.4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun müssen wir noch entsprechende Sensoren für HASSIO anlegen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mqtt:
  sensor:
    - name: &amp;quot;Aussentemperatur&amp;quot;
      state_topic: &amp;quot;BSB-LAN/8700&amp;quot;
      unit_of_measurement: &amp;quot;°C&amp;quot;
    - name: &amp;quot;Ionisationsstrom&amp;quot;
      state_topic: &amp;quot;BSB-LAN/8329&amp;quot;
      unit_of_measurement: &amp;quot;µA&amp;quot;
    - name: &amp;quot;Kesseltemperatur&amp;quot;
      state_topic: &amp;quot;BSB-LAN/8310&amp;quot;
      unit_of_measurement: &amp;quot;°C&amp;quot;
    - name: &amp;quot;Vorlauftemperatur HK1&amp;quot;
      state_topic: &amp;quot;BSB-LAN/8743&amp;quot;
      unit_of_measurement: &amp;quot;°C&amp;quot;
    - name: &amp;quot;Vorlauftemperatur HK2&amp;quot;
      state_topic: &amp;quot;BSB-LAN/8773&amp;quot;
      unit_of_measurement: &amp;quot;°C&amp;quot;
    - name: &amp;quot;Rücklauftemperatur&amp;quot;
      state_topic: &amp;quot;BSB-LAN/8314&amp;quot;
      unit_of_measurement: &amp;quot;°C&amp;quot;
    - name: &amp;quot;Trinkwassertemperatur&amp;quot;
      state_topic: &amp;quot;BSB-LAN/8830&amp;quot;
      unit_of_measurement: &amp;quot;°C&amp;quot;
    - name: &amp;quot;BSB Fehler&amp;quot;
      state_topic: &amp;quot;BSB-LAN/6700&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und schon können wir das in Hassio verwenden. Erstmal alle Sensoren in eine 
Karte im Dashboard einbinden:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/hassio-dashboard.png", Class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und dort kann man dann auch auf den Verlauf zugreifen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/Kesseltemp.png", Class="Large"&gt;
&lt;img src="https://techbotch.org/blog/bsb-lan/Ionisationsstrom.png", Class="Large"&gt;&lt;/p&gt;
&lt;h1&gt;Finalisieren&lt;/h1&gt;
&lt;p&gt;Nun da alles funktioniert, bleiben noch ein paar Aufräumarbeiten. Z.B. sollten
wir die Hardware nun richtig mit der Steuerung verbinden, anstatt die
Service-Buchse zu verwenden. Zunächst suchen wir mal das Steuergerät. Also
Haube runter und umschauen.  Zuerst muss nun die Schraube oben in der Mitte raus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/Frontklappe.jpg", Class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und dann kann man die Steuereinheit herunterklappen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/Rückklappe.jpg", Class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Seitlich sind dann je zwei Klipps rechts und links. Die muss man lösen und dann
geht die Rückseite ab und man bekommt freie Sicht auf das Steuergerät:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/Steuergerät.jpg", Class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Die beiden mit  &lt;em&gt;FB&lt;/em&gt; beschrifteten Buchsen oben links sind unser Ziel. Hier
kommt der Bus raus.  Und die Steckerbelegung steht freundlicherweise auf dem
Aufkleber, der auf der Rückwand war:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/steckerbelegung.jpg", Class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Kabelschuhe tun es, aber ich habe mir einen richtigen Stecker bestellt und
installiert:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/bsb-lan/Stecker-installiert.jpg", Class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Nun noch das Kabel durch die Gummi-Durchführung stopfen, rein in unser
Projektgehäuse und an den BSB-LAN Adapter anklemmen. Kabelbinder als
Zugentlastung fest draufzurren – fertig.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;BSB-LAN ist wirklich cool! Ich bin schon sehr gespannt darauf, diverse
Heizungsparameter langfristig im Blick zu haben und vielleicht kann man darauf
aufbauend ja sogar ein bisschen den Energieverbrauch optimieren. Noch
überblicke ich die Vielzahl der Parameter nichtmal ansatzweise, aber ich werde
mich nun Stück für Stück durch die Liste wühlen – immer auf der Suche nach
etwas interessantem.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>"USB-Netzteil"</title><link href="https://techbotch.org/blog/usb-charger-wtf/index.html" rel="alternate"/><published>2024-03-23T00:00:00+01:00</published><updated>2024-03-23T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-03-23:/blog/usb-charger-wtf/index.html</id><summary type="html">&lt;p&gt;Seit langem verwenden fast alle Kleingeräte ein USB-Kabel zur Stromversorgung
und wie es aussieht wird das nun sogar auf einen Stecker (USB-C)
standardisiert.  Und so hat man sich daran gewöhnt zum Aufladen/Betreiben
seiner Gadgets einfach schnell in die Kiste mit den ganzen USB-Ladegeräten zu
greifen. Kabel rein, geht.&lt;/p&gt;
&lt;p&gt;Und …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Seit langem verwenden fast alle Kleingeräte ein USB-Kabel zur Stromversorgung
und wie es aussieht wird das nun sogar auf einen Stecker (USB-C)
standardisiert.  Und so hat man sich daran gewöhnt zum Aufladen/Betreiben
seiner Gadgets einfach schnell in die Kiste mit den ganzen USB-Ladegeräten zu
greifen. Kabel rein, geht.&lt;/p&gt;
&lt;p&gt;Und genau so habe ich das mal wieder gemacht, als ich ein wenig mit ein paar
Funksignalen spielen wollte: ESP32-Modul auf ein Breadboard, 433MHz Empfänger
dazu, alles verkabeln, irgendeinen USB-Lader schnappen, z.B. diesen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/usb-charger-wtf/charger.jpg" class="Medium" style="aspect-ratio: 1152/834"&gt;&lt;/p&gt;
&lt;p&gt;Kabel rein, los geht's.&lt;/p&gt;
&lt;p&gt;Oder auch nicht, denn irgendwie wollte der ESP nicht im WLAN auftauchen. Komisch.
Das Flashen der Firmware war noch problemlos verlaufen und solang er über mein Laptop 
verbunden war kam er auch ins WLAN. Nur jetzt will er nicht mehr. Was'n da los?&lt;/p&gt;
&lt;p&gt;Früher hatte ich schon öfter mal Probleme, wenn ein Gerät mehr Strom wollte,
als irgendein Billig-Ladestecker so abgeben konnte. Z.B. ein Raspberry-Pi an
einem uralten schwachbrüstigen Lader...&lt;/p&gt;
&lt;p&gt;Aber ein ESP32 sollte nun echt nicht viel Strom brauchen. Aber werfen wir trotzdem 
mal einen kritischen Blick auf das Ladegerät:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/usb-charger-wtf/charger2.jpg" class="Medium" style="aspect-ratio: 462/687"&gt;&lt;/p&gt;
&lt;p&gt;Waaaas? Da steht "4.3V"?!? Das ist nun ganz klar außerhalb der
&lt;a href="https://usb.org/document-library/usb-20-specification"&gt;USB-Spezifikation&lt;/a&gt;!
Aber kann es sein, dass das vielleicht nur ein Druckfehler ist? Also
nachmessen.  Nein – kein Druckfehler. Mein Multimeter zeigt sogar nur eine
Leerlaufspannung von 4.2V.
Und um uns noch ein bisschen zu verhöhnen, ist auch noch so ein hübsches
Piktogramm für die Polung eines Tonnensteckers dabei, der wohl zum
ursprünglichen Produkt gehörte, aber ganz offensichtlich nicht fest mit dem
Netzteil verbunden ist, das eindeutig eine USB-A Buchse hat. &lt;/p&gt;
&lt;p&gt;Und wo ich so darüber nachdenke kommt mir: Das Ladegerät gehört zu den
"Heizsocken" meiner Frau. Da sind zwei Akkus dabei, die man mit einem
USB-Y-Kabel an dessen Ende solche Tonnenstecker sind, laden kann. Und 4.2V
klingt verdächtig nach der Maximalspannung einer Lithiumzelle. Kann es etwa
sein, das da nichtmal ein Laderegler verbaut ist und das Ding einfach mit 4.2V
draufhält und hofft, dass die Akkus das überleben? Nachschauen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/usb-charger-wtf/PCB-top.jpg" class="Medium" style="aspect-ratio: 1532/2048"&gt;
&lt;img src="https://techbotch.org/blog/usb-charger-wtf/PCB-bottom.jpg" class="Medium" style="aspect-ratio: 1532/2048"&gt;&lt;/p&gt;
&lt;p&gt;Die Oberseite sieht aus wie alle billigen Schaltnetzteile. Da ist ein
Optokoppler(817b) und ein &lt;a href="https://grupoautcomp.com.br/wp-content/uploads/2016/11/Specification-IC-DK1203.pdf"&gt;DK1203 Schaltnetzteil
Controller&lt;/a&gt;.
Soweit nichts besonderes. Die Unterseite könnte aber schon ein richiger
Laderegler sein. Auf auf dem Chip (IC4) steht "OPA1612  358S". Unter &lt;em&gt;OPA1612&lt;/em&gt;
findet man einen Audio-Verstärker von Texas Instruments. Sucht man nach &lt;em&gt;358S&lt;/em&gt;
findet man v.a. einen den &lt;em&gt;LM358S&lt;/em&gt; dual Op-amp, der das gleiche Package und
Pinout hat wie der OPA1612.
Also wohl doch der gleiche oder zumindest ein kompatibler IC.  Ansonsten findet
man einen &lt;em&gt;358S Charging and USB Control Chip&lt;/em&gt; – der hat aber ein BGA-25
Package, während unser Chip wohl SOP-8 sein dürfte. Mysteriös. &lt;/p&gt;
&lt;p&gt;Sucht man weiter, findet man jedoch Ladeschaltungen die auf dem LM358S
beruhen. Z.B.
&lt;a href="https://www.homemade-circuits.com/opamp-low-high-battery-charger/"&gt;hier&lt;/a&gt;.
Also ist da wohl wirklich ein Laderegler im "Steckernetzteil".&lt;/p&gt;
&lt;p&gt;Eine USB-A Buchse zu verbauen ist aber trotzdem unheimlich dämlich. Nicht nur
ist das dann eben &lt;em&gt;kein&lt;/em&gt; USB-Netzteil, sondern es besteht ja auch die Gefahr,
dass der nichtsahnende Nutzer das USB-Kabel in ein richtiges USB-Netzteil
steckt und das hat 5V und keinen Laderegler. Und das Y-Kabel sorgt auch
zuverlässig dafür, dass es unmöglich ist, die Spannung der beiden Akkus einzeln
zu überwachen. Beides dürften die Lithiumzellen auf Dauer übel nehmen...&lt;/p&gt;
&lt;p&gt;Welcher Volldepp designt denn sowas?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/usb-charger-wtf/charger3.jpg" class="Small" style="aspect-ratio: 199/47"&gt;&lt;/p&gt;
&lt;p&gt;Da bin ich mal wieder sprachlos. &lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Noch ein Demagnetisierer</title><link href="https://techbotch.org/blog/another-demagnetizer/index.html" rel="alternate"/><published>2024-03-17T00:00:00+01:00</published><updated>2024-03-17T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-03-17:/blog/another-demagnetizer/index.html</id><summary type="html">&lt;p&gt;Vor einer Weile hatte ich mal ein kleines &lt;a href="https://techbotch.org/blog/cheap-demagnetizer/index.html"&gt;chinesisches
Demagnetisiergerät&lt;/a&gt;
vorgestellt und ein wenig verbessert. Und weil sich das so alleine fühlte habe
ich heute noch ein etwas größeres (TC-1) bekommen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/another-demagnetizer/tc-1-demagnetizer.jpg" class="Medium" style="aspect-ratio: 2048/1532"&gt;
&lt;img src="https://techbotch.org/blog/another-demagnetizer/tc-1-demagnetizer2.jpg" class="Medium" style="aspect-ratio: 2048/1532"&gt;&lt;/p&gt;
&lt;p&gt;Es funktioniert wie das kleine auch: Drin ist ein Elektromagnet, der das
Magnetfeld mit 50Hz umpolt und man zieht …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Vor einer Weile hatte ich mal ein kleines &lt;a href="https://techbotch.org/blog/cheap-demagnetizer/index.html"&gt;chinesisches
Demagnetisiergerät&lt;/a&gt;
vorgestellt und ein wenig verbessert. Und weil sich das so alleine fühlte habe
ich heute noch ein etwas größeres (TC-1) bekommen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/another-demagnetizer/tc-1-demagnetizer.jpg" class="Medium" style="aspect-ratio: 2048/1532"&gt;
&lt;img src="https://techbotch.org/blog/another-demagnetizer/tc-1-demagnetizer2.jpg" class="Medium" style="aspect-ratio: 2048/1532"&gt;&lt;/p&gt;
&lt;p&gt;Es funktioniert wie das kleine auch: Drin ist ein Elektromagnet, der das
Magnetfeld mit 50Hz umpolt und man zieht das zu demagnetisierende Werkzeug
einfach langsam über das Gerät. Der freundliche Chinese hat mir zwar
korrekterweise die 220V Version geschickt, aber der Stecker am Gerät ist wohl
nicht für unsere Breiten gedacht:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/another-demagnetizer/stecker.jpg" class="Medium" style="aspect-ratio: 1532/2048"&gt;&lt;/p&gt;
&lt;p&gt;Also ein passendes Gerätekabel aus der Bastelkiste holen und das Ding mal
aufschrauben. Und wo wir schon dabei sind schauen wir uns ein bisschen um:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/another-demagnetizer/innenleben1.jpg" class="Medium" style="aspect-ratio: 2048/1532,"&gt;&lt;/p&gt;
&lt;p&gt;Ähnlich wie im letzten Gerät  ein Quasi "aufgesägeter" Trafo. Aber diesmal ohne
LED und ordentlich mit Crimpsteckern mit dem Schalter verbunden.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/another-demagnetizer/innenleben2.jpg" class="Medium" style="aspect-ratio: 1532/2048"&gt;&lt;/p&gt;
&lt;p&gt;Diesmal gibt es tatsächlich eine Zugentlastung am Kabel und der Schutzleiter ist
sogar mit dem Gehäuse verbunden – löblich!  Nur scheint mir der Crimp viel zu
groß gewählt – das sind doch nie im Leben 2.5mm² Kabel, oder? &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/another-demagnetizer/Crimpauge1.jpg" class="Medium" style="aspect-ratio: 924/786"&gt;&lt;/p&gt;
&lt;p&gt;Aber das spielt wohl keine Rolle, denn man hat sich offenbar nicht die Mühe gemacht,
den Schutzleiter abzuisolieren und einfach auf die Isolation gecrimpt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/another-demagnetizer/Crimpauge2.jpg" class="Medium" style="aspect-ratio: 906x666"&gt;&lt;/p&gt;
&lt;p&gt;Da fehlen mir jetzt schon ein bisschen die Worte...&lt;/p&gt;
&lt;p&gt;Also altes Kabel raus, neues Kabel rein und frische Crimpstecker drauf. Diesmal
auch den Schutzleiter korrekt verbinden und alles wieder zusammenbauen.
Nun sollte es halbwegs betriebssicher sein...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Gaszähler anbinden 2</title><link href="https://techbotch.org/blog/gas-meter2/index.html" rel="alternate"/><published>2024-02-27T00:00:00+01:00</published><updated>2024-02-27T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-02-27:/blog/gas-meter2/index.html</id><summary type="html">&lt;p&gt;In einem &lt;a href="https://techbotch.org/blog/gas-meter/index.html"&gt;früheren Post&lt;/a&gt; hatte ich
mich mit dem Auslesen des Gaszählers via ESPhome befasst und war dabei auf ein
paar Probleme gestoßen: Jedes Mal, wenn ESPhome den Kontakt zum Homessistant
verlor und dann wiederherstellte, wurde der Zählerstand in ESPhome wieder auf
den beim letzen Mal eingegeben Stand zurückgesetzt. In …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In einem &lt;a href="https://techbotch.org/blog/gas-meter/index.html"&gt;früheren Post&lt;/a&gt; hatte ich
mich mit dem Auslesen des Gaszählers via ESPhome befasst und war dabei auf ein
paar Probleme gestoßen: Jedes Mal, wenn ESPhome den Kontakt zum Homessistant
verlor und dann wiederherstellte, wurde der Zählerstand in ESPhome wieder auf
den beim letzen Mal eingegeben Stand zurückgesetzt. In einem &lt;a href="https://techbotch.org/blog/interruptible-power-supply/index.html"&gt;follow-up
Post&lt;/a&gt; hatte ich
dann schonmal entdeckt, warum das so häufig passiert, aber endgültig gelöst hat
es das auch nicht. Des Übels Wurzel ist, dass der &lt;code&gt;homeassistant&lt;/code&gt; Sensor, den
ich zur Übergabe des Sollwerts verwendet hatte nicht nur dann aktualisiert
wird, wenn man eine neue Zahl eingibt, sondern eben auch beim
(Wieder-)Herstellen des Kontakts. Und so hatte ich eine Weile den Kopf gegen
die Wand gehauen und hoffte auf eine Eingebung und habe verschiedenes
ausprobiert – erfolglos.  Letztlich habe ich im
&lt;a href="https://community.home-assistant.io"&gt;Homeassistant-Forum&lt;/a&gt; um Tips gebeten.&lt;/p&gt;
&lt;p&gt;Und in der Tat: User &lt;code&gt;Mahko_Mahko&lt;/code&gt; gab den entscheidenden Hinweis: Neben dem
oben erwähnten &lt;a href="https://esphome.io/components/sensor/homeassistant.html"&gt;Home Assistant
Sensor&lt;/a&gt; gibt es auch
noch die Möglichkeit, in ESPhome einen Service über die &lt;a href="https://esphome.io/components/api.html#user-defined-services"&gt;native API
Component&lt;/a&gt; zu
definieren! Und das hat mein Problem gelöst.&lt;/p&gt;
&lt;p&gt;Also zunächst in der YAML config für ESPhome den Service anlegen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;api:
  reboot_timeout: 0s
  services:
    - service: set_reading
      variables:
        new_reading: float
      then:
        lambda: id(count_reading) = int(new_reading * 100);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und den alten Homeassistant Sensor, sowie den Factory-reset button wieder
rausschmeißen und Firmware flashen.&lt;/p&gt;
&lt;p&gt;Wenn wir nun den Gaszählerstand manuell korrigieren möchten, gehen wir in
Homeassistant nach &lt;em&gt;Developer tools &amp;gt; Services&lt;/em&gt; und geben dann den Namen
unseres services ein (&lt;code&gt;set_reading&lt;/code&gt;) uns schon findet er ihn unter vollem
Namen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter2/set-meter-reading.png" class="Large" style="aspect-ratio: 932/650"&gt;&lt;/p&gt;
&lt;p&gt;Nur noch den am physischen Gaszähler angezeigten Stand in das Eingabefeld
(&lt;code&gt;new_reading&lt;/code&gt;) tippen und dann &lt;em&gt;Call service&lt;/em&gt; drücken – und schon ist das
erledigt.&lt;/p&gt;
&lt;p&gt;Die angepasste config findet Ihr &lt;a href="https://techbotch.org/blog/gas-meter2/gas-meter.yml"&gt;hier&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nun werde ich das Ganze mal eine Weile testen. Und falls es wider Erwarten
immernoch Probleme macht wird das hier eine Gaszähler-Serie... ;-)&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Kaufempfehlungen</title><link href="https://techbotch.org/blog/buying-advice/index.html" rel="alternate"/><published>2024-01-16T00:00:00+01:00</published><updated>2024-01-16T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-01-16:/blog/buying-advice/index.html</id><summary type="html">&lt;p&gt;Wenn Ihr, wie ich, gerne Sachen bastelt, repariert und modifiziert, dann kennt
Ihr die Qual er Wahl beim Werkzeugkauf. Egal, ob Oszilloskop, Schweißgerät oder
Motorsäge – die Auswahl ist schier unüberschaubar und die Preisspanne
atemberaubend.  Also studiert man die einschlägigen Online-Händler, ein paar
Fachhändler und verbringt die kommenden Wochen mit YouTube …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wenn Ihr, wie ich, gerne Sachen bastelt, repariert und modifiziert, dann kennt
Ihr die Qual er Wahl beim Werkzeugkauf. Egal, ob Oszilloskop, Schweißgerät oder
Motorsäge – die Auswahl ist schier unüberschaubar und die Preisspanne
atemberaubend.  Also studiert man die einschlägigen Online-Händler, ein paar
Fachhändler und verbringt die kommenden Wochen mit YouTube Videos zum Thema.
Schließlich will jede Ausgabe wohlüberlegt sein, denn natürlich will ich das
bestmögliche Gerät für mein Budget finden. &lt;/p&gt;
&lt;p&gt;Und schon ist man mitten drin im Maker Werkzeugkauf-Dschungel!  Um meinen Punkt
zu illustrieren, verwende ich mal das Beispiel Schweißgerätekauf – aber das
Prinzip gilt eigentlich für jede Werkzeuganschaffung für den privaten
Maker-Space. Mein konkreter Schweißgerätekauf liegt schon etwas zurück, aber
ein Freund hat sich gerade eins gekauft und so fand ich das ein schönes
Beispiel. Ich habe im Folgenden auch vieles aufgenommen, das mir garnicht
selbst passiert ist, aber ich nehme mir mal die Kunstfreiheit, auch Dinge
einzubauen, die ich bei anderen gesehen habe...&lt;/p&gt;
&lt;h1&gt;Wir kaufen ein Schweißgerät&lt;/h1&gt;
&lt;p&gt;Ich wollte endlich mehr mit Metall machen und dazu will ich ein Schweißgerät haben.
Schweißen ist cool und wie es scheint, kann man damit wirklich viele Sachen
machen und außerdem lerne mal wieder eine neue Fähigkeit – perfekt!  Also nur
noch schnell ein Gerät auswählen, etwas Metallschrott besorgen und schon ist
man mitten drin in der Welt der Metallarbeit – ob Gartenskulptur,
Kleinreparatur, oder Wolkenkratzerbau – nichts wäre mir mehr unmöglich!&lt;/p&gt;
&lt;p&gt;Also auf ins Internet und schlau machen, was man so braucht. Schnell stellt man
dann fest, dass es diverse verschiedenen Schweißverfahren gibt, die in
Reichweite des Heimwerkers liegen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Elektrode&lt;/li&gt;
&lt;li&gt;MIG/MAG&lt;/li&gt;
&lt;li&gt;Fülldraht&lt;/li&gt;
&lt;li&gt;TIG/WIG&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also mal schlau machen, welche Vor- und Nachteile die so haben. Außerdem ist zu
klären, wieviel Wumms das Gerät haben soll – also welchen Strom es so liefern
kann. Und auch da enden die Entscheidungen nicht, denn die meisten Methoden
haben viele Varianten und Parameter und nur die teureren Geräte unterstützen so
Sachen, wie Puls-Schweißen, Hochfrequenzzündung oder Synergiesteuerung.&lt;/p&gt;
&lt;p&gt;Was also soll ich wollen???&lt;/p&gt;
&lt;h1&gt;Guter Rat ist teuer&lt;/h1&gt;
&lt;p&gt;Und bevor wir's uns versehen sind wir dann in einem Spezialforum für
Profi-Schweißer angemeldet. Zunächst lesen wir nur ein paar Beiträge, aber dann
fassen wir uns ein Herz und: stellen eine Frage! So in der Art:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hallo Ihr,&lt;/p&gt;
&lt;p&gt;Ich bin Neuling und möchte mir mein erstes Schweißgerät kaufen.
Ahnung habe ich noch keine, bin aber aber hochmotiviert!
Welches Gerät soll ich kaufen?&lt;/p&gt;
&lt;p&gt;Vielen Dank für Euren Rat!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Schnell auf Senden klicken und ab dem Moment haben wir immer einen Browser-Tab
offen mit dem Forum.  Und checken alle 5 Minuten, ob schon Antworten gekommen
sind.&lt;/p&gt;
&lt;p&gt;Es dauert zwar aber ein bisschen, aber die Antworten kommen. Und so sehen sie aus:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Helmuth Handwerker:&lt;/p&gt;
&lt;p&gt;Deiner Frage entnehme ich, dass Du keine abgeschlossene Ausbildung in einem
Metallberuf hast. Schweißen ist eine Kunst, die man nicht über Nacht lernt und 
schon garnicht mit so modernem Quatsch, wie YouTube.
Ich rate Dir also, erstmal garkeins zu kaufen, sondern erstmal eine Lehre zum
Schweißfachprofi zu machen. Danach kennst Du Dich einigermaßen aus und weißt
eh was Du brauchst.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hm – eigentlich hatte ich nicht vor, mehrere Jahre zu investieren, sondern
erstmal mit was kleinem loszulegen. Learning by doing und so. Vielleicht ist ja
der nächste Beitrag ermunternder:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Peter Profi:&lt;/p&gt;
&lt;p&gt;Mit den mageren Angaben kann Dir hier keiner helfen. Liefer uns erstmal
klarere Aussagen dazu, was Du eigentlich machen willst. Welche Materialstärke? 
Welches Material? Stahl, Edelstahl, Aluminium, Titan, Kryptonit?
Flugzeugbau, Brückenkonstruktion, oder Autoblech? etc.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Er hat sicher einen Punkt, aber ich bin Maker – ich will das ALLES irgendwie
können, aber eben nix davon ständig! Es muss doch irgendwas geben, das
einigermaßen vielseitig ist? Oder?&lt;/p&gt;
&lt;p&gt;Aber selbst wenn ich genau benennen könnte, was genau ich machen will, bleibt
ja auch noch die Frage, Welche Marke und welches Gerät ich genau kaufen sollte.
Natürlich stößt man schnell auf die gut etablierten Profi-Marken, aber wenn man
überhaupt Preise findet, sind die typischerweise so hoch, dass einen der
Gedanke beschleicht, dass da auch ein Mittelklassewagen im Lieferumfang ist.
Andererseits locken zahlreiche bezahlbare bis spottbillige Geräte made in China. 
Und auch dazu hat das Forum natürlich zahlreiche Meinungen:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Stefan Schmied:&lt;/p&gt;
&lt;p&gt;Wer den Kernschrott aus China kauft ist selber schuld. Ich geh lieber zum
Schweißhändler im Nachbardorf – den kenn ich schon ewig und da kann ich das
Ding auch vor Ort ausprobieren Und wenn mal was ist repariert der mir das
sofort.
Die Chinadinger fallen ja schon auseinander, wenn ich die mal etwas herzlicher
hinten auf den Trecker packe. Nee - sowas kommt mir nicht ins Haus.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aber auch die Gegenseite meldet sich zu Wort:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Bernhard Bastler:&lt;/p&gt;
&lt;p&gt;Also ich hab meins für 100€  gekauft – aus China, aber Top Qualität. Ich hab
damit einen Kran im Garten geschweißt und hat alles gehalten, als wir den
Pool im gefüllten Zustand damit versetzt haben. Wenn man Ahnung hat kann man
damit alles machen.&lt;/p&gt;
&lt;p&gt;Der Karlheinz auf YouTube hat auch lauter Geräte von der Marke und der 
empfiehlt die auch immer. Der Mann hat Ahnung!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Und auch die Fans von Antiquitäten melden sich:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Thomas Trödler:&lt;/p&gt;
&lt;p&gt;Kauf Dir ein gebrauchtes Profi-Gerät von einem namhaften Hersteller mit einem
richtigen Trafo drinne – die sind unzerstörbar und schweißen alles.  Die
Maschinen aus der Serie "Hephaistos" von Pfuschmüller &amp;amp; Söhne werden immer
wieder im Forum angeboten und kosten kaum mehr als drei Chinaböller.  Nimm
gleich das 900A Modell mit der Wasserkühlung und dem Zweimannbrenner – dann
bist Du gerüstet.&lt;/p&gt;
&lt;p&gt;Ja – die haben manchmal einen gebrochenen Trafokernschaftflansch, aber der
ist leicht zu ersetzen, wenn man keine zwei linken Hände hat und weiß, wie
man eine Drehbank benutzt.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Also eigentlich wollte ich keine 1500 Euro für einen 50 Jahre alten Metallkasten
von 400kg ausgeben, der so groß ist, dass ich nicht mehr in die Werkstatt
reinpasse, wenn er drinsteht. Außerdem bin ich kein Schweißgerätetechniker –
wie in aller Welt soll ich denn beurteilen, ob das Teil das ich da kaufe
überhaupt funktioniert, oder nicht irgendwelche schwerwiegenden Probleme hat?
Von "kleinen Reparaturen" ganz zu schweigen! Nee.&lt;/p&gt;
&lt;p&gt;Und welches Schweißverfahren sollte ich wählen? Auch dazu bekommt man Empfehlungen.
Z.B. den pädagogisch motivierten:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Lehrer Lempel:&lt;/p&gt;
&lt;p&gt;Man sollte immer mit dem Elektrodenschweißen beginnen. Da lernt man
wenigstens wirklich, wie das geht und wenn man das mal gemeistert hat sind
die anderen Methoden leichter.
So haben auch schon unsere Vorväter geschweißt. -&amp;gt; Das einzig Wahre.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Die Fraktion der Hedonisten meint:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Paul Praktisch:&lt;/p&gt;
&lt;p&gt;Unbedingt MIG. Das ist so einfach wie Heißklebepistole und
Du hast sofort Erfolge. Das ist einfach die vielseitigste Methode.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aber auch TIG hat glühende Bewunderer:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Daniel Düsentrieb:&lt;/p&gt;
&lt;p&gt;Ich würde TIG nehmen. Damit kann man von super dick bis ganz filigran alles
Schweißen und das Auge isst schließlich mit. Keine andere Methode liefert so
ästhetisch ansprechende Schweißnähte wie TIG. 
Nimm gleich ein AC/DC Gerät, dann ist auch Alu kein Problem.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Irgendwie habe sie ja alle Recht, aber was soll ich nun tun?&lt;/p&gt;
&lt;p&gt;Kurz war ich dann versucht, tatsächlich ein neues Markengerät zu kaufen und fragte:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wenn ich mir ein neues gönne, welcher Hersteller ist denn zu empfehlen?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Immerhin bekommt man auf klare Fragen auch klare Antworten:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Lurch – alles andere ist Mist!
...&lt;/p&gt;
&lt;p&gt;Murkel – nur die können's wirklich!
...&lt;/p&gt;
&lt;p&gt;Nonius ist das einzig wahre.
...&lt;/p&gt;
&lt;p&gt;Jockel!
...&lt;/p&gt;
&lt;p&gt;EMW sind die besten.
...&lt;/p&gt;
&lt;p&gt;Krehm – nur die kommen mir in die Werkstatt.
...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Gut, dass sich alle einig sind...&lt;/p&gt;
&lt;h1&gt;Kaufentscheidung&lt;/h1&gt;
&lt;p&gt;Die haben doch alle einen an der Waffel! Am Ende hab ich mir ein Gerät aus
chinesischer Produktion aber mit europäischem Vertrieb und Support gekauft. Es
hat wirklich viele Funktionen (vermutlich mehr, als ich je beherrschen werde)
und hat auch durchaus Geld gekostet, aber lang nicht so viel, wie ein "echtes
Markengerät". Soweit ich das beurteilen kann, schweißt es sehr schön (und würde
noch viel schöner schweißen, wenn ich es besser könnte). Handwerkerqualität ist
es sicher nicht, aber ich bin sehr zufrieden.&lt;/p&gt;
&lt;p&gt;Apropos Handwerker: Als Maker habe ich einfach total andere Anforderungen als
ein Handwerker. Das verstehen leider viele Leute nicht in ihren wohlgemeinten
Tipps. Und das sollte man bei der Werkzeugwahl beachten. Z.B.:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ich weiß &lt;em&gt;nicht&lt;/em&gt; was genau mein Anwendungsfeld ist, denn ich will es heute
  für dies und morgen für das verwenden. Und das erfordert Kompromisse.&lt;/li&gt;
&lt;li&gt;Ich kann kein altes Profigerät einfach so beurteilen oder gar reparieren – und
  wenn, dann ist es ein Projekt und keine simple Reparatur.&lt;/li&gt;
&lt;li&gt;Sollte mein Schweißgerät den Geist aufgeben, dann ruf ich kurz "Sch***e",
  such mir ein anderes Projekt für dieses Wochenende und bestelle parallel ein
  Neues.  Zwei dieser Geräte sind dann immer noch halb so teuer wie ein
  Profigerät.&lt;/li&gt;
&lt;li&gt;Ich verdiene mein Geld nicht mit Schweißen – also ist die Wartezeit bei Defekt nur
  in kleines Ärgernis.&lt;/li&gt;
&lt;li&gt;Ich kaufe das privat – d.h. ich zahle auch die Mehrwertsteuer! Und der Kauf
  ist auch keine Betriebsausgabe, die dann meinen Gewinn steuersparend mindern
  würde.&lt;/li&gt;
&lt;li&gt;Als Maker sehne ich mich nach zahlreichen Werkzeugen aus vielen Bereichen –
  Elektronik, Holzwerken, 3D-Druck, Metallbearbeitung, ...
  Ich kaufe zwar für mein Leben gerne Qualitätswerkzeug, kann und will mir das
  aber nicht in allen Feldern gleichzeitig leisten.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Ich habe das Beispiel Schweißgerät gewählt, aber das gilt alles auch zu 100% für
alle anderen Werkzeuganschaffungen. Also lasst Euch nicht kirre machen...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Ununterbrechungsfreie Stromversorgung</title><link href="https://techbotch.org/blog/interruptible-power-supply/index.html" rel="alternate"/><published>2024-01-11T00:00:00+01:00</published><updated>2024-01-11T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-01-11:/blog/interruptible-power-supply/index.html</id><summary type="html">&lt;p&gt;In meinem Post zum &lt;a href="https://techbotch.org/blog/gas-meter/index.html"&gt;Gaszählersensor&lt;/a&gt;
hatte ich mit einem Akkulademodul und einer 18650 Zelle eine mini-USV für ein
ESP-Modul zusammengeschustert, die dann beim ersten Stromausfall spektakulär
versagt hat: der angeschlossene ESP ist offenbar abgeschmiert und musste neu
booten.  Zwar fuhr er sofort wieder hoch und lief dann brav mit Akkuversorgung …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In meinem Post zum &lt;a href="https://techbotch.org/blog/gas-meter/index.html"&gt;Gaszählersensor&lt;/a&gt;
hatte ich mit einem Akkulademodul und einer 18650 Zelle eine mini-USV für ein
ESP-Modul zusammengeschustert, die dann beim ersten Stromausfall spektakulär
versagt hat: der angeschlossene ESP ist offenbar abgeschmiert und musste neu
booten.  Zwar fuhr er sofort wieder hoch und lief dann brav mit Akkuversorgung,
aber das gelbe vom Ei war das nicht. Heute wollen wir mal genauer untersuchen,
was da schiefläuft und vielleicht können wir das ja tatsächlich beheben?&lt;/p&gt;
&lt;h1&gt;Versuchsaufbau&lt;/h1&gt;
&lt;p&gt;Als erstes reproduzieren wir nochmal den Aufbau und werden dann versuchen, der
Schaltung auf den Zahn zu fühlen.  Im Wesentlichen sind wir daran interessiert,
was passiert, wenn der Strom ausfällt. Zielgröße ist dabei die
Versorgungsspannung für das ESP-Modul.&lt;/p&gt;
&lt;p&gt;Das Datenblatt sagt, dass der ESP im Bereich von 2.5 V – 3.6 V funktioniert.&lt;/p&gt;
&lt;p&gt;Nun kommt der Strom aus dem USB-Port und der liefert 5V. Auf dem NodeMCU Board
haben wir dann einen Spannungsregler
(&lt;a href="http://www.advanced-monolithic.com/pdf/ds1117.pdf"&gt;AMS1117&lt;/a&gt;), der daraus 3.3V
macht. Für diesen ist eine Dropout Voltage von 1.1V (max. 1.3V) angegeben und
4.8V als typische Input-Spannung. &lt;/p&gt;
&lt;p&gt;Also schnappen wir uns zunächst mal ein Multimeter und schauen, welche Spannungen wir 
vorfinden. Dabei messen wir die Versorgungsspannung des ESP an den 3.3V bzw. Ground
Pins des nodeMCU boards (Pins 10/11). Die eingehende Spannung messen wir direkt am 
Spannungsregler. Und das machen wir im Netz- und Akkubetrieb:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Betriebsmodus&lt;/th&gt;
&lt;th&gt;V_in&lt;/th&gt;
&lt;th&gt;V_ESP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Akku&lt;/td&gt;
&lt;td&gt;4.98V&lt;/td&gt;
&lt;td&gt;3.32V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Netz&lt;/td&gt;
&lt;td&gt;3.96V&lt;/td&gt;
&lt;td&gt;3.02V&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;WTF??? Wie es aussieht liefert das TP5400-Lademodul im Akkubetrieb die korrekte
Spannung, aber sobald wir selbiges mit Saft aus dem USB-Netzteil versorgen
bekommen wir nur noch knapp 4V???  Das würde bedeuten, dass dieses
Technikwunderwerk nicht in der Lage ist, den Akku zu laden und gleichzeitig
eine saubere Spannungsversorgung für den Verbraucher zu liefern! Das ist seeehr
unschön!&lt;/p&gt;
&lt;p&gt;Grundsätzlich funktioniert unser ESP dennoch, denn er bekommt auch im
Netzbetrieb ja noch 3V ab und das ist in der Spezifikation.  Bleibt die Frage,
wie der Übergang von Netzbetrieb zu Akkubetrieb (Stromausfall) bzw.  umgekehrt
(Strom kommt wieder) aussieht. Das wollen wir mal oszilloskopieren (Ch1: V_in,
Ch2: V_ESP). Zunächst mal einfach nur die Spannungen mit
USB-Spannungsversorgung: und im Batteriebetrieb&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/interruptible-power-supply/battery.png" class="Large" style="aspect-ratio: 1024/600"&gt;
&lt;img src="https://techbotch.org/blog/interruptible-power-supply/usb-power.png" class="Large" style="aspect-ratio: 1024/600"&gt;&lt;/p&gt;
&lt;p&gt;Sofort fällt ins Auge, dass beide Spannungen im Akkubetrieb einen riesigen Haufen
Ripple&amp;amp;Noise haben, während sie im Netzbetrieb schön glatt sind. Mit anderen Worten –
der Boost-Converter ist scheiße geglättet.&lt;/p&gt;
&lt;p&gt;Als nächstes schauen wir uns mal den Übergang von Netzbetrieb zu Akkubetrieb an – also 
das Stromausfalls-Szenario:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/interruptible-power-supply/off.png" class="Large" style="aspect-ratio: 1024/600"&gt;&lt;/p&gt;
&lt;p&gt;Und wie sieht es aus, wenn der Strom wiederkommt? So:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/interruptible-power-supply/on.png" class="Large" style="aspect-ratio: 1024/600"&gt;&lt;/p&gt;
&lt;p&gt;Das ist vielleicht nicht wirklich hübsch, denn wir kommen schon verdammt nah an
die untere Grenze von 2.5V. Allerdings nur sehr kurz und ganz eigentlich sollte
der ESP das verkraften, da wir, wenn auch knapp, innerhalb der Spezifikation
bleiben.&lt;/p&gt;
&lt;h1&gt;Was ist dann los?&lt;/h1&gt;
&lt;p&gt;Also einen Schritt zurücktreten und auf etwas höherem Level forschen. Dazu
rufen wir einfach mal den Webserver des ESP auf und schauen, was er zu sagen
hat. Wir starten im Netzbetrieb, schalten dann den Strom aus und etwas später
wieder an und schließlich wieder aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/interruptible-power-supply/web-usb-power1.png" class="Medium" style="aspect-ratio: 673/322"&gt;
&lt;img src="https://techbotch.org/blog/interruptible-power-supply/web-battery-power2.png" class="Medium" style="aspect-ratio: 678/318"&gt;
&lt;img src="https://techbotch.org/blog/interruptible-power-supply/web-usb-power3.png" class="Medium" style="aspect-ratio: 671/321 "&gt;&lt;/p&gt;
&lt;p&gt;Und so weiter... Ich habe das eine ganze Weile gespielt: an/aus/an/aus/...&lt;/p&gt;
&lt;p&gt;Wenn man das geneigte Auge auf die Uptime richtet, stellt man fest, dass 
diese unerschütterlich steigt, d.h. die Wechsel in der Spannungsversorgung
lösen &lt;em&gt;keinen&lt;/em&gt; reboot aus. Aber was zum Geier passiert dann?&lt;/p&gt;
&lt;p&gt;Und so saß ich betrübt in meinem Labor und verstand die Welt nicht mehr, bis
schließlich:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/interruptible-power-supply/reboot-message.png" class="Large" style="aspect-ratio: 916/182"&gt;&lt;/p&gt;
&lt;p&gt;Waaaaas? Ich bin so ein Depp! Natürlich! ESPhome hat einen internen Watchdog,
der die Firmware rebootet, wenn für eine gewisse Zeit (15 Minuten) keine
Verbindung vom Client (normalerweise Homeassistant) besteht. Das soll dafür
sorgen, dass er sich neu startet, wenn da was abgeschmiert ist, oder irgendwie
hängt. Bei meinem kleinen Testaufbau ist nie ein Client verbunden, denn den
habe ich nicht in HASSIO eingebunden – ich wollte ja nur das Spannungsproblem
ergründen. Beim echten Gaszähler ist HASSIO natürlich verbunden. Fällt aber für
längere Zeit der Strom aus, fährt irgendwann der Server runter wenn der Akku
meiner &lt;a href="https://techbotch.org/blog/ups-setup/index.html"&gt;USV&lt;/a&gt; zur Neige geht. Und
wenn dann der Strom noch weitere 15 Minuten wegbleibt, dann macht ESPhome einen
Reset.&lt;/p&gt;
&lt;p&gt;D.h. ich sollte das abschalten. Und das geht im Grunde ganz einfach: Man muss
nur die Variable &lt;code&gt;reboot_timeout&lt;/code&gt; auf 0 setzen (Siehe
&lt;a href="https://esphome.io/components/api.html"&gt;Doku&lt;/a&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;api:
  reboot_timeout: 0s
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also Firmware neu flashen und abwarten. Und siehe da – das Ding läuft nun
auch länger als 15 Minuten, ohne dass ein API-Client verbunden ist:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/interruptible-power-supply/web-long-term.png" class="Medium" style="aspect-ratio: 672/320"&gt;&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Manchmal bin ich gewaltig auf dem Holzweg. Aber das sind oft die spannendsten 
Projekte...&lt;/p&gt;
&lt;p&gt;Außerdem haben wir gelernt, dass der TP5400 ein Power-Bank Chip ist und
eigentlich nicht geeignet, um ein USB-Gerät auch während des Ladens zu
versorgen. In unserem Fall sollte es dennoch funktionieren, aber empfehlenswert
ist es nicht.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>UDP3305S Daten Recording</title><link href="https://techbotch.org/blog/udp3305s-recordings/index.html" rel="alternate"/><published>2024-01-04T00:00:00+01:00</published><updated>2024-01-04T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2024-01-04:/blog/udp3305s-recordings/index.html</id><summary type="html">&lt;p&gt;In einem früheren Post hatte ich mein neues Labornetzteil vorgestellt. Kürzlich
bin ich durch einen Post im EEVblog Forum auf eine (neue?) undokumentierte
Funktion aufmerksam geworden: Unter &lt;code&gt;Utility &amp;gt; Recorder&lt;/code&gt; kann man offenbar
automatisch aufzeichnen, was das Netzteil so treibt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/udp3305s-recordings/recorder-stopped.jpg" class="Medium" style="aspect-ratio: 1676/964"&gt;
&lt;img src="https://techbotch.org/blog/udp3305s-recordings/recorder-running.jpg" class="Medium" style="aspect-ratio: 1720/952"&gt;&lt;/p&gt;
&lt;p&gt;Das klingt praktisch. Leider ist das aber im Handbuch nicht beschrieben …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In einem früheren Post hatte ich mein neues Labornetzteil vorgestellt. Kürzlich
bin ich durch einen Post im EEVblog Forum auf eine (neue?) undokumentierte
Funktion aufmerksam geworden: Unter &lt;code&gt;Utility &amp;gt; Recorder&lt;/code&gt; kann man offenbar
automatisch aufzeichnen, was das Netzteil so treibt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/udp3305s-recordings/recorder-stopped.jpg" class="Medium" style="aspect-ratio: 1676/964"&gt;
&lt;img src="https://techbotch.org/blog/udp3305s-recordings/recorder-running.jpg" class="Medium" style="aspect-ratio: 1720/952"&gt;&lt;/p&gt;
&lt;p&gt;Das klingt praktisch. Leider ist das aber im Handbuch nicht beschrieben und das
&lt;code&gt;*.REC&lt;/code&gt; File, das ich am Ende bekomme ist in einem undokumentierten
Binärformat.&lt;/p&gt;
&lt;p&gt;Im User-Interface des Netzteils selbst konnte ich auch keine Möglichkeit
finden, die aufgezeichneten Werte irgendwie anzuzeigen oder in einem
benutzbaren Format zu exportieren. Das ist schade, denn im Grunde ist das eine
durchaus nützliche Funktion und ich würde mir wünschen, ich könnte ein CSV File
bekommen, um die Daten extern auszuwerten.&lt;/p&gt;
&lt;h1&gt;Analyse&lt;/h1&gt;
&lt;p&gt;Aber eigentlich kann es doch nicht so irre schwer sein, das Format zu knacken
und einen kleinen Konverter zu bauen, damit das nützlicher wird. Also schauen
wir uns das mal näher an.&lt;/p&gt;
&lt;h2&gt;Grundstruktur&lt;/h2&gt;
&lt;p&gt;Als erstes mal ganz simpel: Kanal 1, 2 und 3 jeweils auf 5V und max. 1A
stellen. Wir starten das recording (1/s), tun aber sonst nichts, d.h. alle
Kanäle bleiben abgeschaltet. Das lassen wir ein paar Sekunden laufen und
schauen uns das Ergebnis als Hexdump an:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;00000000  10 06 54 00 68 00 69 00  73 00 20 00 69 00 73 00  |..T.h.i.s. .i.s.|
00000010  20 00 61 00 20 00 52 00  45 00 43 00 4f 00 52 00  | .a. .R.E.C.O.R.|
00000020  44 00 20 00 66 00 69 00  6c 00 65 00 2e 00 00 00  |D. .f.i.l.e.....|
00000030  00 00 00 00 00 00 00 00  18 12 16 20 ff ff ff ff  |........... ....|
00000040  01 00 00 00 ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000070  00 00 00 00 00 00 00 00  18 12 04 00 00 00 00 00  |................|
00000080  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000a0  00 00 00 00 18 12 04 00  00 00 00 00 00 00 00 00  |................|
000000b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000d0  18 12 04 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000000f0  00 00 00 00 00 00 00 00  00 00 00 00 18 12 04 00  |................|
00000100  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000120  00 00 00 00 00 00 00 00  18 12 04 00 00 00 00 00  |................|
00000130  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000140  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000150  00 00 00 00 18 12 04 00  00 00 00 00 00 00 00 00  |................|
00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000170  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000180  18 12 04 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000190  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001a0  00 00 00 00 00 00 00 00  00 00 00 00 18 12 04 00  |................|
000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001d0  00 00 00 00 00 00 00 00  18 12 04 00              |............|
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wie es scheint, beginnt das File mit einem Header von 80 Bytes, der uns
mitteilt, dass es ein &lt;code&gt;*.rec&lt;/code&gt; File ist und dann folgen hintereinander die
aufgezeichneten Datensätze.  Jeder davon scheint 44 Bytes zu umfassen. Außerdem
fällt auf, dass entweder zu Beginn oder am Ende jedes Datensatzes immer wieder
&lt;code&gt;18 12 04 00&lt;/code&gt; steht. Das könnte z.B. eine Art Magic Number sein, die einen
neuen Record einleitet. Diese Sequenz ist das letzte bevor das File endet.
Also markiert es offenbar das Ende, nicht den Anfang eines Records. Könnte dann z.B.
eine Prüfsumme enthalten oder sowas.&lt;/p&gt;
&lt;p&gt;Zudem fällt auf, dass da im Header viel mehr Bytes sind, als nötig. Teils mit
0xff Padding.  Und auch dort gibt es eine &lt;code&gt;18 12&lt;/code&gt; Sequenz. Hm – vielleicht
stehen da globale Daten drin?  Z.B. die Logging Periode? In den einzelnen
Datensätzen stehen ja ganz offensichtlich keine Timestamps oder sowas drin.
Also ausprobieren: wir setzten die Logging-Periode auf 1s, 10s, 50000s und
99999s. Und so sehen dann die Header aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 1s
00000000  10 06 54 00 68 00 69 00  73 00 20 00 69 00 73 00  |..T.h.i.s. .i.s.|
00000010  20 00 61 00 20 00 52 00  45 00 43 00 4f 00 52 00  | .a. .R.E.C.O.R.|
00000020  44 00 20 00 66 00 69 00  6c 00 65 00 2e 00 00 00  |D. .f.i.l.e.....|
00000030  00 00 00 00 00 00 00 00  18 12 16 20 ff ff ff ff  |........... ....|
00000040  01 00 00 00 ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

# 10s
00000000  10 06 54 00 68 00 69 00  73 00 20 00 69 00 73 00  |..T.h.i.s. .i.s.|
00000010  20 00 61 00 20 00 52 00  45 00 43 00 4f 00 52 00  | .a. .R.E.C.O.R.|
00000020  44 00 20 00 66 00 69 00  6c 00 65 00 2e 00 00 00  |D. .f.i.l.e.....|
00000030  00 00 00 00 00 00 00 00  18 12 16 20 ff ff ff ff  |........... ....|
00000040  0a 00 00 00 ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

# 50000s
00000000  10 06 54 00 68 00 69 00  73 00 20 00 69 00 73 00  |..T.h.i.s. .i.s.|
00000010  20 00 61 00 20 00 52 00  45 00 43 00 4f 00 52 00  | .a. .R.E.C.O.R.|
00000020  44 00 20 00 66 00 69 00  6c 00 65 00 2e 00 00 00  |D. .f.i.l.e.....|
00000030  00 00 00 00 00 00 00 00  18 12 16 20 ff ff ff ff  |........... ....|
00000040  50 c3 00 00 ff ff ff ff  ff ff ff ff ff ff ff ff  |P...............|

# 99999s
00000000  10 06 54 00 68 00 69 00  73 00 20 00 69 00 73 00  |..T.h.i.s. .i.s.|
00000010  20 00 61 00 20 00 52 00  45 00 43 00 4f 00 52 00  | .a. .R.E.C.O.R.|
00000020  44 00 20 00 66 00 69 00  6c 00 65 00 2e 00 00 00  |D. .f.i.l.e.....|
00000030  00 00 00 00 00 00 00 00  18 12 16 20 ff ff ff ff  |........... ....|
00000040  9f 86 01 00 ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Treffer: die Logging Period steht an Adresse 0x40 und umfasst 4 Bytes (=32
Bits).  Das Speicherformat ist &lt;em&gt;Little Endian&lt;/em&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;0x00000001 = 1
0x0000000a = 10
0x0000c350 = 50000
0x0001869f = 99999
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Um die weitere Analyse einfacher zu machen, verwenden wir ab jetzt ein kleines
Python Skript, das wir schrittweise weiterentwicklen. Als erstes soll es mal
den Header einlesen und dann so lange 44-Byte records konsumieren, bis wir am
Ende angekommen sind. Und wo wir schon dabei sind, geben wir auch gleich die
Logging Period aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;def main(infile, headlen=80, reclen=44):
    header = infile.read(headlen)
    logperiod = int.from_bytes(header[0x40:0x44], byteorder=&amp;#39;little&amp;#39;)
    print(&amp;quot;Logging period =&amp;quot;, logperiod, &amp;quot;s&amp;quot;)
    i = 0
    while(True):
        rec = infile.read(44)
        if len(rec) == 0:
            break
        print(f&amp;quot;{i:6}  &amp;quot;, &amp;quot; &amp;quot;.join([f&amp;quot;{i:02x}&amp;quot; for i in rec]))
        i += 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Kanaldaten&lt;/h2&gt;
&lt;p&gt;Als nächstes machen wir eine neue Aufzeichnung und aktivieren die drei Kanäle der 
Reihe nach. Der Readout der Kanäle beträgt meist nicht exakt 5.000V, sondern:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ch1: 5.001 V&lt;/li&gt;
&lt;li&gt;Ch2: 5.000 V&lt;/li&gt;
&lt;li&gt;Ch3: 4.999 V&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Und so schaut nun unser Output des Eigenbau-Decoders aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ./decode.py foo.REC
Logging period = 1 s
     0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 04 00
     1   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 04 00
     2   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 04 00
     3   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 04 00
     4   5a c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 0c 00
     5   5a c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 0c 00
     6   5a c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 0c 00
     7   5a c3 00 00 00 00 00 00 3a 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 17 00
     8   5a c3 00 00 00 00 00 00 50 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 12 00
     9   5a c3 00 00 00 00 00 00 50 c3 00 00 00 00 00 00 46 c3 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 1b 00
    10   5a c3 00 00 00 00 00 00 50 c3 00 00 00 00 00 00 46 c3 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 1b 00
    11   5a c3 00 00 00 00 00 00 50 c3 00 00 00 00 00 00 46 c3 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 1b 00
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Cool – also scheint jeder Kanal je 8 Byte zu bekommen. Dabei wäre es
naheliegend, wenn es je 4 für Spannung und Strom wären. Und man darf vermuten, dass
wir wieder einen Little-Endian 32-Bit Int vor uns haben:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0x0000c35a = 50010&lt;/li&gt;
&lt;li&gt;0x0000c350 = 50000&lt;/li&gt;
&lt;li&gt;0x0000c346 = 49990&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also dürfte das die Readout-Spannung sein, nur dass man noch durch 10000 teilen
muss, um Volt zu bekommen.&lt;/p&gt;
&lt;p&gt;Nun schließen wir zusätzlich einen 12Ω Widerstand an, damit auch
wirklich Strom fließt und zeichnen auch das auf:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Logging period = 1 s
     0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 04 00
     1   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 04 00
     2   5a c3 00 00 4a 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 10 00
     3   5a c3 00 00 4a 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 10 00
     4   5a c3 00 00 4a 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 10 00
     5   5a c3 00 00 4a 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 12 10 00
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Perfekt: 0x0000104a = 4170. Und genau das (0.417A) hatte ich am Display abgelesen.
Also bauen wir das gleich in unser Programm ein.&lt;/p&gt;
&lt;p&gt;Ein wenig weiteres Experimentieren ergab, dass wir es insgesamt mit 5 "Kanälen" zu 
tun haben, die je 8 Byte bekommen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Kanal 1&lt;/li&gt;
&lt;li&gt;Kanal 2&lt;/li&gt;
&lt;li&gt;Kanal 3&lt;/li&gt;
&lt;li&gt;Serial (Ch1 &amp;amp; Ch2)&lt;/li&gt;
&lt;li&gt;Parallel (Ch 1 &amp;amp; Ch2)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Somit bleiben nur noch die 4 Byte am Ende zu klären – und evtl. noch weitere
globale Info im Header, falls sie existiert.&lt;/p&gt;
&lt;h1&gt;Implementierung&lt;/h1&gt;
&lt;p&gt;Dieses Wissen habe ich nun in mein Skript einfließen lassen und das Ganze auf
&lt;a href="https://github.com/philpagel/rec2csv"&gt;Github&lt;/a&gt; gestellt.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Warum UNI-T sich dazu entschieden hat den Recorder in diesem Binärformat zu
implementieren ist mir schleierhaft. CSV wäre viel sinnvoller. Aber zum Glück
war das Format nicht komplex und so kann ich mein Skript verwenden, um mit den
aufgezeichneten Daten zu arbeiten. &lt;/p&gt;
&lt;p&gt;Parallel habe ich auch an UNI-T geschrieben und nach Dokumentation des Formats
gefragt, aber reverse Engineering war schneller. Auch habe ich dem Support
gesagt, dass CSV viel besser wäre. Vielleicht kommt das ja irgendwann mit
einem Firmware-Update und mein Skript wird obsolet.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Scans Nachbearbeiten</title><link href="https://techbotch.org/blog/scan-postprocessing/index.html" rel="alternate"/><published>2023-12-27T00:00:00+01:00</published><updated>2023-12-27T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-12-27:/blog/scan-postprocessing/index.html</id><summary type="html">&lt;p&gt;Ich habe einen alten Trecker geerbt. Und da ich Handbücher schneller verliere/verlege, als eine unbeladene Afrikanische Schwalbe fliegen kann muss die Betriebsanleitung dringend eingescannt werden.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich habe einen alten Trecker geerbt. Konkret ist es ein McCormick IHC 624.
Baujahr 1969, 58PS und schön rot. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/scan-postprocessing/IHC624.jpg" class="Large" style="aspect-ratio:1142/858"&gt;&lt;/p&gt;
&lt;p&gt;Nun bin ich nicht so der Traktorspezialist
und so habe ich als erstes eine Betriebsanleitung organisiert, damit ich vor
lauter Hebeln nicht völlig die Orientierung verliere.&lt;/p&gt;
&lt;p&gt;Apropos verlieren – Handbücher verliere/verlege ich traditionell schneller, als
eine unbeladene Afrikanische Schwalbe fliegen kann. Und deshalb war klar: das
muss ich sofort scannen. Ich habe zwar einen schönen Einzugscanner, aber dann
hätte ich das Handbuch zerschneiden müssen und das wollte ich nicht. Also
lieber den Flachbettscanner nehmen. Damit die Rückseiten nicht durchscheinen,
habe ich immer ein schwarzes Blatt Tonpapier dazwischen gelegt. So bekommt man
schon ganz ordentliche Scans. Den Scanner habe ich auf 300DPI eingestellt und
schon geht es los.&lt;/p&gt;
&lt;p&gt;Der Einband ist im Gegensatz zum Inhalt farbig, deshalb habe ich Deckblatt und
Rückseite separat eingescannt. Als nächstes dann den Inhalt in ein großes PDF
scannen. Leider hat mir der blöde Scanner dann 3 Seiten vor Schluss erklärt,
der Speicher sei voll und er werde den Vorgang nun beenden. Na toll! Also
nochmal von vorn. Diesmal ca. in der Mitte aufhören und dann den Rest in ein
eigenes PDF. Und dann die beiden Teile zu einem zusammenfügen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pdftk part1.pdf part2.pdf cat output pages.pdf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Eigentlich wären wir nun fast fertig, aber in der Praxis zeigt sich meist, dass
die Scans noch etwas nachbearbeitet werden müssen. Z.B. um dunkle Grauschleier
loszuwerden, die Buchstaben etwas klarer zu bekommen und angeschnittene Ränder
loszuwerden. Das könnte man alles in GIMP machen, aber wenn man viele Seiten
hat ist das viel zu mühsam. Also besser in der Kommandozeile mit &lt;code&gt;Imagemagick&lt;/code&gt;,
&lt;code&gt;pdftk&lt;/code&gt; und Co.. Und das wollen wir heute mal gemeinsam machen.&lt;/p&gt;
&lt;p&gt;Als erstes müssen wir mal die ganzen Bilder aus dem PDF extrahieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pdfimages pages.pdf page
pdfimages front.pdf front
pdfimages back.pdf back
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun haben wir einen Haufen &lt;code&gt;*.ppm&lt;/code&gt; Files – eines pro Seite. Als nächstes
schauen wir mal wie groß die so sind:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; file *.ppm
back.ppm:     Netpbm image data, size = 2400 x 3437, rawbits, pixmap
front.ppm:    Netpbm image data, size = 2400 x 3437, rawbits, pixmap
page-000.ppm: Netpbm image data, size = 2400 x 3437, rawbits, pixmap
page-001.ppm: Netpbm image data, size = 2400 x 3437, rawbits, pixmap
page-002.ppm: Netpbm image data, size = 2400 x 3437, rawbits, pixmap
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und so erfahre ich, dass jedes Bild das Format 2400x3437 hat. Schauen wir uns
die Bilder alle mal an stellen wir schnell fest, dass der rechte Rand nicht
perfekt ist.  Da ist die Papierkante zu sehen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/scan-postprocessing/page-017.png" class="Large" style="aspect-ratio: 2400/3437"&gt;&lt;/p&gt;
&lt;p&gt;Die wollen wir nicht sehen. Also
schneiden wir die weg.  Etwas herumprobieren ergab, dass ca. 3.3% weg müssen.
Und die entfernen wir nun mit imagemagick:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;for i in *.ppm; do mogrify -crop 96.7%x100%+0+0 $i; done
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Besser:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/scan-postprocessing/page-017-2.png" class="Large" style="aspect-ratio: 2321/3437"&gt;&lt;/p&gt;
&lt;p&gt;Nun ist es so, dass man auf den meisten Flachbettscannern der Deckel so
angebracht ist, dass man die gerade und ungeraden Seiten nicht in der gleichen
Orientierung auflegen kann, weil die jeweils andere Seite dann mit den
Scharnieren kollidiert. D.h. bei meinem Scanner haben die geraden Seiten die
korrekte Orientierung und die ungerade Seiten stehen auf dem Kopf.
Null Problemo – dann drehen wir die eben:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;for i in page-{000..048..2}.ppm; do mogrify -rotate 180 $i ; done
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das Ergebnis sieht schon sehr manierlich aus. Allerdings hatten wir ja im
vorigen Schritt die rechte Kante beschnitten und nun stimmt das
Seitenverhältnis nicht mehr, wenn wir am Ende wieder A4 Format haben
wollen. Also beschneiden wir nun die Unterkante ebenfalls um 3.3%:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;for i in *.ppm; do mogrify -crop 100%x96.7%+0+1.6% $i ; done
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="https://techbotch.org/blog/scan-postprocessing/page-017-3.png" class="Large" style="aspect-ratio: 2321/3324"&gt;&lt;/p&gt;
&lt;p&gt;Sehr gut – nun sehen die Seiten gut aus. Aber es gibt noch störende graue
Artefakte in den Bereichen, die eigentlich weiß sein sollten. Das kann man
leicht beheben, indem man eine sigmoidale Helligkeits- oder Kontrastkorrektur
anwendet. In GIMP heißt das "curves" (im &lt;em&gt;color&lt;/em&gt; Menü). In Imagemagick gibt es
dazu die &lt;code&gt;-sigmoidal-contrast&lt;/code&gt; Option. Diese braucht zwei Parameter: der Erste
gibt an, wie stark die Korrektur ausfallen soll und der zweite bestimmt den
Symmetriepunkt. Hier war ein bisschen Ausprobieren angesagt, bis das Ergebnis
so ausfiel, wie ich es mir vorgestellt hatte. Am Ende habe ich dann alles so
transformiert:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;for i in page-*.ppm; do mogrify -sigmoidal-contrast 5,25%  $i ; done
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="https://techbotch.org/blog/scan-postprocessing/page-017-4.png" class="Large" style="aspect-ratio: 2321/3324"&gt;&lt;/p&gt;
&lt;p&gt;Das sieht schon recht gut aus. Hier war viel Fingerspitzengefühl gefragt, damit
man einen guten Mittelweg findet. D.h. dass die weißen Flächen möglichst hell
werden und die schwarzen Buchstaben etwas kräftiger, ohne dass man gleichzeitig
die Bilder total verhunzt. Perfekt ist es nicht, aber ich glaube ich kann mit
dem Ergebnis leben.&lt;/p&gt;
&lt;p&gt;Bei Titelblatt und Rückseite habe ich es tatsächlich manuell in GIMP gemacht
und auch ein bisschen die Farbflächen retuschiert, damit alles gut aussieht.
Alle Seiten nochmal kontrollieren und dann sind wir soweit, das alles wieder zu
einem großen PDF zusammen zu schrauben.&lt;/p&gt;
&lt;p&gt;Zunächst alles wieder ins PDF Format verwandeln:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;for i in *.ppm; do convert $i -page a4 `basename -s .ppm $i`.pdf; done
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und dann zu einem PDF vereinen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pdftk front.pdf page-*.pdf back.pdf cat output ../manual.pdf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Im PDF-Viewer öffnen und nochmal kontrollieren. Sieht alles gut aus. D.h.
eigentlich sind wir fertig. Aber es wäre natürlich noch schön, wenn wir das PDF
nicht nur lesen, sondern auch durchsuchen könnten. Dazu müssen wir es mit OCR
(optical character recognition) laufen lassen. Ich verwende dazu &lt;code&gt;ocrmypdf&lt;/code&gt;,
welches seinerseits &lt;a href="https://github.com/tesseract-ocr/tesseract"&gt;Tesseract&lt;/a&gt; als
OCR-Engine verwendet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ocrmypdf -l deu manual.pdf manual-ocr.pdf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Fertig!&lt;/p&gt;
&lt;p&gt;Und zuguterletzt habe ich das alles in ein kleines &lt;a href="https://techbotch.org/blog/scan-postprocessing/process.sh"&gt;Bash-Skript&lt;/a&gt; verpackt, damit
es reproduzierbar ist. Das hilft auch dabei Parameter wie Beschnitt und
Helligkeitskorrektur optimal einzustellen.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Gaszähler anbinden</title><link href="https://techbotch.org/blog/gas-meter/index.html" rel="alternate"/><published>2023-11-19T00:00:00+01:00</published><updated>2023-11-19T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-11-19:/blog/gas-meter/index.html</id><summary type="html">&lt;p&gt;Wir haben eine Gasheizung.  Nun steht das Haus nicht in der Stadt, sondern in
einem kleinen Dorf und so gab es keine Gasleitung. Stattdessen haben wir einen
großen unterirdischen Propangastank im Vorgarten verbuddelt. Auch das
funktioniert sehr gut, aber einen Nachteil hat das ganze: Es ist furchtbar
lästig, immer wieder …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wir haben eine Gasheizung.  Nun steht das Haus nicht in der Stadt, sondern in
einem kleinen Dorf und so gab es keine Gasleitung. Stattdessen haben wir einen
großen unterirdischen Propangastank im Vorgarten verbuddelt. Auch das
funktioniert sehr gut, aber einen Nachteil hat das ganze: Es ist furchtbar
lästig, immer wieder mal zum Tank zu müssen, um den aktuellen Füllstand
abzulesen. Und so habe ich noch einen Gaszähler einbauen lassen. Und den möchte
ich ganz gerne elektronisch auslesen und in HASSIO einbinden. Auf diese Weise
merken wir nicht nur viel bequemer wenn das Gas zur Neige geht, sondern man
kann auch ein bisschen den Gasverbrauch in Abhängigkeit von Parametern wie der
Außentemperatur, oder der angestrebten Raumtemperatur analysieren.&lt;/p&gt;
&lt;h1&gt;Zähler auslesen&lt;/h1&gt;
&lt;p&gt;Die meisten Zähler haben bereits einen Mechanismus dafür. Typischerweise
einen Magneten, der an einer der Zählerwalzen angebracht ist. Und wenn man da
einen Reedkontakt oder Halleffektsensor anbringt, kann man die Umdrehungen
zählen. Mein Zähler hat aber keinen Magneten, sondern so eine kleine
Metallplatte auf einem Zeiger – der Hersteller nennt das &lt;em&gt;Cyble Target&lt;/em&gt;: &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/cyble-target.jpg" class="Medium" style="aspect-ratio: 483/276 "&gt;&lt;/p&gt;
&lt;p&gt;Das Metallplättchen wird dann mit einem induktiven Näherungssensor registriert.
Es gibt vom Hersteller einen fertigen Lesekopf. Alternativ kann man das sicher
auch selber bauen – z.B. mit einem LJ12 A3-4-Z/BX. Aber ich hab grade nicht so
irre viel Zeit und habe deshalb den Original-Lesekopf gekauft:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/Lesekopf-front.jpg" class="Medium" style="aspect-ratio: 676/506"&gt;
&lt;img src="https://techbotch.org/blog/gas-meter/Lesekopf-back.jpg" class="Medium" style="aspect-ratio: 676/506"&gt;&lt;/p&gt;
&lt;p&gt;Das Loch in der Mitte ist für die Befestigungsschraube, der helle Knopf auf der
Rückseite scheint den Lesekopf einzuschalten.&lt;/p&gt;
&lt;p&gt;Der Sensor enthält eine (offiziell nicht wechselbare) Lithiumbatterie und wird
über ein 2-adriges Kabel an ein geeignetes Lesegerät angeschlossen. Die beiden
Drähte verhalten sich genauso wie ein Reed-Kontakt – also open/closed. Die
Pulslänge beträgt laut Datenblatt 65ms. Bei meinem konkreten Gaszähler sollte
jeder Puls einem Volumen von 0,01m³ = 10l entsprechen. Das entspricht einer 360
Grad Drehung des Cyble Targets.  Ich wünschte die Auflösung wäre 1l, aber es
ist wie es ist.&lt;/p&gt;
&lt;p&gt;Ich hätte den Lesekopf nun eigentlich gerne geöffnet und mir das Innenleben
genauer angeschaut, aber leider gibt es keine Schrauben und meine Versuche, die
Gehäusehälften zum separieren zu bewegen scheiterten. Ich denke, da muss
ich mit dem Dremel ran, wenn die Batterie eines Tages den Geist aufgibt.&lt;/p&gt;
&lt;p&gt;So lang der Kopf nicht montiert, bzw. der Knopf auf der Rückseite nicht
gedrückt ist, zeigt das Multimeter "overload" wenn man den Widerstand zwischen
den beiden Adern misst. Ist er aber gedrückt messe ich ca. 50MΩ.  Als nächstes
montieren wir den Lesekopf und versuchen das Signal aufzufangen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/Lesekopf-montiert.jpg" class="Medium" style="aspect-ratio: 380/357"&gt;&lt;/p&gt;
&lt;p&gt;Dazu brauchen wir eine Spannungsquelle, einen Widerstand und das Oszilloskop.
Laut Datenblatt verträgt der Lesekopf max 30V und bis zu 100mA. Zum Testen
nehmen wir mal eine 9V Batterie und einen 4.7kΩ Widerstand. Mit dem Oszilloskop
greifen wir dann die Spannung über dem Widerstand ab:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/circuit.png" class="Large" style="aspect-ratio: 1412/747"&gt;&lt;/p&gt;
&lt;p&gt;Schließt der Lesekopf den Kontakt fällt dann der Löwenanteil der
Batteriespannung an unserem Widerstand ab.  Und das wollen wir jetzt messen. Und
weil ich keine Lust habe, mein "richtiges" Oszilloskop zum Gaszähler zu
schleifen, nehmen wir heute mal mein altes Hantek Scopemeter (DSO1062BV), das
ist handlicher. Alles anschließen, Trigger auf &lt;em&gt;Single&lt;/em&gt; stellen und abwarten.
Irgendwann ist die Heizung angesprungen und fing an Gas zu ziehen und wir
messen den versprochenen Puls von 65ms:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/pulse.png" class="Medium" style="aspect-ratio: 640/480"&gt;
&lt;img src="https://techbotch.org/blog/gas-meter/pulse-cursors.png" class="Medium" style="aspect-ratio: 640/480"&gt;&lt;/p&gt;
&lt;p&gt;Das ist in der Tat ein schöner sauberer Puls. Der leichte over-/undershoot
dürfte daher rühren, dass ich zu faul war, den Tastkopf vorher abzugleichen. D.h.
wie es aussieht, müssen wir uns keine Gedanken um
&lt;a href="https://my.eng.utah.edu/~cs5780/debouncing.pdf"&gt;Debouncing&lt;/a&gt; machen, wie es bei
einem normalen Reed-Kontakt der Fall wäre.&lt;/p&gt;
&lt;h1&gt;Hardware&lt;/h1&gt;
&lt;p&gt;Nun gilt es, das Signal irgendwie zu registrieren. Dazu brauchen wir einen
Mikrocontroller, der sich leicht an HASSIO anbinden lässt.  Ich habe noch einen
nodeMCU-Klon in der Bastelkiste:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/node-mcu.jpg" class="Large" style="aspect-ratio: 1024/766"&gt;&lt;/p&gt;
&lt;p&gt;Hier der Plan:&lt;/p&gt;
&lt;p&gt;Unseren Sensor klemmen wir zwischen GPIO5 (Pin D1 des nodeMCU ) und GND und
verwenden den internen Pull-Up Widerstand, damit der Pin einen sauberen
high-Level hat solang der Sensor offen ist. Damit wir im Falle eines
Stromausfalls keine Pulse verpassen, versorgen wir das ESP-Modul mit einer
Lithiumzelle mit Strom und laden diese wiederum über ein USB-Ladegerät.  Auch
wäre es nicht übel, wenn man die Zellenspannung wüsste. Einfach damit man
mitkriegt, wenn sich der Akku aus Altersgründen nicht mehr so super laden
lässt. Und auch für die Bastler-Ehre.  Auch das lässt sich machen, denn der
ESP8266 hat einen ADC Pin. Dieser misst 0-1V mit einer Auflösung von 10 bit
(also 0-1023). So eine Lithium-Zelle hat eine maximale Spannung von 4.2V.  Das
ist zuviel. Allerdings befindet sich auf dem Modul schon ein Spannungsteiler
der die Spannung vom Modul-Pin A0 vor dem ADC des ESP8266 teilt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/adc-divider.jpg" class="Medium" style="aspect-ratio: 8168/6128"&gt;&lt;/p&gt;
&lt;p&gt;Die SMD-Widerstände sind mit "224" bzw. "104" beschriftet. Das bedeutet im
Klartext &lt;span class="math"&gt;\(22\cdot 10^4Ω = 220kΩ\)&lt;/span&gt; bzw. &lt;span class="math"&gt;\(10\cdot 10^4Ω = 100kΩ\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/adc-divider.png" class="Medium" style="aspect-ratio: 991/681"&gt;&lt;/p&gt;
&lt;p&gt;D.h. der Spannungsteiler hat das Verhältnis &lt;span class="math"&gt;\(\frac{320}{100} = 3.2\)&lt;/span&gt;. Für unsere
Zellenspannung von 4.2V ist das noch nicht ausreichend und wir müssen das
Teilerverhältnis ändern. Dazu schalten wir einfach einen 110kΩ Widerstand in
Serie vor den A0 Pin und bekommen so ein Teilungsverhältnis von
&lt;span class="math"&gt;\(\frac{430}{100} = 4.3\)&lt;/span&gt;. Das ist perfekt.&lt;/p&gt;
&lt;p&gt;Mein nodeMCU kam mit eingelöteten Pin-Headern (Stiftleisten). Das ist super, wenn
man das Modul auf ein Breadboard stecken möchte, aber ich will ja ein Gadget
bauen, das auf Dauer zum Einsatz kommt. Ich könnte natürlich trotzdem
Steckverbinder verwenden, aber eigentlich möchte ich alle Kontakte lieber
anlöten, damit sich auch im Dauerbetrieb nichts losrütteln kann. Also zuerst
die Header Pins auslöten.  Um mir das zu erleichtern habe ich zunächst die
Plastikleiste vorsichtig entfernt und so die Stiftleiste in einen Haufen
einzelner Pins verwandelt. Zuerst ein bisschen mit einer Spitzzange am Plastik
ziehen und dann mit einem Haken drunter gehen und aushebeln:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/remove-pin-header1.jpg" class="Medium" style="aspect-ratio: 1532/2048"&gt;
&lt;img src="https://techbotch.org/blog/gas-meter/remove-pin-header2.jpg" class="Medium" style="aspect-ratio: 1532/2048"&gt;&lt;/p&gt;
&lt;p&gt;Danach kann man die einzelnen Pins schön auslöten. Ich fasse die Pins dazu mit einer
medizinischen Klemme, die einrastet, wenn man sie schließt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/remove-pin-header3.jpg" class="Medium" style="aspect-ratio: 1532/2048"&gt;&lt;/p&gt;
&lt;p&gt;Um die Lithiumzelle zu laden verwenden wir ein einfaches TP5400 USB-Lademodul,
das über Mikro-USB gespeist wird und dann einen USB-A Lade-Port zur Verfügung
stellt – zusammen mit einem Akku hat man dann quasi eine einfache Powerbank:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/charging-module.jpg" class="Medium" style="aspect-ratio: 1302/977"&gt;&lt;/p&gt;
&lt;p&gt;Nun ist es an der Zeit, das ganze provisorisch zusammenzubauen: Batteriehalter
für eine 18650 Zelle an das Lademodul anlöten und gleich auch noch zwei weitere
Litzen, die wir dann mit GND bzw. über den 110kΩ Widerstand mit A0 des nodeMCU
verbinden (Messung der Zellenspannung).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/circuit2.png" style="aspect-ratio: 2070/1199"&gt;&lt;/p&gt;
&lt;p&gt;Dann ein USB-A auf Mikro-USB-Kabel vom
Lademodul zum nodeMCU. Und so sieht das in echt aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/initial-assembly.jpg" class="Large" style="aspect-ratio: 2048/1532"&gt;&lt;/p&gt;
&lt;p&gt;Zuguterletzt das Lademodul noch an einen USB-Ladestecker anschließen und das
Ganze in eine einfache Abzweigdose mit klarem Deckel einbauen. Das Gehäuse
selbst war schnell gefunden, aber das führt uns sofort zu einer der lästigsten
Fragen bei Selbstbauprojekten: Wie befestigen wir die Platine und andere
Komponenten darin?  Den Batteriehalter konnte ich mit einer kleinen
Selbstschneideschraube an einem der vorhandenen Löcher festschrauben (ein
tropfen Plastikkleber unter dem Halter schadet auch nicht.) . Und bei der
Platine (nodeMCU Modul) nehmen wir meine Lieblingsmethode: Vier
Plastikdistanzhülsen (Sechskant mit M3 Gewinde, 6mm Höhe) werden mit M3x5
Maschinenschrauben an den vier Ecken (Löchern) der Platine festgeschraubt. Und
dann geben wir je einen Tropfen Plastikkleber auf den Gehäuseboden und setzen
die Platine mit den Plastikfüßen in diese kleinen Pfützen. Kurz andrücken und
dann ein paar Stunden aushärten lassen. Statt der Distanzhülsen mit Gewinde
kann man auch welche ohne nehmen und dazu passende Selbstschneideschrauben. 
So schauen meine Füßchen dann aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/screwmounts.jpg" class="Medium" style="aspect-ratio: 1024x768"&gt;&lt;/p&gt;
&lt;p&gt;Sehr gut. Nun alles verkabeln und nochmal testen. Und dabei feststellen, das
ich das nodeMCU Modul zu weit an den Rand gepappt habe und der Micro-USB
Stecker nun nicht mehr reingeht.  Und außerdem feststellen, das die beiden
USB-Buchsen am Lademodul so nah beieinander liegen, dass man bei normalen
Steckern nicht beide zugleich rein bringt. Grumpf! &lt;/p&gt;
&lt;p&gt;Egal – dann anders: Wir löten die Verbindungen einfach und nehmen keine/weniger
Stecker: Am Lademodul gibt es vorgesehene Lötstellen für &lt;span class="math"&gt;\(V_{in}\)&lt;/span&gt;, d.h. wir
sparen uns den Mikro-USB-Stecker. Für den Spannungs-Output nehmen wir ein
normales USB-Kabel und schneiden den Mikro-USB-Stecker ab. Die Leiter für
GND(schwarz) und VCC(rot) löten wir dann direkt auf den Spannungsregler (Pins
1, 3) auf dem Node-MCU.  Das ist ein
&lt;a href="http://www.advanced-monolithic.com/pdf/ds1117.pdf"&gt;AMS1117&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/ams1117.png" class="Small" style="aspect-ratio: 810/689"&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pin&lt;/th&gt;
&lt;th&gt;Funktion&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Ground/Adjust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;VOUT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;VIN&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Das Laderegler-Modul hat keine Löcher an denen man es montieren könnte. Also
pappen wir es einfach an der Gehäusewand fest. Dafür nehme ich so einen
chinesischen Kleber, namens B7000 der dafür gedacht ist, Die Rückseiten oder
Displays von Handys festzukleben. Den mag ich gerne, weil er einigermaßen
elastisch bleibt und notfalls mit etwas Hitze wieder zu lösen ist. Noch je ein
Loch für Lade- und Sensorkabel ins Gehäuse machen und mit je zwei Kabelbindern
eine Zugentlastung basteln. Fertig:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/case.jpg" class="Medium" style="aspect-ratio: 2048x1536"&gt;&lt;/p&gt;
&lt;h1&gt;ESPhome&lt;/h1&gt;
&lt;p&gt;Als nächstes brauchen wir eine Firmware für das ESP-Modul. Ich mag aktuell
ESPhome sehr gerne und so nehmen wir das. TASMOTA würde bestimmt auch gehen,
aber das behandeln wir heute nicht. Mein Ziel ist es, den eigentlichen
Pulszähler im ESP Modul abzubilden, so dass dieses immer den aktuellen
Zählerstand weiß. Im Modul ist das besser aufgehoben, als im Homeassistant.
Letzter kann dann Statistik treiben, Momentanverbrauch ermitteln,
Tankfüllstand berechnen etc.&lt;/p&gt;
&lt;p&gt;Im Folgenden brauchen wir immer wieder Pin-Bezeichnungen, um verschiedene
Sachen anzusteuern.  Für meinen nodeMCU gibt es diverse Mappings, sodass man
die Bezeichnungen des Moduls verwenden kann. Eine Übersicht dazu findet Ihr
&lt;a href="https://esphome.io/devices/nodemcu_esp8266.html"&gt;hier&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;ESPhome bringt schon ein paar Sachen mit, die genau passend klingen:
&lt;a href="https://esphome.io/components/sensor/pulse_counter.html"&gt;pulse_counter&lt;/a&gt;, oder
&lt;a href="https://esphome.io/components/sensor/pulse_meter.html"&gt;pulse_meter&lt;/a&gt;.  Damit
habe ich zunächst ein bisschen rumgespielt, aber am Ende erschien es mir 
einfacher und klarer, das selbst aus simplen Komponenten aufzubauen.&lt;/p&gt;
&lt;p&gt;Zunächst brauchen wir eine globale Variable für den Zählerstand (Anzahl Pulse)
und einen
&lt;a href="https://esphome.io/components/binary_sensor/index.html"&gt;&lt;code&gt;binary_sensor&lt;/code&gt;&lt;/a&gt;, für
die Impulse vom Lesekopf:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;globals:
  - id: count_reading
    type: int

binary_sensor:
  - platform: gpio
    id: pulse_sensor
    name: &amp;quot;Pulse Sensor&amp;quot;
    pin:
      number: D1  # GPIO5
      inverted: true
      mode:
        input: true
        pullup: true
    on_press:
      then:
        - lambda: id(count_reading) += 1;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wenn Ihr statt eines richtigen Lesekopfs einen Reed-Kontakt habt, dann müsst
Ihr Euch um Debouncing kümmern. Idealerweise mit einem Hardware-Modul.
Notfalls aber auch in Software:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;binary_sensor:
- platform: gpio
  [...]
  filters:
    - delayed_on: 100ms
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und außerdem fände ich es hübsch, wenn die on-board LED des Moduls jedesmal
kurz blinken würde wenn ein Puls kommt. Also definieren wir erstmal die LED...&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;output:
  - platform: gpio
    id: &amp;#39;LED&amp;#39;
    pin: D4
    inverted: True
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;und ergänzen die &lt;code&gt;on_press&lt;/code&gt; Sektion für den &lt;code&gt;binary_sensor&lt;/code&gt; noch um die
Ansteuerung:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;on_press:
  then:
    - lambda: id(count_reading) += 1;
    - output.turn_on: LED
    - delay: 0.5s
    - output.turn_off: LED
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Zählen sollte es jetzt, aber ich fände es gut, wenn wir hier Gleichstand mit
der Anzeige des Gaszählers hätten. Das macht es leichter zu prüfen, ob unser
ESP Zähler korrekt arbeitet. Dazu muss ESPhome aber wissen bei welchem
Zählerstand wir starten. Außerdem ist das alles noch nicht 100% idiotensicher,
denn sollte unser Modul doch mal den Strom verlieren, gehen nicht nur die Pulse
verloren, die während des Blackouts kamen, sondern das Modul verliert auch den
bisherigen Stand. Damit das nicht passiert, müssen wir noch konfigurieren, dass
der Messwert im Flash Speicher gesichert und bei einem reboot wieder ausgelesen
wird. Dazu rüsten wir unsere &lt;code&gt;globals&lt;/code&gt; Sektion ein bisschen auf:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;globals:
  - id: count_reading
    type: int
    restore_value: true      # restore from flash
    initial_value: &amp;#39;40900&amp;#39;  # initial meter reading in counts, 10l = 1 count
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Außerdem muss &lt;code&gt;restore_from_flash&lt;/code&gt; noch gesetzt werden:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;esp8266:
  board: nodemcuv2
  restore_from_flash: true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Zum Schluss müssen wir noch unseren Akku-Spannungs-Sensor einrichten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sensor:
  - platform: adc
    name: &amp;quot;Battery Voltage&amp;quot;
    pin: A0
    unit_of_measurement: &amp;#39;V&amp;#39;
    filters:
      - multiply: 4.3
    update_interval: 600s
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Jetzt sollte alles funktionieren und wir können die Firmware in das Modul
flashen und schon kann es weitergehen. Zunächst mal schauen, was unser
Eigenbau-Zähler so von sich gibt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/ESPhome.png" style="aspect-ratio: 1893/677"&gt;&lt;/p&gt;
&lt;p&gt;Sehr schön – alles scheint zu funktionieren.&lt;/p&gt;
&lt;h1&gt;Einbindung in HASSIO&lt;/h1&gt;
&lt;p&gt;Die Einbindung in HASSIO erfolgt dann über die ESPhome Integration, so dass wir
sehr simpel an unsere Werte kommen. An dieser Stelle haben wir dann schon mal
den aktuellen Zählerstand und die Akkuspannung:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/gas-meter-device.png" class="Small" style="aspect-ratio: 383/230"&gt;&lt;/p&gt;
&lt;p&gt;Und wenn man drauf klickt auch den Verlauf:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/hassio_meter-reading.png" class="Medium" style="aspect-ratio: 688/550"&gt;&lt;/p&gt;
&lt;p&gt;Und wir binden das noch schnell ins Energy-Dashboard ein: &lt;code&gt;Settings&lt;/code&gt; &amp;gt;
&lt;code&gt;Dashboards&lt;/code&gt; &amp;gt; &lt;code&gt;Energy&lt;/code&gt; &amp;gt; &lt;code&gt;Add gas source&lt;/code&gt;.  Und dort den passenden Sensor
auswählen. Nun heißt es eine Weile warten, denn es kann auch mal ein paar
Stunden dauern, bis der Gasverbrauch nun im Energy-Dashboard auftaucht. Doch
dann werden wir mit einer schönen Verbrauchskurve belohnt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/energy-panel.png" class="Large" style="aspect-ratio: 1181/570"&gt;&lt;/p&gt;
&lt;h2&gt;Tankfüllstand – oder 1 Liter ≠ 1 Liter&lt;/h2&gt;
&lt;p&gt;Wenn Euer Gas aus der Leitung kommt ist das Folgende nicht mehr relevant für
Euch.  Aber ich habe einen Gastank und so muss ich erstmal herausfinden, wieviel
Gas eigentlich in selbigem ist. Also schauen wir mal in das Datenblatt:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Totalvolumen [l]&lt;/td&gt;
&lt;td&gt;4850&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Füllmenge [l]&lt;/td&gt;
&lt;td&gt;4120&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Füllmenge [kg]&lt;/td&gt;
&lt;td&gt;2100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;D.h. man kann den Tank auf maximal 85% füllen. Und so passiert das auch jedes
mal wenn wir neues Gas tanken. Ein Prozentpunkt entspricht dabei
&lt;span class="math"&gt;\(\frac{4850l}{100} = 48.5l\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Und wenn man kein Datenblatt hat kann man das auch sehr schön anhand der
letzten Lieferbelege nachrechnen, die typischerweise angeben, wieviel Liter Gas
geliefert wurden (&lt;span class="math"&gt;\(V\)&lt;/span&gt;) und was der prozentuale Stand vor (&lt;span class="math"&gt;\(P_0\)&lt;/span&gt;) und nach
Füllung (&lt;span class="math"&gt;\(P_1\)&lt;/span&gt;) war.  Also beträgt der Faktor:&lt;/p&gt;
&lt;div class="math"&gt;$$ f = \frac{V}{P_1 - P_0} $$&lt;/div&gt;
&lt;p&gt;Wenn wir also bei 22% Füllstand tanken und dann 3059l geliefert bekommen und
anschließend bei 84% sind:&lt;/p&gt;
&lt;div class="math"&gt;$$ f = \frac{3059l}{84\% - 22\%} $$&lt;/div&gt;
&lt;div class="math"&gt;$$ f = \frac{3059l}{62\%} $$&lt;/div&gt;
&lt;div class="math"&gt;$$ f = 49.34l/\% $$&lt;/div&gt;
&lt;p&gt;Das liegt tatsächlich sehr nah an den weiter oben berechneten 48.5l/%.
Da v.a. der prozentuale Füllstand ziemlich fehlerbehaftet ist, sollte man das
mal mit den letzten 5 Gasrechnungen durchexerzieren, um den Faktor korrekt zu
berechnen. &lt;/p&gt;
&lt;p&gt;Nun muss ich also nur noch am Gaszähler ablesen, wieviel Gas seit der
Lieferung verbraucht wurde und das vom maximalen Tank-Füllstand abziehen
und schon kenne ich das aktuelle Gasvolumen.  &lt;strong&gt;Falsch!!!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wieso? Weil das Propan in meinem Tank nicht &lt;em&gt;gasförmig&lt;/em&gt;, sondern &lt;em&gt;flüssig&lt;/em&gt; ist!
Deshalb heißt das ja auch Flüssiggas. Bei der Entnahme aus dem Tank wird es
verdampft und kommt entsprechend gasförmig am Zähler an. Also müssen wir das
Ganze umrechnen. Aber wieviel Liter Gas werden aus einem Liter flüssigem
Propan?&lt;/p&gt;
&lt;p&gt;Unser Datenblatt sagt, dass ich bei maximalem Füllstand von 85% 2100kg
Flüssiggas habe und das einem Volumen von 4120l entspricht.  Im flüssigen
Zustand beträgt die Dichte also:&lt;/p&gt;
&lt;div class="math"&gt;$$ \varrho_{fl} = 2100kg / 4120l = 0.510 kg/l $$&lt;/div&gt;
&lt;p&gt;Im gasförmigen Zustand hingegen beträgt die Dichte &lt;span class="math"&gt;\(\varrho_{gas} = 2.01 kg/m³
= 0.00201 kg/l\)&lt;/span&gt; (&lt;a href="https://de.wikipedia.org/wiki/Propan"&gt;Quelle&lt;/a&gt;).  Und aus
einem Liter Flüssiggas werden dann im gasförmigen Zustand: &lt;/p&gt;
&lt;div class="math"&gt;$$ 0.51kg / 0.00201 kg/l  =  254l$$&lt;/div&gt;
&lt;p&gt;Diesen Faktor müssen wir berücksichtigen, wenn wir ausrechnen wieviel Gas noch
im Tank ist. Aus meinem Gastank bekomme ich also maximal &lt;span class="math"&gt;\(4120l \cdot 254 = 1047000l
= 1047 m³\)&lt;/span&gt; gasförmiges Propan. Bei diesen Rechnungen sollte man es mit der Anzahl
der signifikanten Stellen nicht übertreiben, denn alle Dichte-Werte sind
temperaturabhängig! Aber hier geht es ja auch nicht darum, Aussagen im
Milliliterbereich zu machen, sondern grob mitzubekommen was man verbraucht und
v.a. wann Tanken angesagt ist.&lt;/p&gt;
&lt;h2&gt;Tankfüllstand in HASSIO&lt;/h2&gt;
&lt;p&gt;Nun wollen wir mal Berechnung des Tankfüllstands umsetzen.&lt;/p&gt;
&lt;h3&gt;Ablesung nach Füllung&lt;/h3&gt;
&lt;p&gt;Als erstes brauchen wir einen Weg, den Tankfüllstand (%) und den aktuellen
Zählerstand unmittelbar nach der Füllung einzugeben. Dazu erstellen wir zwei
&lt;code&gt;input_number&lt;/code&gt; helpers in &lt;code&gt;configuration.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;input_number:
  gas_percent_fill:
    name: Initial Gas Tank Level  # Typically 85% after fill
    unit_of_measurement: &amp;quot;%&amp;quot;
    icon: mdi:storage-tank
    min: 0
    max: 100
    step: 1
    mode: box
  gas_reading_fill:
    name: Initial Gas Meter Reading # Gas meter reading after last fill
    unit_of_measurement: &amp;quot;m³&amp;quot;
    icon: mdi:meter-gas-outline
    min: 0
    max: 99999.99
    step: 0.01
    mode: box
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und binden diese nun in das Interface ein:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/starting-values.png" class="Medium" style="aspect-ratio: 593/217"&gt;&lt;/p&gt;
&lt;p&gt;Den Gaszähler habe ich erst nach dem letzten Tanken bekommen und meine erste
Ablesung war dann später, als der Tank-Füllstand schon auf 68% gesunken war.&lt;/p&gt;
&lt;h3&gt;Template Sensoren für berechnete Werte&lt;/h3&gt;
&lt;p&gt;Als nächstes brauchen wir dann ein paar Sensoren der Kategorie &lt;code&gt;template
sensor&lt;/code&gt; in denen wir unser ganzes Wissen zu Dichte und Füllständen verwursten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;template:
  - sensor:
    - name: &amp;quot;Gas used since fill&amp;quot; # liters of gas used since last fill
      unit_of_measurement: &amp;quot;m³&amp;quot;
      icon: mdi:meter-gas-outline
      state: &amp;gt;
        {% set v0 = states(&amp;#39;input_number.gas_reading_fill&amp;#39;) | float %}
        {% set v1 = states(&amp;#39;sensor.gas_meter_reading&amp;#39;) | float %}
        {{ v1 - v0 }}
    - name: &amp;quot;Liquid gas used since fill&amp;quot;  # volume of liquid gas used up since last fill
      unit_of_measurement: &amp;quot;l&amp;quot;
      icon: mdi:storage-tank-outline
      state: &amp;gt;
        {% set v0 = states(&amp;#39;input_number.gas_reading_fill&amp;#39;) | float %}
        {% set v1 = states(&amp;#39;sensor.gas_meter_reading&amp;#39;) | float %}
        {{ ((v1 - v0) * 1000 / 254.0) | round(0) }}
    - name: &amp;quot;Liquid gas remaining&amp;quot;  # Volume of liquid gas left in the tank
      unit_of_measurement: &amp;quot;l&amp;quot;
      icon: mdi:storage-tank
      state: &amp;gt;
        {% set maxvol = 4850 | float %}
        {% set p0 = states(&amp;#39;input_number.gas_percent_fill&amp;#39;) | float %}
        {% set v0 = p0 * maxvol / 100 | float %}
        {% set v1 = v0 - states(&amp;#39;sensor.liquid_gas_used_since_fill&amp;#39;) | float %}
        {{ v1 | float }}
    - name: &amp;quot;Gas remaining&amp;quot; # volume of gaseous gas left
      unit_of_measurement: &amp;quot;m³&amp;quot;
      icon: mdi:meter-gas
      state: &amp;gt;
        {% set v1 = states(&amp;#39;sensor.liquid_gas_remaining&amp;#39;) | float %}
        {{ (v1 / 1000 * 254) | round(0) }}
    - name: &amp;quot;Gas remaining percent&amp;quot; # Percent gas left wrt to maximum fill level of 85%
      unit_of_measurement: &amp;quot;%&amp;quot;
      icon: mdi:storage-tank
      state: &amp;gt;
        {% set maxvol = (4850 * 0.85) | float %}
        {% set v1 = states(&amp;#39;sensor.liquid_gas_remaining&amp;#39;) | float %}
        {{ (v1 / maxvol * 100) | round(0) }}
   - name: &amp;quot;Gas Tank Level&amp;quot;  # Percent fill level of gas tank. 85% max.
      unit_of_measurement: &amp;quot;%&amp;quot;
      icon: mdi:storage-tank
      state: &amp;gt;
        {% set maxvol = 4850 | float %}
        {% set p0 = states(&amp;#39;input_number.gas_percent_fill&amp;#39;) | float %}
        {% set v0 = p0 * maxvol / 100 | float %}
        {% set v1 = v0 - states(&amp;#39;sensor.liquid_gas_used_since_fill&amp;#39;) | float %}
        {{ (v1 / maxvol * 100) | round(0) }}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und die können wir dann ins User Interface einbinden und bekommen dann zusammen 
mit den zuvor konfigurierten Sachen eine tolles Gas Panel:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/gas-panel.png" class="Medium" style="aspect-ratio: 600/602"&gt;&lt;/p&gt;
&lt;h1&gt;Preisfrage&lt;/h1&gt;
&lt;p&gt;Und was mache ich, wenn der ESP-Pulszähler doch mal außer Takt kommt, oder ich
einen neuen Gaszähler bekomme, mich einfach vertippt habe, oder sowas? Dann
muss ich den Startwert ändern. Aber das alleine hilft nicht, denn das Modul
liest ja den letzten Stand aus dem Flash-Speicher und verwendet den fixen
Startwert nur, wenn das fehlschlägt. Zuerst dachte ich ich könnte einfach
temporär &lt;code&gt;restore_values&lt;/code&gt; auf &lt;code&gt;false&lt;/code&gt; setzen, so dass einmalig der Startwert
verwendet wird. Aber das hilft nicht, denn dann werden die Werte auch nicht im
Flash Speicher gesichert. D.h. es scheint keinen Ausweg aus diesem Teufelskreis
zu geben. Gibt es zum Glück aber doch. &lt;/p&gt;
&lt;p&gt;Ich habe zwei verschiedene Ansätze gefunden:&lt;/p&gt;
&lt;p&gt;Der erste verwendet einen &lt;a href="https://esphome.io/components/switch/factory_reset.html"&gt;factory_reset
switch&lt;/a&gt; in unserer
ESPhome Firmware:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;switch:
  - platform: factory_reset
    name: factory reset
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In Homeassistant kann man dann auf das entsprechende Element zugreifen und den
"Factory reset" in der GUI auslösen.  D.h. ich kann dann einen Startwert in die
ESPhome Firmware einbauen, der noch nicht ganz erreicht ist und dann am
Gaszähler lauern, bis er genau erreicht ist und den Factory-Reset auslösen, so
dass der eingebaute Startwert nun verwendet wird. Damit wäre das Problem
eigentlich gelöst – wenn auch nicht sehr elegant.  Der Reset ist eigentlich
dann perfekt, wenn man immer auf den selben Startwert zurück will –
typischerweise auf Null.&lt;/p&gt;
&lt;p&gt;Für meinen Anwendungsfall gibt es aber etwas besseres: den &lt;a href="https://esphome.io/components/sensor/homeassistant.html"&gt;homeassistant
sensor&lt;/a&gt;.  Dabei handelt
es sich um einen Mechanismus, Werte über die API direkt aus HASSIO zu bekommen.
Z.B. einem &lt;code&gt;input_number&lt;/code&gt; Element.  Das gefällt mir besser und so wird's
gemacht:&lt;/p&gt;
&lt;p&gt;Zunächst den Sensor in die ESPhome-Konfiguration einbauen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sensor:
  - platform: homeassistant
    id: set_gas_counter
    entity_id: input_number.gas_initial_value
    on_value:
      then:
        - lambda: id(count_reading) = int(x * 100);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und dann das dazugehörige &lt;code&gt;input_number&lt;/code&gt; Feld in HASSIO anlegen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;input_number:
  gas_initial_value:
    name: Initial value for ESPhome counter
    unit_of_measurement: &amp;quot;m³&amp;quot;
    icon: mdi:meter-gas-outline
    min: 0
    max: 99999.99
    step: 0.00
    mode: box
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und schon können wir das Input-Feld in ein Dashboard einbauen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/gas-meter/adjust-esp-counter.png", class="Medium" style="aspect-ratio: 595/151"&gt;&lt;/p&gt;
&lt;p&gt;Jedesmal, wenn man diesen Wert anfasst, wird er dann automatisch im ESP
gesetzt.  D.h. dieses Element sollte man evtl. nicht allen HASSIO-Nutzern
freigeben, sondern es auf eine Admin-Seite legen.&lt;/p&gt;
&lt;p&gt;Alles in allem sieht die Logik nun also so aus:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ESP startet zum allerersten mal: Zählerstand wird aus &lt;code&gt;initial_value&lt;/code&gt; genommen&lt;/li&gt;
&lt;li&gt;ESP rebootet später mal: Zählerstand wird aus dem Flash-Speicher wiederhergestellt&lt;/li&gt;
&lt;li&gt;User gibt in HASSIO einen neuen Zählerstand ein: Der Zähler wird im ESP auf den
   eingegebenen Wert gesetzt (und im Flash gesichert). Ab hier geht es dann
   wieder bei 2. weiter.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Das war eine schöne Bastelei und ich freue mich schon auf die nun mögliche
Übersicht des Gasverbrauchs und vor allem, dass ich immer im Blick habe wann
ich wieder tanken muss. Der Pulszähler scheint zuverlässig zu funktionieren ich
habe ihn über viele Tage beobachtet und er hat im Vergleich zum Zähler keinen
Impuls verloren.&lt;/p&gt;
&lt;p&gt;So praktisch ich Homeassistant finde, ist dennoch zu sagen, dass die
Konfiguration in den YAML Files eine sehr hakelige Sache ist. Bis die obigen
Konfigurationen fertig waren und tatsächlich funktionierten ist echt viel Zeit
ins Land gegangen. Für simple Dinge ist die YAML config ok, aber sobald es
etwas komplexer wird, wäre es tausendmal einfacher ein paar Zeilen Python
zu schreiben, als durch endlose Google-Suchen herauszufinden, wie man das nun
wieder in die YAML Syntax presst...&lt;/p&gt;
&lt;p&gt;Und weil die obige Konfiguration inzwischen relativ komplex geworden ist und
wir auf dem Weg auch immer mal wieder was geändert haben gibt es meine
endgültige Konfiguration hier zum download: &lt;a href="https://techbotch.org/blog/gas-meter/ESPhome-config.zip"&gt;ESPhome
config&lt;/a&gt; und &lt;a href="https://techbotch.org/blog/gas-meter/hassio-configuration.yaml"&gt;hassio
configuration.yaml&lt;/a&gt; (only the parts relevant
to gas emter plus general framework). Die ESPhome config enthält auch noch den
oben erwähnten &lt;code&gt;factory_reset&lt;/code&gt; sensor, auch wenn er eigentlich nicht gebraucht
wird.&lt;/p&gt;
&lt;p&gt;Und mit meinem Laderegler-Modul bin ich nicht ganz glücklich.  Das Modul hat
entgegen der Beschreibung keinen Tiefentladeschutz. Beim ersten Versuch ohne
Ladestrom hat es meine Zelle bis auf 2.2V geleert. Erlaubt sind aber minimal
2.5V. D.h. das Modul tötet Lithiumzellen. Zudem scheint es, dass es nicht in
der Lage ist, den Akku zu laden, während es den Verbraucher mit Strom versorgt.
Ich werde es mittelfristig wohl gegen ein besseres tauschen.  Sollte jemand
eine Empfehlung haben – immer her damit.&lt;/p&gt;
&lt;h1&gt;Updates&lt;/h1&gt;
&lt;p&gt;2023-12-02&lt;/p&gt;
&lt;p&gt;OK – gestern Nacht gab es einen Stromausfall. Und mein tolles Konzept hat
versagt: Der ESP musste neu starten – offenbar hat mein Akkumodul es nicht
geschafft, die Versorgungsspannung unterbrechungsfrei sicherzustellen. Zudem
hat das Modul dann nicht den letzten Zählerstand aus dem Flash
wiederhergestellt, sondern den letzten Wert aus dem &lt;code&gt;homeassistant&lt;/code&gt; Sensor. Das
war zwar leicht wieder zu korrigieren, aber mir ist gerade nicht klar, warum
das passiert. Grumpf.&lt;/p&gt;
&lt;p&gt;2024-01-12  &lt;/p&gt;
&lt;p&gt;Ich habe das Phänomen inzwischen in einem &lt;a href="https://techbotch.org/blog/interruptible-power-supply/index.html"&gt;neuen
Post&lt;/a&gt; genauer
untersucht und musste feststellen, dass ich vollkommen unrecht habe und der
Grund ein ganz anderer ist...&lt;/p&gt;
&lt;p&gt;2024-02-27 &lt;/p&gt;
&lt;p&gt;Die Aussetzer sind durch die Änderungen im letzen Post viel seltener geworden.
Aber wenn es doch mal zu einem Reboot von HA oder ESPhome kommt, dann wird er
Zählerstand nach wie vor jedes mal auf den letzten manuell eingegeben Stand
zurückgesetzt. das ist suboptimal.  Also habe ich mich in einem 
&lt;a href="https://techbotch.org/blog/gas-meter2/index.html"&gt;dritten Post&lt;/a&gt; damit befasst, 
das endgültig zu lösen.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Stromzähler auslesen</title><link href="https://techbotch.org/blog/hassio-electricity-meter/index.html" rel="alternate"/><published>2023-10-17T00:00:00+02:00</published><updated>2023-10-17T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-10-17:/blog/hassio-electricity-meter/index.html</id><summary type="html">&lt;p&gt;In meinem Verteilerkasten hängt ein Stromzähler. Und zwar so ein moderner
digitaler. Wobei modern irgendwie relativ ist, denn statt einer anständigen,
Schnittstelle, wie USB, UART, RS232, RS485 oder was weiß ich, hat man eine
klobige optische Schnittstelle erdacht, die ungefähr so praktisch ist wie ein
Loch im Knie. Gefunkt wird …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In meinem Verteilerkasten hängt ein Stromzähler. Und zwar so ein moderner
digitaler. Wobei modern irgendwie relativ ist, denn statt einer anständigen,
Schnittstelle, wie USB, UART, RS232, RS485 oder was weiß ich, hat man eine
klobige optische Schnittstelle erdacht, die ungefähr so praktisch ist wie ein
Loch im Knie. Gefunkt wird hier mit zwei IR-Elementen – eins zum Senden, eins
als Empfänger. Darüber wird dann seriell übertragen. Auf dem Photo sieht man
die Schnittstelle deutlich – sie sieht aus wie eine Schweinenase:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/hassio-electricity-meter/stromzähler.jpg", class="Medium" style="aspect-ratio: 409/474"&gt;&lt;/p&gt;
&lt;p&gt;Natürlich war kein Lesekopf dabei. Aber zum Glück bin ich nicht der Erste, den
das aufregt und so gibt es z.B. das Projekt
&lt;a href="https://www.volkszaehler.org/"&gt;Volkszähler&lt;/a&gt; das sich damit befasst, Strom-,
Gas und andere Verbrauchszähler in einem zentralen System zu vereinen, das man
selber hosten kann – z.B. auf einem Raspberry Pi. An der Software bin ich nicht
so interessiert, weil ich das eher in den Homeassistant einbinden will, aber
man findet auf deren Seiten auch Schaltpläne und Stücklisten für Leseköpfe.
Z.B.
&lt;a href="https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-ttl-ausgang"&gt;diesen&lt;/a&gt;
hier. So kann man seinen eigenen Lesekopf bauen. Aber ich war faul und habe das
Löten diesmal jemand anderem überlassen und einfach einen solchen Lesekopf
bestellt. Da mein Homeserver direkt neben dem Sicherungskasten sein Zuhause hat,
habe ich die Variante mit USB-Interface genommen.&lt;/p&gt;
&lt;p&gt;Damit das auch funktioniert, brauchte ich zunächstmal ein Loch im
Verteilerkasten und ein weiteres in der Trockenbauwand, die das Ganze
verkleidet. Das war wegen der engen räumlichen Verhältnisse zwar etwas
fummelig, aber auch kein Hexenwerk. Die scharfen Kanten des Lochs im
Verteilerkasten habe ich dann noch entgratet und mit vielen schmalen
Gewebebandstreifen abgedeckt, damit das Kabel keinen Schaden nimmt. Dafür gibt
es auch so Gummidurchführungen, aber sowas habe ich nicht da. Vielleicht rüste
ich das später nach.&lt;/p&gt;
&lt;h1&gt;Erster Test&lt;/h1&gt;
&lt;p&gt;Also nun das eine Endes des Kabels (Mini-USB) in den Lesekopf und das andere in
den Server einstecken und dann voller Spannung schauen, ob wir ihn sehen können:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; lsusb
[...]
Bus 001 Device 006: ID 0403:6015 Future Technology Devices International, Ltd Bridge(I2C/SPI/UART/FIFO)
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Da isser ja – sehr schön!&lt;/p&gt;
&lt;p&gt;Als nächstes stellt sich nun die Frage, wie herum der Lesekopf auf den
Stromzähler gehört. Erster Versuch – Kabel unten:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/hassio-electricity-meter/lesekopf.jpg" class="Medium" style="aspect-ratio: 460/614"&gt;&lt;/p&gt;
&lt;p&gt;Und dann schauen wir mal, ob wir etwas empfangen. Also auf dem Server an dem
der Lesekopf hängt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; cu -l /dev/ttyUSB0
connected.
�bbrevb
       ��

         APA��rbe
                 ��c��vbbrew

                            APA��tw`2APA w`�1APA0193464322�ebRir%�bRicEOvbbreqcI�Y�bbrevb
   ��

     APA��rbe
             ��cJ�vbbrew

                        APA��tw`2APA w`�1APA0193464322�ebRir%�bRicEOvbbreqcI�
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;OK – das ist zwar Gibberish, aber es kommt was. Immerhin kann ich schon die
Zähler-Seriennummer erkennen (&lt;code&gt;APA0193464322&lt;/code&gt;, von mir verfremdet).  Dass nicht
alles glasklar ist liegt daran, dass der Stromzähler ein Binärprotokoll
verwendet (&lt;a href="https://de.wikipedia.org/wiki/Smart_Message_Language"&gt;SML&lt;/a&gt;: Smart
Message Language).  D.h. wir erwarten garnicht, dass hier schön lesbare Werte
kommen.  In jedem Fall aber wissen wir, dass der Kopf richtig herum
installiert ist, denn sonst würden wir garnichts sehen.&lt;/p&gt;
&lt;h1&gt;sml2mqtt&lt;/h1&gt;
&lt;p&gt;Als nächstes müssen wir nun sehen, wie wir diese Daten interpretiert bekommen
und zum Homeassistant senden. &lt;/p&gt;
&lt;p&gt;Teil 1 der Aufgabe wird von
&lt;a href="https://github.com/spacemanspiff2007/SmlLib"&gt;SmlLib&lt;/a&gt; erfüllt. Und Teil 2 könnte
man z.B. mit &lt;a href="https://pypi.org/project/paho-mqtt/"&gt;paho-mqtt&lt;/a&gt; erledigen. Aber
netterweise gibt es das Ganze schon fertig gebündelt:
&lt;a href="https://github.com/spacemanspiff2007/sml2mqtt"&gt;sml2mqtt&lt;/a&gt;. Das Tool übernimmt
das Lesen und Parsen der SML-Pakete und schickt den Inhalt dann an unseren MQTT
Server. Und von dort können wir dann in HASSIO darauf zugreifen.&lt;/p&gt;
&lt;p&gt;Also installieren wir es zunächst:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# become root
sudo -i
# Install sml2mqtt under /opt/
cd /opt/
python3 -m venv sml2mqtt
source sml2mqtt/bin/activate
pip install sml2mqtt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und dann brauchen wir noch ein config file &lt;code&gt;config.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# sml2mqtt config for optical head on norax 3d energy meter

logging:
  level: INFO
  file: sml2mqtt.log

ports:
- url: /dev/ttyUSB0
  baudrate: 9600
  byte size: 8
  parity: &amp;#39;None&amp;#39;
  stop bits: 1
  timeout: 3

mqtt:
  connection:
    client id: sml2mqtt
    host: localhost
    port: 1883
    user: &amp;#39;phil&amp;#39;
    password: &amp;#39;VerySecretPassword&amp;#39;
    tls: false
    tls insecure: false

  defaults:
    qos: 0
    retain: false
  topic prefix: sml2mqtt

  last will:
    topic: status

general:
  Wh in kWh: true       # Automatically convert Wh to kWh
  republish after: 120    # Republish automatically after this time
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;... und können dann loslegen.&lt;/p&gt;
&lt;p&gt;Auf dem Laptop starten wir mal einen MQTT-client um zu lauschen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mosquitto_sub -h hal -u phil -P VerySecretPassword -t &amp;#39;sml2mqtt/#&amp;#39; -v
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und dann auf dem Server &lt;code&gt;sml2mqtt&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sml2mqtt -c config.yml -v
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und schon bekommen wir Werte auf dem Laptop:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sml2mqtt/1APA0193464322/010060320101 41504120
sml2mqtt/1APA0193464322/0100010800ff 29248.0
sml2mqtt/1APA0193464322/0100020800ff 1.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;sml2mqtt&lt;/code&gt; ist unser &lt;em&gt;topic prefix&lt;/em&gt;, wie wir es in &lt;code&gt;config.yml&lt;/code&gt; gesetzt hatten.
&lt;code&gt;1APA0193464322&lt;/code&gt; ist die ID unseres Stromzählers und das Zahlenwerk am Ende
sind sogenannte &lt;a href="https://de.wikipedia.org/wiki/OBIS-Kennzahlen"&gt;OBIS Codes&lt;/a&gt;
gefolgt von Werten. Und die wollen wir mal übersetzen und ein wenig
recherchieren, was sie bedeuten:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;01 00 60 32 01 01&lt;/code&gt; 1-0:96.50.1*1 : Hersteller-Identifikation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;01 00 01 08 00 ff&lt;/code&gt; 1-0:1-8.0*255 : Stromzählerstand Gesamt [kWh]&lt;/li&gt;
&lt;li&gt;&lt;code&gt;01 00 02 08 00 ff&lt;/code&gt; 1-0:2-8.0*255 : Stromzählerstand Einspeisung Gesamt [kWh]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Perfekt, das funktioniert offenbar, auch wenn ich mir nicht wirklich erklären kann,
wie ich eine kWh Strom ins Netz eingespeist haben soll – Aber gut.&lt;/p&gt;
&lt;p&gt;Jetzt wo wir das wissen können wir unser &lt;code&gt;config.yml&lt;/code&gt; file um folgendes ergänzen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;devices:
  1APA0193464322:
    mqtt:
      topic: energy_meter
    values:
      0100010800ff:
        mqtt:
          topic: total_energy_consumed
      0100020800ff:
        mqtt:
          topic: total_energy_returned
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und so sehen dann die MQTT messages viel aufgeräumter aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sml2mqtt/energy_meter/total_energy_consumed 29248.0
sml2mqtt/energy_meter/total_energy_returned 1.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das macht es einfacher nachher damit umzugehen.&lt;/p&gt;
&lt;h1&gt;SML2MQTT Service einrichten&lt;/h1&gt;
&lt;p&gt;Damit das dauerhaft klappt, müssen wir &lt;code&gt;sml2mqtt&lt;/code&gt; nun als service einrichten.
Dazu schreiben wir ein kleines service file (&lt;code&gt;/etc/systemd/system/sml2mqtt.service&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[Unit]
Description=sml2mqtt
Documentation=https://github.com/spacemanspiff2007/sml2mqtt
StartLimitIntervalSec=10
After=syslog.target network.target

[Service]
Type=simple
User=sml2mqtt
Group=sml2mqtt
Restart=on-failure
RestartSec=30s
WorkingDirectory=/opt/sml2mqtt/
ExecStart=/opt/sml2mqtt/bin/sml2mqtt -c config.yml

# View with: sudo journalctl -f -u sml2mqtt -o cat
SyslogIdentifier=sml2mqtt

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Im config file verwenden wir den user &lt;code&gt;sml2mqtt&lt;/code&gt; – den müssen wir noch anlegen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;adduser --no-create-home --disabled-password sml2mqtt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und damit das auch als user &lt;code&gt;sml2mqtt&lt;/code&gt; laufen kann sollten wir noch prüfen, ob dieser User 
auch die nötigen Permissions hat. Oder besser – gleich alles ihm übergeben:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;chown -R sml2mqtt:sml2mqtt /opt/sml2mqtt
adduser sml2mqtt dialout
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und mal als dieser User testen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo -u sml2mqtt /opt/sml2mqtt/bin/sml2mqtt -c /opt/sml2mqtt/config.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ob Daten gesendet werden, prüfen wir wieder mit &lt;code&gt;mosquitto_sub&lt;/code&gt; wie oben.
Wenn das funktioniert aktivieren wir den entsprechenden Service:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl enable sml2mqtt.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;... und starten ihn:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl start sml2mqtt.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Kurz nachschauen, ob er wirklich läuft:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; systemctl status sml2mqtt.service 
● sml2mqtt.service - sml2mqtt service
     Loaded: loaded (/etc/systemd/system/sml2mqtt.service; enabled; preset: enabled)
     Active: active (running) since Sun 2023-10-15 18:24:26 CEST; 3s ago
   Main PID: 204540 (sml2mqtt)
      Tasks: 2 (limit: 19068)
     Memory: 20.2M
        CPU: 277ms
     CGroup: /system.slice/sml2mqtt.service
             └─204540 /opt/sml2mqtt/bin/python3 /opt/sml2mqtt/bin/sml2mqtt -c config.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Top! Nun sicherheitshalber ein letztes mal prüfen, ob wir auch Daten empfangen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mosquitto_sub -h hal -u phil -P VerySecretPassword -t &amp;#39;sml2mqtt/#&amp;#39; -v
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ich sehe erneut Daten – top!&lt;/p&gt;
&lt;h1&gt;Einbinden in HASSIO&lt;/h1&gt;
&lt;p&gt;Nun ist es an der Zeit, die Daten in HASSIO zu bekommen.  Als erstes legen wir
mal einen &lt;a href="https://www.home-assistant.io/integrations/sensor.mqtt/"&gt;mqtt
sensor&lt;/a&gt; an indem wir
auf dem Server das &lt;code&gt;configuration.yaml&lt;/code&gt; file von HASSIO dies schreiben: &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mqtt:
  sensor:
    - name: &amp;quot;Energy Consumed&amp;quot;
      state_topic: &amp;quot;sml2mqtt/energy_meter/total_energy_consumed&amp;quot;
      unit_of_measurement: &amp;quot;kWh&amp;quot;
      device_class: &amp;quot;Energy&amp;quot;
      state_class: total_increasing
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Als nächstes müssen wir dem Energy Dashboard mitteilen, dass wir einen
Stromzähler haben. Dazu gehen wir nach &lt;em&gt;Settings &amp;gt; Dashboards &amp;gt; Energy&lt;/em&gt; und
klicken unter &lt;em&gt;Electricity grid&lt;/em&gt; auf &lt;em&gt;Add Consumption&lt;/em&gt;. Tragen in das Device
Feld unseren Energy Consumption Sensor ein – fertig.&lt;/p&gt;
&lt;p&gt;Nun gilt es, eine ganze Weile zu warten, bis der Stromverbrauch endlich auftaucht.
Das passiert erst, wenn HASSIO eine Änderung im Zählerstand erkennt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/hassio-electricity-meter/energy-graph.png" style="aspect-ratio: 1590/623"&gt;&lt;/p&gt;
&lt;p&gt;Sehr gut. &lt;/p&gt;
&lt;h1&gt;Bonusmaterial: norax 3d Erweiterter Betrieb&lt;/h1&gt;
&lt;p&gt;Soweit hatte das ja nun alles gut funktioniert. Aber ein Punkt hat mich noch
gefuchst: Die Auflösung des übermittelten Zählerstands ist 1.0 kWh. D.h. ich
bekomme keine brauchbare Kurve über den Tag, weil der Zählerstand halt alle 1-4
Stunden mal um eine kWh steigt. Ich würde aber gerne Ereignisse wie "Herd
eingeschaltet" im Stromverbrauch sehen können. Dazu brauche ich entweder mehr
Auflösung, oder besser, die Momentanleistung, also wieviel Watt gerade
insgesamt gezogen werden. Also habe ich nach einem Handbuch für den Stromzähler
gegoogelt und es mehrfach gelesen. Offenbar kann der Zähler in einen
"Erweiterten Betriebsmodus" geschaltet werden, um detailierte Werte über die
optische Schnittstelle zu senden. Leider war die Beschreibung nicht so 100%
verständlich, aber letztlich habe ich es herausgefunden und halte es hier für
die Nachwelt fest.&lt;/p&gt;
&lt;p&gt;Um den &lt;em&gt;Erweiterten Betriebsmodus&lt;/em&gt; zu aktivieren braucht Ihr normalerweise die
PIN des Zählers. Ich hatte einfach eine freundliche Email an meinen
Stromversorger geschrieben und sie dann problemlos bekommen. Am Stromzähler
sind dann die folgenden Schritte nötig:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;◀ Taste für 5s gedrückt halten. Dann geht der Zähler in den LCD-Test Modus
   und verlässt ihn nach ein paar Sekunden von selber wieder.&lt;/li&gt;
&lt;li&gt;Nun wird man zur Eingabe der PIN aufgefordert (außer man hat das früher
   schon deaktiviert.)&lt;/li&gt;
&lt;li&gt;PIN eingeben: Der Zähler zeigt nun die erste Ziffer zur PIN-Eingabe an
   (&lt;code&gt;0---&lt;/code&gt;). Durch mehrfaches Drücken der ◀ Taste kann man die gerade aktive
   Ziffer schrittweise hochzählen. Also wenn diese &lt;code&gt;0&lt;/code&gt; sein soll garnichts tun
   und abwarten, bzw. wenn da &lt;code&gt;3&lt;/code&gt; stehen soll, dreimal die Taste betätigen und
   dann warten bis das Display die nächste Stelle anzeigt (&lt;code&gt;30--&lt;/code&gt;) – usw. Nach
   der Letzten Ziffer einfach abwarten.&lt;/li&gt;
&lt;li&gt;Sobald das Display umgesprungen ist, kann man mit der ◀ Taste durch die
   ganzen verschiedenen Anzeigen blättern.&lt;/li&gt;
&lt;li&gt;Nun so oft die ◀ Taste drücken, bis im Display &lt;code&gt;Inf off&lt;/code&gt; steht. Das ist der
   Menüpunkt in dem man den Erweiterten Betrieb (erweiterte Info) einstellen
   kann. &lt;/li&gt;
&lt;li&gt;◀ Taste 5s lang gedrückt halten. Nun steht im Display &lt;code&gt;Inf on&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;◀ Taste so oft drücken, bis im Display &lt;code&gt;PIN on&lt;/code&gt; steht. ◀ Taste 5s gedrückt
   halten bis das Display &lt;code&gt;PIN off&lt;/code&gt; anzeigt. Nun ist der PIN-Schutz
   deaktiviert.&lt;/li&gt;
&lt;li&gt;Zählerschrank schließen. Fertig.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nun zurück an den Computer und schauen, ob wir nun mehr Daten bekommen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ mosquitto_sub -h hal -u phil -P VerySecretPassword -t &amp;#39;sml2mqtt/#&amp;#39; -v
sml2mqtt/energy_meter/total_energy_consumed 29258.578
sml2mqtt/energy_meter/0100200700ff 222.4
sml2mqtt/energy_meter/01001f0700ff 1.25
sml2mqtt/energy_meter/0100330700ff 1.04
sml2mqtt/energy_meter/0100470700ff 0.16
sml2mqtt/energy_meter/010051070fff -31
sml2mqtt/energy_meter/0100100700ff 444
sml2mqtt/energy_meter/0100200700ff 222.3
sml2mqtt/energy_meter/0100340700ff 219.6
sml2mqtt/energy_meter/0100480700ff 222.4
sml2mqtt/energy_meter/0100330700ff 1.05
sml2mqtt/energy_meter/0100200700ff 222.2
sml2mqtt/energy_meter/010051071aff -58
sml2mqtt/energy_meter/010051071aff -57
sml2mqtt/energy_meter/0100100700ff 445
sml2mqtt/energy_meter/0100200700ff 222.1
sml2mqtt/energy_meter/0100340700ff 219.7
sml2mqtt/energy_meter/0100330700ff 1.04
sml2mqtt/energy_meter/0100100700ff 444
sml2mqtt/energy_meter/0100340700ff 219.9
sml2mqtt/energy_meter/0100480700ff 222.6
sml2mqtt/energy_meter/01001f0700ff 1.24
sml2mqtt/energy_meter/0100330700ff 1.05
sml2mqtt/energy_meter/0100100700ff 446
sml2mqtt/energy_meter/0100480700ff 222.7
sml2mqtt/energy_meter/0100100700ff 445
sml2mqtt/energy_meter/0100200700ff 222.2
sml2mqtt/energy_meter/01001f0700ff 1.25
sml2mqtt/energy_meter/0100330700ff 1.04
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Cool!  &lt;/p&gt;
&lt;p&gt;Bleibt noch, die Bedeutung der ganzen OBIS Codes zu recherchieren. Der für die
Momentanleistung lautet nach der Betriebsanleitung &lt;code&gt;1.0:16.7.0*255&lt;/code&gt; oder
&lt;code&gt;0100100700ff&lt;/code&gt;. Aktuell also 445W.&lt;/p&gt;
&lt;p&gt;Und wer genau hingeschaut hat wird auch erkennen, dass die Angabe für
&lt;code&gt;total_energy_consumed&lt;/code&gt; nun Nachkommastellen hat! Und das sieht man auch sofort
im Homeassistant, denn nun wird der Zählerstand viel gleichförmiger aktualisiert.
Sehr gut!&lt;/p&gt;
&lt;p&gt;An dieser Stelle könnte man aufhören, aber wir wollen noch schnell die momentane
Gesamtleistung in den config Files nachziehen.&lt;/p&gt;
&lt;p&gt;Zunächst für sml2mqtt (&lt;code&gt;config.yml&lt;/code&gt;)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;devices:
  1APA0193645225:
    mqtt:
      topic: energy_meter
    values:
      0100010800ff:
        mqtt:
          topic: total_energy_consumed
      0100020800ff:
        mqtt:
          topic: total_energy_returned
      0100100700ff:
        mqtt:
          topic: momentary_power
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Service neu starten nicht vergessen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl restart sml2mqtt.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und dann im homeassistant (&lt;code&gt;configuration.yaml&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mqtt:
  sensor:
    - name: &amp;quot;Energy Consumed&amp;quot;
      state_topic: &amp;quot;sml2mqtt/energy_meter/total_energy_consumed&amp;quot;
      unit_of_measurement: &amp;quot;kWh&amp;quot;
      device_class: &amp;quot;Energy&amp;quot;
      state_class: total_increasing
    - name: &amp;quot;Momentary Power&amp;quot;
      state_topic: &amp;quot;sml2mqtt/energy_meter/momentary_power&amp;quot;
      unit_of_measurement: &amp;quot;W&amp;quot;
      device_class: &amp;quot;Power&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und auch diesen neu starten (Settings &amp;gt; System &amp;gt; ⏻). Und schon ist alles
eingebunden. Wenn ich irgendwann Lust habe, mache ich das evtl. auch noch für
die übrigen OBIS codes, aber für den Moment bin ich völlig zufrieden.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>YouTube WTF???</title><link href="https://techbotch.org/blog/youtube-wtf/index.html" rel="alternate"/><published>2023-09-27T00:00:00+02:00</published><updated>2023-09-27T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-09-27:/blog/youtube-wtf/index.html</id><summary type="html">&lt;p&gt;Eigentlich liebe ich YouTube. Ja – ich weiß, die Plattform ist auch voll Deppen
und total sinnloser Videos, Extremisten, Wirrköpfen etc. aber diesen Teil kann
man ja ignorieren.  Zur Belohnung gibt es ja auch die vielen Kanäle mit
wirklich guten Inhalten zu Wissenschaft, Technik, Programmieren, Heimwerken,
Mathematik und eigentlich absolut allem …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Eigentlich liebe ich YouTube. Ja – ich weiß, die Plattform ist auch voll Deppen
und total sinnloser Videos, Extremisten, Wirrköpfen etc. aber diesen Teil kann
man ja ignorieren.  Zur Belohnung gibt es ja auch die vielen Kanäle mit
wirklich guten Inhalten zu Wissenschaft, Technik, Programmieren, Heimwerken,
Mathematik und eigentlich absolut allem. Und so bin ich ein wirklich
regelmäßiger YouTube User und es ist meine erste Anlaufstelle geworden, wenn
ich auf effiziente Weise etwas neues lernen möchte.  Schweißen zum Beispiel,
oder Erklärungen zu einer elektronischen Schaltung, Reparaturen oder so. Und
natürlich auch zur Unterhaltung durch Kanäle, die meine Interessen spiegeln.&lt;/p&gt;
&lt;h1&gt;Empfehlungen? Welche Empfehlungen?&lt;/h1&gt;
&lt;p&gt;Was mich aber total aufregt oder manchmal auf einfach sprachlos macht ist der
unterirdisch schlechte Empfehlungs-Algorithmus von YouTube, das bekanntlich zu
Google gehört. Ich meine, Google ist eines der größten und bestfinanzierten
Tech-Unternehmen der Welt. Die saugen alle fähigen Programmierer,
Data-Scientists, Datenbank-Experten und AI-Spezialisten förmlich auf und
entlohnen sie fürstlich. Wenn es eine Firma auf diesem Planeten gibt, die es
hinkriegen sollte, mir Dinge zu empfehlen, die mich interessieren, dann ist das
Google.&lt;/p&gt;
&lt;p&gt;Die wissen eh fast alles über mich, weil sie ja alles daransetzen uns alle im
Netz zu tracken, um zielgenaue Werbung verteilen zu können. Sie kennen also
einen guten Teil meiner Aktivitäten im Netz und natürlich wissen sie alles
darüber welche Videos ich angeklickt habe, wie lang ich jeweils dabei geblieben
bin, welche Kanäle ich abonniert habe oder regelmäßig schaue etc. etc.  Ich
bin gläsern – trotz Cookie-Löscher, Ad-blocker &amp;amp; Co. – Google weiß wohl
mehr über mich, als ich selbst. Worin meine Interessen so grob bestehen weiß
vermutlich schon jeder, der meinen Blog liest.&lt;/p&gt;
&lt;p&gt;Und was empfiehlt YouTube mir also?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Videos von Kanälen die ich abonniert habe&lt;/li&gt;
&lt;li&gt;Videos die ich schonmal angeschaut habe&lt;/li&gt;
&lt;li&gt;Videos von irgendwelchen großen Kanälen deren Themen mich exakt garnicht
   interessieren&lt;/li&gt;
&lt;li&gt;Irre Verschwörungstheoretiker&lt;/li&gt;
&lt;li&gt;Dämliche Shorts von leicht bekleideten Tussen, die begeistert ihre neue
   Teekanne präsentieren. &lt;/li&gt;
&lt;li&gt;Ganz selten mal ein Interessantes Video eine Kanals, den ich noch nicht kenne.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ja spinn ich?!? Hört auf, mir Sachen zu empfehlen, die ich eh sehe, weil
abonniert oder sogar schon angeschaut! Hört auf, mir irgendwelchen Schwachsinn
zu empfehlen! Ich bin einzig und allein an Empfehlungen à la Punkt 6
interessiert.&lt;/p&gt;
&lt;p&gt;Dabei fällt weiter auf, dass der Algorithmus auch bei Empfehlungen der
Kategorie 6 sehr engstirnig vorgeht. Nehmen wir mal an, ich schaue aktuell
viele Elektronik-Videos und dann ein paar Tage lang einige zum Schweißen und
wieder ein paar Tage später mehrere zum Thema Tricks mit der Kreissäge etc. etc.
Wofür interessiere ich mich also? Genau: Making / Basteln / Werkeln / Technik
o.ä. – war doch garnicht schwer. Aber unser Algorithmus ist dennoch völlig
überfordert und empfiehlt mit halt das was ich genau an dem Tag grade so
gesucht habe, aber ist außerstande über den Tellerrand zu schauen und mir mal
was zu empfehlen, das nicht exakt zum Thema gehört, aber gut ins
Wortfeld/Interessengebiet passen müsste. Und wenn ich das dann niemals
anklicke, dann kann man das jeweilige Themengebiet ja wieder fallen lassen.
Gerade eine große Plattform hätte doch eigentlich den Vorteil, dass der
Algorithmus mich mal mit etwas überraschen könnte, das ich eben noch nie in
Betracht gezogen hatte, aber das aufgrund meiner sonstigen Sehgewohnheiten gut
passen könnte. Ich glaube solange die KI nicht mal sowas einfaches hinkriegt sind
die Sorgen vor der Roboterapokalypse leicht übertrieben...&lt;/p&gt;
&lt;p&gt;Also ignorieren wir einfach die Empfehlungen und verwenden die gute alte
Suchfunktion.  Das sollte doch super funktionieren, denn Google hat schließlich
mal die Welt der Web-Suche revolutioniert. Aber Fehlanzeige: Zwar werden die
Ergebnisse nun besser, aber es wird schnell klar, dass das Hauptgewicht bei der
Reihenfolge (oder ob etwas überhaupt angezeigt wird) vor allem von der
Popularität des entsprechenden Videos/Kanals bestimmt wird und auch hier wieder
Dinge empfohlen werden, die ich eh schon kenne. Kleine Kanäle, die aber
oft viel besser auf die Suchbegriffe passen, kommen kaum vor.&lt;/p&gt;
&lt;h1&gt;Unerwünschete Helferlein&lt;/h1&gt;
&lt;p&gt;Und als wäre das alles nicht genug, dachte jemand bei YouTube offenbar, es sei
eine tolle Idee, dem User die große Welt anderssprachiger Inhalte zu
erschließen. Klingt eigentlich auch gut. Aber was ist das Gegenteil von &lt;em&gt;gut&lt;/em&gt;?
Genau: &lt;em&gt;Gut gemeint&lt;/em&gt;. Denn nicht nur entstehen durch die automatische
Übersetzung teils sehr skurril anmutende deutsche Video-Titel, nein – es kommt
noch besser: Klicke ich auf ein solches Video, werde ich umgehend mit
hochwertigem Content auf Hindi belohnt, denn natürlich wurde nur der Titel
übersetzt – das Video selbst nicht. Click-Bait dieser Art erhöht die
Zufriedenheit nicht gerade. Wer hat sich das ausgedacht? Und wurde dieses
Feature denn niemals von echten Menschen getestet, bevor es ausgerollt wurde?
Die hätten sofort zurückgemeldet, dass das völlig sinnlos ist...&lt;/p&gt;
&lt;h1&gt;Werbehölle&lt;/h1&gt;
&lt;p&gt;Hat man dann endlich ein Video gefunden, das einen echt interessiert, wird der
bereits vorverärgerte Nutzer nun erstmal mit Werbung belohnt, die sich
regelhaft durch folgende Attribute auszeichnet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Schlecht gemacht&lt;/li&gt;
&lt;li&gt;Laut&lt;/li&gt;
&lt;li&gt;Völlig an der Zielgruppe vorbei&lt;/li&gt;
&lt;li&gt;Unüberspringbar&lt;/li&gt;
&lt;li&gt;Unerträglich&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Glücklicherweise hat sie, zumindest bisher, ein erfreuliches Attribut: Adblockbar!&lt;/p&gt;
&lt;h1&gt;Demokratie vs. Oligarchie&lt;/h1&gt;
&lt;p&gt;YouTube hat ein eigenes System von Regeln, was man in Videos darf oder nicht
darf. Flucht z.B. jemand in seinen Videos oder verwendet andere "verbotene"
Begriffe, werden ihm die Einnahmen aus dem betreffenden Video verwehrt. Die
Entscheidung trifft eine KI.&lt;/p&gt;
&lt;p&gt;Natürlich will man nicht alles auf einer Videoplattform haben – auch bei uns
gibt es bestimmte Dinge, die z.B. strafbar sind und entsprechend nicht einfach
verbreitet werden dürfen. Und das ist auch gut so. Mein Punkt ist, das
derartige Zensur eine sehr ernste Sache und daher Angelegenheit des Rechtstaats
ist und nicht von irgendwelchen Firmen entschieden werden darf. Auch fällt auf,
dass YouTube sehr US-amerikanisch geprägte Vorstellungen von Moral und
Ordnung zugrundelegt. So sind Waffenvideos offenbar kein Problem, während ein
paar nicht ganz jugendfreie Worte einen den Umsatz kosten können. Wollen wir
das?&lt;/p&gt;
&lt;h1&gt;Kanalbetreiber sch***e behandeln&lt;/h1&gt;
&lt;p&gt;Ich bin kein YouTuber und habe entsprechend keine eigene Erfahrung mit
Vergütung, Ranking, etc. bei YouTube. Und das wird auch garantiert so bleiben.
Aber was man so auf der Plattform selbst und drum herum mitbekommt, scheint
sich YouTube einen Scheißdreck um die Leute zu scheren, die die Inhalte
erstellen mit denen hier Geld verdient wird.  In letzter Zeit scheint es z.B.
ein neues Phänomen geben, das Kanalbetreibern einfach mal den Umsatz kürzt.
Begründung? "Invalid Content" – offenbar der Begriff für Unregelmäßigkeiten zur
unlauteren Erlangung von Werbe-Klicks und ähnliches. Offizieller Weg, sich
dagegen zu wehren: keiner. Mehrere Kanäle die ich sehr schätze, sind momentan
betroffen.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Frei nach &lt;em&gt;ein Fisch namens Wanda&lt;/em&gt;: &lt;a href="https://youtu.be/R2kgjilRSOg?si=NrjrE_8pXvDGsC1I"&gt;"disappointed!"&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Wenn es nur eine Konkurrenzplattform mit genug Gewicht gäbe...&lt;/p&gt;</content><category term="Opinions &amp; Rants"/></entry><entry><title>Neues von Kunibald</title><link href="https://techbotch.org/blog/news-from-kunibald/index.html" rel="alternate"/><published>2023-09-23T00:00:00+02:00</published><updated>2023-09-23T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-09-23:/blog/news-from-kunibald/index.html</id><summary type="html">&lt;p&gt;Wir haben ein Gästebett, das wir gerne verkaufen wollen, weil es das
ungewöhnliche Format von 120x200cm hat. Luxuriös für einen Gast. Aber wenn es
ein Gästepaar ist, muss selbiges schon noch sehr frisch verliebt sein, um das
Format gut zu finden. Also wird es durch ein richtiges Doppelbett ersetzt.&lt;/p&gt;
&lt;p&gt;Also …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wir haben ein Gästebett, das wir gerne verkaufen wollen, weil es das
ungewöhnliche Format von 120x200cm hat. Luxuriös für einen Gast. Aber wenn es
ein Gästepaar ist, muss selbiges schon noch sehr frisch verliebt sein, um das
Format gut zu finden. Also wird es durch ein richtiges Doppelbett ersetzt.&lt;/p&gt;
&lt;p&gt;Also frisch ans Werk: ein paar Photos machen und eine Anzeige auf
kleinanzeigen.de schalten. Und siehe da – kaum war die Anzeige veröffentlicht,
meldete sich auch schon eine Interessentin:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;From: "Annie W. über Kleinanzeigen"&lt;/p&gt;
&lt;p&gt;Ein Interessent hat eine Anfrage zu Ihrer Anzeige gesendet: 2753420432:&lt;/p&gt;
&lt;p&gt;Hallo, mein Mann und ich würden gerne morgen kaufn, ist es möglich? Kann ich bitte
Ihre Mobil Numr. haben, mein Mann wird Sie zurückrufen, um Details und Zeit zu
besprechen.
MfG.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Läuft! Klar kann sie meine Nummer haben.&lt;/p&gt;
&lt;p&gt;Und weil sie sich mein Schnäppchen nicht entgehen lassen will, kommt auch nach
wenigen Minuten die Antwort:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ich habe soeben für Ihr Angebot gezahlt. Haben Sie schon eine Bestätigung von Ebay
erhalten? Kannst du mir bitte deine Adresse und Zeit zum Vorfahren nennen.
LG.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Hm – das finde ich nun sehr merkwürdig! Ich kann mich nicht erinnern, bei
kleinanzeigen.de meine Kontonummer oder Zahlungsmöglichkeiten hinterlegt zu
haben. Wozu auch. Bei Selbstabholung ist für beide Seiten das beste, vor Ort die
Ware zu besichtigen und dann auf die Hand zu bezahlen. Mal in den Account
schauen. Genau: da ist nichts hinterlegt und meine Anzeige weist auch keinen
"Direkt kaufen" Button auf.&lt;/p&gt;
&lt;p&gt;Dafür habe ich eine SMS auf meinem Handy:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/news-from-kunibald/text-message.jpg" class="Medium" style="aspect-ratio: 910/1010"&gt;&lt;/p&gt;
&lt;p&gt;Wenn das kein Fall für &lt;a href="https://techbotch.org/blog/phishing/index.html"&gt;Kunibald&lt;/a&gt; ist!&lt;/p&gt;
&lt;p&gt;Aber was ist das überhaupt für eine komische Meldung unter der Nachricht? Mal sehen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/news-from-kunibald/text-message2.jpg" class="Medium" style="aspect-ratio: 897/756"&gt;&lt;/p&gt;
&lt;p&gt;Schade – eine Handynummer wäre eine schöne Sache gewesen. Das hätte den
weiteren Verlauf deutlich unterhaltsamer gestalten können. Aber leider ...&lt;/p&gt;
&lt;p&gt;Damit ist die Sache klar – ein Phishing Versuch oder sowas. Also erstmal
den entsprechenden User-Account bei kleinanzeigen.de melden und sich dann wieder
dem Vergnügen zuwenden.&lt;/p&gt;
&lt;h1&gt;Wunder des Phishphangs&lt;/h1&gt;
&lt;p&gt;Als nächstes wollen wir mal den Link öffnen. Aber nicht ohne ein paar
Sicherheitsmaßnahmen.  Also eine isolierte virtuelle LINUX-Maschine hochfahren
und darin den Link klicken.&lt;/p&gt;
&lt;p&gt;Die Phishing Seite ist erschreckend gut gemacht:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/news-from-kunibald/phishing1.png" style="aspect-ratio: 1920/1080"&gt;
&lt;img src="https://techbotch.org/blog/news-from-kunibald/phishing2.png" style="aspect-ratio: 1920/1080"&gt;
&lt;img src="https://techbotch.org/blog/news-from-kunibald/phishing3.png" style="aspect-ratio: 1920/1080"&gt;&lt;/p&gt;
&lt;p&gt;Die Datenprüfung schlägt nach Ewigkeiten letztlich fehl. Schade – ich hatte
gehofft, eine Chance zu kriegen vielleicht noch irgendwas hochzuladen – Perso,
Führerschein oder eine &lt;a href="https://de.wikipedia.org/wiki/Archivbombe"&gt;ZIP-Bombe&lt;/a&gt;
vielleicht.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Augen auf beim Bettenkauf – und auch beim Verkauf. So unterhaltsam wie erhofft
lief es diesmal nicht, aber ich wollte es dennoch posten – als Warnung für
alle, die diesen Trick noch nicht kennen.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Garmin Fenix 5s Akkutausch</title><link href="https://techbotch.org/blog/garmin-fenix5s-battery/index.html" rel="alternate"/><published>2023-08-25T00:00:00+02:00</published><updated>2023-08-25T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-08-25:/blog/garmin-fenix5s-battery/index.html</id><summary type="html">&lt;p&gt;Ich bin ja nicht so der Sportler, aber meine Frau. Und die hat so eine
Sportler-Uhr die ständig den Puls anzeigt, Laufstrecken vermisst,
Schlafberatung macht und so Gedöns. Es ist eine Garmin Fenix 5s und sie liebt
das Teil.  In letzter Zeit hadert sie jedoch mit ihr, weil längere Lauf- …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich bin ja nicht so der Sportler, aber meine Frau. Und die hat so eine
Sportler-Uhr die ständig den Puls anzeigt, Laufstrecken vermisst,
Schlafberatung macht und so Gedöns. Es ist eine Garmin Fenix 5s und sie liebt
das Teil.  In letzter Zeit hadert sie jedoch mit ihr, weil längere Lauf- oder
Rennradaktivitäten das Zeiteisen offenbar an den Rand seiner Akku-Kapazität
bringen und so wertvolle Zeitnahmen verloren gehen. Das war früher angeblich
nicht so.  Kann schon sein, denn das Wunderwerk ist schon etliche Jahre alt
und es scheint plausibel, dass da die Akku-Laufzeit nicht mehr so dolle ist.&lt;/p&gt;
&lt;h1&gt;Ersatz beschaffen&lt;/h1&gt;
&lt;p&gt;Als braver Ehemann habe ich mich also mal auf die Suche nach einem Ersatz-Akku
gemacht. Der freundliche Chinese hat sowas im Angebot. Der größte
Austausch-Akku, den ich finden konnte prahlt mit 600mAh. Also bestellen.&lt;/p&gt;
&lt;p&gt;Knapp drei Wochen später war er da:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/garmin-fenix5s-battery/battery.jpg", class="Medium" style="aspect-ratio: 1532/2048"&gt;&lt;/p&gt;
&lt;p&gt;Nun gilt es die Uhr zu öffnen.  Der hintere Deckel ist mit kleinen
Torx-Schrauben befestigt, d.h.  das ging leicht. Innen findet sich dann ein
Flachbandkabel, das in die Platine eingesteckt ist – das ist dann gleich 
abgegangen. Wenn man etwas vorsichtiger zu Werke geht kann man das evtl.
vermeiden. Macht aber auch nix.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/garmin-fenix5s-battery/back.jpg", class="Medium" style="aspect-ratio: 1532/2048"&gt;
&lt;img src="https://techbotch.org/blog/garmin-fenix5s-battery/open1.jpg", class="Medium" style="aspect-ratio: 1532/2048"&gt;&lt;/p&gt;
&lt;p&gt;Wie man die Augen ein bisschen zusammenkneift und ganz nah ran geht kann man
lesen, dass der Original-Akku ein Kapazität von 150 mAh für sich reklamiert.
Um ihn aus der Uhr rauszukriegen, muss man mit einem kleinen Spatel hebeln, denn
er ist mit doppelseitigem Klebeband befestigt.  Der neue Akku hat angeblich die
vierfache Kapazität und tatsächlich ist er auch physisch ein winziges bisschen
größer, passt aber dennoch exakt in die Uhr hinein:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/garmin-fenix5s-battery/open2.jpg", class="Medium" style="aspect-ratio: 1532/2048"&gt;&lt;/p&gt;
&lt;p&gt;Die frickelichste Angelegenheit war es, die beiden Stecker wieder rein zu
popeln: Den für den Akku selbst und den vom Flachbandkabel, der das Ganze dann
mit der Haupt-Platine der Uhr verbindet.  Aber mit einer kleinen Pinzette,
einem Plastik-Spudger und etwas Mut ging beides dann ganz OK.&lt;/p&gt;
&lt;p&gt;Dann noch diesen kleinen roten Abstandhalter neben dem Akku wieder an seinem Ort
platzieren, Akku-Kabel etwas zurechtbiegen, damit es nicht eingeklemmt wird und
den Deckel wieder drauf. Ging eigentlich ganz einfach.&lt;/p&gt;
&lt;p&gt;Kurz ausprobieren – und: Die Uhr läuft, zeigt aber nur 8% Ladung an. Also ist
erstmal Aufladen angesagt. Auch das funktioniert einwandfrei. Sehr gut!&lt;/p&gt;
&lt;h1&gt;Kapazitätsmessung&lt;/h1&gt;
&lt;p&gt;Bleibt die Frage, ob die 600 mAh einigermaßen der Wahrheit entsprechen. In
puncto Kapazitätsangaben nehmen Akkuhersteller erfahrungsgemäß gerne den Mund
etwas voll...&lt;/p&gt;
&lt;p&gt;Also zunächst die Uhr leer machen – d.h. verwenden, bis sie aufgibt. Dann
wieder laden, aber diesmal mit einem Messgerät dazwischen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/garmin-fenix5s-battery/charging.jpg", class="Large" style="aspect-ratio: 1486/1112"&gt;&lt;/p&gt;
&lt;p&gt;Und abwarten, bis die Uhr wieder 100% Batteriekapazität zeigt. Ich habe nicht
dauernd nachgeschaut, sondern die Uhr gute vier Stunden laden lassen und dann
zeigte sie auch brav 100% an. Und das Messgerät? Dies:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/garmin-fenix5s-battery/fully-charged.jpg", class="Medium" style="aspect-ratio: 1728/1293"&gt;&lt;/p&gt;
&lt;p&gt;D.h. wir haben knapp 230 mAh in den Akku geladen. Das ist nicht mal die Hälfte
der vom Hersteller angegebenen 600mAh. In der Realität sind es sogar noch ein
bisschen weniger, denn sobald man die Uhr lädt geht sie auch an und beginnt
selbst noch Strom zu verbrauchen. Wundert mich das? Nein – das war natürlich zu
erwarten, denn man quetscht nicht einfach mal so die vierfache Kapazität in
nahezu das gleiche Volumen. Real haben wir also etwas 50% mehr Strom im neuen
Akku. Evtl. auch etwas mehr, denn ob die 150 mAh Stunden des Originalakkus
stimmen weiß ich natürlich auch nicht.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Akkutausch war eigentlich nicht schwer,&lt;/li&gt;
&lt;li&gt;Wir haben nun eine bessere Laufzeit als mit dem original-Akku zu erwarten&lt;/li&gt;
&lt;li&gt;Der Anbieter des Akkus ist dennoch ein Betrüger.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Hausstier-Transponder Lesegerät</title><link href="https://techbotch.org/blog/pet-transponder-reader/index.html" rel="alternate"/><published>2023-07-15T00:00:00+02:00</published><updated>2023-07-15T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-07-15:/blog/pet-transponder-reader/index.html</id><summary type="html">&lt;p&gt;Wer hier öfter mitliest hat inzwischen mitbekommen, dass wir ein paar Haustiere
haben. Falls diese mal abhanden kommen, sich verirren oder einen Unfall haben
sollten, wäre es natürlich gut wenn sie leicht zu identifizieren wären, damit
wir sie zurückbekommen oder schlimmstenfalls wenigstens informiert sind.
Deshalb sind sie alle "gechipt". D …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wer hier öfter mitliest hat inzwischen mitbekommen, dass wir ein paar Haustiere
haben. Falls diese mal abhanden kommen, sich verirren oder einen Unfall haben
sollten, wäre es natürlich gut wenn sie leicht zu identifizieren wären, damit
wir sie zurückbekommen oder schlimmstenfalls wenigstens informiert sind.
Deshalb sind sie alle "gechipt". D.h. wir haben ihnen einen ca. reiskorngroßen
Transponder im Nacken implantieren lassen. Alle Tierärzte und Tierheime haben
dann so ein Lesegerät mit dem sie die ID des Transponders auslesen können, und
wenn man sein Tier zentral registriert hat ist der Besitzer dann leicht
feststellbar.&lt;/p&gt;
&lt;p&gt;Insbesondere einer unserer Kater hat die Gewohnheit bei besonders gutem Wetter
auch mal über Nacht weg zu bleiben, oder über zwei Nächte oder drei oder vier...
Das ist dann natürlich jedes mal nervenaufreibend bis der Herr wieder
heimzukehren geruht. Vor kurzem war es mal wieder so weit – er kam nicht. Und
zu allem Überfluss lag da eine tote schwarze Katze an der Hauptstraße. Wir
waren uns zwar 95% sicher, dass er das nicht war, aber schön war das nicht,
nochmal einen Tag abwarten zu müssen bis er fröhlich pfeifend und mit einer
Maus im Gepäck nach hause kam.&lt;/p&gt;
&lt;h1&gt;Technologie zu Hilfe!&lt;/h1&gt;
&lt;p&gt;Also dachte ich mir, dass es doch praktisch wäre, so ein Transponderlesegerät
zu haben, damit ich in Zukunft 100% sicher sein kann, ob da meine Katze vor mir
liegt oder nicht. Die Dinger die die Tierärzte haben sind aber sauteuer und so
dachte ich schon an Selbstbau, habe aber vorher mal beim freundlichen Chinesen
geschaut. Da gibt es für kleines Geld diverse Geräte und so habe ich mir eins
bestellt, das ganz ok klang. Und bei 24€ kann man nicht meckern wenn es dann
tatsächlich funktioniert:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pet-transponder-reader/transponder-reader.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Sieht doch ganz manierlich aus. Aber bevor wir es ausprobieren muss es natürlich
erstmal aufgeschraubt werden:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pet-transponder-reader/transponder-reader-open.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Frequenzen und Protokoll dieser Tiertransponder  sind sogar genormt (ISO 11784
und 11785). Die üblichen Protokolle heißen EMID und FDX-B und verwenden eine
Frequenz von 134,2 kHz, wobei es wohl auch ältere Transponder gibt, die bei 125
kHz funken. Irgendwo hatte ich gelesen, dass billige Lesegeräte oft nur 125 kHz
können und darauf hoffen, dass 134,2 kHz schon irgendwie nah genug dran sind,
um ein bisschen was zu empfangen. Keine Ahnung ob das stimmt.&lt;/p&gt;
&lt;p&gt;Und so will ich natürlich wissen, was mein Lesegerät so treibt.&lt;/p&gt;
&lt;h1&gt;Transponderfunk belauschen&lt;/h1&gt;
&lt;p&gt;Um dem auf den Grund zu gehen wollen wir mal nachmessen auf welcher Frequenz
das Ding sendet. Als erstes brauchen wir dazu mal eine Antenne. Wie es der
Zufall so will, hatte ich mir kürzlich ein super günstiges Set Nahfeldsonden
bestellt, die schon ungeduldig auf ihren ersten Einsatz warten. Also mal die mit
dem größten Durchmesser ans Oszi anschließen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pet-transponder-reader/nearfield-probe.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und den Transponderleser oben drauf:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pet-transponder-reader/setup.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Knopf drücken und schon versucht das Gerät einen Transponder zu finden. Und so schaut das dann
am Oszi aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pet-transponder-reader/oscilloscope.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;OK – es sind also 134.3 kHz. Der genaue Wert schwankt ein bisschen, aber ich denke
das ist völlig in Ordnung.&lt;/p&gt;
&lt;h1&gt;Praxistest&lt;/h1&gt;
&lt;p&gt;Zuletzt will ich nun also noch wissen, ob es denn die gängigen Transponder auch
wirklich lesen kann. Nur wo bekomme ich jetzt einen Transponder her?
Mit etwas Geschick konnte ich einen einfangen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/pet-transponder-reader/cat-volonteer.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und in der Tat – der Transponder wird erkannt und die ID angezeigt. Und wenn
man keine Lust hat, die Augen zusammenzukneifen, um das winzige Display
abzulesen, dann kann man das Teil auch per USB oder Bluetooth verbinden. Dann
wird es als Keyboard erkannt und tippt das Gelesene einfach am PC oder Handy
ein.&lt;/p&gt;
&lt;p&gt;Das einzige das es zu beachten gibt ist, dass man die Lesespule des Lesegeräts
ziemlich genau an die richtige Stelle halten muss und zwar in direktem Kontakt
mit dem Tier, andernfalls klappt das Auslesen nicht. Also ist das nicht das
Richtige als Grundlage für eine smarte Katzenklappe oder sowas.&lt;/p&gt;
&lt;p&gt;Ich finde das ist ein schönes Spielzeug und ggf. auch mal nützlich.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Aus dem Server ausgesperrt</title><link href="https://techbotch.org/blog/locked-out-of-my-server/index.html" rel="alternate"/><published>2023-06-30T00:00:00+02:00</published><updated>2023-06-30T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-06-30:/blog/locked-out-of-my-server/index.html</id><summary type="html">&lt;p&gt;Kürzlich habe ich meinem Heimserver ein Update auf Debian 12 spendiert. Das
ging ganz wunderbar und auf den ersten Blick schien alles auf Anhieb zu
funktionieren. Etwas später hatte ich dann aber doch ein Problem: Mein
Dokumentenscanner konnte keine sFTP-Verbindung mehr herstellen. Also habe ich
ein wenig in meiner ssh …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Kürzlich habe ich meinem Heimserver ein Update auf Debian 12 spendiert. Das
ging ganz wunderbar und auf den ersten Blick schien alles auf Anhieb zu
funktionieren. Etwas später hatte ich dann aber doch ein Problem: Mein
Dokumentenscanner konnte keine sFTP-Verbindung mehr herstellen. Also habe ich
ein wenig in meiner ssh config gewühlt und ein paar Sachen ausprobiert. Und
dabei muss ich das Config File kaputt gemacht haben – jedenfalls komme ich
nicht mehr rein: &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ssh hal
ssh: connect to host hal port 22: Connection refused
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hm – schlecht.&lt;/p&gt;
&lt;p&gt;In der Tat läuft da offenbar kein &lt;code&gt;sshd&lt;/code&gt; mehr:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ nmap hal
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-29 19:21 CEST
Nmap scan report for hal (192.168.0.10)
Host is up (0.0061s latency).
rDNS record for 192.168.0.10: hal.fritz.box
Not shown: 997 closed tcp ports (conn-refused)
PORT     STATE SERVICE
80/tcp   open  http
443/tcp  open  https
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Garnicht gut. Nun könnte man einfach via Tastatur und Monitor direkt an der
Maschine einloggen und das Problem beheben, nur steht der Server in einem
Netzwerkschränkchen das unter der Decke hängt und ich verspüre gerade sehr
wenig Lust, auf eine Leiter zu steigen und dabei mit Monitor und Tastatur zu
jonglieren. Und außerdem ist das gegen die Hacker-Ehre. Was kann man da also
machen?&lt;/p&gt;
&lt;h1&gt;iLO&lt;/h1&gt;
&lt;p&gt;In meinem Fall habe ich Glück, denn mein Server ist ein echter Server (HP
Microserver Gen8) und besitzt ein separates System zur Systemadministration:
iLO4. Und damit kann man z.B.  das System reseten und noch ein paar coole
Dinge. U.a. bietet es eine Remote-Konsole an:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/locked-out-of-my-server/remote-console.png"&gt;&lt;/p&gt;
&lt;p&gt;.Net habe ich nicht. Also das Java Applet. Leider läuft sowas aber heutzutage
auch nicht mehr in meinem Firefox. Grumpf!&lt;/p&gt;
&lt;p&gt;Aber da steht ja noch was von einer &lt;em&gt;HP iLO mobile App&lt;/em&gt;. Also auf in den
Playstore!  Jedoch:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/locked-out-of-my-server/ilo-mobile-app.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Na super... Aber so schnell gebe ich nicht auf! Ich meine mich zu erinnern,
dass man auch per ssh in das iLO System reinkommt. Also versuchen wir das:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ssh administrator@hal-ilo
Unable to negotiate with 192.168.0.11 port 22: no matching key exchange method found.
Their offer: diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;WTF??? Klar – sha1 ist nicht mehr empfehlenswert und daher wird es nicht
akzeptiert. Also nochmal:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 administrator@hal-ilo
administrator@hal-ilo&amp;#39;s password:  ************************
User:administrator logged-in to HAL-iLO.fritz.box(192.168.0.11 / FE80::D2BF:9CFF:FE46:6606)

iLO 4 Advanced 2.30 at  Aug 19 2015
Server Name: HAL
Server Power: On

Based on customer feedback, we will be enhancing the SSH command line
interface in a future release of the iLO 4 firmware.  Our future CLI will
focus on increased usability and improved functionality.  This message is
to provide advance notice of the coming change.  Please see the iLO 4 
Release Notes on www.hp.com/go/iLO for additional information.

&amp;lt;/&amp;gt;hpiLO-&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Besser!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;lt;/&amp;gt;hpiLO-&amp;gt;  help

[...]
HP CLI Commands:

POWER    : Control server power.
UID      : Control Unit-ID light.
ONETIMEBOOT: Access One-Time Boot setting.
NMI      : Generate an NMI.
VM       : Virtual media commands.
LANGUAGE : Command to set or get default language
VSP      : Invoke virtual serial port.
TEXTCONS : Invoke Remote Text Console.
TESTTRAP : Sends a test SNMP trap to the configured alert destinations.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ah – &lt;code&gt;TEXTCONS&lt;/code&gt; klingt gut. Damit werden wir bestimmt ins System kommen!&lt;/p&gt;
&lt;p&gt;Oder auch nicht:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;lt;/&amp;gt;hpiLO-&amp;gt;  TEXTCONS

Monitor is in graphics mode or an unsupported text mode.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Aaaaaargh! Ja – vermutlich verwendet die Konsole nicht den Standard-0815 VGA
mode, sondern einen der ein bisschen mehr Zeichen auf den Bildschirm bringt.&lt;/p&gt;
&lt;p&gt;Theoretisch wäre auch &lt;code&gt;VSP&lt;/code&gt; eine Möglichkeit, aber leider hätte ich das zuvor
entsprechend konfigurieren müssen damit da auch ein &lt;code&gt;getty&lt;/code&gt; Prozess lauscht.
Und das habe ich nicht, also:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;lt;/&amp;gt;hpiLO-&amp;gt; VSP

Virtual Serial Port Active: COM2

Starting virtual serial port.
Press &amp;#39;ESC (&amp;#39; to return to the CLI Session.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;... und sonst kommt nix.&lt;/p&gt;
&lt;p&gt;So langsam wird es eng und ich sehe mich schon mit dem Monitor auf der
Klappleiter, als mir noch eine Idee kommt: Ich könnte das System von einem
USB-Stick booten, die System-Platte mounten und das Config File so editieren!
Aber auch dazu müsste ich auf die Leiter. Also leicht anders: das iLO kann auch
virtuelle Medien einbinden:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/locked-out-of-my-server/virtual-media.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Dazu muss man nur das ISO Image auf einen lokalen Webserver legen und die URL
im iLO eintragen. Als ISO Image verwende ich ein
&lt;a href="https://github.com/philpagel/debian-headless"&gt;debian-headless&lt;/a&gt;
Installations-Image, denn sonst bekomme ich ja keinen Remote-Zugriff. &lt;/p&gt;
&lt;p&gt;Mein Webserver läuft auf dem Heimserver – auf den ich ja keinen Zugriff habe,
also muss das anders gehen. Python bringt einen schönen simplen
Spontan-Webserver mit.  Also in das Verzeichnis mit dem Image gehen und dort:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Leider funktioniert das aber nur lokal – versuche ich vom Handy aus auf den
Server zuzugreifen findet das nix.  Also anders:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ python3 -m http.server -b 192.168.0.84
Serving HTTP on 192.168.0.84 port 8000 (http://192.168.0.84:8000/) ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wobei ich hier die IP Adresse meines Laptops verwende. Nun klappt der Handy-Test.&lt;/p&gt;
&lt;p&gt;Und so tragen wir das dann ins iLO ein:
&lt;code&gt;http://192.168.0.84:8000/debian-12.0.0-amd64-netinst-hl.iso&lt;/code&gt;
Nun noch &lt;em&gt;Boot on next reset&lt;/em&gt; auswählen und auf &lt;em&gt;Insert Media&lt;/em&gt; klicken. Und schon
sind wir bereit, den Server neu zu starten – auch wieder über das iLO.&lt;/p&gt;
&lt;p&gt;Luft anhalten und hoffen. Nix war's! Der Server ist einfach ganz normal
hochgefahren. Und unser ad hoc http Server hat einen Fehler geschmissen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;192.168.0.11 - - [29/Jun/2023 21:06:01] &amp;quot;GET /debian-12.0.0-amd64-netinst-hl.iso HTTP/1.1&amp;quot; 200 -
----------------------------------------
Exception occurred during processing of request from (&amp;#39;192.168.0.11&amp;#39;, 60361)
Traceback (most recent call last):
  File &amp;quot;/usr/lib/python3.11/socketserver.py&amp;quot;, line 691, in process_request_thread
    self.finish_request(request, client_address)
  File &amp;quot;/usr/lib/python3.11/http/server.py&amp;quot;, line 1306, in finish_request
    self.RequestHandlerClass(request, client_address, self,
  File &amp;quot;/usr/lib/python3.11/http/server.py&amp;quot;, line 667, in __init__
    super().__init__(*args, **kwargs)
  File &amp;quot;/usr/lib/python3.11/socketserver.py&amp;quot;, line 755, in __init__
    self.handle()
  File &amp;quot;/usr/lib/python3.11/http/server.py&amp;quot;, line 432, in handle
    self.handle_one_request()
  File &amp;quot;/usr/lib/python3.11/http/server.py&amp;quot;, line 420, in handle_one_request
    method()
  File &amp;quot;/usr/lib/python3.11/http/server.py&amp;quot;, line 674, in do_GET
    self.copyfile(f, self.wfile)
  File &amp;quot;/usr/lib/python3.11/http/server.py&amp;quot;, line 873, in copyfile
    shutil.copyfileobj(source, outputfile)
  File &amp;quot;/usr/lib/python3.11/shutil.py&amp;quot;, line 200, in copyfileobj
    fdst_write(buf)
  File &amp;quot;/usr/lib/python3.11/socketserver.py&amp;quot;, line 834, in write
    self._sock.sendall(b)
BrokenPipeError: [Errno 32] Broken pipe
----------------------------------------
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Was soll das denn jetzt??? Nach einiger Recherche habe ich herausgefunden, dass&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;der Server den korrekten mime type (&lt;code&gt;application/octet-stream&lt;/code&gt;) liefern und&lt;/li&gt;
&lt;li&gt;&lt;code&gt;range requests&lt;/code&gt; unterstützen und dann partial-content zurücksenden muss.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ich werde wahnsinnig! Beides tut unser ad hoc Server natürlich nicht einfach
so. Ersteres ist machbar, aber Zweiteres unterstützt das Python Modul meines
Wissens einfach nicht.&lt;/p&gt;
&lt;p&gt;D.h. wir brauchen allen Ernstes einen echten Webserver!  Letzter Versuch, bevor
ich den Server mit der Axt umprogrammiere: NGINX als Docker Container.&lt;/p&gt;
&lt;p&gt;Schnell ein kleines &lt;code&gt;Dockerfile&lt;/code&gt; bauen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;FROM nginx
COPY debian-12.0.0-amd64-netinst-hl.iso /usr/share/nginx/html
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und in den Ordner mit dem ISO Image legen. Dort dann das Docker Image bauen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;docker build -t nginx-iso .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und schließlich können wir es starten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;docker run -p 8080:80 -d nginx-iso
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Die URL für unser Image lautet dann:
&lt;code&gt;http://192.168.0.84:8080/debian-12.0.0-amd64-netinst-hl.iso&lt;/code&gt; Diese kopieren
wir in das Feld für das virtuelle Medium und starten den Server mal wieder neu.
Und man glaubt es kaum – er bootet das Installer Image. &lt;/p&gt;
&lt;p&gt;Nun also ein paar Minuten abwarten, bis der Installer das Netzwerk konfiguriert
hat und dann versuchen wir einzuloggen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ssh installer@hal
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Es klappt – puh – ich bin drin.  &lt;/p&gt;
&lt;h1&gt;Reparatur&lt;/h1&gt;
&lt;p&gt;Jetzt wo wir endlich Zugriff haben starten wir den Installationsprozess und
brechen ihn sofort wieder ab (&lt;code&gt;Go Back&lt;/code&gt;) und gehen dann zu &lt;code&gt;Detect disks&lt;/code&gt;. Dort
können wir uns orientieren welches Device eigentlich die gesuchte Platte ist.
Wie vermutet ist &lt;code&gt;/dev/sda1&lt;/code&gt; die gesuchte Partition. Nun in den Tab mit der
Shell wechseln (&lt;code&gt;CTRL-a 2&lt;/code&gt;) und die Systemplatte mounten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mount /dev/sda1 /mnt/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;vi&lt;/code&gt; gibt es leider nicht in der Installer Shell, aber &lt;code&gt;nano&lt;/code&gt; ist vorhanden.
Also editieren wir das verfluchte Config-File so:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;nano /mnt/etc/ssh/sshd_config
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Fehlerhafte Zeile korrigieren, speichern und den Server neu starten. Ein paar
Minuten abwarten und versuchen per &lt;code&gt;ssh&lt;/code&gt; einzuloggen. Es geht wieder – hurra!&lt;/p&gt;
&lt;h1&gt;Serial Login konfigurieren&lt;/h1&gt;
&lt;p&gt;Und damit mir so eine Sch***e nie wieder passiert, konfigurieren wir nun den
seriellen Login als Notfallzugang.&lt;/p&gt;
&lt;p&gt;Und das ist eigentlich recht einfach. Der virtuelle Serial Port im iLO ist
&lt;code&gt;COM2&lt;/code&gt;, also &lt;code&gt;/dev/ttyS1&lt;/code&gt;. Und auf diesem Device wollen wir einen &lt;code&gt;getty&lt;/code&gt;
Prozess haben:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl enable serial-getty@ttyS1.service
systemctl start serial-getty@ttyS1.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und sicherstellen, dass auch alles geklappt hat:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;hal:~$ systemctl status serial-getty@ttyS1.service 
● serial-getty@ttyS1.service - Serial Getty on ttyS1
     Loaded: loaded (/lib/systemd/system/serial-getty@.service; enabled; preset: enabled)
    (HP Microserver Gen8)  Active: active (running) since Fri 2023-06-30 20(HP Microserver Gen8) :19:22 CEST; 2min ago
       Docs: man:agetty(8)
             man:systemd-getty-generator(8)
             http://0pointer.de/blog/projects/serial-console.html
   Main PID: 852 (agetty)
      Tasks: 1 (limit: 19068)
     Memory: 280.0K
        CPU: 3ms
     CGroup: /system.slice/system-serial\x2dgetty.slice/serial-getty@ttyS1.service
             └─852 /sbin/agetty -o &amp;quot;-p -- \\u&amp;quot; --keep-baud 115200,57600,38400,9600 - vt220
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sehr gut! &lt;/p&gt;
&lt;p&gt;Bleibt noch das zu testen: &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 administrator@hal-ilo

[...]

&amp;lt;/&amp;gt;hpiLO-&amp;gt; VSP

Virtual Serial Port Active: COM2

Starting virtual serial port.
Press &amp;#39;ESC (&amp;#39; to return to the CLI Session.


hal login: root
Password:  **************
Linux hal 6.1.0-9-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.27-1 (2023-05-08) x86_64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Passt!&lt;/p&gt;
&lt;p&gt;Wichtig: &lt;em&gt;Serial Login&lt;/em&gt; ist was anderes als &lt;em&gt;Serial Console&lt;/em&gt; – ersteres haben
wir gerade eingerichtet. Zweiteres ist einfach die Möglichkeit, alle
Kernel-Messages auf dem virtuellen seriellen Port zu sehen. Das kann nützlich
sein, erlaubt aber keinen Login! Man kann auch beides aktivieren, aber dann
besteht die Gefahr, dass im Falle eines größeren Problems das serielle Terminal
mehr oder weniger unbrauchbar wird, wenn der Bildschirm mit Kernel Messages
überflutet wird. Deshalb aktiviere ich das nicht.&lt;/p&gt;
&lt;h1&gt;iLO update&lt;/h1&gt;
&lt;p&gt;Außerdem habe ich mal geschaut, ob mein uraltes iLO nicht evtl. auf einen
neuern Stand gebracht werden kann.  Und in der Tat gibt es inzwischen die
Version 2.82. Also habe ich mal ein Firmware-Update gemacht und nun schaut das
iLO sehr viel moderner aus und ist stinklangsam. Immerhin bietet es nun eine
HTML5-Konsole über die man den Bootvorgang beobachten kann – auch im
Grafikmodus etc. Am Ende des Boots sieht man dann auch den Login-Prompt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/locked-out-of-my-server/login.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Leider funktioniert die Tastatur-Eingabe weder in Firefox, noch in Chromium.
Keine Ahnung, was da los ist.&lt;/p&gt;
&lt;p&gt;Und wo ich schon dabei war wollte ich auch das BIOS mal auf einen neueren Stand
bringen, aber HPE listet die entsprechenden Files zwar noch munter auf der
Support-Seite, bietet die entsprechenden Images aber nicht mehr um Download an.
Also musste ich ein wenig googeln, um sie mir us zweifelhaften Quellen zu
besorgen. Zum Glück stehen auf den Support-Seiten noch die sha256 sums, so dass
ich immerhin verifizieren konnte, dass die images unverändert sind.&lt;/p&gt;
&lt;p&gt;Irgendwie wird mir HP immer unsympathischer – deren Drucker kann man ohnehin schon
lange nicht mehr empfehlen und wer auf den Gedanken kommt, BIOS Updates &amp;amp; Co
bewusst zurück zu ziehen, obwohl da draußen zahlende Kunden leben, die das
brauchen, um Ihre Systeme zu pflegen verdient eigentlich keinen Umsatz mehr.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Was ein Aufwand für so eine simple Sache!
Ich hätte auf die Leiter steigen sollen...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Neues Labornetzteil</title><link href="https://techbotch.org/blog/lab-power-supply/index.html" rel="alternate"/><published>2023-06-18T00:00:00+02:00</published><updated>2023-06-18T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-06-18:/blog/lab-power-supply/index.html</id><summary type="html">&lt;p&gt;Elektronikkram braucht Strom. Und wenn es sich um eine Bastelei oder ein
Reparaturprojekt handelt, bei dem kein eigenes Netzteil zur Verfügung steht,
oder selbiges im Verdacht steht, Teil des Problems zu sein, dann kommt ein
Labornetzteil zum Einsatz. Ich habe schon ewig ein Voltcraft PS405-pro
Netzteil und irgendwo fliegt auch …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Elektronikkram braucht Strom. Und wenn es sich um eine Bastelei oder ein
Reparaturprojekt handelt, bei dem kein eigenes Netzteil zur Verfügung steht,
oder selbiges im Verdacht steht, Teil des Problems zu sein, dann kommt ein
Labornetzteil zum Einsatz. Ich habe schon ewig ein Voltcraft PS405-pro
Netzteil und irgendwo fliegt auch noch ein Manson NSP2050 Schaltnetzteil rum.
Beide sind ganz OK, aber ich ich verspürte den Drang, mir mal ein neues zu
gönnen, das ordentlich programmier- und fernsteuerbar ist und eine möglichst
brauchbare Bedienung bietet.&lt;/p&gt;
&lt;p&gt;Also habe ich etwas Marktrecherche betrieben und eine Vielzahl von
Angeboten gefunden.  In die engere Wahl haben es diese geschafft:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rigol DP832 / DP832A&lt;/li&gt;
&lt;li&gt;Siglent SPD3303X / SPD3303X-E&lt;/li&gt;
&lt;li&gt;Owon ODP3033 / ODP3063&lt;/li&gt;
&lt;li&gt;UNI-T UDP3305S / UDP3305S-E&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Siglent und Rigol fallen in die Kategorie "respektable chinesische Anbieter",
während Owon eher als Billigheimer bekannt ist und UNI-T genießt in der
Community auch nicht den tollsten Ruf, obwohl ihre Multimeter sehr beliebt
sind.  Dennoch hat mich nach viel Vergleichen von Datenblättern und Handbüchern
das UNI-T am meisten angesprochen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kanäle 1 und 2 mit je 0-32V, 0-5A.
  Diese können per Knopfdruck in Serie oder parallel geschaltet werden, um mehr
  Spannung oder höhere Ströme zu bekommen.&lt;/li&gt;
&lt;li&gt;Kanal 3 ist v.a. für die Versorgung von digitalen Schaltungen gedacht. 1.8V,
  2.5V, 3.3V und 5V bekommt man auf Knopfdruck, aber es lassen sich alle Werte
  zwischen 0 und 6.2V einstellen und man bekommt bis zu 3A.&lt;/li&gt;
&lt;li&gt;"Kanal 4" ist pures Marketing und existiert nicht wirklich: Es handelt sich um
  eine USB-A Buchse, die 5V und max. 2A liefert.&lt;/li&gt;
&lt;li&gt;Großes Farb-Display&lt;/li&gt;
&lt;li&gt;Zahlenfeld zum schnellen Eingeben von Werten&lt;/li&gt;
&lt;li&gt;Vielseitig programmierbar&lt;/li&gt;
&lt;li&gt;1 mV / 1 mA Auflösung (oder 10 mV / 1mA beim S-E)&lt;/li&gt;
&lt;li&gt;Diverse Schnittstellen: Ethernet, USB, RS232 und ein paar digitale Pins&lt;/li&gt;
&lt;li&gt;SCPI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Das hat in diesem Umfang keiner der Mitbewerber:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Das Rigol hat viel weniger Leistung und das Zahlenfeld ist unpraktisch im
  Kreis um den Drehregler angeordnet – ich nehme an das soll hip aussehen...&lt;/li&gt;
&lt;li&gt;Das Siglent hat weniger Leistung und garkein Zahlenfeld. Auch die
  Programmierung ist weniger flexibel.&lt;/li&gt;
&lt;li&gt;Das Owon hat etwas mehr Leistung und ein Zahlenfeld, ist aber weniger
  flexibel programmierbar, Die Kanäle sind in unlogischer Reihenfolge
  angeordnet (3, 1, 2) und das Display verwendet andere Farben der Kanäle, als
  die Farbcodes an der Front (zumindest scheint es auf den Marketing-Photos
  so).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dennoch habe ich lange gehadert, denn man findet fast keine Erfahrungsberichte
über das UNI-T Netzteil. Das mag zum Teil daran liegen, dass es noch recht kurz
am Markt ist, aber man fühlt sich irgendwie wohler, wenn man weiß, dass Leute
da draußen das schonmal genauer unter die Lupe genommen haben. So gibt es v.a.
zu den Alternativen von Rigol und Siglent jede Menge Reviews auf Youtube und in
diversen Blogs – inkl. Hacks, um das jeweils kleinere Modell mit den Optionen
des großen Bruders auszustatten.  Zum Uni-T konnte ich nur einen einzigen,
kurzen Thread im &lt;a href="https://www.eevblog.com/forum/testgear/uni-t-udb3000s-series-udp3305s-udp3000s-e/"&gt;EEVblog
Forum&lt;/a&gt;
finden. Ich hatte mich schon entschieden, einfach ins kalte Wasser zu springen
und es blind zu bestellen, als user &lt;em&gt;Self Bias&lt;/em&gt; dann seine Testergebnisse
gepostet hat. Und dann waren meine Zweifel schon deutlich reduziert. 
Also habe ich es bestellt.&lt;/p&gt;
&lt;p&gt;Zwei Tage später war es da:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/front.jpg" class="Large"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/back.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und nun wollen wir es mal ordentlich testen und schauen, ob das ein guter Kauf
war oder nicht. Also heute mal ein Produkt Review in dem ich meine Ersten
Erfahrungen teile..&lt;/p&gt;
&lt;h1&gt;User Interface und Äußerlichkeiten&lt;/h1&gt;
&lt;p&gt;Das Gerät macht einen soliden Eindruck. Die Tasten sind aus Gummi und haben
einen deutlich spürbaren Druckpunkt. Der Drehregler rastet schön. Das Display
spiegelt, aber in meinem Setting stört das kaum. &lt;/p&gt;
&lt;p&gt;Die Polklemmen haben den Standard-Abstand von 19mm (3/4") und meine Laborkabel
mit Büschelsteckern sitzen fest in den Buchsen. Alle relevanten Daten der drei
Kanäle werden übersichtlich im Display angezeigt.&lt;/p&gt;
&lt;p&gt;Die Bedeutung der diversen Knöpfe und Menüs erschließt sich fast von selbst und
außer einem kleinen Rechtschreibfehler ("Templet" statt "Template") ist mir
eigentlich kein Chinglish aufgefallen. Das Interface kann auch auf Deutsch
eingestellt werden, aber das habe ich nicht ausprobiert.&lt;/p&gt;
&lt;p&gt;Im Display wird immer angezeigt, ob wir im &lt;em&gt;constant voltage&lt;/em&gt; (CV) oder
&lt;em&gt;constant current&lt;/em&gt; mode (CC) sind. Zusätzlich haben die drei Kanäle noch eine
LED über den jeweiligen Polklemmen, die grün (CV) oder rot (CC) leuchtet, wie
man es von klassischen Netzteilen kennt. Das finde ich super, weil man so sofort
sieht wenn die Strombegrenzung bei einem Kanal greift. &lt;/p&gt;
&lt;p&gt;Schaltet man die Kanäle 1 und 2 parallel oder seriell, wird dies prominent im
Display angezeigt und es gibt eine kleine Grafik wo die Kabel im jeweiligen
Modus anzuschließen sind. Was fehlt ist der klassische Tracking Mode – also die
Möglichkeit Ch1 und Ch2 miteinander zu koppeln und gemeinsam regeln zu können.
In gewisser Weise kann man das bekommen indem man die Kanäle in Serie schaltet
und dann trotzdem alle vier Anschlüsse verwendet. Aber das hat den Nachteil,
dass man nur die Gesamtspannung angezeigt bekommt und auch unterschiedliche
Spannungen an den beiden Kanälen sind so natürlich nicht realisierbar. Ich
vermute, dass sich das mittels neuer Firmware beheben ließe, also besteht
Hoffnung, das evtl. in Zukunft irgendwann zu bekommen.&lt;/p&gt;
&lt;p&gt;Kanal 3 hat einen kleinen Knopf mit gängigen Presets für digitale Schaltungen:
1.8, 2.5, 3.3 und 5V. Aber es lassen sich alle Spannungen von 0-6.2V einstellen.
D.h. das ist ein vollwertiger Kanal mit Strombegrenzung etc. – nur eben
mit geringerer Maximalspannung.&lt;/p&gt;
&lt;p&gt;Was mir total gut gefällt ist die Direkteingabe von Werten via Ziffernblock.
Das ist &lt;em&gt;viel&lt;/em&gt; angenehmer, als endlos an irgendwelchen Encoderrädchen zu
drehen!&lt;/p&gt;
&lt;p&gt;Hier noch ein paar Screenshots (sieht in echt viel besser aus, als im Photo):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-home.jpg", class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-serial.jpg", class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-parallel.jpg", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Alles in allem muss ich sagen, dass das Netzteil vermutlich das beste
User-Interface hat, das ich bei chinesischen Geräten bisher erlebt habe.&lt;/p&gt;
&lt;h1&gt;Lüfterlärm&lt;/h1&gt;
&lt;p&gt;Nach dem Einschalten läuft der Lüfter sanft an und surrt leise vor sich hin.&lt;/p&gt;
&lt;p&gt;Nun wollen wir mal Last draufgeben. Also Netzteil auf 20V stellen und die
elektronische Last auf 50W stellen. Nach 10 Minuten habe ich die Last wieder
abgeschaltet der Netzteillüfter scheint aber kaum lauter. Vermutlich war das zu
wenig Last, um erhöhten Kühlbedarf auszulösen. &lt;/p&gt;
&lt;p&gt;Also nochmal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ch1 und Ch2 parallel schalten&lt;/li&gt;
&lt;li&gt;Am Netzteil 32V einstellen&lt;/li&gt;
&lt;li&gt;200W Last draufgeben&lt;/li&gt;
&lt;li&gt;10 min warten&lt;/li&gt;
&lt;li&gt;Elektronische Last ausschalten und Lüftergeräusch prüfen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ergebnis: Der Lüfter an der elektronischen Last dröhnt. Der am Netzteil ist
weiter schön leise. &lt;/p&gt;
&lt;h1&gt;Programmierung&lt;/h1&gt;
&lt;p&gt;Man kann das Netzteil direkt über das User Interface programmieren. Und das
geht erstaunlich leicht. Man bekommt eine große Tabelle mit 2048 Zeilen und
jede Zeile enthält einen Parametersatz. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-list.jpg", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Dann sagt man dem Gerät wo es starten soll und bis zu welcher Zeile die Sequenz
geht und schon arbeitet es die verschiedenen Settings brav ab.&lt;/p&gt;
&lt;p&gt;Und schließlich gibt es noch Presets (fünf Stück): D.h. wenn man bestimmte
Dinge häufiger macht, kann man in einem Preset Slot die entsprechenden
Parameter aller drei Kanäle hinterlegen und diese dann schnell aufrufen.  Z.B.
12V auf Kanal 1, 5V auf Kanal 2 und 3.3V auf Kanal 3 – jeweils mit der
gewünschten Strom- und Spannungsbegrenzung. Auch die Parameter für Seriell- und
Parallel-Modus können gesetzt werden:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-presets.jpg", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Außerdem kann man auch noch Bedingungen einstellen bei deren Eintreten eine
Aktion erfolgen soll – z.B. Eine Warnmeldung, ein Tonsignal oder das Abschalten
des Kanals:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-monitor.jpg", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das ist nützlich, um mitzukriegen, wenn etwas aus dem Ruder läuft, oder z.B. auch
als automatische Abschaltung beim Laden von Akkus.&lt;/p&gt;
&lt;h1&gt;Software&lt;/h1&gt;
&lt;p&gt;Die mitgelieferte Software funktioniert natürlich nur unter Windows. Und so
habe ich sie mal in einer virtuellen Maschine installiert. Ausgiebig testen
will ich sie nicht, aber wenigstens einen kurzen Blick wollen wir darauf
werfen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/windows-software1.png", class="Large"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/windows-software2.png", class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Im Grunde ist sie nicht schlecht, aber die Installation ist schon sehr
umfangreich und dauert gefühlt ewig. Auch reagiert das Netzteil etwas gemütlich
auf die Einstellungen die man in der Software macht, aber vielleicht ist das
auch der Overhead der virtuellen Maschine...&lt;/p&gt;
&lt;h1&gt;Fernsteuerung&lt;/h1&gt;
&lt;p&gt;Wenn komplexere Abläufe geplant sind, dann ist es oft angenehmer, nicht die
Programmierung am Gerät selbst vorzunehmen, sondern es via Skript vom Computer
aus fernzusteuern. Zu diesem Zweck bietet das Netzteil drei verschiedene
Schnittstellen: USB, RS232 und LAN. Alle drei können dann über entsprechende
SCPI Befehle das Netzteil steuern. Ein SCPI Manual ist vom Hersteller zu bekommen.&lt;/p&gt;
&lt;p&gt;Die mitgelieferte Windows Software haben wir uns ja gerade eben schon
angeschaut, aber ich will lieber unter LINUX arbeiten und auch richtig
skripten. Also habe ich mich mal umgesehen, was es da so gibt und bin auf
&lt;a href="https://pyvisa.readthedocs.io/"&gt;PyVISA&lt;/a&gt; gestoßen. Das klingt gut! Also mal schnell
ausprobieren. Aber zunächst installieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python -m venv .venv
source .venv/bin/activate
pip install -U pyvisa
pip install -U pyvisa-py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und dann eine Python-Session starten und mal ein wenig testen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import pyvisa
&amp;gt;&amp;gt;&amp;gt; rm = pyvisa.ResourceManager()
&amp;gt;&amp;gt;&amp;gt; rm.list_resources()
(&amp;#39;ASRL/dev/ttyS1::INSTR&amp;#39;, &amp;#39;ASRL/dev/ttyS0::INSTR&amp;#39;, &amp;#39;TCPIP::192.168.0.65::INSTR&amp;#39;, &amp;#39;TCPIP::192.168.0.67::INSTR&amp;#39;)
&amp;gt;&amp;gt;&amp;gt; psu = rm.open_resource(&amp;#39;TCPIP::192.168.0.66::INSTR&amp;#39;)
&amp;gt;&amp;gt;&amp;gt; psu.query(&amp;quot;*IDN?&amp;quot;)
&amp;#39;Uni-Trend,UDP3305S,ADP5499238404,1.06&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Zwar tauchte das Netzteil nicht in der Ressourcen-Liste auf, aber ich habe dann
schnell nachgeschaut, welche IP-Adresse es hat und wie man sieht, hat es sich
dann ja brav gemeldet.&lt;/p&gt;
&lt;p&gt;Und nun wollen wir mal ein paar Sachen ausprobieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# select channel 1
psu.query(&amp;quot;:INSTrument:SELE Ch1&amp;quot;)

# Set voltage to 12.5V, 0.7A
psu.query(&amp;quot;:APPL Ch1,12.5,0.7&amp;quot;)

# switch on channel 1
psu.query(&amp;quot;:OUTP:STAT Ch1,on&amp;quot;)

# Set electronic load to 0.2A
# read values
psu.query(&amp;quot;:MEAS:ALL? Ch1&amp;quot;)
#  &amp;#39;12.498,0.198,2.475&amp;#39;

# Set electronic load to 2A
# read values
psu.query(&amp;quot;:MEAS:ALL? Ch1&amp;quot;)
#  &amp;#39;0.054,0.700,0.038&amp;#39;

# switch off channel 1
psu.query(&amp;quot;:OUTP:STAT Ch1,off&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So macht das Spaß! &lt;/p&gt;
&lt;h1&gt;Firmware&lt;/h1&gt;
&lt;p&gt;Die Firmware in meinem Exemplar hat die Versionsnummer 1.06, Bootloader 1.03.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/old-firmware.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Leider findet man nirgends einen Menüpunkt zur Firmware Aktualisierung, das
Manual hat nichts dazu zu sagen und auf den Webseiten von UNI-T findet man auch
keine Firmware Files zum Download. Das ist sehr schade, denn bei einem 600€
Netzteil fände ich es keinen Luxus auch Firmware Updates anzubieten.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update 2023-06-25:&lt;/em&gt; Ich hatte den UNI-T Support kontaktiert und u.a. nach
Firmware-Updates gefragt.  Lange hatte ich keine Antwort erhalten und dann
nochmal nachgehakt. Ich dachte schon, dass ich nie eine Antwort bekommen
werde, als es dann doch geschah.&lt;/p&gt;
&lt;p&gt;Offenbar wurde die Antwort-Email vom Server meines Email-Providers abgewiesen.
Eine Support-Mitarbeiterin hat sich darauf tatsächlich die Mühe gemacht mich
auf LinkedIn ausfindig zu machen und mich auf diesem Weg kontaktiert. Das nenne
ich mal Einsatz!  Und so kam ich zu der Antwort-Nachricht. Zunächst fiel diese
ernüchternd aus: Die aktuelle Firmware sei v1.10, aber der Kunde könne keine
Updates selbst durchführen. Ich habe aber nicht gleich locker gelassen und so
entstand ein längerer Dialog mit erfreulichem Ausgang:&lt;/p&gt;
&lt;p&gt;Ich habe ein &lt;a href="https://25628395.fs1.hubspotusercontent-eu1.net/hubfs/25628395/Instrument%20%20FIRMWARE/UDP3305S%20Update.rar"&gt;Firmware-Image&lt;/a&gt; der Version 1.10 bekommen und die Anleitung zum Update:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;*.rar&lt;/code&gt; File auspacken, um das Firmware Image &lt;code&gt;UDP3305S.bin&lt;/code&gt; zu bekommen.&lt;/li&gt;
&lt;li&gt;Image File in das Root-Verzeichnis eines FAT32-formatierten USB-Sticks legen.
   Der Filename darf &lt;em&gt;nicht&lt;/em&gt; verändert werden.&lt;/li&gt;
&lt;li&gt;Power supply ausschalten.&lt;/li&gt;
&lt;li&gt;USB Stick in den USB-Port auf der &lt;em&gt;Rückseite&lt;/em&gt; stecken.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;UTILITY&lt;/em&gt; Taste drücken und halten und das Gerät einschalten.&lt;/li&gt;
&lt;li&gt;Nun startet der Update-Prozess.&lt;/li&gt;
&lt;li&gt;Nach erfolgreichem Update das Gerät aus- und wieder einschalten.&lt;/li&gt;
&lt;li&gt;Fertig.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/firmware-update.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/firmware-update-success.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das hat einwandfrei funktioniert:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/new-firmware.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Sehr gut! Ich habe natürlich gleich an den Support zurückgemeldet, das ich es
total super fände, wenn das im Manual stünde und die Firmware einfach zum
Download bereitstünde. Laut support wird UNI-T im August Schritte in diese
Richtung unternehmen. Das wäre doch mal super.&lt;/p&gt;
&lt;h1&gt;Mess-Setup&lt;/h1&gt;
&lt;p&gt;Im folgenden verwende ich immer wieder eine elektronische Last, um nicht nur
Leerlaufspannungen zu erheben, sondern auch zu sehen, wie sich das Netzteil
unter Last verhält. Dazu verwende ich meine eher preiswerte East-Tester
ET5410A+ Electronic Load. Dabei ist es extrem wichtig, alles korrekt zu
verkabeln, denn auch bei Verwendung ordentlicher Laborkabel kommt es bei
höheren Spannungen/Strömen zu einem nicht zu vernachlässigendem Spannungsabfall
an den Messleitungen. D.h. alle Messungen mit Oszilloskop oder Multimeter
erfolgen so nah am Netzteil wie möglich. Würde man hingegen die Messungen an
den Buchsen der Last vornehmen, wären diese durch den Spannungsabfall am Kabel
verfälscht. Also:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/setup.png", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wobei wir im Falle eines Oszilloskops keine einfachen Messstrippen nehmen,
sondern einen Tastkopf mit BNC-Adapter und BNC-Büschelstecker-Adapter.&lt;/p&gt;
&lt;h1&gt;Trafoanzapfungen&lt;/h1&gt;
&lt;p&gt;Damit der Spannungsregler im Netzteil nicht den vollen Bereich von 0-30V
regeln und dadurch jede Menge unnütze Wärme produzieren muss, schaltet so ein
Gerät je nach Bedarf auf eine von mehreren Anzapfungen (Taps) im Transformator,
so dass die Trafospannung geringer ist. Um herauszufinden wieviele Anzapfungen
der Trafo hat und wo sie liegen drehe ich die Spannung mal ganz langsam von
Null auf 30V bzw. 6V (Ch1/2 bzw. 3) und warte auf das Klicken eines Relais –
d.h. den Punkt an dem das Netzteil auf einen anderen Tap im Trafo umschaltet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kanal 1 &amp;amp; 2 schalten bei ca. 5V, 11V, 17.5V und 25V&lt;/li&gt;
&lt;li&gt;Kanal 3 kommt ohne Umschaltung aus.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die Umschaltspannungen unterscheiden sich ein bisschen, je nachdem, ob man die
Spannung von unten kommend über die Schwelle erhöht, oder von oben kommend
verringert. Das ist auch gut so, damit das Netzteil nicht so leicht in die
Situation kommt, ständig umzuschalten, wenn es genau auf/ sehr nah an einer
Umschaltschwelle arbeitet.&lt;/p&gt;
&lt;h1&gt;Ein-/Ausschaltverhalten&lt;/h1&gt;
&lt;p&gt;Als erstes schauen wir mal ob und ggf. wieviel Spannung auf den drei Kanälen
anliegt, wenn diese noch nicht aktiviert sind. In obigen Thread im EEVBlog
wurde angemerkt, dass diese nicht null sei. Also nachmessen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kanal 1: -11mV&lt;/li&gt;
&lt;li&gt;Kanal 2: -243mV&lt;/li&gt;
&lt;li&gt;Kanal 3: 0mV&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Das entspricht erstaunlich exakt dem, was im EEVblog Forum berichtet wurde.
Offenbar haben sie die Produktion gut reproduzierbar im Griff ;-)&lt;/p&gt;
&lt;p&gt;Angeblich ist es nicht so ungewöhnlich, dass Netzteile geringe Spannungen
am Ausgang anliegen haben wenn der entsprechende Kanal aus ist. Insofern mache
ich mir jetzt mal nicht zu viel Kopf darum, auch wenn ich es nicht verstehe.&lt;/p&gt;
&lt;p&gt;Als nächstes schauen wir uns an, wie sich das Netzteil verhält, wenn man
einen Kanal aktiviert. Also stellen wir mal verschiedene Spannungen ein und
aktivieren den jeweiligen Kanal. Für die Kanäle 1 und 2 nehme ich 2.5, 5, 10,
20 und 30V, Für Kanal 3 dann 2, 4, 6V:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-on-no-load.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-on-no-load.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-on-no-load.png"&gt;&lt;/p&gt;
&lt;p&gt;Und nochmal das gleiche, aber diesmal mit 3A (Ch1 &amp;amp; 2) bzw. 2A (Ch 3) Last:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-on-3A.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-on-3A.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-on-2A.png"&gt;&lt;/p&gt;
&lt;p&gt;Kanäle 1 und 2 zeigen weder mit, noch ohne Last einen Overshoot. Kanal 3
hingegen hat zumindest bei der geringsten Spannung einen kleinen Overshoot.
Bei den beiden höheren Spannungen wird ganz offensichtlich erstmal ordentlich
geregelt (Ch1&amp;amp;Ch2) – ob das nur am Netzteil liegt, oder auch an der
elektronischen Last weiß ich nicht. Also nehmen wir mal einen
Leistungswiderstand (12Ω, 100W) und wiederholen das Experiment damit:&lt;/p&gt;
&lt;p&gt;Ch1 &amp;amp; Ch2:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-on-12ohms.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-on-12ohms.png"&gt;&lt;/p&gt;
&lt;p&gt;Ch3:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-on-12ohms.png"&gt;&lt;/p&gt;
&lt;p&gt;Das sieht etwas besser aus, aber das Regeln ist nicht völlig verschwunden, also
hatten offenbar Netzteil und Last ihren Anteil daran. Allerdings ist mir nicht
klar, was da genau passiert.&lt;/p&gt;
&lt;p&gt;Nachdem wir das Einschaltverhalten angeschaut haben werfen wir noch schnell
einen Blick auf den Spannungsverlauf beim Abschalten der Kanäle (je 30V bei 3A
bzw. 6V bei 2A Last):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-off-3A.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-off-3A.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-off-2A.png"&gt;&lt;/p&gt;
&lt;p&gt;Das ist erwartungsgemäß unspektakulär – im Wesentlichen schauen wir hier einem
Kondensator beim Entladen zu. Hier teste ich nur die Maximalspannung, denn es
ist nicht zu erwarten, dass wir hier noch etwas spannendes sehen werden.&lt;/p&gt;
&lt;p&gt;Zuguterletzt gibt es da noch einen Knopf der mit &lt;em&gt;all on/off&lt;/em&gt; beschriftet ist
und dementsprechend alle drei Kanäle gleichzeitig ein- oder ausschaltet.  Aber
was passiert, wenn einige Kanäle eingeschaltet sind und andere nicht?  Das
Netzteil tut genau das richtige und schaltet in diesem Fall alles aus.  Das ist
wichtig, z.B. wenn etwas schiefgeht und man schnell alles abschalten muss, um
Schäden an einer Schaltung zu verhindern.&lt;/p&gt;
&lt;h1&gt;Lastwechsel&lt;/h1&gt;
&lt;p&gt;Als nächstes wollen wir mal schauen, wie sich das Netzteil verhält, wenn sich
plötzlich die Last ändert. Dazu programmieren wir die elektronische Last so,
dass sie alle 2 Sekunden die Last ändert (Transient mode).  Wir stellen 30V am
Netzteil ein und die elektronische Last zieht abwechselnd 1A und 4.5A. Auf dem
Oszilloskop war nicht wirklich was spannendes zu sehen und so wechseln wir aufs
Multimeter (Siglent SDM3065X, Aperture 0.5 PLC):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-load-change.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-load-change.png"&gt;&lt;/p&gt;
&lt;p&gt;Das sieht verdammt gut aus. D.h. es gelingt dem Netzteil wirklich gut, die
eingestellte Spannung unter Lastwechseln zu halten.&lt;/p&gt;
&lt;p&gt;Noch schnell das gleiche für Kanal 3, hier aber bei 6V und 250mA / 2.5A:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-load-change.png"&gt;&lt;/p&gt;
&lt;p&gt;Sehr gut – auch hier gibt es nichts zu beanstanden.&lt;/p&gt;
&lt;h1&gt;Strombegrenzung&lt;/h1&gt;
&lt;p&gt;Ordentliche Labornetzteile haben eine Strombegrenzung. D.h. man kann
einstellen, welcher Maximalstrom erlaubt ist. Und wenn die Last dann bei der
vorgegebenen Spannung mehr Strom ziehen möchte regelt das Netzteil die Spannung
so weit herunter, bis nur noch der eingestellte Maximalstrom fließt. Auf diese
Weise wird die Last geschützt. Je schneller das Netzteil das hinbekommt, desto
besser.&lt;/p&gt;
&lt;p&gt;Zum Test stellen wir zunächst die Spannung und Strombegrenzung am Netzteil ein.
Dann belasten wir das Ganze mit dem ersten Last-Niveau (Last 1), das unter der
Grenze liegt.  Dann erhöhen wir die Last abrupt auf ein Niveau deutlich über
der Stromgrenze (Last 2). Und das Ganze beobachten wir dann am Oszilloskop: Die
Spannung auf Kanal 1 und den Strom auf Kanal 2 (mit Hantek CC-65 Stromzange). &lt;/p&gt;
&lt;p&gt;So sieht dann unser Messaufbau aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/cc-setup.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Hier erstmal unsere Parameter mit denen wir testen werden:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Kanal&lt;/th&gt;
&lt;th&gt;U [V]&lt;/th&gt;
&lt;th&gt;I Limit [A]&lt;/th&gt;
&lt;th&gt;Last 1 [A]&lt;/th&gt;
&lt;th&gt;Last 2 [A]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 &amp;amp; 2&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;0.500&lt;/td&gt;
&lt;td&gt;0.100&lt;/td&gt;
&lt;td&gt;1.1A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 &amp;amp; 2&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;0.500&lt;/td&gt;
&lt;td&gt;0.100&lt;/td&gt;
&lt;td&gt;1.1A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;0.500&lt;/td&gt;
&lt;td&gt;0.100&lt;/td&gt;
&lt;td&gt;1.1A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Hier die Bilder für Kanal 1:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-cc-30V.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-cc-15V.png"&gt;&lt;/p&gt;
&lt;p&gt;Und hier Kanal 2:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-cc-30V.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-cc-15V.png"&gt;&lt;/p&gt;
&lt;p&gt;Und Kanal 3:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-cc-6V.png"&gt;&lt;/p&gt;
&lt;p&gt;D.h. bei 30V sind ca. 30ms vergangen von dem Moment als der Strom die Schwelle
von 500mA überschritten hat bis zu dem Punkt an dem er wieder auf diesen Wert
begrenzt war.  Dazwischen ist er auf bis zu ca. 1.1A angestiegen. Bei 15V
dauerte es nur gute 20ms. Auf Kanal 3 geht es erwartungsgemäß noch schneller, denn
da bekommen wir ja auch nur 6V.&lt;/p&gt;
&lt;p&gt;Und obwohl ich solche Plots extrem hilfreich finde, krönen wir das Ganze noch
mit einem wirklich trivialen, aber praxisrelevanten Test: wir misshandeln eine
rote LED.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/LED.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Die klemmen wir ohne Vorwiderstand an das Netzteil. Bei 20mA leuchtet sie
schön hell.&lt;/p&gt;
&lt;p&gt;Nun stellen wir die Strombegrenzung also auf 20 mA und die Spannung auf volle Pulle
(30V). Nun den Kanal aktivieren und schauen was passiert. Das Netzteil schaltet
sofort in den constant current mode und wir bekommen exakt 20mA bei 1.9V.
Und natürlich leuchtet die LED recht ansprechend.&lt;/p&gt;
&lt;p&gt;Und nun schalten wir den Kanal aus und wieder an – und wieder aus und erneut an
und...  Und das wiederholen wir so lang bis entweder die LED den Geist aufgibt,
oder ich keine Lust mehr habe. Nach 100 Versuchen habe ich dann aufgegeben und
die LED lebte immer noch. &lt;/p&gt;
&lt;h1&gt;Überstromschutz&lt;/h1&gt;
&lt;p&gt;Zusätzlich zur Strombegrenzung verfügt das Netzteil noch über einen
Überspannungs- bzw.  Überstromsschutz. Ist dieser aktiviert, schaltet das
Netzteil den entsprechenden Kanal umgehend ab, sobald die eingestellten
Schwellwerte für Spannung oder Strom überschritten werden. Und auch das wollen
wir einmal testen. Das Setup ist das gleiche wie oben, nur dass wir diesmal
zusätzlich die over-current protection aktivieren, d.h. sie ebenfalls auf 500mA
stellen.&lt;/p&gt;
&lt;p&gt;Und das passiert dann:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-ocp-30V.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-ocp-15V.png"&gt;&lt;/p&gt;
&lt;p&gt;Als erstes greift der constant current mode, wie oben auch. Und knapp 90ms
nachdem der Strom die Schwelle überschritten hatte schaltet das Netzteil den
Kanal dann komplett ab.&lt;/p&gt;
&lt;p&gt;Kanal 2 und 3 schenke ich mir diesmal. &lt;/p&gt;
&lt;h1&gt;Richtigkeit von Settings und Readback&lt;/h1&gt;
&lt;p&gt;Für jeden Kanal kann man eine Spannung und einen maximalen Strom einstellen
(Setting) und es wird im Betrieb auch angezeigt, welche Werte aktuell
tatsächlich gemessen werden (Readback). In diesem Abschnitt wollen wir
überprüfen, wie korrekt diese Zahlen sind.&lt;/p&gt;
&lt;p&gt;Das Datenblatt sagt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Programming accuracy&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Voltage: ±(0.03%+10mV)&lt;/p&gt;
&lt;p&gt;Current: ±(0.2%+5mA)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Readback accuracy&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Voltage: ±(0.03%+10mV)&lt;/p&gt;
&lt;p&gt;Current: ±(0.15%+5mA)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Spannung&lt;/h2&gt;
&lt;p&gt;Dazu stellen wir verschiedene Spannungswerte am Netzteil ein, programmieren
einen bestimmten Strom in der elektronischen Last (ET5410A+) und messen dann
mit einem neuen SDM3065X Multimeter nach. Netzteil und Multimeter waren zuvor
mindestens eine Stunde eingeschaltet, damit sie sich äquilibrieren können. Die
Raumtemperatur betrug 22.2 °C (K-Type Fühler, Fluke 87V). &lt;/p&gt;
&lt;p&gt;Unser Messprotokoll umfasst:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kanal 1 &amp;amp; 2:&lt;ul&gt;
&lt;li&gt;Spannung: 1 - 30V in 1V Schritten&lt;/li&gt;
&lt;li&gt;Strombegrenzung: 5.2A&lt;/li&gt;
&lt;li&gt;Electronic load: 0, 1, 2.5, 5A&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kanal 3:&lt;ul&gt;
&lt;li&gt;Spannung: 1 - 6V in 1V Schritten&lt;/li&gt;
&lt;li&gt;Strombegrenzung: 3.2A&lt;/li&gt;
&lt;li&gt;Electronic load: 0, 0.25, 1.5, 3A&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;D.h. wir plotten nun die absolute Abweichung (in mV) von Set Voltage (&lt;code&gt;V.set&lt;/code&gt;)
bzw. Readback Voltage (&lt;code&gt;V.psu&lt;/code&gt;) gegen die mit dem Multimeter gemessene Spannung
(&lt;code&gt;V.dmm&lt;/code&gt;) auf und zeichnen die Spezifikationsgrenzen als grüne Linen ein. Zudem 
färben wir die Datenpunkte nach dem vom Netzteil gemessen Strom (&lt;code&gt;A.psu&lt;/code&gt;) ein.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/set_accuracy_deviation.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/readback_accuracy_deviation.png"&gt;&lt;/p&gt;
&lt;p&gt;Super – alle Punkte liegen klar innerhalb des Spezifikations-Bandes.&lt;/p&gt;
&lt;p&gt;Zuguterletzt schauen wir noch, wie gut der eingestellte und der vom Netzteil 
gemessene Spannungswert im Mittel voneinander abweichen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/set_rb_histogram.png", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Minimal...&lt;/p&gt;
&lt;h2&gt;Strom&lt;/h2&gt;
&lt;p&gt;Zur Untersuchung der Trueness der Strombegrenzung variieren wir die
Strombegrenzung bei verschiedenen Spannungen. Die elektronische Last wird auf
6A eingestellt, so dass sie stets versucht mehr Strom zu konsumieren, als die
Strombegrenzung erlaubt. Dabei messen wir den Strom mit dem Multimeter und
vergleichen dann diese Werte mit dem eingestellten Strom sowie dem Readback.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kanal 1 &amp;amp; 2:&lt;ul&gt;
&lt;li&gt;Spannung: 5, 10, 20, 30v&lt;/li&gt;
&lt;li&gt;Strom: 0.5, 1, 2.5, 5A&lt;/li&gt;
&lt;li&gt;Electronic load: 6A&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kanal 3:&lt;ul&gt;
&lt;li&gt;Spannung 2, 4, 6V&lt;/li&gt;
&lt;li&gt;Strom: 0.5, 1, 2, 3A&lt;/li&gt;
&lt;li&gt;Electronic load: 6A&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Und hier die dazugehörigen Plots analog zu oben:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/setA_accuracy_deviation.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/readbackA_accuracy_deviation.png"&gt;&lt;/p&gt;
&lt;p&gt;Das ist alles klar in der Spezifikation, aber Kanal 3 zeigt bei 500mA einen
seltsamen Outlier. Auch der ist in spec, aber ich verstehe nicht was da los
ist.&lt;/p&gt;
&lt;h1&gt;Glättung&lt;/h1&gt;
&lt;p&gt;Ein weiteres Qualitätsmerkmal eines Labornetzteils ist die "Sauberkeit" der
gelieferten Gleichspannung. Also wie gut diese geglättet ist. Vor allem
Schaltnetzteile haben da so ihre Probleme.&lt;/p&gt;
&lt;p&gt;Man unterscheidet dabei zwischen &lt;em&gt;Ripple&lt;/em&gt; und &lt;em&gt;Noise&lt;/em&gt;. &lt;em&gt;Ripple&lt;/em&gt; ist die
Welligkeit, die durch die Lade-/Entladezyklen des Netzteilausgangs entstehen.
Bei einem linearen Netzteil wie diesem passiert das im Takt der Netzspannung,
also 50Hz bei uns in Deutschland. Bei Schaltnetzteilen ist es die Schaltfrequenz
des Netzteils – typischerweise im Bereich vieler kHz. &lt;em&gt;Noise&lt;/em&gt; ist alles übrige.&lt;/p&gt;
&lt;p&gt;Naiv betrachtet klingt es einfach das zu messen: Oszilloskop mit einem Tastkopf
ans Netzteil klemmen und Kurve anschauen. In der Praxis bringt mich das aber an
die Grenzen meiner messtechnischen Möglichkeiten, denn so einfach ist das
nicht. David Jones hat z.B. ein ziemlich gutes
&lt;a href="https://www.youtube.com/watch?v=Edel3eduRj4"&gt;Video&lt;/a&gt; zum Thema.&lt;/p&gt;
&lt;p&gt;Die Spezifikation des Netzteils sagt: "&amp;lt;350μVrms/2mVpp(5Hz~1MHz)". Das ist
insofern etwas ungewöhnlich, als es üblich ist das im Bereich unter 20MHz
anzugeben, aber gut.&lt;/p&gt;
&lt;p&gt;Also versuchen wir mal das zu messen. AC-coupling, Bandwidth Limit 20MHz.  Nun
einen Tastkopf anschließen und auf maximale Sensitivität (500µV/div) gehen. Und
so bekomme ich dieses Bild:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/oscilloscope-noise.png"&gt;&lt;/p&gt;
&lt;p&gt;D.h. das kleine bisschen Tastkopf ist schon eine ausreichend gute Antenne für
so ein Bilderbuch-50Hz-Signal (Ripple) plus diversen anderen Mist (Noise). D.h.
wir müssen versuchen, den Weg zwischen Tastkopf und Netzteil so gering wie
möglich halten. Also verwende ich so einen Adapter von zwei Büschelsteckern auf
BNC und dann den BNC-Adapter für den Tastkopf:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/probe-adapter.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Damit geht es dann doch unerwartet gut:&lt;/p&gt;
&lt;p&gt;Ch1 &amp;amp; Ch1:
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-noise-30V-no-load.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-noise-30V-no-load.png"&gt;&lt;/p&gt;
&lt;p&gt;Ch3:
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-noise-6V-no-load.png"&gt;&lt;/p&gt;
&lt;p&gt;OK – das mit den 2mVpp scheint hier zu passen. Also nochmal – diesmal
mit der elektronischen Last bei 1A:&lt;/p&gt;
&lt;p&gt;Ch1 &amp;amp; Ch1:
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-noise-30V-1A.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-noise-30V-1A.png"&gt;&lt;/p&gt;
&lt;p&gt;Ch3 (Hier musste ich die Empfindlichkeit nochmal runternehmen, damit alles in
Bild passt): 
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-noise-6V-1A.png"&gt;&lt;/p&gt;
&lt;p&gt;Hui – da rauscht es dann schon deutlich stärker. Allerdings ist unklar was davon dem
Netzteil zuzuschreiben ist und welcher Anteil der elektronischen Last...&lt;/p&gt;
&lt;p&gt;Also nochmal – mit einem Leistungswiderstand (12Ω, 100W). Aber erstmal eine Runde rechnen, damit
der nicht abbrennt:&lt;/p&gt;
&lt;p&gt;30V / 12 Ω = 2.5A&lt;/p&gt;
&lt;p&gt;30V ∙ 2.5A = 75W&lt;/p&gt;
&lt;p&gt;Ok – das geht so. Sicherheitshalber klemmen wir ihn noch auf ein Aluprofil als
Kühlkörper. Gut warm wird er aber trotzdem innerhalb weniger Sekunden.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/power-resistor.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und so schaut das dann aus:&lt;/p&gt;
&lt;p&gt;Ch1 &amp;amp; Ch1:
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-noise-30V-12ohm.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-noise-30V-12ohm.png"&gt;&lt;/p&gt;
&lt;p&gt;Ch3:
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-noise-6V-12ohm.png"&gt;&lt;/p&gt;
&lt;p&gt;Sehr gut – das sieht doch schon viel besser aus! D.h. inklusive der Störungen
die wir über unsere Messleitung auffangen haben wir zwischen 1 und 2.2mV peak
to peak ripple &amp;amp; noise. Damit dürfte das Netzteil in der Spezifikation liegen.&lt;/p&gt;
&lt;p&gt;Schließlich habe ich noch versucht, es besser zu machen und eine differentielle
Messung mit zwei Tastköpfen zu machen, indem ich Ch1 an Minus und Ch2 an Plus
halte und die beiden Kanäle subtrahiere. Es ist mir allerdings nicht gelungen,
das Rauschen auf diese Weise sichtbar zu machen – die Differenz war immer ein
perfekte Nulline...&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/differential-probing.jpg", class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-noise-30V-12ohm-differential.png"&gt;&lt;/p&gt;
&lt;p&gt;Bei der obigen Einstellung dürfte das Rauschen in den großen Ripple-Signalen
untergehen – man beachte den Unterschied in der y-Skalierung zwischen den
Ch1/Ch2 und der Differenzlinie (Faktor 1000). Die Tastköpfe fangen einfach
zuviel Signal auf und der ADC löst bei dieser Empfindlichkeit das Rauschen
nicht mehr auf. Wenn ich aber die Input-Kanäle deutlich empfindlicher
einstelle, dann ist das Signal schnell außerhalb des Messbereichs (Clipping)
und wir bekommen auch wieder keine Differenz. Vermutlich muss ich da irgendwie 
eine Abschirmung basteln.&lt;/p&gt;
&lt;p&gt;D.h an dieser Stelle muss ich mich wohl geschlagen geben – ich bin
messtechnisch (oder intellektuell) nicht adäquat ausgestattet, das besser
zu quantifizieren. Dazu bräuchte ich vermutlich einen sehr rauscharmen
differentiellen Messverstärker mit ausreichender Verstärkung.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Das Netzteil ist sehr intuitiv zu bedienen, bietet wirklich viele Features und
die Performance ist ausgesprochen gut. Programmierung am Gerät und auch die
Fernsteuerung über SCPI klappen problemlos. Ich wollte mich eigentlich über die
fehlende Möglichkeit beklagen die Firmware zu aktualisieren, aber wie oben
beschrieben, ist das nun auch möglich. Das einzige, das ich vermisse ist der
tracking mode – aber vielleicht kommt der ja irgendwann mit einem Firmware
Update.  Zuguterletzt muss man sagen, dass das Handbuch beim Rigol DP832A
deutlich besser ist, als beim UNI-T, aber ich hatte trotzdem keine Probleme
mich zurecht zu finden.&lt;/p&gt;
&lt;p&gt;Alles in allem bin ich sehr zufrieden – ich würde es sofort wieder
kaufen. &lt;/p&gt;
&lt;h1&gt;Update 2023-11-14&lt;/h1&gt;
&lt;p&gt;Es hat eine Weile gedauert, aber inzwischen stellt UNI-T die Firmware
tatsächlich auf ihrer Homepage zum
&lt;a href="https://instruments.uni-trend.com/EU-EN/powersupplies/udp3000s.html"&gt;Download&lt;/a&gt;
zur Verfügung.&lt;/p&gt;
&lt;h1&gt;Update 2024-04-23&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://www.voltlog.com/"&gt;VoltLog&lt;/a&gt; hat nun einen sehr ähnlichen 
&lt;a href="https://www.youtube.com/watch?v=d056TNS9aa8"&gt;Review&lt;/a&gt; des Netzteils auf Youtube
veröffentlicht und im Nachgang auch noch einen &lt;a href="https://www.youtube.com/watch?v=h7XDSfOQJHI"&gt;Teardown&lt;/a&gt;. 
Dort werden auch ein paar Dinge getestet, die nicht im Programm hatte also
lohnt es sich das anzuschauen.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>New lab power supply</title><link href="https://techbotch.org/blog/lab-power-supply/index_en.html" rel="alternate"/><published>2023-06-18T00:00:00+02:00</published><updated>2023-06-18T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-06-18:/blog/lab-power-supply/index_en.html</id><summary type="html">&lt;p&gt;Electronic gadgets need power. And if the device in question doesn't come with
a power supply or it's a repair job and you suspect that the PSU is part of the
problem, then a lab power supply comes into play. I've had a Voltcraft
PS405-pro power supply for ages and …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Electronic gadgets need power. And if the device in question doesn't come with
a power supply or it's a repair job and you suspect that the PSU is part of the
problem, then a lab power supply comes into play. I've had a Voltcraft
PS405-pro power supply for ages and a Manson NSP2050 switching power supply is
also hiding somewhere.  Both are OK, but I felt the urge to treat myself to a
new one that is properly programmable and offers remote control and a better
user experience.&lt;/p&gt;
&lt;p&gt;So I did some homework and found a variety of offers. These made it onto my
shortlist:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rigol DP832 / DP832A&lt;/li&gt;
&lt;li&gt;Siglent SPD3303X / SPD3303X-E&lt;/li&gt;
&lt;li&gt;Owon ODP3033 / ODP3063&lt;/li&gt;
&lt;li&gt;UNI-T UDP3305S / UDP3305S-E&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Siglent and Rigol fall into the "Respectable Chinese Vendors" category, while
Owon is known more as el cheapo supplier (although I found some very positive
reviews of the PSUs mentioned above). UNI-T's reputation seems to be mixed:
Their multimeters are pretty popular but the community doesn't seem to like
UNI-T as well as Rigol or Siglent.  Nevertheless, after hours of studying data
sheets, manuals and reviews, UNI-T's offerings appealed to me most:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Channels 1 and 2 offer 0-32V at 0-5A.  They can be connected in series or
  parallel, easily to get more voltage or higher current.&lt;/li&gt;
&lt;li&gt;Channel 3 is mainly intended for the supply of digital circuits. You get
  1.8V, 2.5V, 3.3V and 5V at the touch of a button, but you can set any value
  between 0 and 6.2V and you get up to 3A.&lt;/li&gt;
&lt;li&gt;"Channel 4" is pure marketing and doesn't really exist: It's a USB-A socket
  that supplies 5V at up to 2A.&lt;/li&gt;
&lt;li&gt;Large color display&lt;/li&gt;
&lt;li&gt;Number pad for entering values quickly&lt;/li&gt;
&lt;li&gt;Versatile programming&lt;/li&gt;
&lt;li&gt;1 mV / 1 mA resolution (or 10 mV / 1mA for S-E model)&lt;/li&gt;
&lt;li&gt;Ethernet, USB, RS232 and a few digital pins&lt;/li&gt;
&lt;li&gt;SCPI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of the competitors offer all of this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Rigol is a lot less powerful and the numeric keypad is awkwardly arranged
  in a circle around the dial - I guess that's supposed to look cool...&lt;/li&gt;
&lt;li&gt;The Siglent has less power and no number pad at all. Ch3 is limited to  a few
  fxed settings. Programming is also less flexible.&lt;/li&gt;
&lt;li&gt;The Owon has slightly more power and a number pad, but is less flexible in
  terms of programming, the channels are arranged in a weird order (3, 1, 2)
  and the display uses different colors for the channels than the color codes
  on the front (at least that's how it appears in the marketing pictures).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nevertheless, I hesitated for quite a while, because there are almost no
reviews about the UNI-T power supply out there. Part of that may be because
it's fairly new to the market, but it would make me feel more comfortable
knowing that people out there have given it a good look. For the contenders
from Rigol or Siglent, there are plenty of reviews on YouTube and in various
blogs – including hacks to upgrade the smaller/cheaper models for free.  For
the Uni-T, I could only find a single, short thread in the
&lt;a href="https://www.eevblog.com/forum/testgear/uni-t-udb3000s-series-udp3305s-udp3000s-e/"&gt;EEVblog&lt;/a&gt;
forum that didn't have much information at the time. I had already considered
jumping in at the deep end and order it without more information as user &lt;em&gt;Self
Bias&lt;/em&gt; posted his rather positive observations. So I ordered with more confidence.&lt;/p&gt;
&lt;p&gt;It arrived two days later:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/front.jpg" class="Large"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/back.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;So let's give it some testing to see if that was a good decision or not.&lt;/p&gt;
&lt;h1&gt;User interface and build quality&lt;/h1&gt;
&lt;p&gt;The device makes a solid impression. The keys are made of rubber but have a
clearly noticeable click to them. The knob clicks nicely and precisely. The display
has glare, but that doesn't really bother me.&lt;/p&gt;
&lt;p&gt;The binding posts have the standard spacing of 19mm (3/4") and the banana plugs
of my test leads firmly fit into the sockets. The display shows all relevant
data in a tidy fashion.&lt;/p&gt;
&lt;p&gt;The various buttons and menus are mostly self-explanatory and apart from a
small spelling mistake ("Templet" instead of "Template") I didn't really notice
any Chinglish.&lt;/p&gt;
&lt;p&gt;The display always indicates whether we are in constant voltage (CV) or
constant current mode (CC). In addition, all three channels have an LED above
the respective sockets, which lights up in green (CV) or red (CC), as is common
on traditional power supplies. I think that's great, because it makes it so
much easier to see when the current limitation takes effect on a channel.&lt;/p&gt;
&lt;p&gt;When channels 1 and 2 are configured to be in parallel or in series, the
display prominently shows a small picture of the appropriate wiring in the
respective configuration. What appears to be missing is a classical tracking
mode in which ch1 and ch2 are tied together and controlled jointly. You can kind
of get that in serial mode if you use all four output sockets but the display
will only show the added voltage and, of course, both voltages are identical in
this mode. I guess a true tracking mode could be added in firmware so maybe
there is hope to get that in the future.&lt;/p&gt;
&lt;p&gt;Common voltages for digital circuits (1.8, 2.5, 3.3 and 5V) are quickly
accessible as presets via a small button for channel 3. But you can still set
any voltage you like in the range 0-6.2V. So it is a fully-fledged channel with
current limitation, etc. – just with a lower maximum voltage/current.&lt;/p&gt;
&lt;p&gt;What I really like is the ability to set voltages or currents via the
number pad instead of fiddling with an encoder wheel. It's so much quicker and
more convenient.&lt;/p&gt;
&lt;p&gt;Here are some screen shots (looks much nicer in the real world than in the
pictures):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-home.jpg", class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-serial.jpg", class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-parallel.jpg", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;All in all, I have to say that the power supply probably has one of the best
user interfaces I've come across on a Chinese device, so far.&lt;/p&gt;
&lt;h1&gt;Fan Noise&lt;/h1&gt;
&lt;p&gt;After switching the device on, the fan whirrs quietly to itself.&lt;/p&gt;
&lt;p&gt;Now let's put some load on it. So we set the power supply to 20V and the
electronic load to 50W. After 10 minutes I switched off the load, but the
power supply fan hardly seemed any louder. That was probably not enough load to
really put stress on it.&lt;/p&gt;
&lt;p&gt;So let's try harder:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connect Ch1 and Ch2 in parallel&lt;/li&gt;
&lt;li&gt;Set 32V on the power supply&lt;/li&gt;
&lt;li&gt;Add 200W load&lt;/li&gt;
&lt;li&gt;wait for 10 minutes&lt;/li&gt;
&lt;li&gt;Turn off the electronic load and check fan noise&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Result: The fan on the electronic load roars. The power supply is still nice
and quiet.&lt;/p&gt;
&lt;h1&gt;Programmability&lt;/h1&gt;
&lt;p&gt;You can program the power supply directly via the user interface. And that's
surprisingly easy. The user interface shows a big table with 2048 rows and each
row contains a set of parameters.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-list.jpg", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;To run a sequence, you just tell the device where in the table to start and how many 
entries to go through.&lt;/p&gt;
&lt;p&gt;Finally, you can store five sets of presets: So if there are certain
configurations that you need more often, just program the desired values for
all channels in one of the presets. E.g. 12V on Ch1, 5V on Ch2 and 3.3V on Ch 3
– including settings for current limits etc.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-presets.jpg", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Oh – and you can define actions that are to be taken under certain conditions – e.g.
warning messages, beeps or turning off a channel upon certain events.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/iface-monitor.jpg", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;That may come in handy for getting notified when things go awry or to shut down
the power at the end of a charging cycle.&lt;/p&gt;
&lt;h1&gt;Software&lt;/h1&gt;
&lt;p&gt;The software that comes with the instrument will only work on windows, of course.
So I installed it on a virtual Windows machine for a quick look but didn't test in 
depth.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/windows-software1.png", class="Large"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/windows-software2.png", class="Large"&gt;&lt;/p&gt;
&lt;p&gt;It seems to be decent, but the installation is very large and takes forever. 
It also seemed to me that the power supply reacts to the software rather sluggishly.
But that that may be due to the overhead from the virtual windows.&lt;/p&gt;
&lt;h1&gt;Remote control&lt;/h1&gt;
&lt;p&gt;When you want to control more complex scenarios it's often easier to write a
script than fiddle with vendor software. The device has three ports you can use
to connect it to a computer: USB, RS232 and ethernet. All three will give you the
capability to send SCPI commands. A programming (SCPI command) manual is
available from the manufacturer's web site.&lt;/p&gt;
&lt;p&gt;We already played with the Windows software above, but I prefer LINUX 
and would love to use Python for scripting. So I looked around and discovered
&lt;a href="https://pyvisa.readthedocs.io/"&gt;PyVISA&lt;/a&gt;. That looks quite promising. So let's 
install it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python -m venv .venv
source .venv/bin/activate
pip install pyvisa
pip install pyvisa-py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now launch an interactive python session and have a look:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import pyvisa
&amp;gt;&amp;gt;&amp;gt; rm = pyvisa.ResourceManager()
&amp;gt;&amp;gt;&amp;gt; rm.list_resources()
(&amp;#39;ASRL/dev/ttyS1::INSTR&amp;#39;, &amp;#39;ASRL/dev/ttyS0::INSTR&amp;#39;, &amp;#39;TCPIP::192.168.0.65::INSTR&amp;#39;, &amp;#39;TCPIP::192.168.0.67::INSTR&amp;#39;)
&amp;gt;&amp;gt;&amp;gt; psu = rm.open_resource(&amp;#39;TCPIP::192.168.0.66::INSTR&amp;#39;)
&amp;gt;&amp;gt;&amp;gt; psu.query(&amp;quot;*IDN?&amp;quot;)
&amp;#39;Uni-Trend,UDP3305S,ADP5499238404,1.06&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;As you can see, the power supply wasn't automatically detected, but it did
respond without a problem once I had figured out it's IP address.&lt;/p&gt;
&lt;p&gt;So let's try a few things:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# select channel 1
psu.query(&amp;quot;:INSTrument:SELE Ch1&amp;quot;)

# Set voltage to 12.5V, 0.7A
psu.query(&amp;quot;:APPL Ch1,12.5,0.7&amp;quot;)

# switch on channel 1
psu.query(&amp;quot;:OUTP:STAT Ch1,on&amp;quot;)

# Set electronic load to 0.2A
# read values
psu.query(&amp;quot;:MEAS:ALL? Ch1&amp;quot;)
#  &amp;#39;12.498,0.198,2.475&amp;#39;

# Set electronic load to 2A
# read values
psu.query(&amp;quot;:MEAS:ALL? Ch1&amp;quot;)
#  &amp;#39;0.054,0.700,0.038&amp;#39;

# switch off channel 1
psu.query(&amp;quot;:OUTP:STAT Ch1,off&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now, that is fun!&lt;/p&gt;
&lt;h1&gt;Firmware&lt;/h1&gt;
&lt;p&gt;The firmware in my device is version 1.06, bootloader 1.03.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/old-firmware.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately, I could not find a firmware update function in the user
interface or the manual.  And there are no firmware files on the UNI-T web site
for the instrument. That's a pitty because I think getting firmware updates for
a $600 power supply isn't asking too much.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update 2023-06-25:&lt;/em&gt; I had contacted UNI-T support with some questions, one of
which was about firmware updates. For quite some time I hadn't heard back from
them so I gave it another try and it turned out that their reply had been
rejected by my email provider's servers for some reason. So a support agent
went through the trouble of tracking me down on LinkedIn. A+ for the effort! So
I eventually got a reply but at first it was a bit sobering: The current
firmware is v1.10 but I would have to send my instrument back to the factory
for an update.  But I didn't give up, immediately and we got into a constructive
conversation – with a great result:&lt;/p&gt;
&lt;p&gt;I got a current &lt;a href="https://25628395.fs1.hubspotusercontent-eu1.net/hubfs/25628395/Instrument%20%20FIRMWARE/UDP3305S%20Update.rar"&gt;firmware
image&lt;/a&gt;
(v1.10) along with instructions to perform the update:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Unpack the &lt;code&gt;*.rar&lt;/code&gt; file to get the firmware image &lt;code&gt;UDP3305S.bin&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Put the image into the root folder of a FAT32 formatted usb thumb drive.
   Do &lt;em&gt;not&lt;/em&gt; change the filename.&lt;/li&gt;
&lt;li&gt;Turn off the power supply.&lt;/li&gt;
&lt;li&gt;Insert the usb drive into the usb port on the &lt;em&gt;back&lt;/em&gt; of the power supply.&lt;/li&gt;
&lt;li&gt;Press and hold the &lt;em&gt;UTILITY&lt;/em&gt; button and turn on the instrument.&lt;/li&gt;
&lt;li&gt;Now the update process starts.&lt;/li&gt;
&lt;li&gt;Once the update has finished turn the supply off and on again.&lt;/li&gt;
&lt;li&gt;Done.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/firmware-update.jpg" class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/firmware-update-success.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;That worked like a charm:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/new-firmware.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Excellent! I did let the support people know that I am very happy with this and
I would be even more excited if this information and firmware files were
available from their web site. According to their reply, UNI-T is planning to
act on this some time in August.  Wouldn't that be cool?&lt;/p&gt;
&lt;h1&gt;Measurement setup&lt;/h1&gt;
&lt;p&gt;Below, I will use an electronic load so that I can test the device at different
currents rather than just look at open-circuit voltages. My electronic load
(East Tester ET5410+) is rather inexpensive but seems to do the job.  It is
important to correctly wire up the setup so that we measure voltages as close
to the power supply as possible. At higher currents, there will be a noticeable
voltage drop – even when using high quality cables. So:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/setup.png", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;When connecting the oscilloscope, we use a proper probe with a BNC adapter and
a BNC to banana plug adapter rather than simple leads in order to minimize
problems with signals flying around the room.&lt;/p&gt;
&lt;h1&gt;Transformer taps&lt;/h1&gt;
&lt;p&gt;In order to prevent wasting too much energy in the voltage regulator, lab power
supplies have multiple taps at different voltages and choose an appropriate one
depending on the set output voltage.  So let's try and find out how many there
are and at which voltages. For that, I started at 0V and slowly cranked up the
voltage until I could hear the telltale click of a relay. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Channels 1 &amp;amp; 2 switch taps at about 5V, 11V, 17.5V and 25V&lt;/li&gt;
&lt;li&gt;Channel 3 apparently uses only one tap.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The exact switching voltages differ depending on where you are coming from. If
you are increasing the voltage, the switch will be at a slightly different point
than when turning down the voltage (hysteresis). And that makes a lot of sense
because you don't want to get your power supply in a situation where it keeps
switching just because you are operating close to a tap voltage.&lt;/p&gt;
&lt;h1&gt;On/Off behaviour&lt;/h1&gt;
&lt;p&gt;First, we'll check if there is any voltage present at the sockets when the
channels are switched off. The above mentioned thread on EEVblog forum says 
there are small negative voltages present. Let's check:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Channel 1: -11mV&lt;/li&gt;
&lt;li&gt;Channel 2: -243mV&lt;/li&gt;
&lt;li&gt;Channel 3: 0mV&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is &lt;em&gt;exactly&lt;/em&gt; what was reported in the forum. Apparently, UNI-T has very 
consistent manufacturing. ;-)&lt;/p&gt;
&lt;p&gt;Apparently, it's not unusual to see something like that in power supplies. I
don't understand why but will not make a fuzz about it.&lt;/p&gt;
&lt;p&gt;Next, we'll check what happens when a channel is turned on. So we'll set a few
different voltages (2.5, 5, 10,20 and 30V for Ch1 &amp;amp; Ch2 and 2, 4, 6V for Ch 3)
and record the voltage trace without any load connected:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-on-no-load.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-on-no-load.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-on-no-load.png"&gt;&lt;/p&gt;
&lt;p&gt;And again with a load of 3A (Ch1/2) or 2A (Ch3):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-on-3A.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-on-3A.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-on-2A.png"&gt;&lt;/p&gt;
&lt;p&gt;I see no overshoot in channels 1 and 2 while there is a little bit of it on
channel 3 at lower voltages. Channels 1 and 2 also show some struggling to get
to the target voltage in some cases. I have no idea what is going on there.
However, I don't know if that is the power supply's fault or if the electronic
load has a part in it.  So I'll repeat the experiment using a power resistor
(12Ω, 100W) instead of the electronic load.&lt;/p&gt;
&lt;p&gt;Ch1 &amp;amp; Ch2:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-on-12ohms.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-on-12ohms.png"&gt;&lt;/p&gt;
&lt;p&gt;Ch3:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-on-12ohms.png"&gt;&lt;/p&gt;
&lt;p&gt;Better, but still not completely smooth.&lt;/p&gt;
&lt;p&gt;After studying the &lt;em&gt;on&lt;/em&gt; behaviour, let's have a quick look at the trace when turning 
off a channel (30V @3A for Ch1&amp;2; 6V @2A for Ch3:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-off-3A.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-off-3A.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-off-2A.png"&gt;&lt;/p&gt;
&lt;p&gt;As expected, that looks pretty boring. Essentially, we are watching a capacitor
discharging.&lt;/p&gt;
&lt;p&gt;Finally, there is a button labeled &lt;em&gt;all on/off&lt;/em&gt; that turns all three channels
on or off, respectively.  But what happens, if some channels are on while
others are off? The PSU does the right thing and will turn all channels off in
that situation.  That is important, because turning everything on, instead may
put connected circuits in danger when you need to turn off everything quickly –
e.g. in order to prevent damage.&lt;/p&gt;
&lt;h1&gt;Load change&lt;/h1&gt;
&lt;p&gt;Next, we'll test how well the supply can handle changing loads. I programmed the
electronic load to alternate between 1A and 4.5A every 2 seconds (transient
mode). The supply is set to 30V. I didn't really see much on the oscilloscope so
I switched to the best multimeter I have (Siglent SDM3065X; aperture 0.5 PLC).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-load-change.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-load-change.png"&gt;&lt;/p&gt;
&lt;p&gt;That looks really good to me. The supply manages to keep the voltage remarkably
stable.&lt;/p&gt;
&lt;p&gt;So repeat that for channel 3(6V, 250mA/2.5A):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-load-change.png"&gt;&lt;/p&gt;
&lt;p&gt;Again – no complaints.&lt;/p&gt;
&lt;h1&gt;Constant current mode&lt;/h1&gt;
&lt;p&gt;Good power supplies have a current limiting mode so that you can set a
maximum current and the device will quickly lower the output voltage when the
limit is exceeded until we are back at the current limit. That way, we can
protect our circuit from over current damage in case it is faulty and tries to
draw too much power. The faster our power supply manages to get back to normal,
the better.&lt;/p&gt;
&lt;p&gt;For testing this feature, I set the current limit to a certain value and ran it
at a low current (load 1) before suddenly increasing the load above the current
limit (load 2). On the oscilloscope, we observe the voltage (Ch1, yellow) and
the current (Ch2, magenta, via a Hantek CC-65 current probe).&lt;/p&gt;
&lt;p&gt;This is what our setup looks like:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/cc-setup.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;We are using these parameters:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Channel&lt;/th&gt;
&lt;th&gt;U [V]&lt;/th&gt;
&lt;th&gt;I Limit [A]&lt;/th&gt;
&lt;th&gt;Load 1 [A]&lt;/th&gt;
&lt;th&gt;Load 2 [A]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 &amp;amp; 2&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;0.500&lt;/td&gt;
&lt;td&gt;0.100&lt;/td&gt;
&lt;td&gt;1.1A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 &amp;amp; 2&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;0.500&lt;/td&gt;
&lt;td&gt;0.100&lt;/td&gt;
&lt;td&gt;1.1A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;0.500&lt;/td&gt;
&lt;td&gt;0.100&lt;/td&gt;
&lt;td&gt;1.1A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;And here comes Channel 1:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-cc-30V.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-cc-15V.png"&gt;&lt;/p&gt;
&lt;p&gt;Channel 2:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-cc-30V.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-cc-15V.png"&gt;&lt;/p&gt;
&lt;p&gt;And Channel 3:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-cc-6V.png"&gt;&lt;/p&gt;
&lt;p&gt;So at 30V, it took about 30ms between crossing the current limit and getting
back to that level after an overshoot of up to about 1A. At 15V, at took ≈20ms. 
Channel 3 is faster, yet at 6V.&lt;/p&gt;
&lt;p&gt;While I really like looking at such plots, we will top it all off with a
trivial, yet relevant experiment: We will torture a red LED.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/LED.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;We'll connect it to the supply w/o a series resistor and test it, first. At
20mA it glows nice and bright.&lt;/p&gt;
&lt;p&gt;Now we set the current limiter to 20mA and the voltage to full throttle (30V). Turn
on the channel and see what happens. The power supply immediately goes into CC mode
and the LED glows nicely at 1.9V, 20mA.&lt;/p&gt;
&lt;p&gt;Now let's stress test it: Turn if off again, and on and off, and ...
until the LED dies or I don't feel like trying any longer.
After 100 cycles I gave up and the LED looked unharmed.&lt;/p&gt;
&lt;h1&gt;Over current protection&lt;/h1&gt;
&lt;p&gt;In addition to current limiting, the device has an over current protection mode
in which it will inactivate the channel after the maximum current was exceeded.
To test it, we will use the same setup as above and set both limits to 500mA.&lt;/p&gt;
&lt;p&gt;And here is what happens:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-ocp-30V.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-ocp-15V.png"&gt;&lt;/p&gt;
&lt;p&gt;First, we see the same current limiting response as above. But about 90ms after
the current reached the limit, the channel is turned off entirely.&lt;/p&gt;
&lt;p&gt;I'll skip testing Ch2 and Ch3 on this one.&lt;/p&gt;
&lt;h1&gt;Setting and readback accuracy&lt;/h1&gt;
&lt;p&gt;In this section, we will explore how closely the voltage and current that we
set corresponds to the actual output. We will also test the accuracy of the
values that the power supply reports back to us.&lt;/p&gt;
&lt;p&gt;The data sheet says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Programming accuracy&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Voltage: ±(0.03%+10mV)&lt;/p&gt;
&lt;p&gt;Current: ±(0.2%+5mA)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Readback accuracy&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Voltage: ±(0.03%+10mV)&lt;/p&gt;
&lt;p&gt;Current: ±(0.15%+5mA)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Voltage&lt;/h2&gt;
&lt;p&gt;For this experiment, we will set various different voltages and loads (ET5410A+)
without a current limit. I am using a new Siglent SDM3065X multimeter to
measure the actual output.  As this is a pretty precise measurement, I turned
on all instruments involved and allowed them to sit and equilibrate for about
an hour at 22.2 °C (Fluke 87V with a k-type probe).&lt;/p&gt;
&lt;p&gt;Here comes my protocol:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Channel 1 &amp;amp; 2:&lt;ul&gt;
&lt;li&gt;Voltage: 1 - 30V in 1V steps&lt;/li&gt;
&lt;li&gt;Current limit: 5.2A&lt;/li&gt;
&lt;li&gt;Electronic load: 0, 1, 2.5, 5A&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Channel 3:&lt;ul&gt;
&lt;li&gt;Voltage: 1 - 6V in 1V steps&lt;/li&gt;
&lt;li&gt;Current limit: 3.2A&lt;/li&gt;
&lt;li&gt;Electronic load: 0, 0.25, 1.5, 3A&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now, we plot the deviation (in mV) of the set/readback voltages (&lt;code&gt;V.set&lt;/code&gt; /
&lt;code&gt;V.psu&lt;/code&gt;) against the measured voltage (&lt;code&gt;V.dmm&lt;/code&gt;). The green lines represent the
specification limits and the dots are color coded by the current reported by
the PSU (&lt;code&gt;A.psu&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/set_accuracy_deviation.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/readback_accuracy_deviation.png"&gt;&lt;/p&gt;
&lt;p&gt;Great – all data points are well within spec.&lt;/p&gt;
&lt;p&gt;And out of curiosity, we also have a look at how much &lt;code&gt;V.set&lt;/code&gt; and &lt;code&gt;V.psu&lt;/code&gt; differ
in our little data set:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/set_rb_histogram.png", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Marginally.&lt;/p&gt;
&lt;h2&gt;Current&lt;/h2&gt;
&lt;p&gt;In order to analyze current accuracy, we will take measurements at various
voltage/current settings while setting the electronic load to 6A so that it
will always try to consume more power than the limit allows, thus putting the
PSU into cc mode. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Channel 1 &amp;amp; 2:&lt;ul&gt;
&lt;li&gt;Voltage: 5, 10, 20, 30v&lt;/li&gt;
&lt;li&gt;Current: 0.5, 1, 2.5, 5A&lt;/li&gt;
&lt;li&gt;Electronic load: 6A&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Channel 3:&lt;ul&gt;
&lt;li&gt;Voltage 2, 4, 6V&lt;/li&gt;
&lt;li&gt;Current: 0.5, 1, 2, 3A&lt;/li&gt;
&lt;li&gt;Electronic load: 6A&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And this is what the data looks like:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/setA_accuracy_deviation.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/readbackA_accuracy_deviation.png"&gt;&lt;/p&gt;
&lt;p&gt;Everything is well within the specified limits. There seems to be a weird
outlier behaviour for Ch 3 at 500mA – no idea what may cause that. But although
strange its in spec.&lt;/p&gt;
&lt;h1&gt;Ripple &amp;amp; Noise&lt;/h1&gt;
&lt;p&gt;Good power supplies deliver very "clean" voltage and current – i.e. there is
very little AC on the DC. Linear PSUs are typically pretty good while switch
mode supplies often struggle in this department.&lt;/p&gt;
&lt;p&gt;The term &lt;em&gt;Ripple&lt;/em&gt; refers to the periodic AC signal that originates from the
50/60Hz line frequency (or the internal switching frequency in case of a
switching supply). &lt;em&gt;Noise&lt;/em&gt; is all the remaining junk that comes on top of it.&lt;/p&gt;
&lt;p&gt;So measuring that sounds easy enough – just connect some wires to the PSU and
connect them to your oscilloscope. In reality, this is a pretty tricky
measurement to get right, because your leads or even scope probes will happily
act as antennas and ruin your measurement. Dave Jones has a pretty good
&lt;a href="https://www.youtube.com/watch?v=Edel3eduRj4"&gt;video&lt;/a&gt; on the topic.&lt;/p&gt;
&lt;p&gt;The data sheet says: : "&amp;lt;350μVrms/2mVpp(5Hz~1MHz)".  That is a bit unusual, as
these values are typically given at &amp;lt;20MHz – but well.&lt;/p&gt;
&lt;p&gt;So let's try and take some measurements. Crank the sensitivity all the way
up – on my scope that means 500µV/div. Without connecting to anything but the
bare probe I get this:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/oscilloscope-noise.png"&gt;&lt;/p&gt;
&lt;p&gt;Not good. Apparently my probe is enough of an antenna to pick up quite some
ripple and noise out of thin air. And, of course, the scope itself also has
some noise. All in all we already have 2mVpp which is the spec limit of the
PSU...  So I connected a BNC-adapter to the probe and plugged that into a BNC
to Banana adapter which is then plugged into the scope. If we are lucky, that
has enough shielding to get rid of most of the crap.&lt;/p&gt;
&lt;p&gt;Now we set the scope to AC coupling and turn on the bandwidth limiter (20MHz).  &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/probe-adapter.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;That worked surprisingly well:&lt;/p&gt;
&lt;p&gt;Ch1 &amp;amp; Ch1:
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-noise-30V-no-load.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-noise-30V-no-load.png"&gt;&lt;/p&gt;
&lt;p&gt;Ch3:
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-noise-6V-no-load.png"&gt;&lt;/p&gt;
&lt;p&gt;And again, this time with 1A load on it:&lt;/p&gt;
&lt;p&gt;Ch1 &amp;amp; Ch1:
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-noise-30V-1A.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-noise-30V-1A.png"&gt;&lt;/p&gt;
&lt;p&gt;Ch3 (I had to lower the sensitivity to capture all of it, here): 
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-noise-6V-1A.png"&gt;&lt;/p&gt;
&lt;p&gt;Wow – quite a bit noisier than before. But maybe that is due to the electronic load?
To sort that out, we'll try again – with a load resistor (12Ω, 100W). But first let's
do some math so we don't blow up the resistor:&lt;/p&gt;
&lt;p&gt;30V / 12 Ω = 2.5A&lt;/p&gt;
&lt;p&gt;30V ∙ 2.5A = 75W&lt;/p&gt;
&lt;p&gt;Ok – that's fine. I clamped the resistor to a bit of aluminum extrusion as a
heat sink, but it still gets really hot in seconds.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/power-resistor.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Here comes the result:&lt;/p&gt;
&lt;p&gt;Ch1 &amp;amp; Ch1:
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-noise-30V-12ohm.png"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch2-noise-30V-12ohm.png"&gt;&lt;/p&gt;
&lt;p&gt;Ch3:
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch3-noise-6V-12ohm.png"&gt;&lt;/p&gt;
&lt;p&gt;Not bad at all! Overall we get somewhere between 1 and 2.2mV
peak-to-peak.  Given that the scope and probe contribute to the noise, I would
say the PSU is in spec.&lt;/p&gt;
&lt;p&gt;Finally, I tried to crank up my technique a bit and do a differential
measurement using two scope probes – one connected to the positive and the
other to the negative terminal of the supply. In theory, I can then subtract
the channels to get a good ripple&amp;amp;noise signal without the common mode stuff.
However, I couldn't make that work. The difference line was always a perfect
zero line.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/lab-power-supply/differential-probing.jpg", class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/lab-power-supply/ch1-noise-30V-12ohm-differential.png"&gt;&lt;/p&gt;
&lt;p&gt;At the settings above, ripple&amp;amp;noise are drowning in the huge signals. Note the
factor 1000 difference in sensitivity between Ch1/Ch2 and the difference trace.
The probes just receive too much crap out of thin air and the adc simply
doesn't resolve the noise at these settings. Increasing sensitivity on the
channels doesn't help either, because then they go off the screen (clipping)
and there is nothing left for the math function to work with. Maybe I can bodge
together some kind of shielding, later.&lt;/p&gt;
&lt;p&gt;So at this point I give up and admit that I am not sufficiently equipped (or
knowledgable) to really quantify ripple &amp;amp; noise of the supply any better.
I guess I'd need a really low noise differential amplifier...&lt;/p&gt;
&lt;h1&gt;Verdict&lt;/h1&gt;
&lt;p&gt;The power supply is easy to operate and has many useful features. All aspects
of performance that I tested look really good. The PSU is easy to program via
buttons and menus and remote control via SCPI was easy to set up. I was going
to complain about the lack of firmware updates but as I said above that has
been fixed. It would be nice if a future firmware update added tracking mode to
the feature list. And compared to the Rigol DP832A, the manual of the UNI-T
device is not that great but I managed to figure everything out without much
problems.&lt;/p&gt;
&lt;p&gt;Overall I am very happy with the power supply and would buy it again.&lt;/p&gt;
&lt;h1&gt;Update 2023-11-14&lt;/h1&gt;
&lt;p&gt;It took a while, but now UNI-T are providing the firmware for
&lt;a href="https://instruments.uni-trend.com/EU-EN/powersupplies/udp3000s.html"&gt;download&lt;/a&gt;
on their homepage.&lt;/p&gt;
&lt;h1&gt;Update 2024-04-23&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://www.voltlog.com/"&gt;VoltLog&lt;/a&gt; hs published a very similar
&lt;a href="https://www.youtube.com/watch?v=d056TNS9aa8"&gt;review&lt;/a&gt; of the PSU on Youtube.
He also added a &lt;a href="https://www.youtube.com/watch?v=h7XDSfOQJHI"&gt;Teardown&lt;/a&gt; video
briefly after that. He does touch a few thing I did not include so it's worth watching.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Nokia Phone Batterietausch</title><link href="https://techbotch.org/blog/nokia-phone-battery-replacement/index.html" rel="alternate"/><published>2023-06-15T00:00:00+02:00</published><updated>2023-06-15T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-06-15:/blog/nokia-phone-battery-replacement/index.html</id><summary type="html">&lt;p&gt;Moderne Handys gelten ja eigentlich als mehr oder weniger unreparierbar. Ganz
stimmt das aber nicht.  Zwar sind die meisten Geräte heute verklebt und nicht
verschraubt, aber wenn man das Handy mit Heißluft oder einem Wärmepad (70-80°C)
erwärmt, lässt sich oft die Rückwand entfernen und das eine oder andere
tauschen …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Moderne Handys gelten ja eigentlich als mehr oder weniger unreparierbar. Ganz
stimmt das aber nicht.  Zwar sind die meisten Geräte heute verklebt und nicht
verschraubt, aber wenn man das Handy mit Heißluft oder einem Wärmepad (70-80°C)
erwärmt, lässt sich oft die Rückwand entfernen und das eine oder andere
tauschen oder reparieren.&lt;/p&gt;
&lt;p&gt;Konkret habe ich hier ein &lt;em&gt;Nokia 3.4&lt;/em&gt; Smartphone dessen Akku sich sehr
beeindruckend aufgebläht hat. Er sieht nun aus wie ein Kopfkissen für
Meerschweinchen und hat dabei den hinteren Deckel des Telefons schon weitgehend
rausgedrückt, so dass ich nur kurz mit dem Heißluftgebläse dran musste, um die
Rückwand komplett abzukriegen. Den Akku habe ich zügig entsorgt, denn ich hatte
keine Lust auf ein heimisches Lithium-Akku-Feuerchen. Hier der Patient im
geöffneten Zustand und der Ersatzakku, den ich für 20€ bei einem online Akku
Shop mittelprächtiger Seriosität besorgt hatte, hat sich auch schon
hinzugesellt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/nokia-phone-battery-replacement/phone-open-with-battery.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Man kann noch ganz gut das Flachbandkabel des alten Akkus erkennen (das schmale
dunkle) – das hatte ich zuvor abgeschnitten, um den Akku entsorgen zu können. &lt;/p&gt;
&lt;p&gt;Als nächstes müssen ein kleiner Plastikrahmen und ein Handvoll kleiner
Schräubchen raus, um an den Stecker des Kabels zu kommen. Dann Stecker raus,
neue Batterie rein und anschließen und das Rähmchen wieder rein. Abdeckung
drauf und alle Schräubchen anziehen.&lt;/p&gt;
&lt;p&gt;Zuletzt noch den alten Kleber wegrubbeln und die Rückwand wieder etwas in Form
bringen, denn sie hatte ein bisschen gelitten, als der alte Akku "explodiert"
ist.  Dann neuen Kleber dünn auf den Rahmen geben und die Rückwand wieder
installieren. Das Ganze mit ein paar Federklemmen sichern und den Kleber in
Ruhe fest werden lassen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/nokia-phone-battery-replacement/clamped.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Nach ein paar Stunden alle Klemmen wieder runter und das Telefon einschalten.
Und schon funktioniert es wieder – cool.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Wärmebildkamera</title><link href="https://techbotch.org/blog/thermal%20camera/index.html" rel="alternate"/><published>2023-05-05T00:00:00+02:00</published><updated>2023-05-05T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-05-05:/blog/thermal camera/index.html</id><summary type="html">&lt;p&gt;Ich wollte schon immer eine Thermokamera (aka Wärmebildkamera) haben! Z.B. um
Probleme in elektronischen Schaltungen zu finden, oder einfach mal zu schauen,
wo das Haus im Winter am meisten Wärme verliert. Flir baut sehr schöne solche
Geräte und eigentlich wollte ich immer eine Flir E4 Kamera haben. Die hat …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich wollte schon immer eine Thermokamera (aka Wärmebildkamera) haben! Z.B. um
Probleme in elektronischen Schaltungen zu finden, oder einfach mal zu schauen,
wo das Haus im Winter am meisten Wärme verliert. Flir baut sehr schöne solche
Geräte und eigentlich wollte ich immer eine Flir E4 Kamera haben. Die hat
nur eine Auflösung von 80x60, was einem nicht gerade die Haare nach hinten
föhnt. Aber: es gibt einen Hack, mit dem man sie umsonst in eine Flir E8
verwandelt, so dass man wie von Geisterhand eine Auflösung von 320x240 bekommt.&lt;/p&gt;
&lt;p&gt;Aber leider kostet auch die E4 schon weit über 1000€ und das ist mir für eine
Spielerei entschieden zu teuer. Also habe ich seit langem immer wieder mal
geschaut, was der freundliche Chinese von Nebenan so im Angebot hat. Und
kürzlich bin ich dann auf Aliexpress einen guten Deal für eine &lt;em&gt;A-BF RX-500&lt;/em&gt;
Thermokamera gestoßen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;256x192 Pixel Auflösung&lt;/li&gt;
&lt;li&gt;-20 – 500 °C in zwei separaten Temperaturbereichen ( -20-120 °C und 120-500°C)&lt;/li&gt;
&lt;li&gt;3.2" Display&lt;/li&gt;
&lt;li&gt;etwas mehr als 200€&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Da konnte ich nicht widerstehen. Ca. 14 Tage später war sie da.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/thermal camera/rx-500-1.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/thermal camera/rx-500-2.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/thermal camera/rx-500-3.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Funktionen&lt;/h1&gt;
&lt;p&gt;Anhand der Beschreibung war nicht so klar, was die Kamera alles kann. Also hier
zunächst eine knappe Übersicht:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Overlay des normalen Kamerabildes. Einstellbar in mehreren Schritten von 100% IR bis
  100% normales Bild&lt;/li&gt;
&lt;li&gt;Manuelle Parallaxenkorrektur&lt;/li&gt;
&lt;li&gt;Bilder oder Videos speichern (4GB interner Speicher)&lt;/li&gt;
&lt;li&gt;Am PC meldet sie sich als USB storage device und man kann so die Bilder
  herunterladen.&lt;/li&gt;
&lt;li&gt;Es gibt fünf verschiedene Farbskalen (drei bunte und zwei schwarzweiße)&lt;/li&gt;
&lt;li&gt;Automatische Skalierung der Farbskala (min/max)&lt;/li&gt;
&lt;li&gt;Cursor-Marken zeigen den wärmsten und kältesten Punkt an (abschaltbar)&lt;/li&gt;
&lt;li&gt;Emmissionsfaktor ε einstellbar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Was es nicht hat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keine fixe manuelle Einstellung der Skalierung (min/max Bereich)&lt;/li&gt;
&lt;li&gt;Kein Stativadapter&lt;/li&gt;
&lt;li&gt;Kein SD-Kartenslot&lt;/li&gt;
&lt;li&gt;Keine Funktion als USB-Cam&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Damit kann ich aber gut leben. Höchstens eine manuelle min/max Skalierung hätte
ich noch ganz gut gefunden. Aber für den Preis bin ich 100% zufrieden.&lt;/p&gt;
&lt;p&gt;Nach der Betätigung des On-Knopfes dauert es gut 15 Sekunden, bis die Kamera
bereit ist. Ab da reagiert sie flott und das Bild sieht ziemlich sauber aus und
reagiert angenehm zügig.&lt;/p&gt;
&lt;p&gt;Nun ist es an der Zeit das gute Stück mal auszuprobieren und die gängigsten
Anwendungsgebiete zu erkunden.&lt;/p&gt;
&lt;h1&gt;Psychedelische Portraits&lt;/h1&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/thermal camera/self-portrait.jpg" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Oder notfalls auch Landschaftsaufnahmen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/thermal camera/landscape.jpg" class="Small"&gt;&lt;/p&gt;
&lt;h1&gt;Haustierdämmung&lt;/h1&gt;
&lt;p&gt;Hunde und Katzen unterscheiden sich in vielen Punkten. Einer davon ist die
Fellstruktur – Katzen sind irgendwie flauschiger und wirken besser isoliert. Also
sollten sie eigentlich weniger oder geringere Wärmebrücken aufweisen, als Hunde. 
Mein innerer Energieberater kommt also nicht umhin, das empirisch zu untersuchen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/thermal camera/dog.jpg" class="Small"&gt;
&lt;img src="https://techbotch.org/blog/thermal camera/cat.jpg" class="Small"&gt;
&lt;img src="https://techbotch.org/blog/thermal camera/cat-and-dog.jpg" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Wie man klar erkennen kann, befindet sich die Katze bereits auf modernstem
Energieeffizienz-Niveau, während der Hund dringend gedämmt werden muss:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/thermal camera/dog-insulated.jpg" class="Small"&gt;&lt;/p&gt;
&lt;h1&gt;Haustierforensik&lt;/h1&gt;
&lt;p&gt;Wer einen Hund hat kennt die Frage: Lag der Köter etwa wieder heimlich auf dem Sofa?
Wenn man reinkommt liegt er dort natürlich nicht, aber man wird das Gefühl nicht los,
dass er vor vier Sekunden doch dort lag und uns verarscht. Und nun können wir
ihn überführen oder seine Unschuld beweisen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/thermal camera/dog-sofa.jpg" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Wusste ich es doch! Das Mistvieh lag die ganze Zeit da!!!&lt;/p&gt;
&lt;h1&gt;Geisterjagd&lt;/h1&gt;
&lt;p&gt;Irgendwie hatte ich das Gefühl, dass da jemand im Zimmer steht. Sehen kann ich
ihn nicht, aber ich habe Evidenz:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/thermal camera/footprints.jpg" class="Small"&gt;&lt;/p&gt;
&lt;h1&gt;Pfannentest&lt;/h1&gt;
&lt;p&gt;Jeder Koch-Nerd kennt die nagende Ungewissheit: erwärmt sich mein Pfannenboden
wirklich gleichmäßig, oder habe ich minderwertiges Kochgeschirr?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/thermal camera/skillet1.jpg" class="Small"&gt;
&lt;img src="https://techbotch.org/blog/thermal camera/skillet2.jpg" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Ich denke das ist OK.&lt;/p&gt;
&lt;h1&gt;Energiefresser identifizieren&lt;/h1&gt;
&lt;p&gt;Viele Geräte verbrauchen im Standby zu viel Strom und erwärmen sich. Z.B. dieses
DECT-Telefon:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/thermal camera/phone.jpg" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Das Handy, das hier im Vordergrund liegt bleibt dagegen vergleichsweise kühl:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/thermal camera/phones.jpg" class="Small"&gt;&lt;/p&gt;
&lt;h1&gt;Fehlersuche in elektronischen Schaltungen&lt;/h1&gt;
&lt;p&gt;Die Kamera hätte mir z.B. bei der Reparatur der
&lt;a href="https://techbotch.org/blog/fridge-repair/index.html"&gt;Getränkekühlschranksteuerung&lt;/a&gt; sehr
geholfen. Mit etwas Glück wäre vielleicht ein defektes Bauteil, wie der
SMPS-Steuer-Chip unter Strom heiß geworden und ich hätte das dann sehen können,
ohne mit den Pfoten an die Platine unter Strom fassen zu müssen.&lt;/p&gt;
&lt;p&gt;Ich hab grade keine geeignete defekte Platine da, aber auch bei einer brav
funktionierenden Schaltung bekommt man einen Eindruck. Z.B. bei diesem alten
Raspberry Pi:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/thermal camera/raspi.jpg" class="Small"&gt;&lt;/p&gt;
&lt;p&gt;Und das ist natürlich nicht auf Elektronik beschränkt. Sowas ist z.B. auch bei
Motoren, oder anderen mechanischen Geräten interessant – wo heiß, da viel
Reibung. Und natürlich sind auch Heizungsrohre oder Sicherungskästen
interessante Ziele.&lt;/p&gt;
&lt;h1&gt;Haus Energie Untersuchung&lt;/h1&gt;
&lt;p&gt;Laaangweilig! Das weiß jeder und deshalb erzähle ich es hier nicht.&lt;/p&gt;
&lt;h1&gt;Cat content&lt;/h1&gt;
&lt;video src="https://techbotch.org/blog/thermal camera/cat-content.mp4" controls class="Small"&gt;&lt;/video&gt;

&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Ich bin rundum zufrieden. Das war eine gute Anschaffung. Und sie wird sich mit
obigen Anwendungen sicher schnell amortisieren. Habe ich jedenfalls meiner Frau
gesagt.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Mit einem UT8803E Multimeter reden</title><link href="https://techbotch.org/blog/ut8803e-bench-meter/index.html" rel="alternate"/><published>2023-04-02T00:00:00+02:00</published><updated>2023-04-02T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-04-02:/blog/ut8803e-bench-meter/index.html</id><summary type="html">&lt;p&gt;In meiner Sammlung von Messgeräten findet sich unter anderem ein Uni-T UT8803E
Tischmultimeter. Aktuell ist es so um die 160€ zu haben und bietet 6000 counts
(3 5/6 Stellen) Präzision – also reden wir hier eher vom unteren Ende der
Preis-/Qualitätsskala und in online Foren sollte man lieber nicht …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In meiner Sammlung von Messgeräten findet sich unter anderem ein Uni-T UT8803E
Tischmultimeter. Aktuell ist es so um die 160€ zu haben und bietet 6000 counts
(3 5/6 Stellen) Präzision – also reden wir hier eher vom unteren Ende der
Preis-/Qualitätsskala und in online Foren sollte man lieber nicht zugeben, dass
man dieses Instrument besitzt, weil die Klugscheißer sonst in Horden über einen
herfallen, weil ein gebrauchtes Agilent oder Fluke Gerät natürlich bei weitem
die bessere Wahl sei, wie jeder Nicht-Idiot zweifelsfrei erkenne könne.&lt;/p&gt;
&lt;p&gt;Ich mag es dennoch ganz gern. Es hat ein schönes großes helles Display, misst
so ziemlich alles, was ich in meinen Projekten so brauche und hat eigentlich
ganz passable Messbereiche. Für den günstigen Preis gibt es leider keine
Logging Funktion, was schon manchmal praktisch wäre. Aber immerhin hat es eine
USB-Schnittstelle über die man dann extern loggen kann. Aber die mitgelieferte
Software ist, wie so oft, nur für Windows tauglich und auch nicht gerade auf der
Höhe des User Experience Designs:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ut8803e-bench-meter/windows-software.png"/&gt;&lt;/p&gt;
&lt;p&gt;Aber sie tut was sie soll und gibt uns Hinweise darauf, was man an Daten
erwarten darf und welche Funktionen man fernsteuern kann. Und es sieht so aus,
als könne man alle Daten über USB empfangen und auch alle Funktionen per Software
steuern. Sehr gut!&lt;/p&gt;
&lt;h1&gt;Protokollerkundung&lt;/h1&gt;
&lt;p&gt;Jetzt müssen wir nur noch das Protokoll herausfinden. Der Form halber habe ich beim 
UNI-T Support angefragt, aber erwartungsgemäß keine Antwort bekommen. Also selber 
herausfinden – Gerät einschalten, USB-Kabel rein und mal schauen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ lsusb
[...]
Bus 006 Device 008: ID 10c4:ea80 Silicon Labs CP2110 HID UART Bridge
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Da ist es. Ich hatte eher auf einen normalen USB-UART Chip gehofft – sowas wie
ein CP2102 oder PL2303HX oder so. Aber gut –
&lt;a href="https://en.wikipedia.org/wiki/USB_human_interface_device_class"&gt;HID&lt;/a&gt; also.
Wie man sieht findet sich unser Multimeter an Bus 6 und hat die Gerätenummer 8
bekommen.  Achtung: das müsst Ihr jedes mal überprüfen wenn das Gerät z.B. neu
verbunden wurde, weil sich die Zahlen fröhlich ändern, je nachdem an welchem
USB-Port Ihr es einsteckt und welche anderen Geräte zuvor bereits verbunden
wurden. Also nicht wundern, wenn auch im Laufe meines Posts immer wieder mal
unterschiedliche Bus und Device Numbers vorkommen sollten...&lt;/p&gt;
&lt;p&gt;Vielleicht hat ja jemand schon was geeignetes programmiert? Eine Google-Suche
nach Begriffen wie "UT8803E protocol", "UT8803E Linux" oder "UT8803E Python"
war unergiebig. Also mal direkt auf Github versuchen – da findet sich mit dem
Suchbegriff "UT8803E" immerhin dies:
&lt;a href="https://github.com/hskim7639/UNI-T"&gt;hskim7639/UNI-T&lt;/a&gt;. Das klingt sehr gut!
Leider scheint das eher work in progress zu sein und verwendet zudem
&lt;a href="https://pypi.org/project/pywinusb/"&gt;pywinusb&lt;/a&gt;, das wie der Name schon sagt, nur
für Windows ist.  Also schauen wir uns das mal selber an und verwenden ggf.
Erkenntnisse aus dem gefunden Code..&lt;/p&gt;
&lt;p&gt;Als erstes wollen wir mal prüfen, ob das Instrument von selber Daten sendet,
oder ob wir dazu erst irgendeinen Befehl senden müssen. Also bauen wir ein
kleines Python Script. Aber wie spricht man so ein HID Device an? Grundsätzlich
gibt es die  &lt;a href="https://pypi.org/project/hid/"&gt;hid&lt;/a&gt; library. Alternativ existiert
auch eine für den spezifischen Chip:
&lt;a href="https://pypi.org/project/pycp2110/"&gt;pycp2110&lt;/a&gt;. Aber am erfreutesten war ich
als ich sah, dass das auch von der
&lt;a href="https://pypi.org/project/pyserial/"&gt;pyserial&lt;/a&gt; library unterstützt wird. Damit
das funktioniert müsst Ihr noch sicherstellen, dass auf dem System auch
&lt;code&gt;libhidapi-hidraw0&lt;/code&gt; installiert ist. Und so sieht unser Skript aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;#! /bin/env python3
import serial

with serial.serial_for_url(&amp;quot;cp2110://0006:0008:00&amp;quot;) as iface:
    while True:
        dat = iface.read(100)
        print(dat.hex())
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Achtung: &lt;code&gt;serial_for_url&lt;/code&gt; nimmt es mit dem Format sehr genau. D.h. die Anzahl
der Stellen muss genau so sein, wie im obigen Code.&lt;/p&gt;
&lt;p&gt;Und ausprobieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ./ut8803e.py
ababcd120201312b302e303030303030303c30300433abcd120201312b302e303030303030303c30300433abcd120201312b302e303030303030303c30300433abcd120201312b302e303030303030303c30300433abcd120201312b302e30303030303030
3c30300433abcd120201312b302e303030303030303c30300433abcd120201312b302e303030303030303c30300433abcd120201312b302e303030303030303c30300433abcd120201312b302e303030303030303c30300433abcd120201312b302e3030
30303030303c30300433abcd120201312b302e303030303030303c30300433abcd120201312b302e303030303030303c30300433abcd120201312b302e303030303030303c30300433abcd120201312b302e303030303030303c30300433abcd12020131
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sehr gut – es kommen von selber Daten. Das ist doch schon mal eine gute Sache!
Bei genauerer Betrachtung fällt auf, dass es bestimmte Dinge gibt, die sich
immer wiederholen. Z.B. dieser Block &lt;code&gt;2e30303030&lt;/code&gt; oder auch die Bytefolge
&lt;code&gt;abcd1202&lt;/code&gt;. Aber wie groß ist ein einzelner Record? Ausprobieren: Wir lesen
einfach mal nicht 100 byte auf einmal, sondern erstmal nur 16:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ./ut8803e.py
ab3c0433abcd120201312b302e303030
303030303c30300433abcd120201312b30
2e303030303030303c30300433abcd1202
01312b302e303030303030303c30300433
abcd120201312b302e30303030303030
3c30300433abcd120201312b302e3030
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nee – das war zu wenig. Also mal 17, 18, 19, und 21 etc. probieren und siehe
da – bei Record Länge 21 bekommen wir dies:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ./ut8803e.py
abcd120201312b302e303030303030303c30300433abcd120201312b302e303030303030303c30300433abcd120201312b302e303030303030303c30300433ab
abcd120201312b302e303030303030303c30300433
abcd120201312b302e303030303030303c30300433
abcd120201312b302e303030303030303c30300433
abcd120201312b302e303030303030303c30300433
abcd120201312b302e303030303030303c30300433
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Beim ersten &lt;code&gt;read()&lt;/code&gt; haben wir mehr bekommen als bestellt (wird da vielleicht
erst irgendein Buffer geleert?), aber danach sieht das doch schön regelmäßig
aus! Also gehen wir mal davon aus, dass wir die korrekte Länge des Records
ermittelt haben. Aber irgendwie ist die Frage, ob wir hier wirklich einen
kompletten Record erfassen, oder ob die Grenze vielleicht mitten in der Zeile
liegt und wir so quasi an der falschen Stelle schneiden, denn ich sehe hier
z.B. kein carriage return oder ähnliches. &lt;/p&gt;
&lt;p&gt;Auch stellt sich die Frage, was die ganzen Bytes bedeuten. Zunächst habe ich
dazu den Code in dem oben genannten github repo gelesen, aber so richtig
erschöpfend war das auch nicht beschrieben oder implementiert. Immerhin konnte
ich direkt bei UNI-T ein &lt;em&gt;UT8000E Programming Manual.pdf&lt;/em&gt; finden. Darin finden
sich zumindest Hinweise wie man bestimmte Bits und Bytes interpretieren muss,
auch wenn das dort beschriebene Datenformat offenbar das einer eigenen Library
ist und nicht das des eigentlichen Protokolls. Und natürlich konnte ich die im
Dokument erwähnte &lt;em&gt;UCI library&lt;/em&gt; nirgends finden.&lt;/p&gt;
&lt;h2&gt;Messwert finden&lt;/h2&gt;
&lt;p&gt;In unserem obigen Versuch waren alle Records identisch. Das ist auch nicht
verwunderlich, denn es ist ja auch nix angeschlossen und das Display zeigt
0.000V.  Das wollen wir nun ändern – in der Hoffnung, dass wir identifizieren
können, welche Bytes diese Zahl beinhalten. Und es gibt schon einen natürlichen
Kandidaten, denn wenn wir die Daten mal als normalen String ausgeben sehen wir
dies:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;\xab\xcd\x12\x02\x011+0.0000000&amp;lt;00\x043
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und der String '+0.000' riecht doch sehr nach Vorzeichen und Messwert. Also
testen wir das mal. Dazu legen wir Spannung von ca 1.5V (Batterie) an:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
\xab\xcd\x12\x02\x011+1.4950100&amp;lt;00\x04G
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und polen diese dann mal um:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;\xab\xcd\x12\x02\x011-1.4950080&amp;lt;00\x04P
\xab\xcd\x12\x02\x011-1.4960080&amp;lt;00\x04Q
\xab\xcd\x12\x02\x011-1.4950080&amp;lt;00\x04P
\xab\xcd\x12\x02\x011-1.4950080&amp;lt;00\x04P
\xab\xcd\x12\x02\x011-1.4950080&amp;lt;00\x04P
\xab\xcd\x12\x02\x011-1.4820080&amp;lt;00\x04L
\xab\xcd\x12\x02\x011-1.4540080&amp;lt;00\x04K
\xab\xcd\x12\x02\x011-1.4960080&amp;lt;00\x04Q
\xab\xcd\x12\x02\x011-1.4950080&amp;lt;00\x04P
\xab\xcd\x12\x02\x011-1.4950080&amp;lt;00\x04P
\xab\xcd\x12\x02\x011-1.4980080&amp;lt;00\x04S
\xab\xcd\x12\x02\x011-1.4950080&amp;lt;00\x04P
\xab\xcd\x12\x02\x011-1.4960080&amp;lt;00\x04Q
\xab\xcd\x12\x02\x011-1.4960080&amp;lt;00\x04Q
\xab\xcd\x12\x02\x011-1.4960080&amp;lt;00\x04Q
\xab\xcd\x12\x02\x011-1.4960080&amp;lt;00\x04Q
\xab\xcd\x12\x02\x011-1.4950080&amp;lt;00\x04P
\xab\xcd\x12\x02\x011-1.4960080&amp;lt;00\x04Q
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Es ist naheliegend, dass hier vier Stellen angezeigt werden und der Rest
eine andere Bedeutung hat, denn das entspricht der Präzision des Instruments (3
5/6 Stellen). Also halten wir mal fest:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;value = dat[6:12]   # Messwert als String
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Als nächstes wollen wir mal schauen, wo der aktuelle Modus codiert wird, also
Strom, oder Spannung oder... Im &lt;em&gt;Programming Manual&lt;/em&gt; steht, dass das in einem
eigenen Byte codiert ist. Dabei erwarten wir folgendes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;00: AC V&lt;/li&gt;
&lt;li&gt;01: DC V&lt;/li&gt;
&lt;li&gt;02: AC µA&lt;/li&gt;
&lt;li&gt;03: AC mA&lt;/li&gt;
&lt;li&gt;[...]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also drehe ich mal am Schalter und schaue, wo in den Daten sich was verändert.
Das ist an zwei Stellen der Fall: Ganz am Ende und an Position 4. Letzteres ist
der Treffer – hier findet man die richtigen Werte. Also &lt;code&gt;unit = dat[4]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Als nächstes machen wir uns auf die Suche nach dem &lt;em&gt;Hold&lt;/em&gt; Flag.  Multimeter auf
Volt stellen und immer wieder &lt;em&gt;Hold&lt;/em&gt; ein- und ausschalten. Und so habe ich es
im &lt;a href="https://de.wikipedia.org/wiki/Bitwertigkeit"&gt;LSB&lt;/a&gt; von &lt;code&gt;dat[14]&lt;/code&gt; gefunden.&lt;/p&gt;
&lt;p&gt;Und nach dem selben Schema erkunden wir nun &lt;code&gt;min/max&lt;/code&gt; &lt;code&gt;OL&lt;/code&gt;, &lt;code&gt;rel&lt;/code&gt; usw.&lt;/p&gt;
&lt;h1&gt;Fernsteuerung&lt;/h1&gt;
&lt;p&gt;Was wir bisher noch nicht adressiert haben ist die Fernsteuerung des Instruments.
Die Windows Software hat diverse Knöpfe, die im Wesentlichen denen am Gerät
entsprechen: Hold, select, range, etc. Wie kommen wir an diesen Teil des Protokolls?&lt;/p&gt;
&lt;p&gt;Indem wir die Software belauschen! Dazu installieren wir sie zunächst in einer
virtuellen Windows Maschine unter Virtualbox. Als nächstes müssen wir noch den
Zugriff auf USB erlauben. Dazu gibt es in Virtualbox unter &lt;em&gt;Devices &amp;gt; USB&lt;/em&gt; die
entsprechenden Einträge. Einfach das entsprechende Gerät auswählen und schon
kann Windows mit ihm reden. Instrumenten-Software starten und hoffen. Und siehe
da – es funktioniert. Ich kann die Messwerte in der Software sehen und über die
Buttons das Multimeter fernsteuern.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ut8803e-bench-meter/windows-software2.png" class="Large"/&gt;&lt;/p&gt;
&lt;p&gt;Als nächstes brauchen wir ein Werkzeug mit dem wir den Datenverkehr abfangen
können: &lt;a href="https://www.wireshark.org/"&gt;Wireshark&lt;/a&gt;. Also installieren, falls noch
nicht geschehen. &lt;/p&gt;
&lt;p&gt;Nun müssen wir noch den Kernel-USB-Monitor aktivieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo modprobe usbmon
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Dann Wireshark starten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo wireshark
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun müssen wir eines der zahlreichen &lt;code&gt;usbmon&lt;/code&gt; devices auswählen. Eine kurze
Überprüfung mit &lt;code&gt;lsusb&lt;/code&gt; ergibt immer noch &lt;code&gt;Bus 006 Device 008&lt;/code&gt;. Also &lt;code&gt;usbmon6&lt;/code&gt;
auswählen.&lt;/p&gt;
&lt;p&gt;Leider befindet sich auch mein WLAN Adapter auf Bus 6 und so werde ich nun
fröhlich vollgespammt. Also müssen wir das einschränken, damit wir nur unser
Multimeter sehen. Dazu setzen wir einen Display Filter: &lt;code&gt;usb.src == "6.8.0" ||
usb.dst == "6.8.0"&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Und schon bekommen wir dies:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ut8803e-bench-meter/wireshark0.png"&gt;&lt;/p&gt;
&lt;p&gt;Das sieht zwar schon ganz nett aus, aber es kommen ums verrecken keine weiten
Pakete an, obwohl das Multimeter fröhlich Daten sendet, wie ich in der
Windows-Software zweifelsfrei sehen kann. Komisch. Nach viel rumprobieren ist
dann der Knoten geplatzt: Zwar findet das initiale Setup auf interface 0 statt,
aber ganz offenbar wird danach ein neues interface 1 geöffnet auf dem dann der
eigentliche Datenfluss passiert. Ändern wir den Display Filter auf &lt;code&gt;usb.dst ~
"6\.8\.." || usb.src ~ "6\.8\.."&lt;/code&gt; sieht die Welt schon anders aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ut8803e-bench-meter/wireshark1.png"&gt;&lt;/p&gt;
&lt;p&gt;OK – gut. Als nächstes drücken wir mal den &lt;code&gt;Hold&lt;/code&gt; Button in der Software und
schauen, ob wir herausfinden können, was die Software dann sendet. Nachdem ich
mich durch eine gefühlte Million &lt;code&gt;URB_INTERRUPT in&lt;/code&gt; Packages gewühlt hatte, fand
ich dann endlich ein paar vom Typ &lt;code&gt;URB_INTERRUPT out&lt;/code&gt; – die kamen zur
Abwechslung auf interface 2:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ut8803e-bench-meter/wireshark3.png"&gt;&lt;/p&gt;
&lt;p&gt;Und auf das Interface filtere ich nun erstmal:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ut8803e-bench-meter/wireshark4.png"&gt;&lt;/p&gt;
&lt;p&gt;OK - also wurden nach unserem Tastendruck vier Datenpakete hintereinander
gesendet und die schauen wir uns nun genauer an:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Frame 571: 72 bytes on wire (576 bits), 72 bytes captured (576 bits) on interface usbmon6, id 0
USB URB
    [Source: host]
    [Destination: 6.8.2]
    URB id: 0xffff93fe33fc8840
    URB type: URB_SUBMIT (&amp;#39;S&amp;#39;)
    URB transfer type: URB_INTERRUPT (0x01)
    Endpoint: 0x02, Direction: OUT
    Device: 8
    URB bus id: 6
    Device setup request: not relevant (&amp;#39;-&amp;#39;)
    Data: present (0)
    URB sec: 1680358519
    URB usec: 534491
    URB status: Operation now in progress (-EINPROGRESS) (-115)
    URB length [bytes]: 8
    Data length [bytes]: 8
    [Response in: 572]
    [bInterfaceClass: HID (0x03)]
    Unused Setup Header
    Interval: 1
    Start frame: 0
    Copy of Transfer Flags: 0x00000000
    Number of ISO descriptors: 0
HID Data: 07abcd04460001c2

Frame 572: 64 bytes on wire (512 bits), 64 bytes captured (512 bits) on interface usbmon6, id 0
USB URB
    [Source: 6.8.2]
    [Destination: host]
    URB id: 0xffff93fe33fc8840
    URB type: URB_COMPLETE (&amp;#39;C&amp;#39;)
    URB transfer type: URB_INTERRUPT (0x01)
    Endpoint: 0x02, Direction: OUT
    Device: 8
    URB bus id: 6
    Device setup request: not relevant (&amp;#39;-&amp;#39;)
    Data: not present (&amp;#39;&amp;gt;&amp;#39;)
    URB sec: 1680358519
    URB usec: 535116
    URB status: Success (0)
    URB length [bytes]: 8
    Data length [bytes]: 0
    [Request in: 571]
    [Time from request: 0.000625000 seconds]
    [bInterfaceClass: HID (0x03)]
    Unused Setup Header
    Interval: 1
    Start frame: 0
    Copy of Transfer Flags: 0x00000000
    Number of ISO descriptors: 0

Frame 573: 72 bytes on wire (576 bits), 72 bytes captured (576 bits) on interface usbmon6, id 0
USB URB
    [Source: host]
    [Destination: 6.8.2]
    URB id: 0xffff93fe33fc8840
    URB type: URB_SUBMIT (&amp;#39;S&amp;#39;)
    URB transfer type: URB_INTERRUPT (0x01)
    Endpoint: 0x02, Direction: OUT
    Device: 8
    URB bus id: 6
    Device setup request: not relevant (&amp;#39;-&amp;#39;)
    Data: present (0)
    URB sec: 1680358519
    URB usec: 750194
    URB status: Operation now in progress (-EINPROGRESS) (-115)
    URB length [bytes]: 8
    Data length [bytes]: 8
    [Response in: 574]
    [bInterfaceClass: HID (0x03)]
    Unused Setup Header
    Interval: 1
    Start frame: 0
    Copy of Transfer Flags: 0x00000000
    Number of ISO descriptors: 0
HID Data: 07abcd045a0001d6

Frame 574: 64 bytes on wire (512 bits), 64 bytes captured (512 bits) on interface usbmon6, id 0
USB URB
    [Source: 6.8.2]
    [Destination: host]
    URB id: 0xffff93fe33fc8840
    URB type: URB_COMPLETE (&amp;#39;C&amp;#39;)
    URB transfer type: URB_INTERRUPT (0x01)
    Endpoint: 0x02, Direction: OUT
    Device: 8
    URB bus id: 6
    Device setup request: not relevant (&amp;#39;-&amp;#39;)
    Data: not present (&amp;#39;&amp;gt;&amp;#39;)
    URB sec: 1680358519
    URB usec: 751136
    URB status: Success (0)
    URB length [bytes]: 8
    Data length [bytes]: 0
    [Request in: 573]
    [Time from request: 0.000942000 seconds]
    [bInterfaceClass: HID (0x03)]
    Unused Setup Header
    Interval: 1
    Start frame: 0
    Copy of Transfer Flags: 0x00000000
    Number of ISO descriptors: 0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;D.h. Zuerst wird ein Paket vom Typ &lt;code&gt;URB type: URB_SUBMIT ('S')&lt;/code&gt; geschickt und
als Antwort schickt das Instrument dann eins vom Typ &lt;code&gt;URB type: URB_COMPLETE
('C')&lt;/code&gt;. Das erste enthält &lt;code&gt;HIDdata&lt;/code&gt;, das zweite scheint eine Art
Empfangsbestätigung zu sein.&lt;/p&gt;
&lt;p&gt;Und das machen wir nun systematisch  mit allen Buttons und notieren die
gesendeten Messages:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# Hold
07abcd04460001c2
07abcd045a0001d6

# Back light
07abcd04470001c3
07abcd045a0001d6

# Select
07abcd04480001c4
07abcd045a0001d6

# Manual Range
07abcd04490001c5
07abcd045a0001d6

# Auto Range
07abcd044a0001c6
07abcd045a0001d6

# Min/Max
07abcd044b0001c7
07abcd045a0001d6

# Exit Min/max
07abcd044c0001c8
07abcd045a0001d6

# Rel
07abcd044d0001c9
07abcd045a0001d6

# D Value
07abcd044e0001ca
07abcd045a0001d6

# Q Value
07abcd044f0001cb
07abcd045a0001d6

# R value
07abcd04510001cd
07abcd045a0001d6

# Exit DQR
07abcd04500001cc
07abcd045a0001d6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das erste Byte dürfte ankündigen, dass nun 7 Bytes folgen. Analog findet man
bei der häppchenweise Übertragung der Messdaten nämlich Pakete, die so
aussehen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;01ab
01cd
0112
0102
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also lassen wir das erste Byte im Folgenden weg. Wer genau hinschaut wird
feststellen, dass die erste Message offenbar den eigentlichen Befehl codiert
und die Zweite immer die gleiche ist – offenbar eine Art End-of-command (EOC)
oder sowas. Und auch die Struktur der verschiedenen Messages ähnelt sich sehr
untereinander. Stellen wir mal alle untereinander und sortiert dar, um das auf
uns wirken zu lassen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;abcd04460001c2    # Hold          
abcd04470001c3    # Back light    
abcd04480001c4    # Select        
abcd04490001c5    # Manual Range  
abcd044a0001c6    # Auto Range    
abcd044b0001c7    # Min/Max       
abcd044c0001c8    # Exit Min/max  
abcd044d0001c9    # Rel           
abcd044e0001ca    # D Value       
abcd044f0001cb    # Q Value       
abcd04500001cc    # Exit DQR      
abcd04510001cd    # R value       
abcd045a0001d6    # EOC
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Die ersten drei Bytes sind bei allen identisch. Vielleicht eine Art magic
number, an der man eine valide Message erkennt? Dann folgen drei Bytes, die
vermutlich den Key codieren. &lt;code&gt;460001&lt;/code&gt;, &lt;code&gt;470001&lt;/code&gt; etc. Das letzte Byte könnte
natürlich ebenso dazu gehören, aber die Tatsache, dass es schön brav hochzählt
kommt mir irgendwie spanisch vor. Irgendwie riecht das nach einer Prüfsumme.
Vor allem wenn man bedenkt, dass das eins zu eins mit den aufsteigenden Zahlen
am Anfang der Key Codes korrespondiert. Und noch was fällt mir auf: schaut Euch
mal im Vergleich die Daten an, die wir mit unserem Skript vom Gerät empfangen
(mV Range DC, nix angeschlossen):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;abcd12 0201302b3034352e373435303234303004 45
abcd12 0201302b3034312e393431303234303004 3f
abcd12 0201302b3033382e333338303234303004 45
abcd12 0201302b3033352e353335303234303004 41
abcd12 0201302b3033322e373332303234303004 3d
abcd12 0201302b3032372e353237303234303004 43
abcd12 0201302b3032342e303233303234303004 37
abcd12 0201302b3032322e383232303234303004 3c
abcd12 0201302b3031372e313137303234303004 3d
abcd12 0201302b3031332e363133303234303004 3a
abcd12 0201302b3031302e343130303234303004 32
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ich habe mal die ersten vier Byte und das letzte visuell abgesetzt. Hier ist
der Start &lt;code&gt;abcd12&lt;/code&gt; gefolgt von 17 Daten Bytes und der vermuteten Prüfziffer. 
Bei den Knöpfen war es &lt;code&gt;abcd04&lt;/code&gt; gefolgt von drei Datenbytes und der Prüfziffer. 
Und:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;0x12 = 18
0x04 = 4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ich wette, das &lt;code&gt;0xabcd&lt;/code&gt; die Magic number für eine Message ist, dann kommt ein
Byte, das angibt, wieviele Daten nun folgen (18 bzw. 4 Bytes) und das letze
Byte dann die Prüfziffer ist. Natürlich könnte die Prüfung mit etwas wie CRC
gemacht werden, aber dann kämen nicht so schöne aufsteigende Zahlen heraus.
Vermutlich wirklich eine simple Prüfsumme. Und diese Hypothese prüfen wir nun
anhand der ersten drei Messages:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;hex(sum(bytearray.fromhex(&amp;quot;abcd120201302b3034352e373435303234303004&amp;quot;)))
&amp;#39;0x449&amp;#39;

hex(sum(bytearray.fromhex(&amp;quot;abcd120201302b3034312e393431303234303004&amp;quot;)))
&amp;#39;0x443&amp;#39;

hex(sum(bytearray.fromhex(&amp;quot;abcd120201302b3033382e333338303234303004&amp;quot;)))
&amp;#39;0x449&amp;#39;

# Empfangener Datensatz von oben: abcd12 0201312b302e303030303030303c303004 33
hex(sum(bytearray.fromhex(&amp;quot;abcd120201312b302e303030303030303c303004&amp;quot;)))
&amp;#39;0x437&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hm – korrekt wären nach unserer Theorie &lt;code&gt;45&lt;/code&gt;, &lt;code&gt;3f&lt;/code&gt;, &lt;code&gt;45&lt;/code&gt; und &lt;code&gt;33&lt;/code&gt;. D.h. wir
liegen jedesmal um &lt;code&gt;0x404&lt;/code&gt; daneben.  Oder anders gesagt: die Prüfziffer umfasst die
letzten &lt;em&gt;zwei&lt;/em&gt; Bytes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;hex(sum(bytearray.fromhex(&amp;quot;abcd120201302b3034352e3734353032343030&amp;quot;)))
&amp;#39;0x445&amp;#39;
hex(sum(bytearray.fromhex(&amp;quot;abcd120201302b3034312e3934313032343030&amp;quot;)))
&amp;#39;0x43f&amp;#39;
hex(sum(bytearray.fromhex(&amp;quot;abcd120201302b3033382e3333383032343030&amp;quot;)))
&amp;#39;0x445&amp;#39;
hex(sum(bytearray.fromhex(&amp;quot;abcd120201312b302e303030303030303c3030&amp;quot;)))
&amp;#39;0x433&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das muss natürlich noch mit größeren Datenmengen verifiziert werden, aber mein
Bauchgefühl sagt, dass wir es geknackt haben.&lt;/p&gt;
&lt;p&gt;D.h. nun fangen wir an, das mal vernünftig zu parsen. Solche Sachen machen
direkt in Python keinen Spaß. Aber dafür gibt es die
&lt;a href="https://construct.readthedocs.io"&gt;construct&lt;/a&gt; library, die ich zum Bitschubsen
in Python liebe. Und so definieren wir darin erstmal ein Datenpaket:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;import serial
form construct import *

with serial.serial_for_url(&amp;quot;cp2110://0006:0008:00&amp;quot;) as iface:
    iface.reset_input_buffer()
    while True:
        package = bytearray(iface.read(21))
        print (&amp;quot;\nraw: &amp;quot;, package.hex())

       # Decode values
       record = Struct(
                &amp;quot;signature&amp;quot; / Const(b&amp;quot;\xab\xcd&amp;quot;),
                &amp;quot;length&amp;quot;    / Int8ub,
                &amp;quot;data&amp;quot;      / Bytes(this.length)
                )

        payload = Struct(
                &amp;quot;rectype&amp;quot;   / Bytes(1),
                &amp;quot;mode&amp;quot;      / Int8ub,
                &amp;quot;range&amp;quot;     / Bytes(1),
                &amp;quot;value&amp;quot;     / Bytes(6),
                &amp;quot;foo&amp;quot;       / Bytes(7),  # Hier sind die diversen Flags drin
                &amp;quot;checksum&amp;quot;  / Int16ub
                )

        dat = record.parse(package)
        print(dat)
        val = payload.parse(dat[&amp;quot;data&amp;quot;])
        print(val)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und, oh Freude: Wir bekommen tatsächlich Werte:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;raw:  abcd120200312b302e323036303030303c3030043a
Container:
    signature = b&amp;#39;\xab\xcd&amp;#39; (total 2)
    length = 18
    data = b&amp;#39;\x02\x001+0.2060000&amp;lt;00&amp;#39;... (truncated, total 18)
Container:
    rectype = b&amp;#39;\x02&amp;#39; (total 1)
    mode = 0
    range = b&amp;#39;1&amp;#39; (total 1)
    value = b&amp;#39;+0.206&amp;#39; (total 6)
    foo = b&amp;#39;0000&amp;lt;&amp;#39;... (total 7)
    checksum = 1082

raw:  abcd120200312b302e323036303030303c3030043a
Container:
    signature = b&amp;#39;\xab\xcd&amp;#39; (total 2)
    length = 18
    data = b&amp;#39;\x02\x001+0.2060000&amp;lt;00&amp;#39;... (truncated, total 18)
Container:
    rectype = b&amp;#39;\x02&amp;#39; (total 1)
    mode = 0
    range = b&amp;#39;1&amp;#39; (total 1)
    value = b&amp;#39;+0.206&amp;#39; (total 6)
    foo = b&amp;#39;0000&amp;lt;&amp;#39;... (total 7)
    checksum = 1082
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;D.h. das Parsen funktioniert – nur die Decodierung der diversen Bits (Hold
etc.) fehlt noch in obigem Code.&lt;/p&gt;
&lt;h1&gt;Auf Sendung!&lt;/h1&gt;
&lt;p&gt;Weiter oben hatten wir kühne Theorien darüber aufgestellt, mit welchen Befehlen
man das Instrument fernsteuern kann. Nun wagen wir uns daran, das zu
verifizieren, indem wir einfach die oben entdeckten Sequenzen (jeweiliges
Kommando und Confirmation Message) an das Gerät senden:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;import serial
iface = serial.serial_for_url(&amp;quot;cp2110://0006:0008:00&amp;quot;)

set_hold = b&amp;#39;\xab\xcd\x04\x46\x00\x01\xc2&amp;#39;
confirm = b&amp;#39;\xab\xcd\x04\x5a\x00\x01\xd6&amp;#39;
iface.write(set_hold)
iface.write(confirm)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hurra! Es funktioniert! Sobald die beiden Sequenzen gesendet sind, piepst das
Gerät kurz und wechselt in den &lt;em&gt;Hold&lt;/em&gt; Modus bzw. verlässt diesen wieder.&lt;/p&gt;
&lt;h1&gt;Device ID?&lt;/h1&gt;
&lt;p&gt;Nun haben wir fast alle Geheimnisse des Protokolls gelüftet. Aber wenn man die
Originalsoftware anschaut gibt es noch einen offenen Punkt: Da wird eine
Device-ID angezeigt. Ich habe zwar keine Ahnung, wozu ich die jemals brauchen
könnte, aber der Perfektionist in mir will die auch noch auslesen. Also nochmal
Wireshark bemühen und mit der Aufzeichnung beginnen, bevor ich die PC-Software
in der Virtuellen Maschine starte. Einstellungen analog zu oben, als wir die
Buttons ausgetüftelt hatten. Und tatsächlich sendet die Software ganz am Anfang
ein Kommando, ohne dass ein Knopf gedrückt wurde:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# request Device-ID
abcd04580001d4
abcd045a0001d6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und wenn wir das tun, dann kommt kurz darauf ein Datenpaket zurück, das sich
von den normalen Messwert Messages unterscheidet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;abcd17003030353030303236333830303030313933
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und wenn man das als ASCII String interpretiert, findet sich darin unsere ID.
Sehr gut. Nun bin ich zufrieden!&lt;/p&gt;
&lt;h1&gt;Implementierung&lt;/h1&gt;
&lt;p&gt;Nun werde ich mich mal hinsetzen und die ganzen Codeschnipsel in ein richtiges
Programm verwandeln. Außerdem müssen wir noch die ganzen Flags korrekt parsen.
Das Ergebnis stelle ich dann auf github und werde hier den Link einfügen,
sobald es fertig ist.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update 2023-07-29&lt;/em&gt;: Das &lt;a href="https://github.com/philpagel/ut8803e"&gt;Github
Repository&lt;/a&gt; ist nun verfügbar. Ich habe
beim Implementieren dann doch direkt das &lt;code&gt;cp2110&lt;/code&gt; Modul verwendet, weil der
zusätzliche Layer von &lt;code&gt;pyserial&lt;/code&gt; nur die Komplexität erhöht. &lt;/p&gt;
&lt;p&gt;Außerdem habe ich inzwischen herausgefunden, dass der &lt;code&gt;confirm&lt;/code&gt;/&lt;code&gt;EOC&lt;/code&gt; Befehl
eigentlich nichts zu tun scheint. Alle Kommandos scheinen problemlos zu
funktionieren ohne dieses "Bestätigungs-Paket" zu senden. Mal sehen, ob ich
dieses Rätsel noch lösen kann.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>rtl-433 MQTT autodiscovery ohne Addon</title><link href="https://techbotch.org/blog/rtl433-autodiscovery/index.html" rel="alternate"/><published>2023-02-26T00:00:00+01:00</published><updated>2023-02-26T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-02-26:/blog/rtl433-autodiscovery/index.html</id><summary type="html">&lt;p&gt;In früheren Posts hatte ich ja schon meine Funkthermometer in Homeassistant (HASS)
&lt;a href="https://techbotch.org/blog/433MHz-temperature-sensor-hassio/index.html"&gt;eingebunden&lt;/a&gt;.
Das funktioniert wunderbar. Allerdings habe ich inzwischen ziemlich viele
solche Temperatursensoren und es wird zunehmend mühsam, die alle im Config-File
zu pflegen. Und jedesmal, wenn bei einem Sensor eine neue Batterie fällig wird
ändert das blöde Ding …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In früheren Posts hatte ich ja schon meine Funkthermometer in Homeassistant (HASS)
&lt;a href="https://techbotch.org/blog/433MHz-temperature-sensor-hassio/index.html"&gt;eingebunden&lt;/a&gt;.
Das funktioniert wunderbar. Allerdings habe ich inzwischen ziemlich viele
solche Temperatursensoren und es wird zunehmend mühsam, die alle im Config-File
zu pflegen. Und jedesmal, wenn bei einem Sensor eine neue Batterie fällig wird
ändert das blöde Ding seine ID und ich darf wieder ins Config File und den
betroffenen Sensor finden, die neue ID rausfinden und dort eintragen. Das ist
auf die Dauer etwas lästig.&lt;/p&gt;
&lt;p&gt;Bei meiner Recherche bin ich dann auf das
&lt;a href="https://github.com/pbkhrv/rtl_433-hass-addons"&gt;rtl_433_mqtt_autodiscovery&lt;/a&gt;
Addon gestoßen, das dieses Problem adressiert. Bei einem Freund hatten wir das
auch schon mal erfolgreich eingerichtet und es funktioniert wie gedacht: Das Addon
liest die MQTT Messages mit und wenn es eine rtl-433 Message findet erzeugt es
seinerseits eine zusätzliche MQTT Message in einem Format, dass HA versteht
und dann die entsprechenden Sensoren von selbst erkennt. Natürlich löst das
noch nicht das Problem, mit den Wechselnden IDs, aber zumindest ist es damit
getan, zu schauen, welche neuen Sensoren aufgetaucht sind und diese dann
entsprechend umzubenennen, dass sie wieder am alten Ort auftauchen.&lt;/p&gt;
&lt;p&gt;Nun ist es allerdings so, dass Addons im Gegensatz zu Integrations nicht
einfach im Homeassistant eingebunden werden. Addons sind keine Bestandteile von
Homeassistant, sondern externe Services, die außerhalb von HASS laufen und mit
diesem reden. Dazu muss man verstehen, dass HASS (=Homeassistant) die
eigentliche Web Applikation ist und HASSOS ein ganzes Betriebssystem (OS) das
dazu gedacht ist, z.B. auf einem Raspberry Pi zu laufen. Und letzteres kann
andere Software als Addon verwalten.&lt;/p&gt;
&lt;p&gt;Mosquitto ist ein solches Beispiel: es ist ein eigenständiges Stück Software,
das einen MQTT Server zur Verfügung stellt.  Und bei mir läuft selbiger auch
ganz traditionell als Service auf meinem Debian Server. Wer nun HASSOS auf
einem Pi laufen hat, der hat garkeinen so direkten OS-Zugriff und würde
Mosquitto stattdessen als Addon installieren.  Letztlich sind Addons nichts
andderes, als irgendwelche Server-Prozesse, die in ihrem eigenen
Docker-Container verpackt wurden und dann vom HASSOS Supervisor installiert,
gestartet und überwacht werden.&lt;/p&gt;
&lt;p&gt;Das ist praktisch, wenn man wenig Ahnung von LINUX hat und/oder es einfach
bequemer findet HASS als eine Art Appliance laufen zu lassen, ohne sich
direkt mit den Interna befassen zu müssen. Mir persönlich ist das eher
unsympathisch und es kommt mir komplexer vor, als es direkt im OS zu verwalten.
Z.B. haben wir neulich versucht, ein SSH Addon auf dem Pi eines Freundes zum
Laufen zu bekommen. Letztlich hat es funktioniert, aber wir haben ewig daran
rumgebastelt, bis es ging. Unter Debian wäre es ein simples &lt;code&gt;apt install sshd&lt;/code&gt;
gewesen.&lt;/p&gt;
&lt;p&gt;Und so wollen wir uns heute mal damit befassen, wie wir in den Genuss dieses
Autodiscovery Features kommen, ohne HASSOS zu nutzen.&lt;/p&gt;
&lt;h1&gt;rtl-433 als Service einrichten&lt;/h1&gt;
&lt;p&gt;Damit der autodiscovery Service etwas ausrichten kann, brauchen wir zunächst
mal den eigentlichen rtl-433 Service der die Sensor-Daten via rtl-sdr empfängt.
Das ist bei mir eigentlich schon eingerichtet, aber ich beschreibe es hier
trotzdem nochmal, damit man diesen Post als vollständiges Tutorial verwenden
kann.  Außerdem hatte ich in meiner ursprünglichen Konfiguration das Format der
MQTT-Topics der Sensoren verändert und das würde der Autodiscovery Service
nicht verstehen. D.h. wenn Ihr meiner ursprünglichen Anleitung gefolgt seid
müsst Ihr nun auch zumindest das Config File anpassen. Hier die Schritte:&lt;/p&gt;
&lt;p&gt;rtl-433 installieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo apt install rtl-433
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Config File erzeugen (&lt;code&gt;/etc/rtl_433.conf&lt;/code&gt;) und diesen Inhalt reinschreiben:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;convert si
output mqtt://hal:1883,user=phil,pass=TopS3cret,retain=0
report_meta time:utc
report_meta newmodel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun den User für den Service anlegen und in group &lt;code&gt;plugdev&lt;/code&gt; aufnehmen, damit er
Zugriff auf den rtl-sdr hat:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo adduser rtl_433
sudo adduser rtl_433 plugdev
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und noch die permissions einschränken, damit nicht Hinz&amp;amp;Kunz das lesen können
(password!):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo chown rtl_433:rtl_433 /etc/rtl_433.conf
sudo chmod o-rwx /etc/rtl_433.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Als nächstes legen wir das Service File an
(&lt;code&gt;/etc/systemd/system/rtl_433.service&lt;/code&gt;) – mit diesem Inhalt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# See https://github.com/merbanan/rtl_433/issues/1651 for original
# suggestion
[Unit]
Description=RTL_433 service
Documentation=man:rtl_433
StartLimitIntervalSec=10
After=syslog.target network.target

[Service]
Type=exec
User=rtl_433
Group=rtl_433
ExecStart=/usr/bin/rtl_433 -c /etc/rtl_433.conf
Restart=always
RestartSec=30s

# View with: sudo journalctl -f -u rtl_433 -o cat
SyslogIdentifier=rtl_433

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun können wir den Service starten und dauerhaft aktivieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl restart rtl_433.service
sudo systemctl enable rtl_433
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;rtl-433 Autodiscovery ohne Addon&lt;/h1&gt;
&lt;p&gt;Als nächstes kümmern wir uns um den Auto-Discovery-Service. Dazu habe ich mir
mal das &lt;a href="https://github.com/pbkhrv/rtl_433-hass-addons"&gt;git repository&lt;/a&gt; genauer
angeschaut.  Die eigentliche funktionale Komponente ist ein Python Skript
namens &lt;code&gt;rtl_433_mqtt_hass.py&lt;/code&gt;, das aus dem
&lt;a href="https://github.com/merbanan/rtl_433"&gt;rtl_433&lt;/a&gt; Package stammt. Unter Debian
findet es sich in &lt;code&gt;/usr/share/doc/rtl-433/examples/rtl_433_mqtt_hass.py&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Und das muss man natürlich nicht in einem eigenen Docker Container laufen
lassen, sondern kann es wie gehabt in einen &lt;code&gt;systemd&lt;/code&gt; Service verwandeln, wie
ich es auch schon mit
&lt;a href="https://techbotch.org/blog/433MHz-temperature-sensor-hassio/index.html"&gt;rtl-433&lt;/a&gt;
getan habe. Also machen wir das mal.&lt;/p&gt;
&lt;p&gt;Das Skript verwendet die &lt;code&gt;paho-mqtt&lt;/code&gt; library, also installieren wir die als erstes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apt install python3-paho-mqtt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Bevor wir das Ganze nun als Service verpacken, wollen wir es erstmal von Hand
starten und schauen, ob auch alles funktioniert. Dazu nehmen wir zunächst mal
das Discovery Topic Prefix &lt;code&gt;FOO&lt;/code&gt; (statt &lt;code&gt;homeassistant&lt;/code&gt;), damit beim Testen
nicht schon alle möglichen Sachen automatisch in HASS angelegt werden:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; python3 /usr/share/doc/rtl-433/examples/rtl_433_mqtt_hass.py -u phil -P TopS3cret -H hal -D FOO 
MQTT connected: Connection Accepted.
Published inFactory-TH/3/138: battery_ok, temperature_C, humidity
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und in einem anderen Fenster überwachen wir was unter dem neuen Topic ankommt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mosquitto_sub -h hal -u phil -P TopS3cret -t &amp;#39;FOO/#&amp;#39;
{&amp;quot;device_class&amp;quot;: &amp;quot;battery&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;inFactory-TH-3-138-B&amp;quot;, &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;%&amp;quot;, &amp;quot;value_template&amp;quot;: &amp;quot;{{ float(value|int) * 99 + 1 }}&amp;quot;, &amp;quot;state_topic&amp;quot;: &amp;quot;rtl_433/hal/devices/inFactory-TH/3/138/battery_ok&amp;quot;, &amp;quot;unique_id&amp;quot;: &amp;quot;inFactory-TH-3-138-B&amp;quot;, &amp;quot;device&amp;quot;: {&amp;quot;identifiers&amp;quot;: &amp;quot;inFactory-TH-3-138&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;inFactory-TH-3-138&amp;quot;, &amp;quot;model&amp;quot;: &amp;quot;inFactory-TH&amp;quot;, &amp;quot;manufacturer&amp;quot;: &amp;quot;rtl_433&amp;quot;}}
{&amp;quot;device_class&amp;quot;: &amp;quot;temperature&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;inFactory-TH-3-138-T&amp;quot;, &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;\u00b0C&amp;quot;, &amp;quot;value_template&amp;quot;: &amp;quot;{{ value|float }}&amp;quot;, &amp;quot;state_topic&amp;quot;: &amp;quot;rtl_433/hal/devices/inFactory-TH/3/138/temperature_C&amp;quot;, &amp;quot;unique_id&amp;quot;: &amp;quot;inFactory-TH-3-138-T&amp;quot;, &amp;quot;device&amp;quot;: {&amp;quot;identifiers&amp;quot;: &amp;quot;inFactory-TH-3-138&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;inFactory-TH-3-138&amp;quot;, &amp;quot;model&amp;quot;: &amp;quot;inFactory-TH&amp;quot;, &amp;quot;manufacturer&amp;quot;: &amp;quot;rtl_433&amp;quot;}}
{&amp;quot;device_class&amp;quot;: &amp;quot;humidity&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;inFactory-TH-3-138-H&amp;quot;, &amp;quot;unit_of_measurement&amp;quot;: &amp;quot;%&amp;quot;, &amp;quot;value_template&amp;quot;: &amp;quot;{{ value|float }}&amp;quot;, &amp;quot;state_topic&amp;quot;: &amp;quot;rtl_433/hal/devices/inFactory-TH/3/138/humidity&amp;quot;, &amp;quot;unique_id&amp;quot;: &amp;quot;inFactory-TH-3-138-H&amp;quot;, &amp;quot;device&amp;quot;: {&amp;quot;identifiers&amp;quot;: &amp;quot;inFactory-TH-3-138&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;inFactory-TH-3-138&amp;quot;, &amp;quot;model&amp;quot;: &amp;quot;inFactory-TH&amp;quot;, &amp;quot;manufacturer&amp;quot;: &amp;quot;rtl_433&amp;quot;}}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sehr gut – es funktioniert!&lt;/p&gt;
&lt;p&gt;Nun brauchen wir ein service file
(&lt;code&gt;/etc/systemd/system/rtl433-autodiscovery.service&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[Unit]
Description=RTL_433 autodiscovery service
StartLimitIntervalSec=10
After=syslog.target network.target

[Service]
Environment=MQTT_HOST=hal
Environment=MQTT_USERNAME=phil
Environment=MQTT_PASSWORD=TopS3cret

Type=exec
User=rtl_433
Group=rtl_433
ExecStart=python3 -u /usr/share/doc/rtl-433/examples/rtl_433_mqtt_hass.py -H $MQTT_HOST
Restart=always
RestartSec=30s

# View with: sudo journalctl -f -u rtl_433-autodiscover -o cat
SyslogIdentifier=rtl_433-autodiscover

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Jetzt können wir unseren Service starten und aktivieren, damit er
zukünftig von selbst gestartet wird:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl start rtl_433-autodiscover.service
sudo systemctl enable rtl_433-autodiscover.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Nutzung in Homeassistant&lt;/h1&gt;
&lt;p&gt;Die Spannung wächst und wir schauen mal in den Homeassistant:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/rtl433-autodiscovery/sensors-discovered.png"&gt;&lt;/p&gt;
&lt;p&gt;Super – da sind sie ja! Und ich muss wohl mal zwei Batterien austauschen.&lt;/p&gt;
&lt;p&gt;Nun bleiben ein paar Aufräumarbeiten: In meiner alten Konfiguration hatte ich
die ganzen Sensoren ja manuell im &lt;code&gt;configuration.yaml&lt;/code&gt; File definiert. Das
muss nun auskommentiert oder rausgelöscht werden. Wenn ihr das aber gerade von
Null auf einrichtet müsst Ihr das natürlich nicht machen. &lt;/p&gt;
&lt;p&gt;Die Namen der Devices und der zugehörigen Entities sind aktuell eher kryptisch
(z.B.  &lt;code&gt;inFactory-TH-1-156&lt;/code&gt;) und daher sollten wir sie vernünftig umbenennen.
Das geht in HASS unter &lt;code&gt;Settings &amp;gt; Devices&amp;amp;Services &amp;gt; MQTT devices&lt;/code&gt; und dann
auf das konkrete Device gehen und dort auf das Stift-Icon oben rechts klicken.
Nun können wir den Namen des Devices vergeben:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/rtl433-autodiscovery/change-device-name.png"&gt;&lt;/p&gt;
&lt;p&gt;Die Namen der zugehörigen entities passen sich dann von selbst an.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/rtl433-autodiscovery/change-entity-name.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;An dieser Stelle können wir die Devices problemlos in ein Dashboard einbinden.
Und wenn mal die Batterie gewechselt werden muss, dann muss man nur schauen,
welcher Sensor mit kryptischem Namen neu dazu gekommen ist, das alte Device
löschen und das neue wieder mit den gleichen Namen versehen. Auf diese Weise 
bleibt im Dashboard alles konstant und wir behalten auch die Device-History.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Getränkekühlschrank reparieren</title><link href="https://techbotch.org/blog/fridge-repair/index.html" rel="alternate"/><published>2023-02-19T00:00:00+01:00</published><updated>2023-02-19T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-02-19:/blog/fridge-repair/index.html</id><summary type="html">&lt;p&gt;Wie Ihr schon mitgekriegt habt habe ich das Haus mit Smartplugs gepflastert,
die sich nicht nur fernschalten lassen, sondern auch den Energieverbrauch
messen. Leider hat kurz danach unser Getränkekühlschrank den Geist aufgegeben
und ich bin nun in familiärer Erklärungsnot, dass das bestimmt nix mit meinem
Smartplug zu tun hatte. Vor …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wie Ihr schon mitgekriegt habt habe ich das Haus mit Smartplugs gepflastert,
die sich nicht nur fernschalten lassen, sondern auch den Energieverbrauch
messen. Leider hat kurz danach unser Getränkekühlschrank den Geist aufgegeben
und ich bin nun in familiärer Erklärungsnot, dass das bestimmt nix mit meinem
Smartplug zu tun hatte. Vor allem aber muss ich zur Rettung meiner Bastlerehre
das Ding wieder zum laufen bringen.&lt;/p&gt;
&lt;h1&gt;Fehlerbild&lt;/h1&gt;
&lt;p&gt;Sehr einfach: nix geht mehr. Kein Geräusch, kein Kühlen, kein Licht, kein
LED-Glimmen. Das hat zwar den Vorteil, dass er nun wirklich viel Energie spart,
aber es hat keine Begeisterung ausgelöst. Auf der positiv-Seite würde ich
verbuchen, dass also mit hoher Wahrscheinlichkeit das Netzteil im Eimer ist.
Und das sollte man doch reparieren können...&lt;/p&gt;
&lt;p&gt;Zuerst also den Kühlschrank ausräumen und umdrehen, denn ich vermute die
entsprechende Platine hinten. Einmal am Stromkabel entlanghangeln, ein paar Schrauben lösen,
Plastikabdeckung abnehmen und schon haben wir die Platine in der Hand:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fridge-repair/platine.jpg" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Die Platine trägt die Bezeichnung &lt;em&gt;PCB110729M1&lt;/em&gt; und kann offenbar
unterschiedlich bestückt werden, was dann jeweils das Modell &lt;em&gt;hanny10-12B&lt;/em&gt; oder
&lt;em&gt;hanny10-12C&lt;/em&gt; ergibt – letzteres in meinem Fall. Unten links erkennt man einen
dicken ELKO und einen kleineren daneben.  Nicht so wirklich zu sehen ist, dass
da eine Menge weißer Klebekram dran ist unter dem man dann vier
Gleichrichterdioden findet. Etwas weiter rechts gibt es eine verlötete
Feinsicherung – die sehr durchgebrannt aussieht.&lt;/p&gt;
&lt;p&gt;Bei penibler Inspektion fanden sich an den beiden ELKOS deutliche
Schmauchspuren. Offenbar ist wohl mindestens einer davon abgebrannt. Und wenn
ich Pech habe hat es die Gleichrichterdioden auch erwischt. Also erstmal alles
von diesem Klebekram befreien, auslöten und die Platine putzen. Hier sieht man
schön den Rauch an den ELKOs:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fridge-repair/ELKO1.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/fridge-repair/ELKO2.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Nun die genauen Werte ermitteln:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Feinsicherung F1A250V mit Lötanschluss&lt;/li&gt;
&lt;li&gt;4x 1N4007 Diode&lt;/li&gt;
&lt;li&gt;ELKO 47µF 25V&lt;/li&gt;
&lt;li&gt;ELKO 33µF, 400V&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Als nächstes in die Bauteilekiste abtauchen.  OK – Ich habe die Dioden und
einen 47µF Elko, der 65V aushält. Das ist doch schonmal was. Also Sicherungen
und den anderen ELKO bestellen. Die Sicherungen waren als erstes da und so habe
ich schonmal alles ersetzt, was da war.&lt;/p&gt;
&lt;p&gt;Und nun sieht es auch schon wieder ganz gut aus – fehlt nur noch der dicke ELKO.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fridge-repair/platine2.jpg" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Der kam einen Tag später. Meine Elkos sind etwas dicker, als die originalen und
so musste ich ein bisschen biegen und tüfteln, um alles unterzubringen. Aber am
Ende hat es auf die Platine gepasst:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fridge-repair/platine3.jpg" class= "Large"&gt;&lt;/p&gt;
&lt;h1&gt;Ausprobieren&lt;/h1&gt;
&lt;p&gt;Nun wollen wir es wagen, da mal Strom drauf zu geben. Also erstmal alle Stecker
wieder an der richtigen Stelle einstecken. Hatte ich schon erwähnt, dass es
eine sehr gute Angewohnheit ist, vor dem Zerlegen ein Photo zu machen?&lt;/p&gt;
&lt;p&gt;Dann die Platine in die Halterung einklipsen und die Abdeckung drauf machen.
Allen Mut zusammennehmen, Zunge in den Mundwinkel, Luft anhalten langsam bis
drei zählen und den Stecker in die Dose. Ich bilde mir ein, dabei eine Art
Klicken gehört zu haben, kann mich aber auch irren. Jedenfalls lässt sich der
blöde Kühlschrank immer noch nicht einschalten und die anschließende Obduktion
ergab, dass erneut die Sicherung durchgebrannt ist. Mist. Immerhin sehen die
Elkos etc. immer noch gut aus – keine Schmauchspuren, geblähte Teile oder
ähnliches. &lt;/p&gt;
&lt;p&gt;Also nochmal die Platine genauer studieren und zudem im Netz recherchieren.
Mein nächster heißer Kandidat ist der kleine IC neben den Elkos, die wir schon
getauscht hatten. Das ist ein &lt;a href="https://www.st.com/resource/en/datasheet/viper22a-e.pdf"&gt;&lt;em&gt;Viper22a SMPS primary
switcher&lt;/em&gt;&lt;/a&gt;, also quasi
das Herzstück des Schaltnetzteils. Laut Internet geht sowas gerne mal in Rauch
auf und nimmt dabei auch häufiger den Optokoppler (Typ
&lt;a href="https://www.farnell.com/datasheets/73758.pdf"&gt;PC817&lt;/a&gt;) mit. Netterweise ist
beides billig online zu haben und ich habe ein paar davon bestellt.&lt;/p&gt;
&lt;h1&gt;Zweiter Versuch&lt;/h1&gt;
&lt;p&gt;Als nächstes also wieder die Sicherung erneuern, IC und Optokoppler tauschen.
Dieses mal bin ich weniger forsch und baue nicht gleich alles wieder in den
Kühlschrank ein, sondern starte die Platine erstmal auf meinem Basteltisch –
zur Sicherheit am Trenntrafo und mit einer 60W
&lt;a href="https://techbotch.org/blog/current-limiter-lamp/index.html"&gt;Vorschaltbirne&lt;/a&gt; zur
Strombegrenzung.&lt;/p&gt;
&lt;p&gt;Daumen drücken, Luft anhalten und Strom einschalten. OK – die Sicherung hält
und es raucht auch nix. Und die Vorschaltbirne ist ebenfalls dunkel geblieben.
Das finde ich schonmal gut. Aber funktioniert es auch?  Also Spannungen auf der
Sekundärseite messen. An den Buchsen für die Lüfter liegen 1,5V an – das
scheint etwas wenig, aber die Spannung ist total stabil.  Und die größere
Buchse liefert, wie auch die Beschriftung nahelegt, 12V. Das klingt eigentlich
gut. An diesem Punkt fällt mir jetzt nicht mehr so irre viel ein, das ich "auf
dem Trockenen" testen könnte und so schreiten wir zum Härtetest und bauen das
Ganze wieder in den Kühlschrank ein.&lt;/p&gt;
&lt;p&gt;Und, oh Freude: Die Beleuchtung geht an, er zeigt die aktuelle Temperatur an und
der Kompressor läuft:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/fridge-repair/geht-wieder.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und die Temperatur ging dann auch sehr schnell runter. Sehr gut – ich bin
der Held der Schaltnetzteilreparatur!&lt;/p&gt;
&lt;p&gt;Oder um der Wahrheit die Ehre zu geben: Ich kann ziemlich gut googeln. Und so
habe ich viele hervorragende Quellen gefunden, die mein Verständnis von
Schaltnetzteilen sowie deren Fehlersuche und Reparatur sehr befördert haben
(alle auf Englisch):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=9bFVTa8FEM4"&gt;IMSAI Guys Video zu Grundlagen von Schaltnetzteilen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=OwmN-N8kgHw"&gt;Haseeb Electronics&lt;/a&gt; gibt einen guten Überblick
  zur Fehlersuche, auch wenn die persönliche Sicherheit im Video etwas zu kurz kommt.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.badcaps.net/forum/showthread.php?t=83741"&gt;Thread auf Badcaps&lt;/a&gt;, der sich
  auf fast exakt meinen Getränkekühlschrank bezieht. &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.repairfaq.org/sam/smpsfaq.htm"&gt;Samuel Goldwassers Seite zur Reparatur von Schaltnetzteilen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mhdiranian.ir/UPLUADE%20FILE%20/smps%20english.pdf"&gt;Jestine Jongs "Trouble shooting &amp;amp; Repairing Switch Mode Power Supplies"&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Mikrowellenofen</title><link href="https://techbotch.org/blog/microwave-oven/index.html" rel="alternate"/><published>2023-01-08T00:00:00+01:00</published><updated>2023-01-08T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2023-01-08:/blog/microwave-oven/index.html</id><summary type="html">&lt;p&gt;Bei einem lustigen Abend mit Kochen, Wein und Plauderei sagte eine gute
Freundin neulich "Alle Leute die ich kenne haben eine coole Küche mit allem
Schnickschnack – nur die Mikrowelle ist noch die aus Studentenzeiten."&lt;/p&gt;
&lt;p&gt;Ich muss zugeben, dass ich mich dabei irgendwie ertappt fühlte, denn genau so
isses: Wir haben …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Bei einem lustigen Abend mit Kochen, Wein und Plauderei sagte eine gute
Freundin neulich "Alle Leute die ich kenne haben eine coole Küche mit allem
Schnickschnack – nur die Mikrowelle ist noch die aus Studentenzeiten."&lt;/p&gt;
&lt;p&gt;Ich muss zugeben, dass ich mich dabei irgendwie ertappt fühlte, denn genau so
isses: Wir haben bei der Küchenplanung coole Geräte ausgesucht, aber eine neue
Mikrowelle haben wir nicht gekauft, sondern meine allererste aus Studententagen
in einem Schrank versteckt. Die hatte damals 50 DM gekostet und sieht
inzwischen schon etwas strapaziert aus, aber sie funktioniert wie am ersten Tag
und ich dachte mir, ich brauche weder eine zusätzliche Grillfunktion, noch
spezielle Programme für verschiedene Lebensmittel und auch keinen
Internetanschluss. Also ist sie geblieben:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/microwave-oven/img/microwave.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Soweit ich mich erinnere hat sie eine Leistung von 700W und das User-Interface
besteht aus zwei Drehknöpfen für Leistung und Zeit sowie einem Druckknopf zum
Öffnen der Tür. Was braucht man mehr?&lt;/p&gt;
&lt;p&gt;In gewisser Weise sehe ich die Mikrowelle als Küchengerät zweiter Klasse – ich
verwende sie halt zum Auftauen von Sachen, oder mache mal eine Tasse Glühwein
darin heiß, aber zum wirklichen Kochen kommt sie nie zum Einsatz. Und früher
hatte sie gelegentlich noch einen Nebenjob in der sicheren Entsorgung von
Datenträgern – also Daten-CDs braten (super Schauspiel, aber lasst Euch nicht
von Eurer Frau dabei erwischen...).&lt;/p&gt;
&lt;h1&gt;Leistungsstufen&lt;/h1&gt;
&lt;p&gt;Als erstes wollen wir mal die Leistungsaufnahme verifizieren. Dazu verwenden
wir einen meiner Smartplugs mit Energiemessfunktion. Dann stellen wir  ein Glas
Wasser rein und schalten es ein.  Die Messdaten holen wir uns dabei direkt vom
Smartplug, auf dem die ESPhome Firmware läuft. Dafür nehmen wir unser
&lt;a href="https://github.com/philpagel/ESPhomelogger"&gt;esphomelogger tool&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;esphomelogger test-plug -P Foo3ar5ecret &amp;gt; log.tsv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;... und laden die Daten in R, um hübsche Plots zu machen.&lt;/p&gt;
&lt;p&gt;Das Gerät hat insgesamt 5 Leistungsstufen, also wollen wir mal erforschen,
welcher Leistung die entsprechen. Wir fangen bei Stufe 1 an, lassen
ca. 1.5 Minuten laufen, dann 30s Pause und weiter auf Stufe 2 – da capo al fine:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/microwave-oven/img/power.png" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht, regelt das Gerät nicht die Strahlungsleistung per se herunter,
sondern die mittlere Leistung durch Pulswellenmodulation, d.h. es wird eine
Weile eingestrahlt, dann einen Moment Pause, wieder einstrahlen etc.  Da unsere
sampling-Rate 1s beträgt haben wir die kurzen Einstrahlungsperioden auf
Stufe 1 sicherlich nicht voll erwischt und so scheint es, als würde teils mit
reduzierter Leistung mikrowelliert.&lt;/p&gt;
&lt;p&gt;Die maximale Leistung beträgt etwa 1150W (gestrichelte rote Line) und das Gerät
verbraucht für Licht und Drehteller ca. 41 W (gestrichelte grüne Line).  Also
bleiben noch &lt;span class="math"&gt;\(1150 - 41 = 1109\text{W}\)&lt;/span&gt; für die "Heizung". Soviel also zu meinem
Gedächtnis...&lt;/p&gt;
&lt;h1&gt;Heizleistung&lt;/h1&gt;
&lt;p&gt;Nun stehen aber auch diese rund 1110 W Heizleistung nicht komplett für unser
Mittagessen zur Verfügung, denn das
&lt;a href="https://de.wikipedia.org/wiki/Magnetron"&gt;Magnetron&lt;/a&gt; wird sicher keinen
100%igen Wirkungsgrad haben. Also machen wir mal ein kleines Experiment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Doppelwandiges Glas&lt;/li&gt;
&lt;li&gt;250g Wasser&lt;/li&gt;
&lt;li&gt;Digitalthermometer mit K-Typ Fühler&lt;/li&gt;
&lt;li&gt;Mikrowelle auf höchste Stufe (also ununterbrochene Einstrahlung)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/microwave-oven/img/experimental-setup.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wir messen zunächst die Ausgangstemperatur &lt;span class="math"&gt;\(\vartheta_0\)&lt;/span&gt;, lassen dann die
Mikrowelle eine Weile laufen und bestimmen danach die erreichte Temperatur
&lt;span class="math"&gt;\(\vartheta_1\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Zu Beginn hatte das Wasser 20.3°C und nach 2 Minuten in der Mikrowelle habe ich
schnell mit einem kleinen Holzspießchen umgerührt, damit die Temperatur im Glas
halbwegs homogen ist und dann 77.2°C gemessen.&lt;/p&gt;
&lt;p&gt;Die &lt;a href="https://de.wikipedia.org/wiki/Spezifische_Wärmekapazität#Werte_für_ausgewählte_Materialien"&gt;spezifische Wärmekapazität von
Wasser&lt;/a&gt;
beträgt ca. &lt;span class="math"&gt;\(4.18 \frac{\text{kJ}}{\text{kg} \cdot \text{K}}\)&lt;/span&gt; und ist definiert als&lt;/p&gt;
&lt;div class="math"&gt;$$
c = \frac{\Delta Q}{m \cdot \Delta \vartheta}
$$&lt;/div&gt;
&lt;p&gt;, wobei&lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(Q\)&lt;/span&gt;: zugeführte Wärme [J]&lt;br&gt;
&lt;span class="math"&gt;\(m\)&lt;/span&gt; : Masse des Wassers&lt;br&gt;
&lt;span class="math"&gt;\(\Delta \vartheta\)&lt;/span&gt;: Temperaturunterschied [K]&lt;/p&gt;
&lt;p&gt;Nun nach &lt;span class="math"&gt;\(\Delta Q\)&lt;/span&gt; auflösen und unsere Messwerte einsetzen:&lt;/p&gt;
&lt;div class="math"&gt;$$
\Delta Q = c \cdot m \cdot \Delta \vartheta
$$&lt;/div&gt;
&lt;div class="math"&gt;$$
\Delta Q = 4.18 kJ/kg \cdot 0.250kg \cdot (77.2°C - 20.3°C)
$$&lt;/div&gt;
&lt;div class="math"&gt;$$
\Delta Q = 4.18 kJ/kg/K \cdot 0.250kg \cdot 56.9K
$$&lt;/div&gt;
&lt;div class="math"&gt;$$
\Delta Q = 59.5 kJ
$$&lt;/div&gt;
&lt;p&gt;Nun kennen wir die zugeführte Energie in kJ. Um auf die Heizleistung &lt;span class="math"&gt;\(P\)&lt;/span&gt; zu
kommen, müssen wir durch die Zeit teilen:&lt;/p&gt;
&lt;div class="math"&gt;$$
\Delta Q = P \cdot \Delta t
$$&lt;/div&gt;
&lt;div class="math"&gt;$$
P = \Delta Q / \Delta t = 59500 J / 120s = 496 W
$$&lt;/div&gt;
&lt;p&gt;Wie wir oben überschlagen hatten, hat das Magnetron ca. 1110W Eingangsleistung.
Also beträgt der Wirkungsgrad &lt;span class="math"&gt;\(496W / 1110W = 44.7\%\)&lt;/span&gt;. Wikipedia sagt, ein
Magnetron habe "bis zu 80%" Wirkungsgrad und für
&lt;a href="https://de.wikipedia.org/wiki/Mikrowellenherd#Wirkungsgrad"&gt;Mikrowellenherde&lt;/a&gt;
werden 65% angegeben. Also ist meine alte Mikrowelle nicht so die
effizienteste. Aber wenn man bedenkt, dass Sie ca. 30 Jahre alt ist dürfte das
schon plausibel sein.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Managing ESPhome configs</title><link href="https://techbotch.org/blog/ESPhome-configs/index.html" rel="alternate"/><published>2022-11-27T00:00:00+01:00</published><updated>2022-11-27T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-11-27:/blog/ESPhome-configs/index.html</id><summary type="html">&lt;p&gt;Wie Ihr Euch vielleicht erinnert, hatte ich ein kleines
&lt;a href="https://techbotch.org/blog/freezer-zero-energy/index.html"&gt;Gefrierschrank-Malheur&lt;/a&gt;
das auf dem versehentlichen Ausschalten eines Smartplugs beruhte. Das ist
natürlich ärgerlich! Und wenn ich so darüber nachdenke, wäre das auch sehr
vermeidbar gewesen, wenn denn der Schalter am Smartplug deaktiviert gewesen
wäre. Also habe ich mir ein alternatives Konfig-File …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wie Ihr Euch vielleicht erinnert, hatte ich ein kleines
&lt;a href="https://techbotch.org/blog/freezer-zero-energy/index.html"&gt;Gefrierschrank-Malheur&lt;/a&gt;
das auf dem versehentlichen Ausschalten eines Smartplugs beruhte. Das ist
natürlich ärgerlich! Und wenn ich so darüber nachdenke, wäre das auch sehr
vermeidbar gewesen, wenn denn der Schalter am Smartplug deaktiviert gewesen
wäre. Also habe ich mir ein alternatives Konfig-File für den nous &lt;em&gt;A1T
Smartplug&lt;/em&gt; gebaut, bei dem der Schalter inaktiv ist.&lt;/p&gt;
&lt;p&gt;Da ich inzwischen diverse Geräte habe, auf denen eine ESPhome Firmware läuft
habe ich mir ein modulares Konfigurationsschema eingerichtet und ich dachte
mir, ich zeige Euch das heute mal.&lt;/p&gt;
&lt;h1&gt;Modularität&lt;/h1&gt;
&lt;p&gt;Praktischerweise ist es nämlich möglich, in ESPhome Config Files wieder andere
Files zu importieren. Z.B. sieht mein Config File (&lt;code&gt;espresso.yml&lt;/code&gt;) für den
Sonoff S20, der die Espressomaschine steuert so aus: &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;substitutions:
  devicename: &amp;quot;espresso&amp;quot;

packages:
  base: !include lib/base.yml
  sonof-s20t: !include lib/sonoff-s20.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das ist sehr übersichtlich. Hier werden nur Dinge konfiguriert, die spezifisch
für genau dieses Gerät sind. Alles andere wird importiert. Auf diese Weise kann
ich auch sehr bequem Updates oder Änderungen auf alle Geräte ausrollen und
halte die Config-Dateien schön einfach.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;base.yml&lt;/code&gt; finden sich, wie schon angemerkt, die Konfigurationselemente,
die für alle ESPhome Devices gelten. Z.B. die WLAN Konfiguration, Captive
Portal Zugangsdaten etc.:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# common settings  for all ESP devices

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: on

  ap:
    ssid: &amp;quot;${devicename}-AP&amp;quot;
    password: !secret ap_password

api:
  password: !secret api_password

ota:
  password: !secret api_password

captive_portal:

time:
  - platform: homeassistant
    id: homeassistant_time

logger:

web_server:
  port: 80

sensor:
  - platform: wifi_signal
    name: &amp;quot;${devicename} - Wifi Signal&amp;quot;
    update_interval: 60s
    icon: mdi:wifi

  - platform: uptime
    name: &amp;quot;${devicename} - Uptime&amp;quot;
    update_interval: 60s
    icon: mdi:clock-outline

text_sensor:
  - platform: wifi_info
    ip_address:
      name: &amp;quot;${devicename} - IP Address&amp;quot;
    ssid:
      name: &amp;quot;${devicename} - Wi-Fi SSID&amp;quot;
    bssid:
      name: &amp;quot;${devicename} - Wi-Fi BSSID&amp;quot;
  - platform: version
    name: &amp;quot;${devicename} - ESPHome Version&amp;quot;
    hide_timestamp: true

binary_sensor:
  - platform: status
    name: &amp;quot;${devicename} - Status&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wie man sieht sind keine echten Passwörter hinterlegt und so kann ich diese
Datei hier problemlos teilen. Letzte sind &lt;code&gt;secrets.yml&lt;/code&gt; gespeichert (diesmal
natürlich mit geänderten Passworten):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wifi_ssid: &amp;quot;mySSID&amp;quot;
wifi_password: &amp;quot;My wifipassword&amp;quot;
ap_password: &amp;quot;My Accesspoint password&amp;quot;
api_password: &amp;quot;My APIpassword&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Die Sonoff-S20 spezifischen Config Elemente stehen wiederum in &lt;code&gt;sonoff-s20.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# sonoff S20 common settings

esphome:
  name: $devicename
  comment: &amp;quot;Sonoff S20 Smartplug&amp;quot;
  name_add_mac_suffix: false

esp8266:
  board: esp8285
  restore_from_flash: true

binary_sensor:
- platform: gpio
  pin:
    number: GPIO0
    mode:
      input: true
      pullup: true
    inverted: true
  name: &amp;quot;Button&amp;quot;
  on_press:
    - switch.toggle: relay

switch:
- platform: gpio
  name: &amp;quot;${devicename} Relay&amp;quot;
  pin: GPIO12
  id: relay
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und mit der Zeit entsteht so ein hübsch aufgeräumter Baum von Config-Elementen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;.
├── dryer.yml
├── espresso.yml
├── freezer.yml
├── fridge.yml
├── lib
│   ├── base.yml
│   ├── nous-a1t-noswitch.yml
│   ├── nous-a1t.yml
│   ├── secrets.yaml
│   ├── sonoff-base.yml
│   └── sonoff-s20.yml
├── secrets.yaml -&amp;gt; lib/secrets.yaml
├── shop-heater.yml
├── washer.yml
└── wine-fridge.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ein YAML File für jedes Gerät, das sich aus den generischen Configs im &lt;code&gt;lib/&lt;/code&gt;
Folder bedient.&lt;/p&gt;
&lt;p&gt;Und man kann sehen, dass ich nun für den &lt;code&gt;nous A1T&lt;/code&gt; Smartplug eine alternative
Config &lt;code&gt;nous-a1t-noswitch.yml&lt;/code&gt; angelegt habe, die dem Knopf des Plugs keine
Funktion zuweist, so dass man ihn nicht manuell schalten kann.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Gefrierschrank ohne Stromverbrauch – Dieser Life-Hack wird Dein Leben verändern!</title><link href="https://techbotch.org/blog/freezer-zero-energy/index.html" rel="alternate"/><published>2022-11-26T00:00:00+01:00</published><updated>2022-11-26T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-11-26:/blog/freezer-zero-energy/index.html</id><summary type="html">&lt;p&gt;In einem kürzlichen Post hatten wir uns damit beschäftigt, wieviel Strom ein Tiefkühler verbraucht und wie sich die eingestellte Temperatur auf den Verbrauch auswirkt. Diesmal verrate ich euch den Trick, den die Kühlgeräteindustrie unter Verschluss halten will: Wir senken den Stromverbrauch auf &lt;strong&gt;Null&lt;/strong&gt;!&lt;/p&gt;</summary><content type="html">&lt;p&gt;In einem &lt;a href="https://techbotch.org/blog/freezer-energy-consumption/index.html"&gt;kürzlichen
Post&lt;/a&gt; hatten wir
uns damit beschäftigt, wieviel Strom ein Tiefkühler verbraucht und wie sich die
eingestellte Temperatur auf den Verbrauch auswirkt.&lt;/p&gt;
&lt;p&gt;Natürlich hat mich das Thema nicht losgelassen und ich habe mich weiter damit
beschäftigt und kann Euch heute den &lt;strong&gt;ultimativen&lt;/strong&gt; Stromspartrick
für Euren Gefrierschrank verraten!&lt;/p&gt;
&lt;h1&gt;Tiefkühler mit &lt;strong&gt;Null Stromverbrauch&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;Nein – Ihr braucht kein Perpetuum Mobile oder ähnlichen Quatsch! Es ist
wirklich super einfach und absolut jeder kann den Stromverbrauch seiner
Haushaltsgeräte mit diesem simplen Trick auf Null kWh drücken. Garantiert!&lt;/p&gt;
&lt;p&gt;Glaubt Ihr nicht? Hier der Beweis:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/freezer-zero-energy/freezer-zero-engergy.png" /&gt;&lt;/p&gt;
&lt;p&gt;Jetzt seid Ihr platt, was?&lt;/p&gt;
&lt;h1&gt;Das Geheimnis&lt;/h1&gt;
&lt;p&gt;Wie ich das hinbekommen habe?&lt;/p&gt;
&lt;p&gt;Naja, also äh. Im Wesentlichen muss man versehentlich den kleinen Knopf am
Wifi-Smartplug drücken und auf diese Weise das angeschlossene Gerät
ausschalten. Dann geht der Energieverbrauch zuverlässig auf Null runter –
versprochen. &lt;/p&gt;
&lt;p&gt;Gibt es sonst irgendwas zu beachten? &lt;/p&gt;
&lt;p&gt;Ja: Tiefkühlgut hält sich ungekühlt nicht lange und so ist es ratsam, den
gesamten Inhalt umgehend in den Müll zu werfen. Einiges kann auch auf den
Kompost (Pizza, Tk-Brötchen oder Obst und Gemüse).&lt;/p&gt;
&lt;p&gt;Das man sich damit bei seiner Gattin unbeliebt macht muss ich nicht extra
erwähnen, oder? Keine Ahnung, wie ich das hingekriegt habe – vielleicht waren
es ja auch die Katzen...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>LINUX auf einem TC241W Thin Client?</title><link href="https://techbotch.org/blog/linux-on-TC241W-thinclient/index.html" rel="alternate"/><published>2022-11-20T00:00:00+01:00</published><updated>2022-11-20T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-11-20:/blog/linux-on-TC241W-thinclient/index.html</id><summary type="html">&lt;p&gt;Landläufig sagt man Windows ja nach ein rücksichtsloser Ressourcenfresser zu
sein. Jeder der schonmal versucht hat Windows auf einem Rechner zu betreiben,
der exakt den offiziellen Minimalanforderungen genügt, weiß, dass das kein Spaß
ist. Microsoft weiß das natürlich auch, aber es ist auch verständlich, dass sie
am Markt der Uraltcomputer …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Landläufig sagt man Windows ja nach ein rücksichtsloser Ressourcenfresser zu
sein. Jeder der schonmal versucht hat Windows auf einem Rechner zu betreiben,
der exakt den offiziellen Minimalanforderungen genügt, weiß, dass das kein Spaß
ist. Microsoft weiß das natürlich auch, aber es ist auch verständlich, dass sie
am Markt der Uraltcomputer nur wenig interessiert sind. Etwas anders sieht die
Sache aus, wenn das betreffende Gerät ein Thinclient ist – der soll ja keine
großen Funktionen haben, sondern nur einen Remote-Login ermöglichen. Und so gab
es früher sowas wie &lt;em&gt;Windows 7 embedded&lt;/em&gt; – also ein ordentlich abgespecktes
Windows für solche Teile. Heute gibt's das nicht mehr separat, aber dennoch kann
man z.B. ein extrem abgespecktes Win10 vom normalen Installationsmedium
aufspielen.&lt;/p&gt;
&lt;p&gt;Um alten Computern zum normalen Gebrauch neues Leben einzuhauchen, kann man aber
LINUX installieren und ein sparsames Desktop Environment verwenden.  Auf diese
Weise werden auch uralte Gurken oft wieder richtig benutzbar. Diese Strategie
verwenden auch viele Organisationen, die gespendete alte Computer auf diese
Weise für die Empfänger wieder flott machen. Auch bei uns gibt es so einen
Verein und kürzlich habe ich auf diesem Weg diverse Hardware einem vernünftigen
Zweck zugeführt, die bei mir nur so lange Staub gesammelt hätte, bis ich sie
dann doch irgendwann entsorgt hätte.&lt;/p&gt;
&lt;h1&gt;Thinclient Challenge&lt;/h1&gt;
&lt;p&gt;Wie es der Zufall so will habe ich gerade ganz frisch eine ganze Ladung
ausrangierte Thinclients in die Hände bekommen. Solchen Geräten kann ich
bekanntermaßen nicht widerstehen und habe sie, zum Verdruss meiner Frau, nun im
Wohnzimmer stehen. &lt;/p&gt;
&lt;p&gt;Konkret handelt es sich um Samsung TC241W Thinclients und die haben eine
Besonderheit: Das sind All-in-one Geräte, also 24" Monitore mit integriertem
Thinclient. Sehen für ihr Alter noch erstaunlich modern aus und kamen mit Win 7
embedded 32bit.&lt;/p&gt;
&lt;p&gt;Die Ausstattung ist erwartungsgemäß moderat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AMD G-T40N CPU, dual core, 1GHz&lt;/li&gt;
&lt;li&gt;2 GB RAM&lt;/li&gt;
&lt;li&gt;8 GB SSD&lt;/li&gt;
&lt;li&gt;AMD Radeon HD 6250 Grafik&lt;/li&gt;
&lt;li&gt;24" Bildschirm, 1920x1080&lt;/li&gt;
&lt;li&gt;2 Lautsprecher integriert&lt;/li&gt;
&lt;li&gt;4x USB2.0&lt;/li&gt;
&lt;li&gt;DVI out&lt;/li&gt;
&lt;li&gt;RS232&lt;/li&gt;
&lt;li&gt;Gigabit LAN&lt;/li&gt;
&lt;li&gt;Audio Line in, mic, headphone&lt;/li&gt;
&lt;li&gt;VGA in&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;RAM und Disk kann man ja tauschen, aber die CPU wird wohl der totale Engpass
werden.  &lt;a href="https://www.cpubenchmark.net/cpu.php?cpu=AMD+G-T40N&amp;amp;id=265"&gt;Passmark&lt;/a&gt;
gibt dem Prozessor sagenhaft jämmerliche 299 Punkte. Mein aktuelles Laptop ist
50 mal schneller und selbst mein HP T520 Thinclient bringt doppelt so viel
Wumms.  Wobei letzterer sich als Minimal-Server für eine
Homeassistant-Installation erstaunlich gut schlägt.&lt;/p&gt;
&lt;h1&gt;Schmalspur Desktop-Computer&lt;/h1&gt;
&lt;p&gt;Bleibt die Frage, was man mit denen noch sinnvolles machen kann. Und so will
ich mal testen, ob man auf so eingeschränkter Hardware ein Desktop Linux System
zum Laufen bekommt und ob das so schmerzhaft in der Benutzung ist, wie ich es
mir gerade vorstelle.&lt;/p&gt;
&lt;p&gt;Tatsächlich wollen wir das mal mit Xubuntu versuchen. Also garnicht sooo minimal.
Bin gespannt, ob es sich auf so wenig Disk überhaupt installieren lässt...&lt;/p&gt;
&lt;p&gt;Also den Installations-Stick einstecken, einschalten und dann im Windows
&lt;em&gt;Shift-Reboot&lt;/em&gt;. Dann wie verrückt Esc, F1, F2 und so drücken und hoffen, dass uns
das ins BIOS bringt. Tut es – gut. Dort den USB-Stick zum präferierten Boot-Device 
machen und neu starten. &lt;/p&gt;
&lt;p&gt;Und tatsächlich bootet er vom Stick und die Xubuntu Installation nimmt ihren
Lauf.  Allerdings hat das Teil keinen Wlan-Adapter und ich keine Lust ein
Ethernetkabel zu holen und so musste der Installer erstmal darauf verzichten,
die Pakete zu aktualisieren. Aber egal – zum ersten Testen soll es reichen. &lt;/p&gt;
&lt;h1&gt;Usability Test&lt;/h1&gt;
&lt;p&gt;Also eine richtige Rakete ist er nicht geworden – das kann ich gleich sagen.&lt;/p&gt;
&lt;p&gt;Der Boot-Vorgang ist mit nur 38s bis zum Login-Screen noch erfreulich schnell.
Login hingegen finde ich schon eher grenzwertig: zwar reagiert er sofort nach der
Passworteingabe, aber bis der Desktop dann wirklich komplett mit allen Icons
und Gedöns da ist vergehen satte 20 Sekunden. Spritzig ist anders.&lt;/p&gt;
&lt;p&gt;LibreOffice Writer braucht so 9 bis 10 Sekunden bis es komplett betriebsbereit
ist und Firefox ohne irgendwelche Plugins 11 Sekunden.&lt;/p&gt;
&lt;p&gt;Sobald die Anwendungen aber geöffnet sind reagieren die Menüs recht prompt und
fühlen sich fast normal an. Sobald man irgendwas intensiveres anfordert dauert es 
dann halt wieder ein bisschen.&lt;/p&gt;
&lt;p&gt;Internet surfen geht schon, aber Firefox rendert eher gemütlich. YouTube
funktioniert auch einigermaßen: Am Anfang jedes Videos ist ein bisschen Geduld
gefragt, aber dann kann man ganz ok zusehen. &lt;/p&gt;
&lt;h1&gt;Speichersituation&lt;/h1&gt;
&lt;p&gt;Als nächstes habe ich mal in der Bastelkiste nach einem USB-Wlan-Adapter
gegraben und dann alle Pakete updaten lassen. Während das Update lief ist ihm
eigentlich komplett der Festplattenplatz ausgegangen; irgendwie hat er es
dennoch geschafft das komplett durchzuziehen ohne abzuschmieren. Im Anschluss
habe ich noch schnell mit &lt;code&gt;sudo apt clean&lt;/code&gt; wieder ein bisschen Platz gemacht.
Von der 7GB SSD gehen 0.5GB für die Boot-Partition drauf und uns bleiben auf
&lt;code&gt;/dev/sda1&lt;/code&gt; noch 1.3GB zur freien Verfügung. Wenn das kein Luxus ist. D.h. die
Festplatte ist ein ziemlicher Flaschenhals bei der ganzen Sache – mit den 2GB
RAM scheint das System ganz gut zurecht zu kommen, solang wir uns auf ein
bisschen Schreiben, Email lesen und Web Surfen beschränken, aber eigene Dateien
sollten wir uns eher nicht wünschen...&lt;/p&gt;
&lt;h1&gt;Zweiter Versuch: Debian i386 (32bit)&lt;/h1&gt;
&lt;p&gt;Nun war es vielleicht keine so gute Idee, auf so schwacher Hardware ein 64bit
System zu installieren. Also versuchen wir mal 32bit. Aber (X)Ubuntu
unterstützt das nicht mehr.  Also greifen wir zum guten alten Debian.&lt;/p&gt;
&lt;p&gt;Die Installation verlief gewohnt problemlos. Im Gegensatz zu Ubuntu ist Debian
von Haus aus aber frei von unfreier Software. Wir brauchen aber die nicht ganz
so freien AMD Radeon Firmware, damit die Grafikkarte vernünftig geht. Also:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo vi /etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und dort bei den ganzen deb Zeilen am Ende noch &lt;code&gt;contrib non-free&lt;/code&gt; hinzufügen
und schon können wir das nötige nachinstallieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo apt update
sudo apt install firmware-amd-graphics
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Rechner neu starten und schon sieht das alles manierlich aus.&lt;/p&gt;
&lt;p&gt;Wirklich schneller ist er dadurch nicht geworden – war ja auch nicht zu
erwarten. Dafür sieht es nun besser aus in Sachen Festplatte: Wir haben nun
unglaubliche 2.2GB zur freien Verfügung. Allerdings installiert Debian
standardmäßig auch weniger Software.&lt;/p&gt;
&lt;h1&gt;Hackability&lt;/h1&gt;
&lt;p&gt;Na dann wollen wir dem Gerät mal ins Innere blicken. Das ist allerdings
garnicht so einfach, denn im Gegensatz zu meinen alten HP-Thinclients ist
dieser von Samsung nicht sehr wartungsfreundlich! Man muss ziemlich am
Plastikgehäuse rumbasteln, um selbiges auf zu bekommen. Dazu legen wir den
Monitor mit dem Screen nach unten auf den Tisch. Als nächstes brauchen wir so
einen flachen Mini-Spatel (aka Spudger):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/linux-on-TC241W-thinclient/spudger.jpg" class= "Large" alt="Metall-Hebel-Werkzeug aka spudger
auf dem Holztisch"&gt;&lt;/p&gt;
&lt;p&gt;Den setzen wir nun an verschiedenen Stellen in die Fuge zwischen den beiden
Hälften des Plastikgehäuses und tasten uns langsam seitlich vor bis eine
besonders enge, feste Stelle kommt.  Dort hebeln wir nun vorsichtig, aber auch
energisch bis das obere Plastikteil mit einem leichten Knacken oder Krachen aus
der Halterung springt. Auf diese Weise arbeiten wir uns rund ums gesamte
Gehäuse bis wir die hintere Plastikabdeckung abnehmen können und mit dem
nüchternen Anblick der blechernen Rückseite belohnt werden:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/linux-on-TC241W-thinclient/inside.jpg" class= "Large" alt="View from the bac of the opened case."&gt;&lt;/p&gt;
&lt;p&gt;Nachdem das endlich geschafft ist müssen wir nun die Blechabdeckung entfernen.
Dazu ziehen wir erstmal die beiden kleinen Stecker, die man am unteren Bildrand
sieht. Nun lässt sich der Blechdeckel leicht entfernen und nach oben klappen,
darin findet sich die Elektronik:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/linux-on-TC241W-thinclient/inside2.jpg" class= "Large" alt="Blick auf Netzteil und Mainboard."&gt;&lt;/p&gt;
&lt;p&gt;Links ist das Netzteil zu sehen und rechts das Mainboard – jeweils von hinten.
Um an die Vorderseite zu gelangen, müssen wir die vier Schrauben in den Ecken
lösen und auch die Schauben DVI und RS232 Port, sonst bekommt man das
Board nicht heraus. Und hier ist die Vorderseite:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/linux-on-TC241W-thinclient/mainboard.jpg" class= "Large" alt="Mainboard Vorderseite"&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht, sieht man nicht viel: Ein riesen CPU-Kühler, die ganzen Anschlüsse,
ein einzelner Slot für den RAM-Riegel und ein mini-PCIe Slot mit der SSD drin.&lt;/p&gt;
&lt;h1&gt;Upgrade&lt;/h1&gt;
&lt;p&gt;Nun könnte man auf den abwegigen Gedanken kommen, das Ding aufzurüsten – z.B.
mit 8GB und einer 128GB SSD. Die wären für 32€ bzw. 22€ online zu haben.  Das
würde natürlich kein normal denkender Mensch machen.&lt;/p&gt;
&lt;p&gt;Aber falls man es doch tun sollte und dann wieder ein Debian installiert
würde man folgendes sehen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           785M  1.2M  784M   1% /run
/dev/sda1       116G  3.3G  107G   3% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           785M   52K  785M   1% /run/user/1000


$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       237Mi       7.1Gi       1.0Mi       330Mi       6.8Gi
Swap:          975Mi          0B       975Mi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und wie benutzbar fühlt sich das Ganze nun an?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zeit für Boot: 38s&lt;/li&gt;
&lt;li&gt;Startzeit LibreOffice: 9s&lt;/li&gt;
&lt;li&gt;Firefox: 12s&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hm. Im Klartext: Die Aufrüstung bringt garnichts in Sachen Geschwindigkeit.
Schade.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Man kann auf dem Gerät in der Tat einfache Arbeiten machen, aber man sollte
schon ein eher geduldiges Gemüt haben. Die mikroskopische SSD ist unangenehm,
kann aber getauscht werden, ebenso wir das RAM. Aber gegen die unterirdisch
langsame CPU ist kein Kraut gewachsen.&lt;/p&gt;
&lt;p&gt;Auf der Plus-Seite ist zu bemerken, dass der Bildschirm durchaus OK ist – die
Auflösung passt und auch der Kontrast ist in Ordnung.  Am besten wäre es wohl,
den eingebauten Thinclients still zulegen und durch einen Raspberry Pi oder
besseren Thinclient zu ersetzen. Nur schade, dass es nur einen VGA-Eingang gibt
und nichts digitales. Vielleicht würde es sich lohnen, das interne
Video-Flachbandkabel zu nutzen – vielleicht ist es DVI? Aber das muss warten –
vielleicht gehe ich das ein anderes mal an. Und der VGA-Eingang wartet auch
noch darauf, mal getestet zu werden.&lt;/p&gt;
&lt;p&gt;Alles in Allem würde ich sagen, man kann die Kiste für kleine Projekte
verwenden, die entweder ganz ohne GUI auskommen, oder eine sehr einfache
Anwendung erfordern: als Linux-basierter Kiosk, interaktives Kunstwerk oder
sowas. Als Desktop Computer ist er nicht zumutbar.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Strombegrenzer Glühbirne</title><link href="https://techbotch.org/blog/current-limiter-lamp/index.html" rel="alternate"/><published>2022-11-19T00:00:00+01:00</published><updated>2022-11-19T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-11-19:/blog/current-limiter-lamp/index.html</id><summary type="html">&lt;p&gt;Ich versuche mich gerne an Reparaturen elektrischer Geräte. Wenn diese den Geist
aufgeben, sind oft diverse Bauteile "abgeraucht" und die Schaltung verhält sich
dann beim Einschalten auf interessante Weise anders, als vorgesehen.
Und wenn es dumm läuft hat das Gerät durch den Defekt einen Kurzschluss in der
Schaltung, oder zumindest …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich versuche mich gerne an Reparaturen elektrischer Geräte. Wenn diese den Geist
aufgeben, sind oft diverse Bauteile "abgeraucht" und die Schaltung verhält sich
dann beim Einschalten auf interessante Weise anders, als vorgesehen.
Und wenn es dumm läuft hat das Gerät durch den Defekt einen Kurzschluss in der
Schaltung, oder zumindest fließt mehr Strom, als vorgesehen. &lt;/p&gt;
&lt;p&gt;Beim Reparaturversuch tauscht der geneigte Bastler nun also den einen oder
anderen Elko oder vielleicht eine Diode und der Form halber noch einen
Widerstand etc. Nun sollte eigentlich alles wieder funktionieren. Eigentlich –
oft tut es das aber noch nicht und anstatt uns mit tadelloser Funktion zu
erfreuen brennen die soeben eingelöteten Bauteile erneut durch, weil wir eben
doch nicht alle Probleme entdeckt hatten. Das ist frustrierend und kostet Zeit
und Geld.&lt;/p&gt;
&lt;p&gt;Nun könnte man irgendwie vorsichtiger zu Werke gehen. Nur wie? Bei kleinen
Schaltungen mit ein paar Volt Versorgungsspannung nehme ich dann mein
Labornetzteil und stelle an selbigem die Strombegrenzung ein. Auf diese Weise
bekommt meine 5V Platine dann nur ein paar mA und nicht alles was geht. Oft
verhindert diese Maßnahme das sonst unvermeidliche Kondensatorfeuerwerk.&lt;/p&gt;
&lt;p&gt;Aber was machen wir mit Geräten, die mit 230V versorgt werden und z.B. das
Netzteil selbst im Verdacht steht, des Übels Wurzel zu sein?&lt;/p&gt;
&lt;h1&gt;Herr Edison zu Hilfe!&lt;/h1&gt;
&lt;p&gt;Im Netz habe ich irgendwann mal ein coolen Trick gelesen, der bei Radiofreunden
und anderen Elektrobastlern beliebt und an Einfachheit kaum zu überbieten ist:
Wir schalten eine altmodische Glühbirne in Serie! Wichtig: es muss eine echte
Glühbirne sein, keine LED oder Leuchtstofflampe!&lt;/p&gt;
&lt;p&gt;Solange nur ein relativ geringer Strom fließt, stört die Lampe den Stromfluss
kaum. Wenn das dahinter geschaltete Gerät sich aber einen richtig dicken Schluck
Elektronen gönnen will, dann wird die Birne heiß und fängt an zu leuchten. Dabei
steigt ihr Widerstand ordentlich an. Das hat zwei Vorteile: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Das Leuchten zeigt uns an, dass da mehr Strom fließt, als gewünscht.&lt;/li&gt;
&lt;li&gt;Das zu reparierende Gerät wird vor noch höheren Strömen geschützt.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mit anderen Worten: die Glühbirne ist ein Kaltleiter! Und Kaltleiter (PTC
Widerstände) verwendet man bekanntlich in Schaltungen als Überstromschutz.&lt;/p&gt;
&lt;h1&gt;Glühbirnen Kennlinen&lt;/h1&gt;
&lt;p&gt;Die Glühbirne wird hier ja wegen ihrer Kaltleiter-Eigenschaft als eine Art
Sicherung missbraucht. Und um das besser zu verstehen, werden wir mal ein paar
Glühbirnen genauer untersuchen.&lt;/p&gt;
&lt;p&gt;Konkret habe ich drei Glühbirnen mit jeweils 40W, 60W und 150W Leistungsangabe
durchgemessen. D.h. ich habe mit dem Variac verschiedene Spannungen zwischen
≈1V bis 240V angelegt und den Strom gemessen (&lt;a
href="https://techbotch.org/blog/current-limiter-lamp/ui-characteristic.csv" type="text/csv"&gt; Daten hier&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Aus Strom und Spannung können wir dann noch Leistung (P[W]) und den Widerstand
(R[Ω]) ausrechnen. Und diese ganzen Werte wollen wir nun einmal gegeneinander
plotten:&lt;/p&gt;
&lt;h2&gt;Strom gegen Spannung&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/UI-plot.png" class="Large" alt="Kennline Strom vs. Spannung"&gt;&lt;/p&gt;
&lt;p&gt;Das erste das auffällt ist, dass die Linien keine Geraden sind, wie es sich für 
einen anständigen ohm'schen Widerstand gehören würde, sondern die Kurve sich 
mit zunehmender Spannung abflacht. Ein &lt;em&gt;Kaltleiter&lt;/em&gt; eben.&lt;/p&gt;
&lt;h2&gt;Leistung gegen Spannung / Strom&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/UP-plot.png" class="Large" alt="Kennline Leistung vs. Spannung"&gt;
&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/AP-plot.png" class="Large" alt="Kennline Leistung vs. Strom"&gt;&lt;/p&gt;
&lt;p&gt;Auch hier ist natürlich die Kaltleitereigenschaft zu sehen. Vor allem aber hat
mich verblüfft, wie gut die Leistung bei 230V mit der Nennleistung
übereinstimmt. D.h. wer kein Energiemessgerät hat wäre tatsächlich garnicht
schlecht beraten, seine &lt;a href="https://techbotch.org/blog/power-sensor-calibration2/index.html"&gt;Energiemessstecker mittels einer Referenzglühbirne zu
kalibrieren&lt;/a&gt;...&lt;/p&gt;
&lt;h2&gt;Widerstand gegen Spannung&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/UR-plot.png" class="Large" alt="Kennline Widerstand vs. Spannung"&gt;&lt;/p&gt;
&lt;p&gt;In diesem Plot können wir schön sehen, wie der Widerstand sich bei zunehmender Spannung
um ein Vielfaches steigert: Z.B. startet die 150W Birne mit knapp 26Ω (bei 1.156V) und 
steigert sich auf knapp 350Ω (bei 240V). Das ist das 13.5 fache.&lt;/p&gt;
&lt;h2&gt;Widerstand gegen Strom&lt;/h2&gt;
&lt;p&gt;Nun kommen wir zu meiner Lieblingskurve:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/AR-plot.png" class="Large" alt="Kennline Widerstand vs. Strom"&gt;&lt;/p&gt;
&lt;p&gt;Der Strom durch den Glühwendel heizt selbigen auf und lässt den Widerstand
stark steigen. Das zeigt uns, welche Schutzwirkung die Glühbirne entfaltet, wenn sie
in Serie zu unserem Messobjekt geschaltet wird.&lt;/p&gt;
&lt;h2&gt;Temperaturkennline&lt;/h2&gt;
&lt;p&gt;Noch schöner wäre es natürlich, den Widerstand direkt gegen die Temperatur
darstellen zu können.  Dazu habe ich erstmal mein Infrarotthermometer
rausgekramt. Allerdings musste ich dabei lernen, dass es mir nicht möglich war
auch nur einigermaßen zuverlässige Temperaturwerte zu erheben. Ob es am Glas
der Birne lag oder eher daran, dass der Glühwendel sehr klein ist kann ich
nicht sagen, aber ich habe diesen Ansatz schnell aufgegeben. &lt;/p&gt;
&lt;p&gt;Was also tun? &lt;/p&gt;
&lt;p&gt;Eine Möglichkeit wäre, die Glühbirne in den Backofen zu stecken und dann den
Widerstand zu messen. Allerdings ist das ziemlich aufwändig und ich habe grade
keine hitzefeste Fassung da. Auch würden wir damit nur den unteren Bereich
abdecken, denn unsere Birne wird bei haushaltsofenüblichen Temperaturen kaum
das leuchten anfangen. Nicht einmal auf ein Glimmen dürften wir hoffen.&lt;/p&gt;
&lt;p&gt;Also hilft nur schummeln und ein paar Werte nachschlagen. Glühwendel sind aus
Wolfram und schlaue Leute haben für gängige Materialien bereits wichtige
Eigenschaften ermittelt. So habe ich den folgenden Artikel gefunden:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Electrical Resistivity of Selected Elements
P. D. Desai, T. K. Chu, H. M. James, and C. Y. Ho
&lt;em&gt;Journal of Physical and Chemical Reference Data&lt;/em&gt; 13, 1069 (1984)
doi:&lt;a href="https://doi.org/10.1063/1.555723"&gt;10.1063/1.555723&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://srd.nist.gov/JPCRD/jpcrd258.pdf"&gt;download link&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dort wurde unter anderem Wolfram vermessen. Abbildung 10 (auf Seite 1093 bzw.
S. 25 im PDF) zeigt den spezifischen Widerstand in Abhängigkeit von der
Temperatur.&lt;/p&gt;
&lt;p&gt;Der &lt;em&gt;spezifische Widerstand&lt;/em&gt; ist definiert als &lt;/p&gt;
&lt;div class="math"&gt;$$\rho = R \cdot \frac{A}{l}$$&lt;/div&gt;
&lt;p&gt;wobei &lt;span class="math"&gt;\(A\)&lt;/span&gt; die Querschnittsfläche und &lt;span class="math"&gt;\(l\)&lt;/span&gt; die Länge des Leiters sind.&lt;/p&gt;
&lt;p&gt;Wenn wir also Durchmesser und Länge des Glühfadens und
&lt;span class="math"&gt;\(\rho_\text{Wolfram}\)&lt;/span&gt;kennen würden, könnten wir also den Widerstand berechnen:&lt;/p&gt;
&lt;div class="math"&gt;$$ R = \rho \cdot \frac{l}{A} $$&lt;/div&gt;
&lt;p&gt;Ich würde Euch die Originalabbildung gerne hier zeigen, aber leider ist meine
Anfrage beim Journal zwecks Genehmigung noch unbeantwortet.&lt;/p&gt;
&lt;!--
&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/TR-plot-nist.png" class="Large"&gt;
--&gt;

&lt;p&gt;Aber um dem mathematischen Zusammenhang zwischen spezifischem Widerstand ρ und
der Temperatur nachzugehen, habe ich die o.g. Abbildung mit
&lt;a href="https://markummitchell.github.io/engauge-digitizer/"&gt;Engauge&lt;/a&gt; digitalisert.
Das ist ein sehr nützliches Werkzeug, um aus einer Abbildung wieder Daten zu
erzeugen. Man lädt die Abbildung einfach in das Programm, markiert den
Nullpunkt und bekannte Positionen auf beiden Achsen und im Anschluss jede
Menge Punkte auf der Kurve. Engauge rechnet dann aus, welche Koordinaten die
Punkte haben und man kann das Ganze in CSV exportieren und weiter verarbeiten.&lt;/p&gt;
&lt;p&gt;Und das machen wir jetzt mal – als erstes plotten wir die Daten nochmal:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/TR-plot-nist2.png" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wie in der Originalgrafik ist die Temperatur in K und der spezifische
Widerstand in &lt;span class="math"&gt;\(10^{-8}\Omega\text{m}\)&lt;/span&gt; angegeben. &lt;/p&gt;
&lt;p&gt;Wie man leicht sehen kann, ist der Zusammenhang nicht linear. In der Praxis
geht es aber oft um relative kleine Temperaturbereiche, so dass eine lineare
Näherung ausreichend ist. Entsprechend wird meist der &lt;em&gt;lineare
Temperatrkoeffizient&lt;/em&gt; angegeben. Laut Wikipedia liegt er für Wolfram und
Temperaturen in der Nähe von 20°C bei &lt;span class="math"&gt;\(\alpha = 4.4\cdot 10^{-3}
\text{K}^{-1}\)&lt;/span&gt;.  Der Widerstand verändert sich um 0.44 % mit jedem Grad
Temperaturunterschied.&lt;/p&gt;
&lt;p&gt;Mal sehen, ob wir das anhand unserer Daten reproduzieren können. Als erstes
müssen wir mal einen Ausschnitt der Daten nehmen, der so in der Gegend von 20°C
liegt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; dat2
temp resistivity
 178        2.85
 195        3.30
 209        3.59
 223        3.94
 241        4.30
 256        4.67
 275        5.08
 301        5.71
 322        6.11
 344        6.59
 364        7.08
 396        7.77
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mit ein wenig Interpolation finden wir &lt;span class="math"&gt;\(\rho_\text{293.15K} = 5.499\)&lt;/span&gt;. Und damit
können wir den Faktor &lt;em&gt;f&lt;/em&gt; berechnen und ein lineares Modell fitten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;dat2 &amp;lt;- transform(dat2, f=resistivity/5.499)
&amp;gt; lm(f~temp, dat2)

Call:
lm(formula = f ~ temp, data = dat2)

Coefficients:
(Intercept)         temp  
   -0.19610      0.00407
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;D.h. wir kommen auf &lt;span class="math"&gt;\(\alpha = 4.07\cdot10^{-3} \text{K}^{-1}\)&lt;/span&gt; Garnicht schlecht
für Daten, die wir aus einer alten unscharfen Abbildung extrahiert haben.&lt;/p&gt;
&lt;p&gt;Da wir es aber mit einer Glühbirne zu tun haben müssen wir deutliche 
Temperaturunterschiede abbilden und brauchen ein polynomiales Modell und sollten statt
des Faktors &lt;em&gt;f&lt;/em&gt; besser direkt den spezifischen Widerstand modellieren.&lt;/p&gt;
&lt;p&gt;Also fitten wir mal ein quadratisches Modell:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; summary( lm(resistivity~poly(temp,2), dat) )

Call:
lm(formula = resistivity ~ poly(temp, 2), data = dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.7260 -0.2218  0.0072  0.2518  1.0673 

Coefficients:
               Estimate Std. Error t value Pr(&amp;gt;|t|)    
(Intercept)     44.5695     0.0288 1547.36   &amp;lt;2e-16 ***
poly(temp, 2)1 310.7857     0.3207  968.96   &amp;lt;2e-16 ***
poly(temp, 2)2  16.3832     0.3207   51.08   &amp;lt;2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3207 on 121 degrees of freedom
Multiple R-squared:  0.9999,    Adjusted R-squared:  0.9999 
F-statistic: 4.707e+05 on 2 and 121 DF,  p-value: &amp;lt; 2.2e-16
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;OK – alle Terme sind signifikant, also in der nächsten Runde ein polynomiales
Modell dritten Grades. Wieder alle signifikant. Und so weiter, bis ...&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; summary( lm(resistivity~poly(temp,5), dat) )

Call:
lm(formula = resistivity ~ poly(temp, 5), data = dat)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.32042 -0.07610  0.00384  0.07709  0.30683 

Coefficients:
                 Estimate Std. Error  t value Pr(&amp;gt;|t|)    
(Intercept)     44.569452   0.009989 4461.861   &amp;lt;2e-16 ***
poly(temp, 5)1 310.785659   0.111233 2794.016   &amp;lt;2e-16 ***
poly(temp, 5)2  16.383215   0.111233  147.288   &amp;lt;2e-16 ***
poly(temp, 5)3  -2.815581   0.111233  -25.313   &amp;lt;2e-16 ***
poly(temp, 5)4   1.749259   0.111233   15.726   &amp;lt;2e-16 ***
poly(temp, 5)5  -0.024603   0.111233   -0.221    0.825    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1112 on 118 degrees of freedom
Multiple R-squared:      1, Adjusted R-squared:      1 
F-statistic: 1.566e+06 on 5 and 118 DF,  p-value: &amp;lt; 2.2e-16
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;... der Term fünften Grades schließlich nicht mehr signifikant ist.&lt;/p&gt;
&lt;p&gt;D.h. wir brauchen ein Modell vierten Grades um die Daten zu fitten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; lm(f~poly(temp,4), dat)

Call:
lm(formula = f ~ poly(temp, 4), data = dat)

Coefficients:
   (Intercept)  poly(temp, 4)1  poly(temp, 4)2  poly(temp, 4)3  poly(temp, 4)4  
        8.1050         56.5168          2.9793         -0.5120          0.3181  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und was lernen wir daraus über die Temperatur der Glühbirne?&lt;/p&gt;
&lt;p&gt;Die 40W Birne hat bei Raumtemperatur einen Widerstand von 98 Ohm. Bei 230V
leuchtet sie hell und ihr Widerstand steigt auf 1.31 kOhm. Also ein Faktor von
13.4&lt;/p&gt;
&lt;p&gt;D.h. Anhand unseres Modells können wir nun auf die Temperatur schließen. Zwar
kennen wir die Geometrie des Glühfadens nicht, aber das macht nichts, denn wir
sind nur an der relativen Veränderung interessiert. Der spezifische Widerstand
bei 20°C beträgt &lt;span class="math"&gt;\(5.499\cdot 10^{-8}\text{Ωm}\)&lt;/span&gt;. Wenn wir das mit 13.4
multiplizieren bekommen wir &lt;span class="math"&gt;\(73.69\cdot 10^{-8}\text{Ωm}\)&lt;/span&gt;. Und das entspricht
nach unseren Daten einer Temperatur von ca. 2480K (=2207°C).&lt;/p&gt;
&lt;h2&gt;Zeitverlauf&lt;/h2&gt;
&lt;p&gt;Die obigen Kennlinien zeigen den Steady-State – also einen Stromkreis im
seelischen Gleichgewicht. Darüber hinaus interessiert uns das
Reaktionsverhalten unserer Glühbirnen-Sicherung. Also wie schnell der
Widerstand eigentlich steigt, wenn man Strom drauf gibt. Das ist natürlich eine
nicht unerhebliche Eigenschaft eines Bauteils das als Überstromschutz
dienen soll.&lt;/p&gt;
&lt;p&gt;Unser Experiment is simpel: einfach volle Netzspannung auf die Glühbirne geben
und messen, wie schnell der Strom abnimmt. Denn anfangs sollte er um einiges
größer sein, weil der Glühwendel ja noch nicht heiß ist.&lt;/p&gt;
&lt;p&gt;Das ist schon anspruchsvoller zu messen, denn wie jeder aus Erfahrung weiß, ist
eine normale Glühbirne quasi instantan an, sobald man den Schalter betätigt.
Also ist das ein Job für's Oszilloskop.  &lt;/p&gt;
&lt;p&gt;Zur Strommessung könnte man einen Shunt-Widerstand in Serie zur Lampe schalten
und dann über selbigem die Spannung messen. Allerdings ist es überhaupt keine
gute Idee, einfach mit einem normalen Tastkopf an Stromkreisen mit Netzspannung
herum zu messen. Im besseren Fall braucht man ein neues Oszilloskop, im
schlechteren ein neues Leben. Warum das so ist übergehe ich hier – das ist
vielleicht mal einen eigenen Post wert.&lt;/p&gt;
&lt;p&gt;Ein Differentialtastkopf wäre eine Möglichkeit, aber noch viel entspannter
geht das mit einem Stromwandlerkopf (aka Stromzange), der nur um einen Leiter
herum angelegt werden muss. Im Inneren sitzen dann eine Spule (und für
Gleichstrom ein Hall-Effekt-Sensor) in der dann vom Strom ein Magnetfeld
induziert wird. Ein Differenzverstärker im Kopf liefert das Signal ans Oszi.
Ich habe einen einigermaßen bezahlbaren von Hantek (CC-65), der zwar ziemlich
rauscht, aber für unsere Zweck völlig ausreichend ist.&lt;/p&gt;
&lt;p&gt;Also: Spannung aus, Trigger am Oszi einstellen, Stromzangenkopf um eines der
Kabel und Strom wieder an (230V). Screenshots vom Oszi sehen meist nicht so toll
aus und so habe ich die Daten exportiert und lade sie in R.
Ein Oszilloskop misst nur Spannungen, d.h. als erstes habe ich die Spannungswerte anhand
des Umrechnungsfaktors des Stromwanderkopfs in Ampere umgerechnet (1mV/100mA).
Und so sieht nun unser Stromverlauf aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/time-amp.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Zunächst ist da nur das Grundrauschen des Tastkopfs. Bei t=0s hat das
Oszilloskop getriggert.  Die allererste (positive) Halbwelle ist abgeschnitten
(ADC overflow), aber man kann erahnen, dass sie wohl über 3A erreicht haben
dürfte. Die negative haben wir voll eingefangen.  Und man kann sehr schön
sehen, wie die Welle innerhalb von ≈100ms auf ihre endgültige Amplitude
gedämpft wird.&lt;/p&gt;
&lt;h1&gt;Die Komfort-Version der Vorschaltbirne&lt;/h1&gt;
&lt;p&gt;In der Vergangenheit habe ich das gelegentlich als fliegenden Aufbau
zusammengeschustert, aber das ist nicht das gelbe vom Ei. Und so bauen wir
heute mal eine etwas aufgeräumtere und komfortablere Variante der
Glühbirnen-Strombegrenzung.&lt;/p&gt;
&lt;p&gt;Hier meine Wunschliste:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zweipoliger Hauptschalter, damit das Gerät auch wirklich spannungsfrei wird&lt;/li&gt;
&lt;li&gt;Spannungsanzeige, falls ich noch einen Regeltrafo davor schalte&lt;/li&gt;
&lt;li&gt;Stromanzeige zur groben Orientierung&lt;/li&gt;
&lt;li&gt;Buchsen zur Strom- und Spannungsmessung mit dem Multimeter, wenn's mal
  genauer sein muss&lt;/li&gt;
&lt;li&gt;Lampentest-Schalter, um bequem zu testen, ob die Birne auch ok ist&lt;/li&gt;
&lt;li&gt;Umschaltung auf Direktbetrieb (also ohne Vorschaltbirne)&lt;/li&gt;
&lt;li&gt;Sicherung, um auch im Direktbetrieb einen Basis-Schutz zu haben und das Amperemeter zu 
  schützen.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die echten Freaks da draußen bauen dann auch gleich noch einen mehrfach
Umschalter ein mit dem man zwischen Glühbirnen mit unterschiedlicher Leistung
wählen kann. Das spare ich mir und schraube dann halt nach Bedarf die richtige
ein.&lt;/p&gt;
&lt;p&gt;Die Schaltung ist recht simpel – hier mein Entwurf in KiCAD:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/schematics.png" &gt;&lt;/p&gt;
&lt;p&gt;Nachdem das Ganze nicht dafür gedacht ist Schweißgeräte zu reparieren, sondern
kleinere Geräte mit vielleicht maximal hundert Watt, oder so, sollte eine 3A
Sicherung dicke reichen und auch unser Amperemeter soll diesen Bereich
abdecken.&lt;/p&gt;
&lt;p&gt;Die Frontplatte habe ich in Inkscape entworfen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/frontpanel.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und damit ich mir beim Bohren/Sägen der Ausschnitte leichter tue habe ich in
einem zweiten Layer anhand der Datenblätter meiner diversen Elemente Löcher in 
korrekter Größe eingezeichnet:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/cutouts.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Die genaue Lage der Bauelemente ist im Wesentlichen von ästhetischem Wert – außer
bei den beiden Buchsen für die Strommessung. Denn wenn kein Messgerät
dranklemmt muss da ein Kurzschlussstecker dran, damit Strom fließen kann. Und
der hat einen Steckerabstand von 19mm. Die müssen also exakt eingehalten
werden.  Legt man beides übereinander und erhöht die Transparenz des
Frontpanels sieht man alles zusammen und kann prüfen, ob alles passt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/both.png" class="Large"&gt;&lt;/p&gt;
&lt;h1&gt;Bau&lt;/h1&gt;
&lt;p&gt;Das Gehäuse ist ein einfaches Industriegehäuse (263x182x95mm) aus grauem Plastik.
Normalerweise gilt bei mir ja das Motto "Schritt 1: mitgelieferte Schrauben und
Dübel wegwerfen und vernünftige nehmen.". Und was soll ich sagen? Der Verkäufer des Gehäuses
kennt das offenbar auch:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/case-bolts.jpg" class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das finde ich mal sehr sympathisch. ;-)&lt;/p&gt;
&lt;p&gt;Die Schablone für die Ausschnitte drucken wir nun aus und kleben sie mit einem
Klebestift auf die Frontplatte. Achtung: aufpassen, dass beim Drucken nicht
irgendwie skaliert wird – sonst passt am Ende nix.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/template.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Wer genau hinschaut wird feststellen, dass ich beim Ausschnitt für den
mittleren Schalter links irgendwie die Maße verpfuscht habe – das Loch muss
genauso groß sein, wie das obere. Aber egal – das können wir dann beim Sägen
korrigieren.&lt;/p&gt;
&lt;p&gt;Nun können wir in aller Ruhe die diversen Löcher bohren (Stufenbohrer und
Lochsäge sind hier sehr hilfreich). Für die rechteckigen Ausschnitte bohren wir
erstmal Löcher mit 5mm in die Ecken (am besten mit einem Holzbohrer mit
Zentrierspitze) und schneiden dann den Rest mit der Laubsäge aus wobei wir
einen kleinen Rand lassen.  Dann mit einem soliden Teppichmesser (nicht die
Dinger zum Abbrechen, sondern stabile) vorsichtig an die angezeichnete Line
heranarbeiten und zum Schluss alles mit der Feile glätten. V.a. bei runden
Ausschnitten bewährt sich ein Handentgrater.  Zuletzt den Deckel schön in
warmem Wasser einweichen und die Schablone wieder ablösen. Ein paar Löcher kann
man mangels brauchbarer Datenblätter der Bauteile erst anzeichnen und bohren,
wenn der Haupt-Ausschnitt gemacht ist.  Z.B. für die Steckdose oder die beiden
Drehspulinstrumente.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/cutouts.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Bei der linken Spannungsbuchse ist mir der Bohrer verlaufen – sie sitzt
etwas zu hoch und zu weit rechts. Aber das gibt dem Gerät Charakter ;-)&lt;/p&gt;
&lt;p&gt;Nun die diversen Schalter, Instrumente, etc. montieren.  &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/picture1.jpg" class="Large"&gt;
&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/picture2.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Eine Platine braucht es nicht – die paar Sachen lassen sich problemlos direkt
verkabeln. Dazu habe ich 1.5mm² Litze genommen und an die Enden Kabelschuhe
gecrimpt. Und wo es galt, Kabel zu verbinden kommen Wago Federklemmen zum
Einsatz.&lt;/p&gt;
&lt;p&gt;Hier ein Bild des Innenlebens:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/wiring.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Um Strom in das Ganze zu bekommen, verwende ich einen Kaltgerätestecker. In der
Regel kommt da ein normales Gerätekabel rein, aber alternativ habe ich auch ein
Kabel mit Kabelschuhen statt eines Schuko-Steckers, für den Fall dass ich den
Regeltrafo vorschalten will. Meiner hat nämlich nur Polklemmen.&lt;/p&gt;
&lt;p&gt;Und so sieht das gute Stück nun im fertigen Zustand aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/picture3.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Hier beim Lampen-Test:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/current-limiter-lamp/img/lamp-test.jpg" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Im echten Einsatz kommt dann das zu schützende Gerät an die eingebaute
Steckdose und los kann's geh'n.&lt;/p&gt;
&lt;p&gt;Ich finde, das ist ganz hübsch geworden. Zum Schluss noch die Beschriftung der
Schalter mit dem Label-Printer drucken.&lt;/p&gt;
&lt;h1&gt;Links&lt;/h1&gt;
&lt;p&gt;Wie bereits erwähnt habe ich das alles andere als erfunden. Viele Leute nutzen
diese Methode seit langer Zeit und im Netz finden sich diverse ähnliche
Projekte – einige davon erheblich elaborierter, als mein Aufbau. Über einige
davon bin ich bei meiner Recherche gestolpert und die möchte ich hier
verlinken:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.saintummers.at/bau/vlamp.html"&gt;https://www.saintummers.at/bau/vlamp.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=mo9wpPo1AXo"&gt;https://www.youtube.com/watch?v=mo9wpPo1AXo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.instructables.com/Light-Bulb-Current-Limiter/"&gt;https://www.instructables.com/Light-Bulb-Current-Limiter/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vintage-radio.com/projects/lamp-limiter.html"&gt;https://www.vintage-radio.com/projects/lamp-limiter.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.doktorsewage.com/tools-of-the-trade-light-bulb-limiter/"&gt;https://www.doktorsewage.com/tools-of-the-trade-light-bulb-limiter/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bristolwatch.com/load_lamp.htm"&gt;https://www.bristolwatch.com/load_lamp.htm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Gefrierschrank Stromverbrauch</title><link href="https://techbotch.org/blog/freezer-energy-consumption/index.html" rel="alternate"/><published>2022-10-21T00:00:00+02:00</published><updated>2022-10-21T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-10-21:/blog/freezer-energy-consumption/index.html</id><summary type="html">&lt;p&gt;Energiesparen ist das Motto der Stunde. Vor allem bezieht sich das auf Erdgas,
aber natürlich macht es Sinn, in allen Bereichen Energie zu sparen. Zum Einen
weil es Geldbeutel und Umwelt schont, zum Anderen, weil man bei Gasmangel eben
auch mit Strom Wärme erzeugen kann.&lt;/p&gt;
&lt;p&gt;Und so sind die Medien …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Energiesparen ist das Motto der Stunde. Vor allem bezieht sich das auf Erdgas,
aber natürlich macht es Sinn, in allen Bereichen Energie zu sparen. Zum Einen
weil es Geldbeutel und Umwelt schont, zum Anderen, weil man bei Gasmangel eben
auch mit Strom Wärme erzeugen kann.&lt;/p&gt;
&lt;p&gt;Und so sind die Medien und das Netz voll von Tipps zum Sparen. Smarte
Thermostate, Raumtemperatur senken, mit Sand abreiben statt Duschen, richtig
Lüften, Heizung warten lassen etc. etc. Aber welche Maßnahme ist wirklich
sinnvoll? Und wieviel kann ich damit sparen?&lt;/p&gt;
&lt;p&gt;Heute wollen wir uns mal eine Maßnahme herauspicken und untersuchen, was sie
bringt: Wie ändert sich der Stromverbrauch eines Tiefkühlers, wenn wir die
Solltemperatur ändern?&lt;/p&gt;
&lt;h1&gt;Der Prüfling&lt;/h1&gt;
&lt;p&gt;Ich habe im Hauswirtschaftsraum einen Tiefkühler von Liebherr stehen (GNP
1066-20). Als ich ihn gekauft hatte, war er in Energieffizienzklasse A++, durch
die Reform der Klassen ist er heute in Kategorie E zu finden.&lt;/p&gt;
&lt;p&gt;Der wird nur gelegentlich geöffnet und kühlt die Vorräte so vor sich hin. Ich
habe mal nachgeschaut und aktuell ist er auf eine Solltemperatur von -20°C
eingestellt. Das ist vermutlich kälter, als es sein muss. Im Netz habe ich
ziemlich durchgehend die Empfehlung gelesen den Tiefkühler auf -18°C
einzustellen, auch wenn das scheinbar alle nur voneinander abschreiben, denn
keine Seite hatte eine vernünftige, nachvollziehbare Begründung zu bieten.
Auch gab es zu der dort angegebenen Energieersparnis keinerlei Quellen, die man
prüfen könnte. Also: selbst ist der Mann.&lt;/p&gt;
&lt;h1&gt;Experiment&lt;/h1&gt;
&lt;p&gt;Zuerst wollte ich unseren "Hauptkühlschrank" in der Küche verwenden
(Kühl-/Gefrierkombi), aber der wird natürlich häufiger geöffnet und auch jeden
Tag anders. Z.B. recht lange nach dem Einkauf, nur kurz an anderen Tagen. Das
ist kein grundsätzliches Problem, aber es bedeutet, dass wir sehr viele Tage
einbeziehen müssen, um trotz der Variabilität belastbare Daten zu bekommen.
Deshalb nehmen wir den Tiefkühler im Hauswirtschaftsraum – der ist unser
Langzeit-Vorrat und wird entsprechend nur selten geöffnet. Und so fällt es
leicht, für die Auswertung eine Periode zu finden in der er garnicht
geöffnet oder sonstwie manipuliert wurde. &lt;/p&gt;
&lt;p&gt;Die Raumtemperatur um den Freezer ist recht konstant und wir werden sie ignorieren. &lt;/p&gt;
&lt;p&gt;Fragestellungen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gibt es einen signifikanten Unterschied im Energieverbrauch in Abhängigkeit der
eingestellten Temperatur von -20°C vs. -18°C?&lt;/li&gt;
&lt;li&gt;Wenn ja – wie groß ist dieser Unterschied?&lt;/li&gt;
&lt;li&gt;Wie groß ist die Variabilität im Verbrauch?&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Daten&lt;/h1&gt;
&lt;p&gt;Zunächst lassen wir den Freezer eine Weile in Ruhe bei -20°C laufen und
zeichnen dabei den Energieverbrauch auf. Nach ein paar Tagen schalten wir dann
auf -18 °C. Den Tag der Umschaltung streichen wir aus der Statistik, weil wir
hier ja einen Übergangszustand haben. &lt;/p&gt;
&lt;p&gt;Zuerst schauen wir uns mal an, wie der Energieverbrauch eines Tiefkühlers überhaupt
strukturiert ist:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/freezer-energy-consumption/power.png"&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht, läuft der Kühlkompressor ca. die Hälfte der Zeit. Dabei
verbraucht er so ca. 27W. In den Intervallen dazwischen verbraucht das Gerät
keinen Strom.&lt;/p&gt;
&lt;p&gt;Meine Messdaten decken den Zeitraum vom 4. bis 21.10. ab. Am 9.10. irgendwann
zwischen 15:00 und 16:00 habe ich dann die Temperatur auf -18°C umgestellt
(rote Line). Also schauen wir uns das mal an:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/freezer-energy-consumption/power2.png"&gt;&lt;/p&gt;
&lt;p&gt;Als erstes fallen diese Verbrauchs-Spitzen auf. Ich vermute dass es sich dabei
um die No-Frost Funktion handelt. Dabei heizt der Freezer kurzzeitig seinen
Kühlkreislauf auf, um eventuelles Eis oder Reif wieder loszuwerden.&lt;/p&gt;
&lt;p&gt;Einen Unterschied durch die Umstellung sieht man hier nicht, denn der
Energieverbrauch beim Kühlen bleibt natürlich der gleiche – was sich verändert
ist die Länge der Kühl-Intervalle. Das kann man tatsächlich mit bloßem Auge
erkennen, wenn man sich nur den Tag der Umstellung anschaut:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/freezer-energy-consumption/power3.png"&gt;&lt;/p&gt;
&lt;p&gt;Um nun den Energieverbrauch zu beurteilen schauen wir uns mal an, wie sich der
Tagesverbrauch verhält. Homeassistant summiert einfach den Verbrauch im Laufe
des Tages auf und setzt ihn dann um Mitternacht wieder auf 0 und das Spiel
beginnt von neuem:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/freezer-energy-consumption/consumption.png"&gt;&lt;/p&gt;
&lt;p&gt;Wenn wir die Tage mit No-Frost Aktivität, sowie den der Umstellung ignorieren,
dann bekommen wir folgende Zahlen:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Temperatur&lt;/th&gt;
&lt;th&gt;Tagesverbrauch [kWh]&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;-20°C&lt;/td&gt;
&lt;td&gt;0.33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-20°C&lt;/td&gt;
&lt;td&gt;0.32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-20°C&lt;/td&gt;
&lt;td&gt;0.33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-18°C&lt;/td&gt;
&lt;td&gt;0.28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-18°C&lt;/td&gt;
&lt;td&gt;0.28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-18°C&lt;/td&gt;
&lt;td&gt;0.28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-18°C&lt;/td&gt;
&lt;td&gt;0.28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-18°C&lt;/td&gt;
&lt;td&gt;0.28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-18°C&lt;/td&gt;
&lt;td&gt;0.28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-18°C&lt;/td&gt;
&lt;td&gt;0.29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-18°C&lt;/td&gt;
&lt;td&gt;0.29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-18°C&lt;/td&gt;
&lt;td&gt;0.29&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Also sinkt der Verbrauch auf &lt;span class="math"&gt;\(0.28 / 0.33 = 84.9\%\)&lt;/span&gt;. Ich spare also rund 15% Energie.
Das ist durchaus respektabel. Und statistisch signifikant ist es auch:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; V20 = c(0.33, 0.32, 0.33)
&amp;gt; V18 = c(.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.29, 0.29, 0.29)
&amp;gt; t.test(V20, V18, alternative=&amp;quot;greater&amp;quot;)

    Welch Two Sample t-test

data:  V20 and V18
t = 11.628, df = 3.0769, p-value = 0.0006061
alternative hypothesis: true difference in means is greater than 0
95 percent confidence interval:
 0.03465154        Inf
sample estimates:
mean of x mean of y 
0.3266667 0.2833333 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also &lt;span class="math"&gt;\(p=\)&lt;/span&gt;0.0006061&lt;/p&gt;
&lt;p&gt;An den Tagen mit no-frost bekommen wir &lt;span class="math"&gt;\(0.36/0.41 = 87.8\%\)&lt;/span&gt;. Es scheint auch,
dass der Abstand zwischen den no-frost Aktivitäten größer wird, aber wir haben
nicht genug Daten, um das wirklich behaupten zu können.&lt;/p&gt;
&lt;p&gt;Und zuguterletzt beantworten wir noch die Frage nach der Variabilität im
Verbrauch.  Wie wir oben gesehen haben ist die Variabilität bei konstanten
Bedingungen so gut wie null. Nur die No-Frost Aktivität bringt Variabilität
rein. Um also eine realistischere Idee für die Variabilität im normalen Alltag
zu bekommen schauen wir uns an, wie sich der Stromverbrauch der
Kühl-Gefrierkombi in der Küche im gleichen Zeitraum verhalten hat:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/freezer-energy-consumption/consumption-kombi.png"&gt;&lt;/p&gt;
&lt;p&gt;Unser Datensatz ist nicht besonders groß, aber für eine grobe Orientierung
sollte es reichen. Also rechnen wir mal ein paar Kennzahlen aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; Vkombi = c(1.01, 0.82, 0.89, 0.91, 0.98, 0.98, 0.85, 0.90, 0.87, 0.85, 0.93, 0.96, 0.95, 0.85, 0.90, 0.94, 0.98)
&amp;gt; max(Vkombi) - min(Vkombi)
[1] 0.19
&amp;gt; mean(Vkombi)
[1] 0.9158824
&amp;gt; sd(Vkombi)
[1] 0.05624265
&amp;gt; sd(Vkombi)/mean(Vkombi) * 100
[1] 6.140816
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Der Variationskoeffizient liegt also bei ca 6%. Das hängt aber alles natürlich
extrem vom konkreten Nutzungsverhalten ab: Wie oft wird die Tür geöffnet? Für wie
lang? Welche Temperatur haben die Lebensmittel beim einräumen? Wieviel (Masse)
Lebensmittel werden jeweils hinein gegeben und heraus geholt? Etc.&lt;/p&gt;
&lt;h1&gt;Modell&lt;/h1&gt;
&lt;p&gt;Als letztes möchte ich noch wissen, wie der Zusammenhang von Temperatur und
Stromverbrauch aussieht. Ist er linear? Oder quadratisch? &lt;/p&gt;
&lt;p&gt;Dazu brauchen wir erstmal mehr &lt;a href="https://techbotch.org/blog/freezer-energy-consumption/data.csv"&gt;Daten&lt;/a&gt;. Also habe ich noch
ein paar weitere Temperaturen eingestellt und den Verbrauch gemessen. Und so
decke ich nun den Bereich [-22, -14] in Schritten von 2°C ab:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/freezer-energy-consumption/TP-plot1.png", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;So vom Hinschauen könnte das eine Gerade sein, aber irgendwie schaut es leicht gekrümmt aus. Also 
testen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# lineares Modell fitten
model1 = lm(consumption~temp, dat)

# quadratisches Modell fitten
model2 = lm(consumption~poly(temp, 2), dat)

# Und testen, ob es einen signifikanten Unterschied gibt
anova(model1, model2)

    Analysis of Variance Table

    Model 1: consumption ~ temp
    Model 2: consumption ~ poly(temp, 2)
      Res.Df        RSS Df  Sum of Sq      F   Pr(&amp;gt;F)
    1     17 0.00075644
    2     16 0.00047141  1 0.00028503 9.6742 0.006732 **
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;D.h. das quadratische Modell (&lt;span class="math"&gt;\(\textit{consumption} = 0.01688 \cdot t^2 - 0.18354 \cdot t + 0.29368\)&lt;/span&gt;) passt
signifikant besser. Das passt auch zum visuellen Eindruck:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/freezer-energy-consumption/TP-plot2.png", class="Medium"&gt;
&lt;img src="https://techbotch.org/blog/freezer-energy-consumption/TP-plot3.png", class="Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und für Liebhaber von einfachen aber effektiven
&lt;a href="https://xkcd.com/2701/"&gt;Experten-Lösungen&lt;/a&gt; bekommt Ihr auch noch die
Augen-Zukneif-Methode, die ganz ohne Statistik funktioniert:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/freezer-energy-consumption/TP-plot4.png", class="Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Zwei Grad Unterschied bewirken tatsächlich eine spürbare Änderung des
Energieverbrauchs. Und wir haben nun selbst gemessene Zahlen und müssen nicht
blind glauben, was die ganzen Internetseiten so behaupten, also hat sich das
Ganze schon gelohnt.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Science &amp; Medicine"/></entry><entry><title>Power Sensor-Kalibrierung Teil 2</title><link href="https://techbotch.org/blog/power-sensor-calibration2/index.html" rel="alternate"/><published>2022-10-02T00:00:00+02:00</published><updated>2022-10-02T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-10-02:/blog/power-sensor-calibration2/index.html</id><summary type="html">&lt;p&gt;In einem kürzlichen
&lt;a href="https://techbotch.org/blog/esphome-sensor-calibration/index.html"&gt;Post&lt;/a&gt; hatten wir uns
mit der Kalibrierung von Smartplugs mit Energiemessfunktion befasst. Heute
wollen wir dem noch ein bisschen weiter auf den Grund gehen indem wir uns die
Hardware des Smartplugs mal genauer ansehen und versuchen, die Messung von
Strom, Spannung und Leistung genau nachzuvollziehen.&lt;/p&gt;
&lt;p&gt;Also Schraubenzieher …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In einem kürzlichen
&lt;a href="https://techbotch.org/blog/esphome-sensor-calibration/index.html"&gt;Post&lt;/a&gt; hatten wir uns
mit der Kalibrierung von Smartplugs mit Energiemessfunktion befasst. Heute
wollen wir dem noch ein bisschen weiter auf den Grund gehen indem wir uns die
Hardware des Smartplugs mal genauer ansehen und versuchen, die Messung von
Strom, Spannung und Leistung genau nachzuvollziehen.&lt;/p&gt;
&lt;p&gt;Also Schraubenzieher, Lupenbrille und Energiemessgerät gezückt und los geht's.&lt;/p&gt;
&lt;h1&gt;Smartplug Hardware&lt;/h1&gt;
&lt;p&gt;Als erstes wollen wir uns mal das Innenleben des Smartplugs genauer ansehen.
Dazu müssen wir den Aufkleber in der Dose abziehen und eine kleine Schraube
lösen (natürlich "Tamper-proof"/dreieckig, haha).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/power-sensor-calibration2/smartplug1.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Sobald wir die obere Abdeckung entfernt haben bekommen wir freien Blick ins Innere:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/power-sensor-calibration2/smartplug2.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Interessant finde ich das kleine schwarze Kabel und den lustigen Aufkleber an
der Gehäusewand  – das ist die WLAN-Antenne des ESP Chips. Die knibbeln wir
vorsichtig ab und drücken dann kräftig auf die Kontaktstifte, um die Schaltung
aus dem Gehäuse zu bekommen – ich habe dazu einen Schraubstock benutzt.&lt;/p&gt;
&lt;p&gt;Als nächstes versuchen wir mal, die diversen Komponenten zu identifizieren. Dabei 
beschränken wir uns erstmal auf ICs und ignorieren den Kleinkram. Also habe ich die 
Lupe rausgeholt und die Augen zusammen gekniffen und die so entzifferten Typencodes
in die Suchmaschine meiner Wahl getippt. Und dies habe ich gefunden:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IC&lt;/th&gt;
&lt;th&gt;Funktion&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ESP8266ex&lt;/td&gt;
&lt;td&gt;Microcontroller&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P25080H&lt;/td&gt;
&lt;td&gt;Flash Memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FT8440A&lt;/td&gt;
&lt;td&gt;step-down constant voltage supply&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BL0937&lt;/td&gt;
&lt;td&gt;Energy Metering IC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ich würde sagen, das ist alles wenig überraschend. ESP-Micro wussten wir eh
schon und Flash Memory braucht der halt, wenn es nicht gerade eine der
Versionen mit onboard Flash ist. Spannungsversorgung macht natürlich ebenfalls
Sinn. Das spannendste Element ist der BL0937 – das ist unser Energiemonitor.
Der scheint weitgehend kompatibel mit dem HLW8012 Zu sein, nach dem die
entsprechende
&lt;a href="https://esphome.io/components/sensor/hlw8012.html"&gt;Sensor-Komponente&lt;/a&gt; in
ESPhome benannt ist, die beide Chips unterstützt.&lt;/p&gt;
&lt;p&gt;Hier noch die Übersichtskarte zur Orientierung:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/power-sensor-calibration2/pcb-top-map.png" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/power-sensor-calibration2/pcb-bottom-map.png" class= "Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Hintergrund: BL0937 / HLW8012&lt;/h1&gt;
&lt;p&gt;Als erstes besorgen wir uns mal ein &lt;a href="https://techbotch.org/blog/power-sensor-calibration2/BL0937_V1.02_en.pdf"&gt;Datenblatt&lt;/a&gt;.
Und der Vollständigeit halber auch das für den HLW8012 – das ist allerdings nur
in &lt;a href="https://techbotch.org/blog/power-sensor-calibration2/HLW8012-HLW.pdf"&gt;Chinesisch&lt;/a&gt; zu finden und so habe ich es mit
Deep-L übersetzt und außer ein paar sehr amüsanten Stilblüten ist diese
&lt;a href="https://techbotch.org/blog/power-sensor-calibration2/HLW8012_en.pdf"&gt;Englische Version&lt;/a&gt; nun eigentlich ganz gut
verständlich.&lt;/p&gt;
&lt;p&gt;Der Schaltplan im Datenblatt sieht so aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/power-sensor-calibration2/bl0937-circuit.png" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Das Pendant aus dem Datenblatt des HLW8012 sieht so aus (leicht von mir bearbeitet):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/power-sensor-calibration2/hlw8012-circuit-diagram.png" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Also tatsächlich die gleiche Schaltung mit minimalen Detailunterschieden. Die
Messwerte überträgt der Chip indem er Impulse auf den Ausgängen &lt;code&gt;CF&lt;/code&gt; bzw. &lt;code&gt;CF1&lt;/code&gt;
sendet – die Frequenz der Impulse ist dann proportional zum Messwert.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CF&lt;/code&gt;: active Power [W]&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CF1&lt;/code&gt;: &lt;ul&gt;
&lt;li&gt;&lt;code&gt;SEL&lt;/code&gt;=0: Spannung [V] &lt;/li&gt;
&lt;li&gt;&lt;code&gt;SEL&lt;/code&gt;=1: Strom [A] &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Achtung: Der &lt;code&gt;SEL&lt;/code&gt; Pin verhält sich beim BL0937 exakt invers zum HLW8012. Und auch in der 
Referenzspannung &lt;span class="math"&gt;\(R_\text{ref}\)&lt;/span&gt; unterscheiden sich die beiden Chips:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BL0937: &lt;span class="math"&gt;\(U_\text{ref} = 1.218\text{V}\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;HLW8012: &lt;span class="math"&gt;\(U_\text{ref} = 2.43\text{V}\)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Spannungsmessung&lt;/h1&gt;
&lt;p&gt;Die Spannung wird im Plug über einen Spannungsteiler gemessen. Im Schaltbild
des BL0937 sind &lt;span class="math"&gt;\(6 \cdot 330\text{Ω} = 1980\text{Ω}\)&lt;/span&gt; und 1kΩ angegeben.
D.h. Unser Spannungsteiler hat das Verhältnis: &lt;/p&gt;
&lt;div class="math"&gt;$$ F_\text{div} = \frac{R_1 + R_2}{R_2} = \frac{1980\text{kΩ} + 1\text{kΩ}}{1\text{kΩ}}  = \frac{1981}{1} $$&lt;/div&gt;
&lt;p&gt;Und für die Spannungen gilt dann:&lt;/p&gt;
&lt;div class="math"&gt;$$ U_U = \frac{U}{F_\text{div}} $$&lt;/div&gt;
&lt;p&gt;Bei &lt;span class="math"&gt;\(U = 230\text{V}\)&lt;/span&gt; fallen also &lt;span class="math"&gt;\(U_U = \frac{230V}{1981} = 116\text{mV}\)&lt;/span&gt; an &lt;span class="math"&gt;\(R_2\)&lt;/span&gt; ab.&lt;/p&gt;
&lt;p&gt;Schauen wir nun aber mit der Lupe auf die Platine unseres Smartplugs finden sich
dort drei Widerstände á 680kΩ, sowie einer mit 1kΩ. Also&lt;/p&gt;
&lt;div class="math"&gt;$$ F_\text{div} = \frac{3 \cdot 680\text{kΩ} + 1\text{kΩ}}{1\text{kΩ}} = \frac{2041}{1} $$&lt;/div&gt;
&lt;p&gt;Also sehr ähnlich, aber nicht identisch.
Bei 230V: &lt;span class="math"&gt;\(U_U = \frac{230V}{2041} = 112.7\text{mV}\)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Das Datenblatt des BL0937 sagt, dass der Pin &lt;code&gt;VP&lt;/code&gt; ±141mV (RMS) verträgt. D.h.
die Werte sind gut gewählt, denn wir liegen nicht über dem Limit, aber auch
nicht zu weit darunter. Schließlich wird die Spannung dann mit einem ADC
konvertiert und es wäre ungünstig nur einen kleinen Teil des Messbereichs zu
nutzen.&lt;/p&gt;
&lt;p&gt;Laut Datenblatt errechnet sich die Frequenz &lt;span class="math"&gt;\(f_\text{U}\)&lt;/span&gt; des Signals auf Pin
&lt;code&gt;CF1&lt;/code&gt; in Abhängigkeit der Spannung &lt;span class="math"&gt;\(V_2\)&lt;/span&gt; über dem Widerstand &lt;span class="math"&gt;\(R_2\)&lt;/span&gt; des
Spannungsteilers wie folgt:&lt;/p&gt;
&lt;div class="math"&gt;$$ f_U = 15397 \frac{U_U}{U_\text{ref}} $$&lt;/div&gt;
&lt;p&gt;Also ist die Spannung am Pin &lt;code&gt;VP&lt;/code&gt;:&lt;/p&gt;
&lt;div class="math"&gt;$$ U_U = f_U \cdot \frac{U_\text{ref}}{15397} $$&lt;/div&gt;
&lt;p&gt;D.h. die Netzspannung &lt;span class="math"&gt;\(U\)&lt;/span&gt; beträgt&lt;/p&gt;
&lt;div class="math"&gt;$$ U = f_U \cdot \frac{U_\text{ref}}{15397} \cdot F_\text{div}$$&lt;/div&gt;
&lt;h1&gt;Strommessung&lt;/h1&gt;
&lt;p&gt;Im Schaltplan ist der &lt;a href="https://de.wikipedia.org/wiki/Shunt_(Elektrotechnik)"&gt;Shunt
Widerstand&lt;/a&gt; schön zu
erkennen und auch, wie über ihm die Spannung &lt;span class="math"&gt;\(U_I\)&lt;/span&gt; abgegriffen wird (Pins &lt;code&gt;IP&lt;/code&gt;/&lt;code&gt;IN&lt;/code&gt;
bzw. &lt;code&gt;V1P&lt;/code&gt;/&lt;code&gt;V1N&lt;/code&gt;). Aus diesem Spannungsabfall berechnet der Smartplug den Strom
dann mit dem Ohm'schen Gesetz:&lt;/p&gt;
&lt;div class="math"&gt;$$I = \frac{U_I}{R_\text{shunt}}$$&lt;/div&gt;
&lt;p&gt;Also haben wir bei &lt;span class="math"&gt;\(I = 16\text{A}\)&lt;/span&gt; Strom:&lt;/p&gt;
&lt;div class="math"&gt;$$ U_I = R_\text{shunt} \cdot I = 1\text{mΩ} \cdot 16\text{A} = 16\text{mV} $$&lt;/div&gt;
&lt;p&gt;Zulässig sind laut Datenblatt ±35mV (RMS).  Und auch hier wird in eine Frequenz
konvertiert. Laut Datenblatt so:&lt;/p&gt;
&lt;div class="math"&gt;$$ f_I = 94638 \frac{U_I}{U_\text{ref}} $$&lt;/div&gt;
&lt;p&gt;Also beträgt die Spannung über den Pins &lt;code&gt;IN&lt;/code&gt; und &lt;code&gt;IP&lt;/code&gt;:&lt;/p&gt;
&lt;div class="math"&gt;$$ U_I = f_I \cdot \frac{U_\text{ref}}{94638} $$&lt;/div&gt;
&lt;p&gt;Und das bedeutet für den Strom durch den Shunt:&lt;/p&gt;
&lt;div class="math"&gt;$$ I = \frac{U_I}{R_\text{shunt}} = f_I \cdot \frac{U_\text{ref}}{94638 \cdot R_\text{shunt}}$$&lt;/div&gt;
&lt;h1&gt;Leistungsmessung&lt;/h1&gt;
&lt;p&gt;Die Wirkleistung wird vom Chip aus Strom und Spannung berechnet und wiederum
als Frequenzsignal ausgegeben:&lt;/p&gt;
&lt;div class="math"&gt;$$ f_P = 1721506 \frac{U_U \cdot U_I}{U_\text{ref}^2}$$&lt;/div&gt;
&lt;p&gt;Und in der anderen Richtung:&lt;/p&gt;
&lt;div class="math"&gt;$$ U_U \cdot U_I = f_P \cdot \frac{U_\text{ref}^2}{1721506} $$&lt;/div&gt;
&lt;div class="math"&gt;$$ \frac{U}{F_\text{div}}  \cdot I \cdot R_\text{shunt} = f_P \cdot \frac{U_\text{ref}^2}{1721506} $$&lt;/div&gt;
&lt;div class="math"&gt;$$ P = U \cdot I = f_P \cdot \frac{U_\text{ref}^2 \cdot F_\text{div}}{1721506 \cdot R_\text{shunt}} $$&lt;/div&gt;
&lt;h1&gt;Umsetzung in ESPhome&lt;/h1&gt;
&lt;p&gt;In ESPhome haben wir drei Variable zur Konfiguration von Chip und  Beschaltung:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;model&lt;/code&gt; = "BL0937" / "HLW8012" / "CSE7759"&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voltage_divider&lt;/code&gt; = &lt;span class="math"&gt;\(F_\text{div}\)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;current_resistor&lt;/code&gt; = &lt;span class="math"&gt;\(R_\text{shunt}\)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Diese müssen korrekt gesetzt sein, sonst bekommen wir lustige Messwerte. In
unserem YAML File für ESPhome setzen wir also:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sensor:
  - platform: hlw8012   
    model: &amp;quot;BL0927&amp;quot;
    voltage_divider: &amp;quot;2041&amp;quot;
    current_resistor: &amp;quot;0.001&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und gehen mal eine Runde messen. Zunächst aber ohne Last, um den Verbrauch des
Smartplugs zu bestimmen:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Referenz&lt;/th&gt;
&lt;th&gt;Smartplug&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Spannung&lt;/td&gt;
&lt;td&gt;223.9 V&lt;/td&gt;
&lt;td&gt;269.5V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strom&lt;/td&gt;
&lt;td&gt;0.01 A&lt;/td&gt;
&lt;td&gt;0.00 A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leistung&lt;/td&gt;
&lt;td&gt;0.7 W&lt;/td&gt;
&lt;td&gt;0.00 W&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Und dann mit dem großen Heizlüfter als Last:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Referenz&lt;/th&gt;
&lt;th&gt;Smartplug&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Spannung&lt;/td&gt;
&lt;td&gt;219.0 V&lt;/td&gt;
&lt;td&gt;263.4 V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strom&lt;/td&gt;
&lt;td&gt;12.97 A&lt;/td&gt;
&lt;td&gt;13.303 A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leistung&lt;/td&gt;
&lt;td&gt;2831 W&lt;/td&gt;
&lt;td&gt;3191 W&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Nun den Verbrauch des Smartplugs rausrechnen und die Kalibrierfaktoren 
(&lt;span class="math"&gt;\(X_\text{ref} / X_\text{Smartplug}\)&lt;/span&gt;) ausrechnen:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Referenz&lt;/th&gt;
&lt;th&gt;Smartplug&lt;/th&gt;
&lt;th&gt;Kalibrierfaktor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Spannung&lt;/td&gt;
&lt;td&gt;219.0 V&lt;/td&gt;
&lt;td&gt;263.4 V&lt;/td&gt;
&lt;td&gt;0.8314351&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strom&lt;/td&gt;
&lt;td&gt;12.96 A&lt;/td&gt;
&lt;td&gt;13.303 A&lt;/td&gt;
&lt;td&gt;0.9742163&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leistung&lt;/td&gt;
&lt;td&gt;2830.3 W&lt;/td&gt;
&lt;td&gt;3191 W&lt;/td&gt;
&lt;td&gt;0.8869633&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Diese Kalibrierfaktoren bauen wir nun in unser yaml file ein:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Sensor:
  - platform: hlw8012
    model: ${hlw_model}
    sel_pin:
      number: GPIO12
      inverted: True
    cf_pin: GPIO04
    cf1_pin: GPIO05
    change_mode_every: 4
    current_resistor: ${current_res}
    voltage_divider: ${voltage_div}
    update_interval: 3s

    voltage:
      name: &amp;quot;${devicename} - Voltage&amp;quot;
      unit_of_measurement: V
      accuracy_decimals: 1
      icon: mdi:flash-outline
      filters:
        - multiply: 0.8314351
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wer keine Lust hat, den Faktor auszurechnen, kann auch einfach Wertepaare für
gemessenen und wahren Wert nehmen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;    voltage:
      name: &amp;quot;${devicename} - Voltage&amp;quot;
      unit_of_measurement: V
      accuracy_decimals: 1
      icon: mdi:flash-outline
      filters:
        - calibrate_linear:
            # measured -&amp;gt; true
            0.0 -&amp;gt; 0.0
            263.4 -&amp;gt; 219.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das &lt;code&gt;0.0 -&amp;gt; 0.0&lt;/code&gt; legt den Nullpunkt fest.&lt;/p&gt;
&lt;h1&gt;Stunde der Wahrheit&lt;/h1&gt;
&lt;p&gt;Nun sollte alles passen und das testen wir jetzt. Also wieder Heizlüfter
anwerfen, Verbrauch des Plugs abziehen und:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Referenz&lt;/th&gt;
&lt;th&gt;Smartplug&lt;/th&gt;
&lt;th&gt;Abweichung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Spannung&lt;/td&gt;
&lt;td&gt;215.4 V&lt;/td&gt;
&lt;td&gt;215.5 V&lt;/td&gt;
&lt;td&gt;0.046 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leistung&lt;/td&gt;
&lt;td&gt;2768 W&lt;/td&gt;
&lt;td&gt;2768.8 W&lt;/td&gt;
&lt;td&gt;0.029 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strom&lt;/td&gt;
&lt;td&gt;13.05 A&lt;/td&gt;
&lt;td&gt;13.031 A&lt;/td&gt;
&lt;td&gt;-0.146 %&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Sehr schön – das passt doch ganz hervorragend. In der Realität ist es garnicht 
so einfach, beide Geräte gleichzeitig abzulesen – am besten geht es zu zweit.
Insofern sind obige Abweichungen jedes mal ein bisschen anders.&lt;/p&gt;
&lt;p&gt;Es gibt ein &lt;a href="https://www.esphome-devices.com/devices/Nous-A1t"&gt;Template&lt;/a&gt; für
den Plug zum Download, das ich als Ausgangsbasis verwendet habe, um mein eigenes
&lt;a href="https://techbotch.org/blog/power-sensor-calibration2/nous-a1t.yml"&gt;Config-File&lt;/a&gt; zusammen zu bauen.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Taupunktberechnung in Homeassistant</title><link href="https://techbotch.org/blog/dewpoint-calculation-hassio/index.html" rel="alternate"/><published>2022-09-23T00:00:00+02:00</published><updated>2022-09-23T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-09-23:/blog/dewpoint-calculation-hassio/index.html</id><summary type="html">&lt;p&gt;In einem der letzten Posts hatten wir meine 433MHz Temperatur-Sensoren in
Homeassistant eingebunden. Das funktioniert nach wie vor gut und ich bin sehr
zufrieden.&lt;/p&gt;
&lt;p&gt;In dem Zusammenhang habe ich mich gefragt, wie ich eigentlich von Temperatur
und relativer Luftfeuchtigkeit zum Taupunkt komme – also der Temperatur, bei
das in der Luft …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In einem der letzten Posts hatten wir meine 433MHz Temperatur-Sensoren in
Homeassistant eingebunden. Das funktioniert nach wie vor gut und ich bin sehr
zufrieden.&lt;/p&gt;
&lt;p&gt;In dem Zusammenhang habe ich mich gefragt, wie ich eigentlich von Temperatur
und relativer Luftfeuchtigkeit zum Taupunkt komme – also der Temperatur, bei
das in der Luft gelöste Wasser zu kondensieren anfängt. Das kann relevant sein,
wenn im Winter die Außenwände sehr kalt werden – kommen sie unter den Taupunkt
wird die Wand auf Dauer feucht und es kann sich Schimmel bilden.&lt;/p&gt;
&lt;p&gt;Das kann ja nicht so schwierig sein – also suchen wir mal die nötigen Daten
dafür zusammen – dabei ist der Wikipedia Artikel zum
&lt;a href="https://de.wikipedia.org/wiki/Taupunkt#Berechnung_des_Taupunkts_von_feuchter_Luft"&gt;Taupunkt&lt;/a&gt;
hilfreich. Und dort finden wir:&lt;/p&gt;
&lt;div class="math"&gt;$$\varphi = \frac{p_s(\tau)}{p_s(\vartheta)}$$&lt;/div&gt;
&lt;p&gt;wobei &lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(\varphi\)&lt;/span&gt;: relative Luftfeuchtigkeit [%]&lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(p_s(\tau)\)&lt;/span&gt;: Sättigungsdampfdruck [hPa] bei Taupunkttemperatur &lt;span class="math"&gt;\(\tau\)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(p_s(\vartheta)\)&lt;/span&gt;: Sättigungsdampfdruck bei Raumtemperatur Temperatur &lt;span class="math"&gt;\(\varphi\)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Für den Sättigungsdampfdruck wird dort die &lt;em&gt;Magnus-Formel&lt;/em&gt; angegeben, die selbigen
näherungsweise angibt:&lt;/p&gt;
&lt;div class="math"&gt;$$p_s(\vartheta) = K_1 \cdot \exp\left(\frac{K_2 \cdot \vartheta}{K_3 +\vartheta}\right)$$&lt;/div&gt;
&lt;p&gt;wobei &lt;span class="math"&gt;\(K_1 = 6.112\)&lt;/span&gt; hPa&lt;/p&gt;
&lt;p&gt;Für den Sättigungsdampfdruck über Wasser gilt:&lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(K_2 = 17.62\)&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(K_3 = 243.12\)&lt;/span&gt; °C&lt;/p&gt;
&lt;p&gt;Für Innenräume passt das wohl, aber für den Außensensor brauchen wir auch Werte
für den Winter, also die Parameter &lt;span class="math"&gt;\(K_i\)&lt;/span&gt; für &lt;span class="math"&gt;\(p\)&lt;/span&gt; über Eis – und dafür gelten diese Werte:&lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(K_2 = 22.46\)&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(K_3 = 272.62\)&lt;/span&gt; °C&lt;/p&gt;
&lt;p&gt;Und um die Sache ein wenig interessanter zu machen gibt es auch noch
sogenanntes &lt;em&gt;unterkühltes Wasser&lt;/em&gt;, also flüssiges Wasser bei unter 0°C – dann
gelten wieder die ersten Werte. Aber unterkühltes Wasser kann mich mal und ich 
ziehe die Grenze bei 0°C , wie es sich für anständiges Wasser gehört!&lt;/p&gt;
&lt;p&gt;Nun können wir die Magnus-Formel in die erste Gleichung einsetzen und nach
&lt;span class="math"&gt;\(\tau\)&lt;/span&gt; auflösen und bekommen&lt;/p&gt;
&lt;div class="math"&gt;$$
\tau(\varphi, \vartheta) = K_3 \frac{
\frac{K_2 \cdot \vartheta}{K_3 + \vartheta} + \ln\varphi}
{\frac{K_2 \cdot K_3}{K_3 +\vartheta} - \ln\varphi}
$$&lt;/div&gt;
&lt;p&gt;Und wenn wir das in R schreiben sieht das so aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tau &amp;lt;- function(phi, theta){
    phi = phi / 100     # percent -&amp;gt; fraction
    K2 = ifelse(theta &amp;gt;= 0, 17.62, 22.46)
    K3 = ifelse(theta &amp;gt;= 0, 243.12, 272.62)
    K3 * ((K2*theta)/(K3+theta) + log(phi)) / ((K2*K3)/(K3+theta) - log(phi))
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sehr gut – nun können wir ein bisschen mit der Funktion spielen. Z.B. die
Grafik im Wikipedia-Artikel nachstellen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dewpoint-calculation-hassio/dewpoint.png", class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Passt perfekt!  Aber warum ist da nur der Bereich &lt;span class="math"&gt;\(\vartheta \ge 0\)&lt;/span&gt; °C gezeigt? &lt;/p&gt;
&lt;p&gt;Darum:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/dewpoint-calculation-hassio/dewpoint2.png", class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Da ist ein fieser Sprung bei &lt;span class="math"&gt;\(\vartheta = 0\)&lt;/span&gt;°C!&lt;/p&gt;
&lt;p&gt;Das ist zwar vom ästhetischen Standpunkt eine Zumutung, aber in der Praxis
irrelevant, denn es geht ja darum zu sehen, ob die Gefahr besteht, dass
Feuchtigkeit an der Wand kondensiert. Da es im Haus aber nie unter 0°C geht
ist die erste Grafik ausreichend.&lt;/p&gt;
&lt;h1&gt;Falsches Lüften&lt;/h1&gt;
&lt;p&gt;Eine spannende Anwendung dieser ganzen Formeln ist das richtige Lüften – v.a. für
kalte Keller. Viele Leute reißen einfach im Sommer die Kellerfenster auf und glauben
den Keller auf diese Weise trocken zu bekommen. Das Gegenteil ist meist der Fall. 
Denn dabei wird warme Sommerluft in den kalten Keller gebracht. Dort kühlt sie ab 
und verliert dabei die Fähigkeit so viel Wasser zu halten. Mit anderen Worten: 
Obwohl der Wassergehalt der Luft gleich bleibt steigt ihre relative Luftfeuchtigkeit 
und damit auch der Taupunkt und das Wasser kondensiert an der Kellerwand.
Und wenn das eine Weile so geht kann sich Schimmel bilden.
Und das gilt natürlich nicht nur für den Keller.&lt;/p&gt;
&lt;p&gt;Also ist es ratsam, bevorzugt dann zu lüften, wenn der Taupunkt draußen geringer
ist, als drinnen. Und schon ist der Bereich unter Null °C doch wieder relevant, denn 
wenn wir im Winter wissen wollen, ob es gerade günstig wäre zu lüften, müssen wir eben
auch mir Minusgraden umgehen. &lt;/p&gt;
&lt;p&gt;Also doch nochmal genauer nachlesen. So wie ich die Sache verstehe, ist das
Problem, dass eben nicht alles Wasser spontan einfriert, wenn die Temperatur
unter Null °C fällt. Und so können die Parameter für Wasser noch eine Weile
gelten, obwohl wir Frost haben – das oben verhöhnte unterkühlte Wasser... Hm. Im Grunde haben
wir drei Alternativen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;So tun, als wüssten wir nichts von der Formel über Eis und einfach die 
"normale" Kurve auch unter 0 °C anwenden.&lt;/li&gt;
&lt;li&gt;Mit dem Sprung leben.&lt;/li&gt;
&lt;li&gt;Irgendwie einen fließenden Übergang reinrechnen&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Auf Option 3 habe ich garkeine Lust, denn entweder macht man sowas korrekt oder
garnicht. Und da ich keine Lösung gefunden habe, wie man das richtig macht und
ich zudem vermute, dass es auch garnicht möglich ist, ohne so Dinge wie die
Dauer für die diese Temperatur schon herrscht und vermutlich noch vieles mehr
zu berücksichtigen, lassen wir das schön bleiben.&lt;/p&gt;
&lt;p&gt;Option 1 hat den Charme, dass alles schön kontinuierlich ist und einen in der
Sicherheit wiegt, dass die Welt gut verstanden und wohlgeformt ist.&lt;/p&gt;
&lt;p&gt;Option 2 ist hässlich, hat aber den Vorzug, dass man im Zweifel den Taupunkt
draußen überschätzt und damit lüftungstechnisch auf der sicheren Seite ist.&lt;/p&gt;
&lt;p&gt;Nach viel Überlegung habe ich mich entschieden, dass mir Variante 1 am
sympatischsten ist. So Pi man Daumen liegen wir schlimmstenfalls um 2 Grad
daneben. Von praktischer Relevanz ist das jedoch nicht, weil alle betroffenen
Taupunkte unter 0 °C liegen. Im Haus wird aber keine Wand ernsthaft in die Nähe
des Gefrierpunkts kommen – und wenn doch ist der Taupunkt vermutlich das
geringste aller Probleme...&lt;/p&gt;
&lt;p&gt;D.h. ich entschuldige mich in aller Form beim unterkühlten Wasser und wir
setzen &lt;span class="math"&gt;\(K_2 = 17.62\)&lt;/span&gt; und &lt;span class="math"&gt;\(K_3 = 243.12\)&lt;/span&gt; °C. &lt;/p&gt;
&lt;h1&gt;HASSIO&lt;/h1&gt;
&lt;p&gt;Da wir nun wissen, wie man das berechnet wollen wir es auch gleich in
Homeassistant umsetzten. Dazu konfigurieren wir einen &lt;a href="https://www.home-assistant.io/integrations/template/"&gt;template
sensor&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;template:
  - sensor:
    - name: &amp;quot;Taupunkt Wohnzimmer&amp;quot;
      unit_of_measurement: &amp;quot;°C&amp;quot;
      state: &amp;gt; 
        {% set temp = states(&amp;#39;sensor.Temp_Wohnzimmer&amp;#39;) | float %}
        {% set rh = states(&amp;#39;sensor.Hum_Wohnzimmer&amp;#39;) | float %}
        {% set K2 = 17.62 | float %}
        {% set K3 = 243.12 | float %}
        {{ (K3 * ((K2*temp)/(K3+temp) + log(rh/100)) / ((K2*K3)/(K3+temp) - log(rh/100)))  | round(1) }}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und analog natürlich für den Außensensor und die übrigen Räume.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Billiger Demagnetizer</title><link href="https://techbotch.org/blog/cheap-demagnetizer/index.html" rel="alternate"/><published>2022-09-16T00:00:00+02:00</published><updated>2022-09-16T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-09-16:/blog/cheap-demagnetizer/index.html</id><summary type="html">&lt;p&gt;Neulich habe ich mal wieder ein bisschen SMD gelötet. Das hat, wie immer,
überhaupt keinen Spaß gemacht! Die Bauteile sind so klein, dass man sie
versehentlich einatmen kann und ohne Lupenbrille und Mikro-Pinzette geht
garnix. Auch wollen sich die dummen Teile gerne mal allein durch die
Oberflächenspannung des Lötzinns senkrecht …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Neulich habe ich mal wieder ein bisschen SMD gelötet. Das hat, wie immer,
überhaupt keinen Spaß gemacht! Die Bauteile sind so klein, dass man sie
versehentlich einatmen kann und ohne Lupenbrille und Mikro-Pinzette geht
garnix. Auch wollen sich die dummen Teile gerne mal allein durch die
Oberflächenspannung des Lötzinns senkrecht aufstellen, was absolut nicht im
Sinne des Erfinders ist.&lt;/p&gt;
&lt;p&gt;Und als wäre das nicht genug der Pein, war auch noch die Pinzette leicht magnetisiert,
so dass man manche Bauteile garnicht richtig loslassen konnte. Grrrrrrr!&lt;/p&gt;
&lt;p&gt;Um dem Abhilfe zu schaffen, habe ich so ein einfaches De-/Magnetisier-Tool aus
der Schublade gekramt, aber ich konnte mit meiner Pinzette in der Öffnung
herumstochern wie ich wollte, so richtig wegbekommen habe ich die
Magnetisierung nicht. Das fand ich sehr verdrießlich. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cheap-demagnetizer/static-demagnetizer.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Technology to the rescue&lt;/h1&gt;
&lt;p&gt;Also dachte ich mir ich brauche so einen elektrischen Entmagnetiserer. Die
bestehen im Wesentlichen aus einem einfachen Elektromagneten, der sich dann mit
Netzfrequenz um-magnetisiert. Könnte man selber bauen, aber Die Dinger werden
echt billig im Netz angeboten und so habe ich einfach einen gekauft.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cheap-demagnetizer/demagnetizer.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Schon beim auspacken fiel mir jedoch auf, dass da irgendwas lose im Gehäuse
rumfliegt und klappert. Nicht gut. Kurz überlegte ich das Ding einfach zurück
zu schicken, aber dann siegte die Neugier und ich habe es aufgeschraubt. Zum
Vorschein kam dies:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cheap-demagnetizer/plastic-piece.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Ich wollte das Gehäuse schon wieder schließen, als ich nicht umhin konnte mir
auch den Rest des Innenlebens anzuschauen. Und konnte es kaum fassen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cheap-demagnetizer/circuit.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;WTF? Keine Platine, keine Isolation der spannungsführenden Leitungen, keine
Zugentlastung am Kabel, keine irgendwie geartete Befestigung, einfach frei
verdrahtet. Und das mit Crimp-Schuhen. Wer in aller Welt macht sowas???
Chinesische Qualitätsproduktion vom Feinsten. &lt;/p&gt;
&lt;p&gt;Das kann auch ganz schnell mal lebensgefährlich werden: Wenn sich z.B. das
Beinchen der LED beim Schließen des Gehäuses ein wenig nach unten biegt kann es
Kontakt mit dem Metall des Tasters bekommen und schon haben wir 230V außen am
Taster. Toll, nicht?&lt;/p&gt;
&lt;p&gt;Da kommen Zweifel auf, ob das CE-Mark auf irgendwelchen Grundlagen beruht.
Vermutlich &lt;a href="https://de.wikipedia.org/wiki/CE-Kennzeichnung#" title="China_Export"&gt;China Export&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Auch hätte sich der Hersteller schon die Mühe machen können, den
Aufkleber an den Europäischen Markt anzupassen, denn 60Hz gibt's nur bei den
Amis, hier haben wir 50Hz. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cheap-demagnetizer/label.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Brauchbar machen&lt;/h1&gt;
&lt;p&gt;Bevor ich das Ding in Betrieb nehme, werde ich erstmal ein bisschen
nacharbeiten, um es einigermaßen betriebssicher zu machen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Kabelbinder auf das Netzkabel als Zugentlastung&lt;/li&gt;
&lt;li&gt;Das eine Steckerchen am Taster mit Schrumpfschlauch isolieren&lt;/li&gt;
&lt;li&gt;Die freie Verkabelung auf eine Streifenrasterplatine verpflanzen&lt;/li&gt;
&lt;li&gt;Platine mit etwas Klebstoff im Gehäuse befestigen&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/cheap-demagnetizer/circuit-reworked.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Verwendung&lt;/h1&gt;
&lt;p&gt;Trotz allem sei noch gesagt, dass die Kiste natürlich funktioniert – das tun 
alle Geräte dieser Machart, egal wie schlecht sie gebaut sind...&lt;/p&gt;
&lt;p&gt;Damit die Entmagnetisierung funktioniert, muss das Werkzeug zunächst mal dem
alternierenden Magnetfeld ausgesetzt werden. Und dieses sollte dann allmählich
schwächer werden bis es schließlich vernachlässigbar ist. Da solche
Demagnetizer aber natürlich keine Schaltung enthalten, die das Magnetfeld mit
der Zeit abschwächen würde, muss das anders bewerkstelligt werden: Anfangs legt
man das Werkzeug einfach auf den Demagnetizer, drückt den Taster und entfernt
es dann ganz langsam, bis es vielleicht einen halben Meter weit weg ist.  Nun
können wir den Taster loslassen. &lt;/p&gt;
&lt;p&gt;Und wenn das Werkzeug größer ist kann man es gleichzeitig über dem Demagnetizer
hin- und herbewegen, um es in einem Durchgang komplett zu entmagnetisieren. Mit
einem kleinen bisschen Übung funktioniert das ganz prima.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Power Sensor-Kalibrierung</title><link href="https://techbotch.org/blog/esphome-sensor-calibration/index.html" rel="alternate"/><published>2022-08-22T00:00:00+02:00</published><updated>2022-08-22T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-08-22:/blog/esphome-sensor-calibration/index.html</id><summary type="html">&lt;p&gt;Smartplugs sind eine der wichtigsten Stützen in der Heimautomatisierung und so
richtig Fahrt aufgenommen hat das mit den WLAN-Steckdosen von SONOFF, die so
mit die ersten waren, für die es open source Firmware gab:
&lt;a href="https://github.com/arendst/Tasmota"&gt;TASMOTA&lt;/a&gt;. Heute gibt es diese Art
smarte-Steckdosen wie Sand am Meer und mit Firmware-Alternativen wie
&lt;a href="https://github.com/letscontrolit/ESPEasy/"&gt;ESPeasy …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Smartplugs sind eine der wichtigsten Stützen in der Heimautomatisierung und so
richtig Fahrt aufgenommen hat das mit den WLAN-Steckdosen von SONOFF, die so
mit die ersten waren, für die es open source Firmware gab:
&lt;a href="https://github.com/arendst/Tasmota"&gt;TASMOTA&lt;/a&gt;. Heute gibt es diese Art
smarte-Steckdosen wie Sand am Meer und mit Firmware-Alternativen wie
&lt;a href="https://github.com/letscontrolit/ESPEasy/"&gt;ESPeasy&lt;/a&gt;,
&lt;a href="https://github.com/xoseperez/espurna"&gt;ESPurna&lt;/a&gt; und
&lt;a href="https://esphome.io/"&gt;ESPhome&lt;/a&gt; stehen dem geneigten Maker jede Menge Optionen
offen.  Einige Modelle sind nicht nur schaltbar, sondern messen auch gleich den
Stromverbrauch. &lt;/p&gt;
&lt;p&gt;Und neuerdings habe ich ein paar davon und würde dieses Feature gerne nutzen.
Das konkrete Modell heißt &lt;em&gt;NOUS A1T&lt;/em&gt; und ist gegen einen kleinen Aufpreis
bereits mit TASMOTA Firmware erhältlich, was einem das initiale Flashen
erspart. Ja – das klingt unsportlich, aber der chinesische OEM dieser Dinger
macht normalerweise seine Tuya Firmware drauf und es gibt ein lustiges Hase und
Igel Spiel zwischen Tuya und dem OTA &lt;a href="https://github.com/ct-Open-Source/tuya-convert"&gt;flashing
tool&lt;/a&gt;, das es ein wenig zum
Glücksspiel macht, ob die jeweiligen Smartplugs sich nun umflashen lassen, oder
nicht.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/smartplug.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/smartplug2.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Also erstmal einstecken, ins heimische WLAN einbinden und schauen, was das Ding
so anzeigt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/voltage1.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Hm – 265V sind ein bisschen viel. Das stimmt nie im Leben. Und tatsächlich sagt
mein Multimeter 228V:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/voltage2.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das schreit danach, die angezeigten Werte einmal systematisch zu überprüfen und
eine Kalibrierkurve daraus abzuleiten.&lt;/p&gt;
&lt;h1&gt;Kalibrierkurve erheben&lt;/h1&gt;
&lt;p&gt;Ähnlich, wie für meinen &lt;a href="https://techbotch.org/blog/range-finder-performance/index.html"&gt;Rangefinder&lt;/a&gt;, wollen wir nun also die Messwerte unseres
Smartplugs mit einigermaßen vertrauenswürdigen Referenzwerten vergleichen. Die
resultierende Kurve kann dann dazu genutzt werden, richtigere Werte zu
bekommen – das nennt man Kalibrierung.&lt;/p&gt;
&lt;p&gt;Unsere Referenz ist in diesem Fall ein Voltcraft-Energy-Monitor 4500advanced:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/energy-monitor.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das ist zwar auch kein Präzisionsinstrument, aber für den Hausgebrauch garnicht
nicht übel. D.h. wenn wir unseren Smartplug so kalibieren können, dass er mit
diesem Instrument übereinstimmt sind meine Anforderungen erfüllt.&lt;/p&gt;
&lt;p&gt;Die folgenden Werte kann ich mit beiden Geräten messen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spannung [V] (voltage)&lt;/li&gt;
&lt;li&gt;Strom [A] (current))&lt;/li&gt;
&lt;li&gt;Leistung [W] (power)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/Leistungsfaktor"&gt;Leistungfaktor&lt;/a&gt; (Power Factor)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die wollen wir nun vergleichen und kalibrieren.&lt;/p&gt;
&lt;p&gt;Unser Versuchsaufbau sieht so aus, dass wir das Energiemessgerät in die
Steckdose stecken, den Smartplug in das Energiemessgerät und dann verschiedene
Verbraucher in den Smartplug. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/setup.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht, zeigt der Energiemonitor hier schon 0.8W an – das ist der
Verbrauch des Smartplugs. Allerdings pendelt der sich über ein paar Minuten
hinweg irgendwo zwischen 0.3 und 0.8W ein und so niedrige Level sind sicher
auch nicht die Stärke meines eher günstigen Energiemonitors.&lt;/p&gt;
&lt;p&gt;Damit das Ganze aussagekräftig ist werden wir versuchen, einen möglichst
breiten Bereich von Leistung abzudecken und die jeweils angezeigten Werte
beider Instrumente aufschreiben.  Also habe ich mir einige Haushaltsgeräte
geschnappt und deren Leistung vermessen. Hier die Ergebnistabelle:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;                        load voltage current  power   pf voltage.sp current.sp  power.sp pf.sp
1            Electric kettle   217.4   8.690 1900.0 0.99        252      7.798      1939  0.99
2         Hairdryer low cold   223.4   1.375  278.0 0.90        259      1.228       284  0.89
3        Hairdryer high cold   222.8   2.417  538.4 0.99        258      2.163       550  0.98
4         Hairdryer low warm   222.2   2.890  585.0 0.91        258      2.583       598  0.90
5        Hairdryer high warm   221.0   5.184 1146.0 0.99        256      4.634      1172  0.99
6          Hairdryer low hot   221.7   4.040  886.0 0.98        257      3.615       906  0.98
7         Hairdryer high hot   220.0   7.810 1719.0 0.99        255      6.991      1758  0.99
8              Kitchen radio   223.8   0.030    2.8 0.42        260      0.023         2  0.42
9                  Mixer low   224.0   0.260   25.0 0.45        260      0.220        22  0.43
10              Mixer medium   223.0   0.240   47.0 0.88        259      0.211        47  0.86
11                Mixer high   223.0   0.330   76.0 0.99        259      0.290        77  0.99
12              Heater1 high   219.2   6.680 1450.0 0.99        254      5.940      1509  0.98
13               Heater1 low   220.3   4.250  931.0 0.99        256      3.811       955  0.98
14              Heater2 high   221.7  12.520 2786.0 0.99        257     11.235      2854  0.99
15 Vacuum cleaner full power   224.0   7.536 1642.0 0.97        260      6.742      1680  0.96
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Der erste Satz Werte stammt vom Energie-Monitor, der zweite (&lt;code&gt;*.sp&lt;/code&gt;) vom
Smartplug. Um die Daten besser zu verstehen plotten wir sie erstmal –
Referenzwerte auf der x-Achse und Smartplug-Werte auf der y-Achse.  Die blaue
Line ist die Regressionsgerade, das graue Band das 95% Konfidenzintervall für
die Gerade und die rote gestrichelte Line kennzeichnet optimale Übereinstimmung:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/plot-power.png" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/plot-current.png" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/plot-voltage.png" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/plot-power-factor.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht, korrelieren die Messwerte sehr gut. Teils stimmen auch die
absoluten Werte schon gut überein. Aber in manchen Fällen gibt es eine
deutliche systematische Abweichung – v.a. die Spannungswerte sind völlig
daneben. Naturgemäß decken wir hier nur einen recht kleinen Spannungsbereich
ab, da die Netzspannung einigermaßen stabil ist und sich durch die Belastung
mit einem Verbraucher auch nur minimal verändert. Wenn wir das genauer
untersuchen wollten müssten wir einen regelbaren Trafo (Variac) verwenden, um
von den bei uns üblichen 230V ernsthaft weg zu kommen. Ich würde vermuten, dass
der Plug mindestens bis runter auf 100V funktioniert, denn 120V sind in den USA
gebräuchlich.&lt;/p&gt;
&lt;p&gt;Die Korrelationskoeffizienten lauten:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leistung (P): &lt;span class="math"&gt;\(r = 0.9999684\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Strom (I): &lt;span class="math"&gt;\(r = 0.9999922\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Spannung (U): &lt;span class="math"&gt;\(r = 0.9934328\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Power Factor (λ): &lt;span class="math"&gt;\(r =  0.9993514\)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Und die Gleichungen der Regressionsgeraden lauten:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="math"&gt;\(P_{sp} = 1.0253 \cdot P - 0.8815\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(I_{sp} = 0.896767 \cdot I - 0.009003\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(U_{sp} = 1.221 \cdot U - 13.484\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(λ_{sp} = 1.01067 \cdot \lambda - 0.01622\)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es fällt auf, dass alle Geraden fast exakt durch den Nullpunkt gehen. Und das
macht auch Sinn: Außer für die Spannung wissen wir, dass bei fehlendem
Verbraucher auch 0W und 0A angezeigt werden. Ohne Spannung funktioniert der
Plug natürlich nicht, aber ich denke, wir können davon ausgehen, dass auch die
Spannungskurve durch Null geht.&lt;/p&gt;
&lt;h2&gt;Ohne Intercept&lt;/h2&gt;
&lt;p&gt;D.h. wir sollten unsere Regressionsgerade ohne &lt;em&gt;Intercept&lt;/em&gt; berechnen.
So sehen dann die Plots aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/plot-power2.png" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/plot-current2.png" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/plot-voltage2.png" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/plot-power-factor2.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und die dazugehörigen Geradengleichungen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="math"&gt;\(P_{sp} = 1.025 \cdot P\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(I_{sp} = 0.8955 \cdot I\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(U_{sp} = 1.160 \cdot U\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(λ_{sp} = 0.9933 \cdot \lambda\)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Für ganz pedantische habe ich zudem die beiden Modelle (mit und ohne Intercept)
auch getestet (F-test) und der Unterschied war in keinem Fall signifikant (P =
0.7569, 0.1263, 0.1431, 0.1025).&lt;/p&gt;
&lt;p&gt;Insgesammt gibt es also keinen Grund, den Intercept zu berücksichtigen.&lt;/p&gt;
&lt;h2&gt;Kalibriergleichung&lt;/h2&gt;
&lt;p&gt;Zur Kalibrierung brauchen wir aber die umgekehrte Richtung der obigen
Gleichungen – d.h. wir haben &lt;span class="math"&gt;\(P_{sp}\)&lt;/span&gt; gemessen und möchten wissen, was &lt;span class="math"&gt;\(P\)&lt;/span&gt; ist.
Also die Umkehrfunktion:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="math"&gt;\(P = 0.97561 \cdot P_{sp}\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(I = 1.1167 \cdot I_{sp}\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(U = 0.86207 \cdot U_{sp}\)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(λ = 1.0068 \cdot \lambda_{sp}\)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ein kleines bisschen falsch ist das aber noch, weil wir ja auf dem
Energie-Monitor auch immer den Verbrauch des Smartplugs mitmessen. Diese
0.3-0.8W, die eingangs erwähnt wurden. Analog beim Strom.  D.h. streng genommen
hätten wir vor der Berechnung der Kalibriergeraden diese Werte von den
Referenzwerten abziehen müssen. Bei der Spannung spielt das keine Rolle und
beim Leistungsfaktor bin ich mir nicht so sicher, aber der ist mir eh wurscht.&lt;/p&gt;
&lt;h1&gt;Spannung die Zweite&lt;/h1&gt;
&lt;p&gt;Vorhin hatte ich gesagt, dass man einen Variac bräuchte, um eine vernünftige
Spannungsreihe zu generieren. Nun – ich habe zufällig einen...&lt;/p&gt;
&lt;p&gt;Und so habe ich damit mal eine größere Spannbreite von Spannungswerten
untersucht.  Unter ≈100V steigt mein Energiemonitor aus und so habe ich diesmal
das Multimeter als Referenz verwendet. Alle Werte wurden mit einer Last
gemessen – dazu musste ein ungeregelter 80W Lötkolben herhalten.&lt;/p&gt;
&lt;p&gt;Hier erstmal die Daten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;  voltage voltage.sp
1    60.0         69
2    75.0         86
3    97.8        113
4   126.0        145
5   170.4        197
6   206.3        238
7   221.8        256
8   234.3        271
9   242.6        281
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und wie vorhin habe ich einen Plot gemacht und ein lineares Modell ohne Intercept 
gefittet:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/esphome-sensor-calibration/plot-voltage3.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="math"&gt;\(U_{sp} = 1.155 \cdot U\)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Lässt man einen Intercept zu beträgt dieser -0.7246V. Also vernachlässigbar.&lt;/p&gt;
&lt;h1&gt;Kalibrierung in der Praxis&lt;/h1&gt;
&lt;p&gt;Wie man anhand der Graphen und auch der Korrelationskoeffizienten sehen kann,
ist unsere Kalibrierfunktion eine Gerade. D.h. wir haben nur zwei Parameter:
Intercept und Steigung und wie wir gerade gesehen haben können wir den Intercept
vernachlässigen und brauchen somit nur die Steigung.&lt;/p&gt;
&lt;p&gt;In der Praxis bedeutet das, dass wir uns nicht jedes mal die Mühe machen müssen
einen Haufen verschiedene Leistungen zu messen, um das Gerät zu kalibrieren.
Eine einfache Einpunkt-Kalibrierung ist völlig ausreichend. D.h.:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Last anschließen (Wasserkocher) und einschalten&lt;/li&gt;
&lt;li&gt;Refererenzwert am Energiemonitor ablesen (und ggf. 0.5W abziehen).&lt;/li&gt;
&lt;li&gt;Steigung ausrechnen (&lt;span class="math"&gt;\(x/x_{sp}\)&lt;/span&gt;) oder von der jeweiligen Firmware ausrechnen lassen&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Das macht man für Spannung, Strom und Leistung.&lt;/p&gt;
&lt;p&gt;Nach erfolgter Kalibrierung zur Sicherheit eine Testmessung machen und schauen,
ob alles passt.&lt;/p&gt;
&lt;p&gt;Wer kein Energiemessgerät hat braucht eine Last mit bekannter Leistung. Die
Spannung wird mit dem Multimeter gemessen und der Stom ergibt sich aus der
Definition der elektrischen Leistung: &lt;span class="math"&gt;\(I = P/U\)&lt;/span&gt;. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Achung:&lt;/strong&gt; das gilt nur, wenn der Leistungsfaktor mehr oder weniger bei 1
liegt! Deswegen nimmt man den Wasserkocher und keine Motoren oder elektronischen
Geräte.&lt;/p&gt;
&lt;h2&gt;In eigener Software&lt;/h2&gt;
&lt;p&gt;Wenn man die Software in der die Messdaten verarbeitet werden sollen selbst
geschrieben oder unter Kontrolle hat ist die Sache trivial. Einfach die Werte (&lt;em&gt;v&lt;/em&gt;)
anhand der obigen Kalibrierfunktion umrechnen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;v = a * v_sp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;In TASMOTA&lt;/h2&gt;
&lt;p&gt;Das Vorgehen ist ausführlich in der original Doku von Tasmota
&lt;a href="https://tasmota.github.io/docs/Power-Monitoring-Calibration/#calibration-procedure"&gt;beschrieben&lt;/a&gt;,
aber ich gebe hier die essentiellen Schritte wieder. &lt;/p&gt;
&lt;p&gt;In der verlinkten Anleitung steht "Adjust the power offset". Das ist &lt;strong&gt;falsch&lt;/strong&gt;!
Der &lt;em&gt;Offset&lt;/em&gt; ist das was im linearen Modell &lt;em&gt;Intercept&lt;/em&gt; (Deutsch: &lt;em&gt;Achsenabschnitt&lt;/em&gt;) heißt – also ein Wert
der auf den Messwert addiert wird. Was wir aber tatsächlich tun, ist die
&lt;em&gt;Steigung&lt;/em&gt; der Gerade anpassen. Die Durchführung ist aber völlig richtig erklärt.&lt;/p&gt;
&lt;p&gt;Also:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Last anschließen (Wasserkocher) und einschalten&lt;/li&gt;
&lt;li&gt;Refererenzwert am Energiemonitor ablesen (und ggf. 0.5W abziehen).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PowerSet xx.x&lt;/code&gt; in die Tasmota-Konsole eingeben. Dabei ist xx.x der korrekte
   (Referenz-) Wert.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Analog für Spannung (&lt;code&gt;VoltageSet&lt;/code&gt;) und Strom (&lt;code&gt;CurrentSet&lt;/code&gt;).&lt;/p&gt;
&lt;h2&gt;In ESPhome&lt;/h2&gt;
&lt;p&gt;Bei ESPhome muss der Kalibrierfaktor direkt in das YAML File des entsprechenden
Geräts.  Im Netz finden sich verschiedene Anleitungen, die dazu einen
&lt;code&gt;calibrate_linear&lt;/code&gt; Filter verwenden.  Dabei übergibt man einen Haufen
Messwert-Paare für den jeweiligen Parameter – so wie wir es ganz oben selbst
gemacht hatten.  Wie wir aber gelernt haben ist das nicht nötig. Eine
Einpunkt-Kalibrierung ist völlig ausreichend, solange sie sorgfältig gemacht
wird. &lt;/p&gt;
&lt;p&gt;Was wir hier wirklich verwenden wollen ist der &lt;code&gt;multiply&lt;/code&gt; Filter.&lt;/p&gt;
&lt;p&gt;Bei anderen Sensoren mag es jedoch durchaus sinnvoll sein, &lt;code&gt;calibrate_linear&lt;/code&gt;
zu verwenden, oder eine Kombination von &lt;code&gt;multiply&lt;/code&gt; und &lt;code&gt;offset&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ein YAML Template für meinen Smartplug gibt es &lt;a href="https://www.esphome-devices.com/devices/Nous-A1t"&gt;hier&lt;/a&gt;.
Und die Kalibrierung macht man dann so (Beispiel für Spannung):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sensor:

 [...]

 - platform: hlw8012

    [...]

    voltage:
      name: &amp;quot;${devicename} - Voltage&amp;quot;
      unit_of_measurement: V
      accuracy_decimals: 1
      icon: mdi:flash-outline
      filters:
        - multiply: 0.8658

    [...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Man kann sich aber auch noch viel tiefgehender damit befassen – Fortsetzung folgt...&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>433MHz Temperatur-Sensor in HASSIO</title><link href="https://techbotch.org/blog/433MHz-temperature-sensor-hassio/index.html" rel="alternate"/><published>2022-08-19T00:00:00+02:00</published><updated>2022-08-19T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-08-19:/blog/433MHz-temperature-sensor-hassio/index.html</id><summary type="html">&lt;p&gt;Wie ich in einem &lt;a href="https://techbotch.org/blog/fun-with-sdr/index.html"&gt;früheren Post&lt;/a&gt;
schon einmal erzählt hatte, habe ich hier diverse billige
Funk-Temperatursensoren rumstehen. Die gehören zu einer einfachen Wetterstation,
die ich aber aktuell garnicht mehr nutze. Aber es wäre doch ganz schön, wenn
ich die Sensoren in meinen Homeassistant einbinden könnte. &lt;/p&gt;
&lt;p&gt;Wie schon beim letzten mal …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wie ich in einem &lt;a href="https://techbotch.org/blog/fun-with-sdr/index.html"&gt;früheren Post&lt;/a&gt;
schon einmal erzählt hatte, habe ich hier diverse billige
Funk-Temperatursensoren rumstehen. Die gehören zu einer einfachen Wetterstation,
die ich aber aktuell garnicht mehr nutze. Aber es wäre doch ganz schön, wenn
ich die Sensoren in meinen Homeassistant einbinden könnte. &lt;/p&gt;
&lt;p&gt;Wie schon beim letzten mal beschrieben, ist das Protokoll bekannt und
ich sehe zwei denkbare Wege, wie wir das anbinden könnten:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;RTL-SDR Empfänger an den Homeserver und Daten auf selbigem decodieren und
   irgendwie in HASSIO übertragen.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rflink.nl/"&gt;RFlink&lt;/a&gt; Firmware auf einen Arduino Mega flashen und
   selbigem noch ein 433MHz Empfangsmodul spendieren.  Die Daten werden dann
   über die serielle Schnittstelle geliefert, die wir dann an HASSIO anbinden
   müssten.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Beides sind gangbare Wege. Heute wollen wir mal Variante 1 probieren. Die
zweite finde ich sehr spannend, aber es stört mich etwas, dass die RFlink
Software zwar umsonst, aber nicht open source ist. Letzteres verhindert, dass
sie z.B. auf den ESP8266 portiert wird, was viel mehr Sinn machen würde, da der
erheblich billiger ist, als ein Arduino Mega und zudem WLAN kann, was die
Anbindung an einen MQTT Server erheblich vereinfachen würde. Es scheint forks
basierend auf alten Versionen zu geben, aber die scheinen noch keine richtige
community zu haben.&lt;/p&gt;
&lt;p&gt;Also mit RTL-SDR!&lt;/p&gt;
&lt;h1&gt;RTL-SDR installieren&lt;/h1&gt;
&lt;p&gt;Der &lt;a href="https://www.rtl-sdr.com/"&gt;RTL-SDR&lt;/a&gt; ist bekanntermaßen ein sehr preiswerter
und dennoch vielseitiger SDR (Software Defined Radio) Receiver, der
ursprünglich als DVB-T Empfänger für den Computer verkauft wurde. Inzwischen
ist DVB-T obsolet, aber speziell für Hacker ausgelegte Varianten des Sticks
erfreuen sich großer Beliebtheit wenn es darum geht Funksignale im computer zu
verarbeiten. Ich habe zwei drei davon in der Bastelkiste...&lt;/p&gt;
&lt;p&gt;Also Antenne anschrauben und den Stick an den Server anschließen. LINUX erkennt
den Empfänger sofort:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; lsusb
[...]
Bus 003 Device 002: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und auch passende Treiber-Module werden automatisch geladen.&lt;/p&gt;
&lt;p&gt;Das ist zwar erfreulich, aber dennoch unerwünscht, denn wir wollen ja nicht 
fernsehen, sondern den Thermometern ihre Geheimnisse entreißen! Das bedeutet, dass 
wir verhindern wollen, dass der standard-LINUX-Treiber sich das Gerät schnappt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo sh -c &amp;#39;echo &amp;quot;blacklist dvb_usb_rtl28xxu&amp;quot; &amp;gt; /etc/modprobe.d/blacklist.conf&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das sollte eventuelle Konflikte zuverlässig vermeiden ("usb_claim_interface
error -6").&lt;/p&gt;
&lt;h1&gt;Daten empfangen und weiterleiten&lt;/h1&gt;
&lt;p&gt;Nun brauchen wir noch eine Software, die etwas mit den Signalen anfangen kann,
die wir mit dem SDR empfangen. Und die heißt &lt;code&gt;rtl_433&lt;/code&gt; und ist auf
&lt;a href="https://github.com/merbanan/rtl_433"&gt;github&lt;/a&gt; zu finden. Gängige LINUX
Distributionen bringen sie aber auch gleich mit und so genügt zur Installation
dies:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo apt install rtl-433
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun können wir unseren Lauschangriff starten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; rtl_433 -C si
rtl_433 version unknown inputs file rtl_tcp RTL-SDR SoapySDR
Use -h for usage help and see https://triq.org/ for documentation.
Trying conf file at &amp;quot;rtl_433.conf&amp;quot;...
Trying conf file at &amp;quot;/home/users/pagel/.config/rtl_433/rtl_433.conf&amp;quot;...
Trying conf file at &amp;quot;/usr/local/etc/rtl_433/rtl_433.conf&amp;quot;...
Trying conf file at &amp;quot;/etc/rtl_433/rtl_433.conf&amp;quot;...
Registered 145 out of 175 device decoding protocols [ 1-4 8 11-12 15-17 19-21 23 25-26 29-36 38-60 63 67-71 73-100 102-105 108-116 119 121 124-128 130-149 151-161 163-168 170-175 ]
Detached kernel driver
Found Rafael Micro R820T tuner
Exact sample rate is: 250000.000414 Hz
[R82XX] PLL not locked!
Sample rate set to 250000 S/s.
Tuner gain set to Auto.
Tuned to 433.920MHz.
Allocating 15 zero-copy buffers
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
time      : 2022-08-19 17:15:37
model     : inFactory-TH ID        : 249
Channel   : 2            Battery OK: 1             Temperature: 23.28 C
Humidity  : 58 %         Integrity : CRC
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
time      : 2022-08-19 17:15:37
model     : inFactory-TH ID        : 249
Channel   : 2            Battery OK: 1             Temperature: 23.28 C
Humidity  : 58 %         Integrity : CRC
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
time      : 2022-08-19 17:15:37
model     : inFactory-TH ID        : 249
Channel   : 2            Battery OK: 1             Temperature: 23.28 C
Humidity  : 58 %         Integrity : CRC
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
time      : 2022-08-19 17:15:39
model     : inFactory-TH ID        : 79
Channel   : 1            Battery OK: 0             Temperature: 24.33 C
Humidity  : 63 %         Integrity : CRC

[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das sieht ja schon ganz gut aus. Und wir haben gelernt, dass der Sensor mit der
ID 79 gerne mal eine neue Batterie hätte. Wenn ich jetzt noch wüsste, welcher
das ist ...&lt;/p&gt;
&lt;p&gt;Freundlicherweise bietet &lt;code&gt;rtl_433&lt;/code&gt; diverse Output-Optionen an, u.a. csv, json
und vor allem &lt;em&gt;mqtt&lt;/em&gt;! Und so können wir die Ergebnisse direkt an unseren
MQTT-Server senden. Wie man den aufsetzt erkläre ich hier nicht – das findet
man überall im Netz, u.a. auch in einem &lt;a href="https://techbotch.org/blog/home-assistant2/index.html"&gt;älteren
Post&lt;/a&gt; von mir. Also werfen
wir das mal auf unserem Server an:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rtl_433 -F mqtt://hal:1883,user=phil,pass=&amp;#39;TopSecret&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Um zu sehen, ob und was da ankommt starten wir anderswo einen mqtt client:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mosquitto_sub -u phil -P TopSecret -t &amp;#39;#&amp;#39; -h hal
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und in der Tat kommen dort Daten an:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;{&amp;quot;time&amp;quot;:&amp;quot;2022-08-19 17:27:10&amp;quot;,&amp;quot;model&amp;quot;:&amp;quot;inFactory-TH&amp;quot;,&amp;quot;id&amp;quot;:172,&amp;quot;channel&amp;quot;:2,&amp;quot;battery_ok&amp;quot;:1,&amp;quot;temperature_F&amp;quot;:73.7,&amp;quot;humidity&amp;quot;:62,&amp;quot;mic&amp;quot;:&amp;quot;CRC&amp;quot;}
2022-08-19 17:27:10
172
2
1
73.7
62
CRC
{&amp;quot;time&amp;quot;:&amp;quot;2022-08-19 17:27:10&amp;quot;,&amp;quot;model&amp;quot;:&amp;quot;inFactory-TH&amp;quot;,&amp;quot;id&amp;quot;:172,&amp;quot;channel&amp;quot;:2,&amp;quot;battery_ok&amp;quot;:1,&amp;quot;temperature_F&amp;quot;:73.7,&amp;quot;humidity&amp;quot;:62,&amp;quot;mic&amp;quot;:&amp;quot;CRC&amp;quot;}
2022-08-19 17:27:10
172
2
1
73.7
62
CRC
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hm – irgendwie scheint es, dass wir jedes Event einmal im JSON Format und einmal in 
separaten Zeilen bekommen.&lt;/p&gt;
&lt;p&gt;Also lesen wir doch mal den relevanten Abschnitt in &lt;code&gt;man rtl_433&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Output format option
    [ -F kv|json|csv|mqtt|influx|syslog|null ]
          Produce decoded output in given format.
          Without this option the default is KV output. Use &amp;quot;-F null&amp;quot; to remove
          the default.
          Append output to file with :&amp;lt;filename&amp;gt; (e.g. -F csv:log.csv),
          defaults to stdout.

          Specify MQTT server with e.g. -F mqtt://localhost:1883
          Add MQTT options with e.g. -F &amp;quot;mqtt://host:1883,opt=arg&amp;quot;
          MQTT options are: user=foo, pass=bar, retain[=0|1], &amp;lt;format&amp;gt;[=topic]
          Supported MQTT formats: (default is all)
            events: posts JSON event data
            states: posts JSON state data
            devices: posts device and sensor info in nested topics
          The topic string will expand keys like [/model]
          E.g. -F &amp;quot;mqtt://localhost:1883,user=USERNAME,pass=PASSWORD,retain=0,devices=rtl_433[/id]&amp;quot;

          [...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wir sind eigentlich nur an events interessiert. Und wir wollen bitte
SI-Einheiten – also °C statt F:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rtl_433 -C si -F mqtt://hal:1883,user=phil,pass=&amp;#39;TopSecret&amp;#39;,retain=0,events=rtl_433[/model][/id]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das sieht auf der Empfangsseite schon viel aufgeräumter aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;{&amp;quot;time&amp;quot;:&amp;quot;2022-08-19 17:42:23&amp;quot;,&amp;quot;model&amp;quot;:&amp;quot;inFactory-TH&amp;quot;,&amp;quot;id&amp;quot;:249,&amp;quot;channel&amp;quot;:2,&amp;quot;battery_ok&amp;quot;:1,&amp;quot;temperature_C&amp;quot;:23.27778,&amp;quot;humidity&amp;quot;:58,&amp;quot;mic&amp;quot;:&amp;quot;CRC&amp;quot;}
{&amp;quot;time&amp;quot;:&amp;quot;2022-08-19 17:42:24&amp;quot;,&amp;quot;model&amp;quot;:&amp;quot;inFactory-TH&amp;quot;,&amp;quot;id&amp;quot;:249,&amp;quot;channel&amp;quot;:2,&amp;quot;battery_ok&amp;quot;:1,&amp;quot;temperature_C&amp;quot;:23.27778,&amp;quot;humidity&amp;quot;:58,&amp;quot;mic&amp;quot;:&amp;quot;CRC&amp;quot;}
{&amp;quot;time&amp;quot;:&amp;quot;2022-08-19 17:42:24&amp;quot;,&amp;quot;model&amp;quot;:&amp;quot;inFactory-TH&amp;quot;,&amp;quot;id&amp;quot;:249,&amp;quot;channel&amp;quot;:2,&amp;quot;battery_ok&amp;quot;:1,&amp;quot;temperature_C&amp;quot;:23.27778,&amp;quot;humidity&amp;quot;:58,&amp;quot;mic&amp;quot;:&amp;quot;CRC&amp;quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;&lt;code&gt;rtl_433&lt;/code&gt; als service&lt;/h1&gt;
&lt;p&gt;Das funktioniert zwar schon sehr schön, aber sobald wir das Programm abbrechen
ist die ganze Pracht dahin. D.h. als nächstes müssen wir dafür sorgen, dass
&lt;code&gt;rtl_433&lt;/code&gt; quasi als daemon/service auf unserem Server läuft. &lt;/p&gt;
&lt;p&gt;Dazu erzeugen wir ein entsprechendes service file für systemd
(&lt;code&gt;/etc/systemd/system/rtl_433.service&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# See https://github.com/merbanan/rtl_433/issues/1651 for original 
# suggestion
[Unit]
Description=RTL_433 service
Documentation=man:rtl_433
StartLimitIntervalSec=10
After=syslog.target network.target

[Service]
Type=exec
ExecStart=/usr/bin/rtl_433 -c /etc/rtl_433.conf
Restart=always
RestartSec=30s

# View with: sudo journalctl -f -u rtl_433 -o cat
SyslogIdentifier=rtl_433

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und wir brauchen noch ein config file für &lt;code&gt;rtl_433&lt;/code&gt; selbst
(&lt;code&gt;/etc/rtl_433.conf&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;convert si
output mqtt://hal:1883,user=phil,pass=&amp;#39;TopSecret&amp;#39;,retain=0,events=rtl_433[/model][/id]
report_meta time:utc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sobald wir das alles haben können wir unseren neuen Service starten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl start rtl_433
systemctl daemon-reload
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;und mal prüfen, ob er auch läuft:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; sudo systemctl status rtl_433.service 
● rtl_433.service - RTL_433 service
     Loaded: loaded (/etc/systemd/system/rtl_433.service; disabled; vendor preset: en&amp;gt;
     Active: active (running) since Sat 2022-08-20 10:11:52 CEST; 22s ago
       Docs: man:rtl_433
   Main PID: 1040053 (rtl_433)
      Tasks: 2 (limit: 19096)
     Memory: 2.9M
        CPU: 313ms
     CGroup: /system.slice/rtl_433.service
             └─1040053 /usr/bin/rtl_433 -c /etc/rtl_433.conf

Aug 20 10:11:52 hal rtl_433[1040053]: Registered 145 out of 175 device decoding proto&amp;gt;
Aug 20 10:11:52 hal rtl_433[1040053]: Found Rafael Micro R820T tuner
Aug 20 10:11:52 hal rtl_433[1040053]: Exact sample rate is: 250000.000414 Hz
Aug 20 10:11:52 hal rtl_433[1040053]: [R82XX] PLL not locked!
Aug 20 10:11:52 hal rtl_433[1040053]: Sample rate set to 250000 S/s.
Aug 20 10:11:52 hal rtl_433[1040053]: Tuner gain set to Auto.
Aug 20 10:11:52 hal rtl_433[1040053]: Tuned to 433.920MHz.
Aug 20 10:11:52 hal rtl_433[1040053]: Allocating 15 zero-copy buffers
Aug 20 10:11:54 hal rtl_433[1040053]: MQTT Connected...
Aug 20 10:11:54 hal rtl_433[1040053]: MQTT Connection established.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;An dieser Stelle wäre noch zu erwägen, diesen Service nicht als &lt;code&gt;root&lt;/code&gt; laufen
zu lassen, denn &lt;code&gt;rtl_433&lt;/code&gt; benötigt nur normale user permissions und aus
Security-Sicht ist es sinnvoll, einem Service nicht mehr Rechte zu geben, als
er wirklich braucht. D.h. wir legen einen speziellen user dafür an:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo useradd rtl_433
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Außerdem muss dieser user Zugriff auf USB-Geräte haben. D.h. er muss Mitglied der
Gruppe &lt;code&gt;plugdev&lt;/code&gt; sein:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo adduser rtl_433 plugdev
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Damit der Service unter diesem User läuft ändern wir die &lt;code&gt;[Service]&lt;/code&gt; Sektion in
&lt;code&gt;/etc/systemd/system/rtl_433.service&lt;/code&gt; indem wir &lt;code&gt;User&lt;/code&gt; und &lt;code&gt;Group&lt;/code&gt; wie folgt
festlegen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[Service]
Type=exec
User=rtl_433
Group=rtl_433
ExecStart=/usr/bin/rtl_433 -c /etc/rtl_433.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und wir ändern die Besitzverhältnisse des Config files:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo chown rtl_433:rtl_433 /etc/rtl_433.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun noch den Service neu starten&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo systemctl restart rtl_433.service 
sudo systemctl daemon-reload
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und schon passt das:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; ps aux | grep rtl_433
rtl_433  1023646  1.2  0.0  56256  7516 ?        Ssl  23:20   0:04 /usr/bin/rtl_433 -c /etc/rtl_433.conf
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Zum Abschluss sollten wir noch sicherstellen, dass der Service automatisch gestartet wird:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo systemctl enable rtl_433
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Homeassistant konfigurieren&lt;/h1&gt;
&lt;p&gt;Nun müssen wir unserem Homeassistant noch erklären, das da neue Sensoren sind.
Dazu müssen wir auf dem Server das &lt;code&gt;configuration.yaml&lt;/code&gt; file editieren. In
einer HASSIO Installation liegt das in &lt;code&gt;/config&lt;/code&gt;, so auch in meinem Docker
Container. Dieses Verzeichnis ahbe ich mir als Docker-Volume auf dem Server
unter &lt;code&gt;/srv/homeassistant&lt;/code&gt; bereitgestellt.  Folgendes muss dort hinein:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sensor:
  - platform: mqtt
    name: Temp_Wohnzimmer
    device_class: temperature
    unit_of_measurement: &amp;#39;°C&amp;#39;
    value_template: &amp;#39;{{ value_json.temperature_C | round(1) }}&amp;#39;
    state_topic: rtl_433/inFactory-TH/79
    json_attributes_topic: rtl_433/inFactory-TH/79
  - platform: mqtt
    name: Hum_Wohnzimmer
    device_class: Humidity
    unit_of_measurement: &amp;#39;%&amp;#39;
    value_template: &amp;#39;{{ value_json.humidity }}&amp;#39;
    state_topic: rtl_433/inFactory-TH/79
    json_attributes_topic: rtl_433/inFactory-TH/79
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Für jeden Sensor brauchen wir zwei solche Einträge. Die Details müsst Ihr
natürlich Euren konkreten Sensoren und IDs anpassen. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Achtung:&lt;/em&gt; Bei meinen Sensoren ändert sich die ID jedes mal, wenn die Batterie
gewechselt wird. Dann muss ich die Items &lt;code&gt;state_topic&lt;/code&gt; und
&lt;code&gt;json_attributes_topic&lt;/code&gt; entsprechend anpassen.&lt;/p&gt;
&lt;p&gt;Und nun ist es soweit – im Web Interface von Homeassistant können wir nun eine
entsprechende Karte anlegen und die ganzen Sensoren darstellen. Die einzelnen Sensoren findet Ihr
unter &lt;code&gt;Config &amp;gt; Devices &amp;amp; Services &amp;gt; Entities&lt;/code&gt;. Und im Dashboard Editor kann man sie ganz normal 
aus der Liste auswählen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/433MHz-temperature-sensor-hassio/picking-sensors.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und schon haben wir alle eingebunden:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/433MHz-temperature-sensor-hassio/screenshot1.png" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/433MHz-temperature-sensor-hassio/screenshot2.png" class= "Medium"&gt;&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Dotfile management mit stow</title><link href="https://techbotch.org/blog/stow-dotfiles/index.html" rel="alternate"/><published>2022-08-07T00:00:00+02:00</published><updated>2022-08-07T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-08-07:/blog/stow-dotfiles/index.html</id><summary type="html">&lt;p&gt;Jedes mal, wenn ich ein neues Laptop anschaffe, oder aus irgendwelchen Gründen das 
Betriebssystem neu installiere stehen drei Dinge an:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;System konfigurieren&lt;/li&gt;
&lt;li&gt;Daten aus Sync oder Backup kopieren&lt;/li&gt;
&lt;li&gt;Anwendungen konfigurieren&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Den ersten Punkt habe ich weitgehend mit &lt;a href="https://www.ansible.com/"&gt;Ansible&lt;/a&gt;
automatisiert. Das sorgt dafür, dass alle wichtigen Dinge wieder installiert
werden und …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Jedes mal, wenn ich ein neues Laptop anschaffe, oder aus irgendwelchen Gründen das 
Betriebssystem neu installiere stehen drei Dinge an:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;System konfigurieren&lt;/li&gt;
&lt;li&gt;Daten aus Sync oder Backup kopieren&lt;/li&gt;
&lt;li&gt;Anwendungen konfigurieren&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Den ersten Punkt habe ich weitgehend mit &lt;a href="https://www.ansible.com/"&gt;Ansible&lt;/a&gt;
automatisiert. Das sorgt dafür, dass alle wichtigen Dinge wieder installiert
werden und zentrale Funktionen wie z.B. &lt;code&gt;ssh&lt;/code&gt; auch gleich korrekt konfiguriert
sind. Programme, die ich spontan mal ausprobiere installiere ich direkt und an
Ansible vorbei, aber alles was ich wichtig finde kommt in mein Workstation
Playbook.&lt;/p&gt;
&lt;p&gt;Punkt zwei ist auch kein Stress – ich habe auf Laptop und File-Server
&lt;a href="https://www.cis.upenn.edu/~bcpierce/unison/"&gt;&lt;code&gt;unison&lt;/code&gt;&lt;/a&gt; und synchronisiere
alles von/zu letzterem. So ist die Datenwiederherstellung schnell erledigt. Und
im Notfall gibt es auch noch das Server-Backup auf USB-Platte.&lt;/p&gt;
&lt;p&gt;Bleibt Punkt drei. Unter LINUX liegen die Configs der verschiedenen Anwendungen
ja in "hidden files" aka &lt;em&gt;dotfiles&lt;/em&gt; im &lt;code&gt;home&lt;/code&gt;-Folder des Users. Grundsätzlich
könnte ich diese in die Synchronisation einschließen, aber ich habe mich
bewusst dagegen entschieden, weil das zu Konflikten führt, wenn mehrere
verschiedene Computer sich mit dem Server synchronisieren. Auch existieren sehr
viele dotfiles die nicht backup-würdig sind, weil sie garkeine Konfiguration
enthalten, sondern irgendwelche App-spezifische Daten, oder aber zu Programmen
gehören, die ich längst nicht mehr nutze, oder nie wirklich konfiguriert habe.
Kurz: ich möchte mich eigentlich nur mit den dotfiles befassen, die ich auch
wirklich angepasst habe und nicht irgendwelche default configs sichern, die eh
von selbst wieder auftauchen. Nun könnte ich den &lt;code&gt;copy&lt;/code&gt; Mechanismus von Ansible
nutzen, um meine dotfiles wieder herzustellen – so mache ich das ja auch mit
den systemweiten config Files in &lt;code&gt;/etc&lt;/code&gt;. Aber das gefällt mir nicht so
richtig, weil es sich hier ja um user-spezifische Daten handelt, die sich von
Nutzer zu Nutzer unterscheiden. Eigentlich wäre das für mein Laptop egal, weil
ich eh der einzige Nutzer bin, aber es widerstrebt mir dennoch.&lt;/p&gt;
&lt;p&gt;Bisher hatte ich das so gelöst, dass ich automatisch alle dotfiles (bis auf ein
paar Ausnahmen wie z.B. den Firefox cache) in einem &lt;code&gt;tgz&lt;/code&gt; Archiv sichere – in
Ordnern, die den jeweiligen hostname im Namen haben, so dass ich meine
verschiedenen Rechner sauber trenne kann.  Im Falle einer Neuinstallation
bediene ich mich dann aus dieser Sicherung und kopiere alles, was mir wichtig
erscheint von Hand an den richtigen Ort. Das funktioniert und bisher ist mir
noch nie was verloren gegangen. Allerdings muss ich auch jedes mal daran
denken, was ich alles brauche. Und natürlich vergesse ich immer was.  Das ist
nicht wirklich schlimm, denn ich merke es ja spätestens wenn ich das
betreffende Programm dann nutzen will und es nicht so läuft, wie gewünscht.
Dann also die nächste config kopieren – geht. Und so geht das dann mit mehreren
Programmen bis sich nach ein paar Tagen alles eingeschliffen hat. Geht, aber
wirklich elegant ist das nicht.&lt;/p&gt;
&lt;h1&gt;Das muss doch besser gehen&lt;/h1&gt;
&lt;p&gt;Manche Leute verwenden nun &lt;code&gt;git&lt;/code&gt; direkt in ihrem &lt;code&gt;home&lt;/code&gt; Verzeichnis, um die
dotfiles zu verwalten, aber das finde ich nur so mittel handlich. Seit einer
Weile wandern ja viele config files in &lt;code&gt;~/.config/&lt;/code&gt;. Also das mit git
verwalten? Leider sind da aber einerseits noch nicht alle drin und zum anderen
ist auch dieser Ordner wieder voller Sachen, die ich nie wirklich angepasst
habe und daher auch nicht sichern und verwalten will. Schöner wäre es, wenn ich
alle liebevoll angepassten configs irgendwo zentral ablegen und dann davon ein
&lt;code&gt;git&lt;/code&gt; Repository daraus machen könnte – gepaart mit irgendwas, dass die
dotfiles dann dahin kopiert, wo sie hin gehören.&lt;/p&gt;
&lt;p&gt;Kurz hatte ich überlegt, mir einen solchen Ordner anzulegen und dann ein
kleines Shell Skript zu basteln, mit dem ich diese Configs dann an den
richtigen Ort kopieren kann. Aber dann habe ich mich erinnert, dass es schon
ein gutes Tool für dieses Problem gibt, das ich zwar schon vor ewigen Zeiten
gesehen, aber irgendwie nie genauer angeschaut hatte:
&lt;a href="https://www.gnu.org/software/stow/"&gt;&lt;code&gt;stow&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Dieses Tool erlaubt es, alle möglichen Files zentral zu speichern und dann via
&lt;em&gt;Symlinks&lt;/em&gt; dort bereitzustellen, wo sie eigentlich liegen müssen. Das klingt
elegant.&lt;/p&gt;
&lt;h1&gt;Stow&lt;/h1&gt;
&lt;p&gt;Und das geht so:&lt;/p&gt;
&lt;p&gt;Zunächst habe ich mir einen Folder für meine dotfiles angelegt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir -p ~/it/stow/dotfiles
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und in diesem Verzeichnis legen wir nun je einen Folder pro &lt;em&gt;Package&lt;/em&gt; an. Ein
&lt;em&gt;Package&lt;/em&gt; kann dabei beliebig viel enthalten – eine einzelne Datei, alle
Dateien für eine Anwendung, oder für eine Gruppe von Anwendungen, oder auch
einfach alle Files, die wir so verwalten wollen. &lt;/p&gt;
&lt;p&gt;Ich habe mich dafür entschieden, im Wesentlichen ein Package pro Anwendung zu haben:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; ll dotfiles/
clementine
digikam
filezilla
git
gnupg
i3
i3status
Insync
keepassxc
msmtp
mutt
offlineimap
rclone
rofi
shell
ssh
thunar
unison
virtualbox
xfce4
zsh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Jeder der Folder enthält nun die gewünschten config files inkl. Pfad ab &lt;code&gt;./&lt;/code&gt;. Z.B.:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; tree -a i3
i3
└── .config
    └── i3
        └── config
&amp;gt; tree -a ssh/
ssh/
└── .ssh
    ├── authorized_keys
    ├── config
    ├── id_rsa
    └── id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Um diese config Files nun an Ort und Stelle zur Verfügung zu stellen machen wir dies:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;stow -t /home/phil i3
stow -t /home/phil ssh

# oder alles auf einmal
stow -t /home/phil */
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und schon finden sich an den entsprechenden Stellen Symlinks auf die echten
Files in unserem dotfile Folder:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; ll ~/.ssh
authorized_keys -&amp;gt; ../it/stow/dotfiles/ssh/.ssh/authorized_keys
config -&amp;gt; ../it/stow/dotfiles/ssh/.ssh/config
id_rsa -&amp;gt; ../it/stow/dotfiles/ssh/.ssh/id_rsa
id_rsa.pub -&amp;gt; ../it/stow/dotfiles/ssh/.ssh/id_rsa.pub
known_hosts

&amp;gt; ll -d .config/i3
.config/i3 -&amp;gt; ../it/stow/dotfiles/i3/.config/i3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das ist praktischer, als wenn die Dateien dorthin kopiert worden wären, denn
nun sind eventuelle Veränderungen der Dateien im dotfile-Ordner repräsentiert.&lt;/p&gt;
&lt;p&gt;Wollen wir nun ein Package wieder deaktivieren geht das ebenfalls ganz einfach:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;stow -t /home/phil --delete ssh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und damit wir den target Pfad nicht jedes mal angeben müssen, speichern wir den
in &lt;code&gt;.stowrc&lt;/code&gt; – entweder im &lt;code&gt;home&lt;/code&gt; Folder, oder da wo wir auch die stow packeges
haben.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;echo &amp;quot;--target=/home/phil&amp;quot; &amp;gt; .stowrc
# Und alle installieren
stow .

# deinstallieren
stow -D .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Zuguterletzt kann es noch praktisch sein, im stow folder ein
&lt;code&gt;.stow-local-ignore&lt;/code&gt; file anzulegen – ähnlich wie man es von &lt;code&gt;.gitignore&lt;/code&gt;
kennt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt; cat .stow-local-ignore 
.git
.gitignore
todo.md
README.md
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;So verhindert Ihr, dass diese Dateien ebenfalls in euer home directory verlinkt
werden.&lt;/p&gt;
&lt;p&gt;Und um das Ganze ordentlich zu versionieren brauchen wir den Ordner nur unter
git Kontrolle zu stellen und schon ist alles wohlorganisiert.
Zudem können wir nun z.B. je einen eigenen Branch für verschiedene Computer
oder unterschiedliche Situationen anlegen, oder nach Herzenslust an einer
Config rumschrauben, ohne Angst haben zu müssen, die ursprüngliche
(funktionierende) Konfiguration nie wieder zusammen zu kriegen...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Laser Rangefinder Performance</title><link href="https://techbotch.org/blog/range-finder-performance/index.html" rel="alternate"/><published>2022-07-17T00:00:00+02:00</published><updated>2022-07-17T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-07-17:/blog/range-finder-performance/index.html</id><summary type="html">&lt;p&gt;Ich liebe Spielzeug. Vor allem wenn es elektronisch ist. Eine ganz besondere
Schwäche habe ich für Messgeräte aller Art. Und so besitze ich zahlreiche
Geräte mit denen ich so ziemlich alles messen kann, was sich mir in den Weg
stellt.&lt;/p&gt;
&lt;p&gt;Natürlich sind darunter auch diverse Geräte zum Messen von Strecken …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich liebe Spielzeug. Vor allem wenn es elektronisch ist. Eine ganz besondere
Schwäche habe ich für Messgeräte aller Art. Und so besitze ich zahlreiche
Geräte mit denen ich so ziemlich alles messen kann, was sich mir in den Weg
stellt.&lt;/p&gt;
&lt;p&gt;Natürlich sind darunter auch diverse Geräte zum Messen von Strecken oder
Entfernungen: Zollstock, Bandmaß, Messschieber, Messschraube, Laser
Entfernungsmesser und ein Laser-Rangefinder. Die beiden letzteren klingen auf
den ersten Blick identisch und nutzen auch das gleiche Messprinzip, aber
während die weit verbreiteten Laser-Entfernungsmesser für das Ausmessen im Haus
gedacht sind, eignet sich der &lt;em&gt;Rangefinder&lt;/em&gt; fürs Grobe – also größere
Entfernungen bei mäßiger Genauigkeit. D.h. hier geht es nicht um Strecken im
Bereich von ein paar Metern, die dann auf den Millimeter genau vermessen
werden, sondern er zeigt seine Stärke beim Messen von Entfernungen in der
Größenordnung von mehreren hundert Metern bei einer Genauigkeit von einem Meter
oder so.&lt;/p&gt;
&lt;p&gt;Das konkrete Modell, das ich besitze ist fernöstlicher Herkunft und heißt
&lt;em&gt;MILESEEY PF210 hunting&lt;/em&gt;, der für unter hundert Euro zu haben ist. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/Rangefinder.jpg" class= "Large" alt="Mileseey PF210 Rangefinder on desk"&gt;&lt;/p&gt;
&lt;p&gt;Das Datenblatt gibt folgende Merkmale an:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Wert&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Messbereich&lt;/td&gt;
&lt;td&gt;3 – 800m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Genauigkeit&lt;/td&gt;
&lt;td&gt;±0.5m + 0.01 digits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vergrößerung&lt;/td&gt;
&lt;td&gt;6x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Papier ist bekanntlich geduldig. Und da stellt sich die Frage, wie genau das
Gerät tatsächlich misst.  Aber was misst es überhaupt? Diverses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Entfernung in direkter Linie&lt;/li&gt;
&lt;li&gt;Steigungs-/Neigungswinkel über/unter der Horizontalen&lt;/li&gt;
&lt;li&gt;Horizontale Entfernung&lt;/li&gt;
&lt;li&gt;Höhe eines anvisierten Punkts über der horizontalen&lt;/li&gt;
&lt;li&gt;Höhendifferenz zwischen zwei Punkten&lt;/li&gt;
&lt;li&gt;Geschwindigkeit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zudem hat es einen Regen/Nebelmodus, bei dem aus mehreren Messungen die am
weitesten entfernte angezeigt wird.&lt;/p&gt;
&lt;p&gt;Direkt messen kann das Gerät die Entfernung in direkter Line mittels &lt;em&gt;Time of
Flight&lt;/em&gt; Verfahren und den Neigungswinkel mittels eines elektronischen Sensors,
wie man ihn auch in Smartphones oder den beliebten "Bevel Boxes" findet.
Alles andere ist dann elementare Trigonometrie.&lt;/p&gt;
&lt;p&gt;Im Folgenden konzentrieren wir uns aber auf die &lt;em&gt;horizontale Entfernung&lt;/em&gt;, also 
die Entfernung in der Ebene.&lt;/p&gt;
&lt;h1&gt;Wie bestimmt man die Messqualität?&lt;/h1&gt;
&lt;p&gt;Die Qualität eines Messgeräts setzt sich aus zahlreichen Parametern zusammen. Z.B.:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Präzison (Reproduzierbarkeit der Messung)&lt;/li&gt;
&lt;li&gt;Genauigkeit (Richtigkeit/accuracy)&lt;/li&gt;
&lt;li&gt;Interferenzen (z.B. Tag/Nacht, Gegenlicht, Temperatur, Regen, ...)&lt;/li&gt;
&lt;li&gt;Messbereich (Min/Max)&lt;/li&gt;
&lt;li&gt;Linearität&lt;/li&gt;
&lt;li&gt;Messzeit&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Die beiden ersten Aspekte wollen wir genauer untersuchen.&lt;/p&gt;
&lt;h1&gt;Präzision&lt;/h1&gt;
&lt;p&gt;Präzision ist die Wiederholgenauigkeit der Messung. D.h. wenn ich die gleiche
Entfernung mehrfach messe – wie genau stimmen dann die erhaltenen
Messwerte überein? Idealerweise sollten sie natürlich identisch sein, in der
Praxis wird man aber meist leichte Abweichung von Messung zu Messung bekommen.&lt;/p&gt;
&lt;p&gt;Dabei kann man ggf. noch eine ganze Reihe verschiedener Arten von Messwiederholungen
betrachten:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unmittelbar hintereinander (&lt;em&gt;within run precision&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Mehrere Messserien – z.B. Nach dem wieder Einschalten (&lt;em&gt;between run precision&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;An verschiedenen Tagen (&lt;em&gt;between day precision&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Verschiedene Bediener (&lt;em&gt;between operator precision&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Mehrere Geräte der Baureihe (&lt;em&gt;between instrument precision&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;In verschiedenen Institutionen (&lt;em&gt;between site precision&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Das volle Programm ist mir heute zu mühsam. D.h. unser Versuchsprotokoll sieht so aus:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10 verschiedene Distanzen (Gruppen)&lt;/li&gt;
&lt;li&gt;je 10 Messwiederholungen pro Gruppe&lt;/li&gt;
&lt;li&gt;Möglichst gute Abdeckung des Messbereichs von 3-800m&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Insgesamt also 100 Messungen. Die dokumentieren wir in einer hübschen Tabelle
und speichern diese im CSV Format und analysieren das Ganze.  Alle
Entfernungswerte sind in Metern.&lt;/p&gt;
&lt;p&gt;Als erstes plotten wir mal die Wiederholungen der verschiedenen Gruppen. 
Die blaue Linie zeigt den Mittelwert der jeweiligen Gruppe:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/precision1.png" class= "Large" alt="Precsion Plot: Data points by group"&gt;&lt;/p&gt;
&lt;p&gt;Wir decken also den Bereich von 2.9 bis ≈785m ab. Das ist schonmal top. Wer
genau aufgepasst hat wird sich nun fragen, wie denn 2.9 m möglich waren, wo der
Messbereich bei 3m anfängt. Des Rätsels Lösung ist, dass der direkte Abstand
schon ≥3m ist, aber der horizontale Abstand nur 2.9m weil ich den Rangefinder
leicht nach oben oder unten gehalten hatte. Und in der Tat fehlen hier auch
einige Datenpunkte, weil der Messbereich unterschritten wurde.&lt;/p&gt;
&lt;p&gt;Um besser beurteilen zu können, wie groß die Abweichung vom Gruppen-Mittelwert ist plotten
wir das mal etwas anders.&lt;/p&gt;
&lt;div class="math"&gt;$$\Delta_{group_i} = value - group\_mean_i$$&lt;/div&gt;
&lt;p&gt;D.h. die y-Achse zeigt die Abweichung vom Gruppen-Mittel. Letzteres ist im
Titel der Mini-Plots gezeigt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/precision2.png" class= "Large" alt="Precision Plot: Absolute deviation from group mean"&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht ist die absolute Abweichung bei geringen Entfernungen sehr gering
– kaum wahrnehmbar.  Aber mit zunehmender Entfernung wächst sie bis zu ca. 1m
bei knapp 800m.  Man kann auch einigermaßen erkennen, dass bei niedrigen
Distanzen die Abweichungen Vielfache von 0.1m sind – das ist die Genauigkeit
mit der das Gerät seine Messwerte &lt;em&gt;anzeigt&lt;/em&gt;. Nicht zu verwechseln mit der
versprochenen Präzision...&lt;/p&gt;
&lt;p&gt;Neben der absoluten Abweichung &lt;span class="math"&gt;\(\Delta\)&lt;/span&gt; ist auch die relative Abweichung von Interesse.
Hier in Prozent auf der y-Achse:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/precision3.png" class= "Large" alt="Precision Plot: Relative deviation from group mean"&gt;&lt;/p&gt;
&lt;p&gt;Und hier zeigt sich nun der umgekehrte Effekt im Vergleich zur absoluten
Abweichung.  Die relative Abweichung ist bei geringen Messwerten zunächst im
Bereich von ± 1 bis 2% und fällt dann mit zunehmenden Entfernungen auf wenige
Promille. &lt;/p&gt;
&lt;p&gt;Um die Abweichungen in den Gruppen zu quantifizieren berechnen wir als nächstes
die Standardabweichung (&lt;em&gt;SD&lt;/em&gt;) innerhalb der Gruppen und zudem den
Variationskoeffizienten (Coefficient of variation, CV). Letzterer errechnet
sich als &lt;/p&gt;
&lt;div class="math"&gt;$$\frac{SD_i}{group\_mean_i}$$&lt;/div&gt;
&lt;p&gt;Also die Standardabweichung normalisiert auf den Gruppen-Mittelwert. Das ist
sinnvoll, weil bei vielen Messungen der Messfehler mit zunehmendem Messwert
steigt. Hier die Plots, SD in Metern, CV in Prozent auf der y-Achse:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/precision4.png" class= "Medium" alt="Precision: Standard deviation over distance"&gt;
&lt;img src="https://techbotch.org/blog/range-finder-performance/img/precision5.png" class= "Medium" alt="Precision: Coefficient of variation over distance"&gt;&lt;/p&gt;
&lt;p&gt;Die gestrichelte Linie repräsentiert den medianen Variationskoeffizienten.&lt;/p&gt;
&lt;p&gt;Alles in Allem würde ich sagen, dass es in Sachen Präzision nichts zu meckern
gibt.&lt;/p&gt;
&lt;h1&gt;Genauigkeit&lt;/h1&gt;
&lt;p&gt;Kommen wir zum zweiten Aspekt – der Korrektheit, AKA Genauigkeit, aka
&lt;em&gt;Trueness&lt;/em&gt;. Während es bei der Präzision darum ging, wie reproduzierbar die
Messungen sind, wollen wir nun wissen, wie nah sie im Mittel an der Wahrheit
liegen. Das ist eine Stufe anspruchsvoller, weil wir nun Referenzwerte
brauchen, die die Wahrheit repräsentieren. Bei den Entfernungsbereichen, die
wir hier abdecken ist das garnicht so simpel. Bei ein paar Metern könnte man
ein Maßband bemühen, aber 500m?  Meine Lösung lautet: Online-Karten. Sowohl bei
Google Maps, als auch im
&lt;a href="https://geoportal.bayern.de/bayernatlas/"&gt;Bayern-Atlas&lt;/a&gt; gibt es eine
Messfunktion, bei der man die Entfernung zwischen manuell gesetzten Punkten auf
der Karte ermitteln kann. Bis auf ein oder zwei Ausnahmen habe ich den
Bayern-Atlas als Referenz verwendet.&lt;/p&gt;
&lt;p&gt;Nun ist die so ermittelte Referenz-Entfernung aber auch nicht korrekt, sondern
unterliegt Ungenauigkeiten oder Fehlern im Kartenmaterial und vor allem auch
der Ungenauigkeit meiner manuellen Punktsetzung. D.h. das sollte man bei der
Interpretation im Hinterkopf behalten.&lt;/p&gt;
&lt;p&gt;Zudem ist auch die Entfernungsmessung mit dem Rangefinder nicht nur von der
Qualität des Instruments ab, sondern auch von der Bedienung. Da steht man
schnell einmal ein paar Handbreit weg vom optimalen Punkt oder visiert nicht
exakt den in der Karte ausgewählten Punkt an. &lt;/p&gt;
&lt;p&gt;Letztlich fließen beide Unsicherheiten in das Gesamtergebnis ein und machen
dies schlechter, als es in einer idealen Welt wäre. &lt;/p&gt;
&lt;p&gt;Mein Versuchsplan sieht 20 Einzelmessungen (&lt;span class="math"&gt;\(value\)&lt;/span&gt;) und die dazugehörigen
Referenzwerte (&lt;span class="math"&gt;\(ref\)&lt;/span&gt;) vor. Schauen wir mal auf das Ergebnis. Zunächst als
xy-Plot in dem wir die gemessen Entfernungen gegen die Referenzwerte plotten:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/trueness1.png" class= "Medium" alt="Trueness: measured value over reference value"&gt;&lt;/p&gt;
&lt;p&gt;Die graue Diagonale stellt die Linie perfekter Übereinstimmung dar. Wie man
sieht stimmen unsere Messungen sehr gut mit den Referenzwerten überein. 
Und auch der Korrelationskoeffizient stützt diese Einschätzung:&lt;/p&gt;
&lt;div class="math"&gt;$$r = 0.9999741$$&lt;/div&gt;
&lt;div class="math"&gt;$$r^2 = 0.9999481$$&lt;/div&gt;
&lt;p&gt;Und wenn wir ein lineares Modell fitten bekommen wir&lt;/p&gt;
&lt;div class="math"&gt;$$ y = 1.0004 x - 0.2135 $$&lt;/div&gt;
&lt;p&gt;Also hervorragend.&lt;/p&gt;
&lt;p&gt;Um die Abweichungen besser beurteilen zu können machen wir aber zusätzlich noch
einen sogenannten &lt;a href="https://de.wikipedia.org/wiki/Bland-Altman-Diagramm"&gt;&lt;em&gt;Bland-Altman
Plot&lt;/em&gt;&lt;/a&gt;. Dabei wird auf
der x-Achse der Mittelwert von Referenz und gemessenem Wert (&lt;span class="math"&gt;\((value + ref)/2\)&lt;/span&gt;)
aufgetragen und auf der y-Achse die Abweichung der Messung vom Referenzwert
(&lt;span class="math"&gt;\(value - ref\)&lt;/span&gt;). Auf diese Weise kann man sehr schön sehen, wie stark die
Abweichungen in Abhängigkeit von der Distanz ist:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/trueness2.png" class= "Medium" alt="Trueness: Bland-Altman plot"&gt;&lt;/p&gt;
&lt;p&gt;Die graue Line markiert perfekte Übereinstimmung (&lt;span class="math"&gt;\(\Delta = 0\)&lt;/span&gt;) und die
gestrichelte blaue die mittlere Abweichung (&lt;em&gt;Bias&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Zuguterletzt erstellen wir noch eine Variante dieses Plot, bei dem wir statt
der &lt;em&gt;absoluten&lt;/em&gt; die &lt;em&gt;relative&lt;/em&gt; Abweichung in Prozent auftragen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/trueness3.png" class= "Medium" alt="Trueness: relative Bland-Altman plot"&gt;&lt;/p&gt;
&lt;p&gt;Der Vergleich der beiden Plots ist spannend: Während die absolute Abweichung
über den Messbereich einigermaßen gleich bleibt resultiert das darin, dass die
relative Abweichung bei geringen Distanzen noch recht hoch ist und dann stark
abnimmt.&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Ich finde, mein preiswerter Rangefinder misst sehr reproduzierbar und richtig.
Mehr Genauigkeit brauche ich definitiv nicht. Es wäre noch spannend, das
gleiche auch für Geschwindigkeitsmessungen zu machen, aber da ist die Sache mit
den Referenzwerten nochmal schwieriger. Vielleicht mache ich das irgendwann mal
wenn ich Zeit habe.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Science &amp; Medicine"/></entry><entry><title>Laser Rangefinder Performance</title><link href="https://techbotch.org/blog/range-finder-performance/index_en.html" rel="alternate"/><published>2022-07-17T00:00:00+02:00</published><updated>2022-07-17T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-07-17:/blog/range-finder-performance/index_en.html</id><summary type="html">&lt;p&gt;I love gadgets! Especially electronic devices. Measuring devices, in
particular, are pretty irresistible to me. And thus, I own quite number of them
to measure anything that may cross my path. Among them plenty of things for
measuring distances/thickness/...: Rulers, tape measures, calipers, micrometers,
laser tape measures and a …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I love gadgets! Especially electronic devices. Measuring devices, in
particular, are pretty irresistible to me. And thus, I own quite number of them
to measure anything that may cross my path. Among them plenty of things for
measuring distances/thickness/...: Rulers, tape measures, calipers, micrometers,
laser tape measures and a laser rangefinder. &lt;/p&gt;
&lt;p&gt;The last two may seem identical to the uninitiated reader but they serve
different purposes.  The laser tape measure excels at measuring things around
the house and workshop at millimeter precision while the range finder is
designed for much larger scales – several hundred meters/yards outdoors to an
accuracy of less than a meter. E.g. on the golf course, while hiking, or just
for fun. &lt;/p&gt;
&lt;p&gt;The range finder I have is of far eastern provenance and the specific model is
called &lt;em&gt;MILESEEY PF210 hunting&lt;/em&gt;. You can find it for less than 100 Euros.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/Rangefinder.jpg" class= "Large" alt="Mileseey PF210 Rangefinder on desk"&gt;&lt;/p&gt;
&lt;p&gt;From the data sheet:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Measurement range&lt;/td&gt;
&lt;td&gt;3 – 800m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accuracy&lt;/td&gt;
&lt;td&gt;±0.5m + 0.01 digits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;optic magnification&lt;/td&gt;
&lt;td&gt;6x&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;But specs can be misleading, especially with cheap tools, so I am keen to dig
deeper and find out how well it really performs. But what does it actually
measure? These:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Distance (line of sight)&lt;/li&gt;
&lt;li&gt;Slope&lt;/li&gt;
&lt;li&gt;Horizontal distance&lt;/li&gt;
&lt;li&gt;Height above instrument level&lt;/li&gt;
&lt;li&gt;Height difference between two points&lt;/li&gt;
&lt;li&gt;Speed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It also features a special rain/fog mode that will scan the distance and keep the 
largest distance measured. &lt;/p&gt;
&lt;p&gt;The device can directly determine distance by the &lt;em&gt;time of flight&lt;/em&gt; method and
slope using a digital sensor similar to those found in modern smartphones or
the popular bevel boxes. The rest is basic trigonometry.&lt;/p&gt;
&lt;p&gt;In this analysis, we will focus on &lt;em&gt;horizontal distance&lt;/em&gt;.&lt;/p&gt;
&lt;h1&gt;How to determine quality of such a device?&lt;/h1&gt;
&lt;p&gt;The quality of a measuring device is determined by many factors:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Precision (reproducibility)&lt;/li&gt;
&lt;li&gt;Accuracy (trueness)&lt;/li&gt;
&lt;li&gt;Interference (e.g. day/night, direct sunlight, temperature, rain, ...)&lt;/li&gt;
&lt;li&gt;Measurement range (min/max)&lt;/li&gt;
&lt;li&gt;Linearity&lt;/li&gt;
&lt;li&gt;Acquisition time&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let's have a closer look at the first two.&lt;/p&gt;
&lt;h1&gt;Precision&lt;/h1&gt;
&lt;p&gt;Precision is the measurement repeatability – i.e. if we repeat the same
measurement over and over again, how well do they agree? Ideally, they should
be identical but in practice you will most likely see some degree of variation
between measurements.&lt;/p&gt;
&lt;p&gt;There are many different levels/factors to consider in determining precision:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Immediate repetition (&lt;em&gt;within run precision&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Different measurement runs, e.g. after turning the tool off and on. (&lt;em&gt;between run precision&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;On separate days (&lt;em&gt;between day precision&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;When operated by different people (&lt;em&gt;between operator precision&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Using different instruments of the same type and model (&lt;em&gt;between instrument precision&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;When used at different sites (&lt;em&gt;between site precision&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don't feel like analyzing all of the above so this is my experiment plan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10 different distances (groups)&lt;/li&gt;
&lt;li&gt;10 measurements for each group&lt;/li&gt;
&lt;li&gt;Try and cover the measurement range (3-800m) as good as possible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;100 single measurements all together. I will collect data in a spreadsheet and store it 
in csv format for easy analysis. I'm European, so all values are given in meters.&lt;/p&gt;
&lt;p&gt;First, let's plot the data by group. The blue line indicates the group mean.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/precision1.png" class= "Large" alt="Precsion Plot: Data points by group"&gt;&lt;/p&gt;
&lt;p&gt;So we managed to cover a distance range from 2.9 to ≈785m. Excellent.  If you
paid close attention, you will probably wonder how our smallest distance can be
2.9m when the instrument's range starts at 3 m. The reason is that the direct
distance actually was ≥3m but I tilted the instrument slightly up or down
resulting in a lower horizontal distance. Actually, we are missing a few data
points in this group as some measurements failed due to results below the lower
limit.&lt;/p&gt;
&lt;p&gt;In order to get a better impression of the deviation from the group mean, let's
slightly change the plot and show something else:&lt;/p&gt;
&lt;div class="math"&gt;$$\Delta_{group_i} = value - group\_mean_i$$&lt;/div&gt;
&lt;p&gt;I.e. the y-axis now shows the deviation from the group mean which is shown in
the headers of the mini plots:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/precision2.png" class= "Large" alt="Precision Plot: Absolute deviation from group mean"&gt;&lt;/p&gt;
&lt;p&gt;As you can see, the absolute deviation is pretty small at lower distances –
almost invisible. But it increases with the measured distance until we get
deviations up to almost 1 meter at ≈800m.&lt;/p&gt;
&lt;p&gt;In addition, it may be interesting to look at the &lt;em&gt;relative&lt;/em&gt; deviation
(&lt;span class="math"&gt;\(\Delta\)&lt;/span&gt;), instead – shown in percent on the y-axis:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/precision3.png" class= "Large" alt="Precision Plot: Relative deviation from group mean"&gt;&lt;/p&gt;
&lt;p&gt;And now we see the opposite of the relative deviation: As the distance grows,
relative deviation decreases: starting at ±1 or 2% at the lower end it
goes down to fractions of a percent at the higher end of the range. &lt;/p&gt;
&lt;p&gt;In order to quantify the precision, we can now
calculate standard deviation (SD) in each group and the coefficient of variation (CV)
which is given as&lt;/p&gt;
&lt;div class="math"&gt;$$\frac{SD_i}{group\_mean_i}$$&lt;/div&gt;
&lt;p&gt;So it's the standard deviation normalized to the measurement value. That makes sense,
because for many measurements, the SD increases with the measured value. The plot shows 
CV in percent on the y-axis:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/precision4.png" class= "Medium" alt="Precision: Standard deviation over distance"&gt;
&lt;img src="https://techbotch.org/blog/range-finder-performance/img/precision5.png" class= "Medium" alt="Precision: Coefficient of variation over distance"&gt;&lt;/p&gt;
&lt;p&gt;The dashed line indicates the median CV. &lt;/p&gt;
&lt;p&gt;By and large, I am pretty happy with the precision observed.&lt;/p&gt;
&lt;h1&gt;Accuracy&lt;/h1&gt;
&lt;p&gt;So let's get to the second aspect – accuracy, aka trueness. While &lt;em&gt;precision&lt;/em&gt;
was concerned with how well repeated measurements would agree, &lt;em&gt;accuracy&lt;/em&gt; is about
how close our measurements are to the true value, on average.  Investigating
this is a bit more demanding than precision, because we now need reference
values that represent the true distance. Given the distance range, things like
a tape measure are clearly out as a reference method. My solutions is using
online maps. Google maps has measuring capabilities and so does the official 
geography portal of the state of Bavaria – 
&lt;a href="https://geoportal.bayern.de/bayernatlas/"&gt;Bayern-Atlas&lt;/a&gt;.
Except for two cases, I used that source by manually setting flags on the map and 
getting the distance value from the platform.&lt;/p&gt;
&lt;p&gt;Now, these reference values aren't perfect, either. Errors and imprecisions in
the map data are one potential problem, manual accuracy in setting the flags is
another source of error. So one should keep this in mind when interpreting the
results.&lt;/p&gt;
&lt;p&gt;In addition, using the rangefinder can introduce further errors when you are
not standing perfectly at the correct position or pointing the device slightly
left/right of the spot that you marked in the map. Both effects reduce the agreement
between both methods.&lt;/p&gt;
&lt;p&gt;My experiment comprises 20 measurements with the range finder (&lt;span class="math"&gt;\(value\)&lt;/span&gt;)
accompanied by their respective reference values (&lt;span class="math"&gt;\(ref\)&lt;/span&gt;). Now we plot the
values over the references and get this:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/trueness1.png" class= "Medium" alt="Trueness: measured value over reference value"&gt;&lt;/p&gt;
&lt;p&gt;The grey diagonal line represent perfect agreement. As you can see, our data
points are almost perfectly located on that line. And the correlation
coefficient agrees with that assessment:&lt;/p&gt;
&lt;div class="math"&gt;$$r = 0.9999741$$&lt;/div&gt;
&lt;div class="math"&gt;$$r^2 = 0.9999481$$&lt;/div&gt;
&lt;p&gt;If we fit a linear model, we get&lt;/p&gt;
&lt;div class="math"&gt;$$ y = 1.0004 x - 0.2135 $$&lt;/div&gt;
&lt;p&gt;Almost perfect!&lt;/p&gt;
&lt;p&gt;In order to zoom in on the deviations, we will add a &lt;a href="https://en.wikipedia.org/wiki/Bland%E2%80%93Altman_plot"&gt;&lt;em&gt;Bland-Altman
Plot&lt;/em&gt;&lt;/a&gt;.  I.e. we show
the difference between measured value and reference (&lt;span class="math"&gt;\(value-ref\)&lt;/span&gt;) on the y-axis
and the mean of the two on the x-axis (&lt;span class="math"&gt;\((value + ref)/2\)&lt;/span&gt;). This makes it much
easier to see the deviation depending on the distance measured:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/trueness2.png" class= "Medium" alt="Trueness: Bland-Altman plot"&gt;&lt;/p&gt;
&lt;p&gt;Again, the grey line indicates perfect agreement (&lt;span class="math"&gt;\(\Delta = 0\)&lt;/span&gt;) and the dashed
blue line is the mean deviation (&lt;em&gt;bias&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Finally, we add a variation of the plot by showing the &lt;em&gt;relative&lt;/em&gt; deviation (in
percent) instead of the &lt;em&gt;absolute&lt;/em&gt; difference.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/range-finder-performance/img/trueness3.png" class= "Medium" alt="Trueness: relative Bland-Altman plot"&gt;&lt;/p&gt;
&lt;p&gt;Comparing the two graphs is quite interesting: While the absolute deviation appears pretty
constant across the range, this results in large relative errors for small distances
while they become miniscule for larger distances.&lt;/p&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;I am pretty happy with the performance of my range finder.  I certainly don't
need more than this. It would have been interesting to also evaluate speed
measurements but good reference values are much harder to generate in that
case. Maybe later in a separate post.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Science &amp; Medicine"/></entry><entry><title>Kindling Cracker 2</title><link href="https://techbotch.org/blog/kindling-cracker2/index.html" rel="alternate"/><published>2022-05-21T00:00:00+02:00</published><updated>2022-05-21T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-05-21:/blog/kindling-cracker2/index.html</id><summary type="html">&lt;p&gt;Letztes Jahr hatte ich einen &lt;a href="https://techbotch.org/blog/kindling-cracker/index.html"&gt;Kindling Cracker
gebaut&lt;/a&gt; – mein erstes
Schweißprojekt. Und ich war mächtig stolz auf das Ergebnis. Im Grunde bin ich
das immer noch, aber einen Fehler hatte ich gemacht: Die selbst geschliffene
Klinge hatte einen zu stumpfen Winkel, so dass das Spalten manchmal etwas
schwergängig war.  Also …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Letztes Jahr hatte ich einen &lt;a href="https://techbotch.org/blog/kindling-cracker/index.html"&gt;Kindling Cracker
gebaut&lt;/a&gt; – mein erstes
Schweißprojekt. Und ich war mächtig stolz auf das Ergebnis. Im Grunde bin ich
das immer noch, aber einen Fehler hatte ich gemacht: Die selbst geschliffene
Klinge hatte einen zu stumpfen Winkel, so dass das Spalten manchmal etwas
schwergängig war.  Also musste ich nochmal mit dem Geradschleifer dran, um das
zu korrigieren. Eine ideale Klinge für den Zweck ist insgesamt schlank und
direkt an der Schneide ballig geschliffen, damit sie nicht beim ersten Spalten
stumpf wird, oder ausbricht und dennoch gut ins Holz eindringen kann.  Damit
die Klinge aber nicht nur gut eindringt, sondern auch gut spaltet, muss sie
sich nach dem schlanken Abschnitt dann ggf. etwas verbreitern.  Das kann man an
jeder Axt sehen. So in etwa schaut das im Profil aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker2/blade.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;A: Meine ursprüngliche Klinge&lt;br/&gt;
B: Axt&lt;/p&gt;
&lt;p&gt;Es war durchaus mühsam, meine alte Klinge etwas näher an die optimale Form zu
bringen.  V.a. weil der Kindling Cracker ja schon komplett zusammengebaut war
und man nur schlecht an die Kante kommt.&lt;/p&gt;
&lt;h1&gt;Auf ein Neues!&lt;/h1&gt;
&lt;p&gt;Wie es der Zufall so will, hat ein guter Freund sich kürzlich einen schönen
Ofen zugelegt und erfreut sich am Feuer. Und er hat gerade Geburtstag. Also ist
klar, was nun getan werden muss: Ein neuer Kindling Cracker muss her! Die
Grundkonstruktion behalten wir im Wesentlichen bei, aber diesmal starten wir
mit einer kleinen Axt als Klinge.&lt;/p&gt;
&lt;p&gt;Also habe ich erstmal ein Beil besorgt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker2/axe.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Zugegebenermaßen musste ich die Klinge ordentlich mit Winkelschleifer und
Fächerscheibe nachformen, weil die Schneide nicht gut geschliffen war.  Danach
habe ich dann mit dem Trennschleifer ungefähr entlang der roten Line
abgeschnitten und das Klingenstück auf eine 10mm Stahlplatte geschweißt, damit
die Klinge einen Fuß bekommt. Und das ganze dann auf eine 20x20cm Grundplatte.
Fertig ist die Klinge:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker2/blade-assembly.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Um die Spaltwirkung zu erhöhen habe ich dann noch zwei hübsche kleine Keile aus
einer Stahlplatte geschnitten und je einen schräg auf jede Seite der flachen
Klinge geschweißt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker2/blade-assembly2.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/kindling-cracker2/blade-assembly3.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Der "Axtstummel" sieht irgendwie putzig aus und ich überlege schon, ob man
daraus noch irgendwas basteln kann...&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker2/axe-cut.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wie schon beim letzten mal habe ich dann den Käfig aus 20mm Vierkantstahl
geschweißt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker2/cage.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Noch schnell den selbigen auf die Grundplatte schweißen und die Konstruktion
ist fertig:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker2/raw-assembly.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/kindling-cracker2/raw-assembly2.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/kindling-cracker2/raw-assembly3.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Noch einmal mit dem Winkelschleifer drüber, damit alles schön glatt ist,
Schmiedelack drauf und schon habe ich ein Geburtstagsgeschenk:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker2/kindling-cracker1.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/kindling-cracker2/kindling-cracker2.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/kindling-cracker2/kindling-cracker3.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das hat wieder Spaß gemacht und ging schon etwas schneller, als beim letzten
mal. Nicht zuletzt, weil ich diesmal das MIG-Schweißgerät genommen habe und das
sehr viel einfacher ist. Auch gab es diesmal nicht so viel Pfusch weg zu
schleifen – d.h. ich mache Fortschritte ;-)&lt;/p&gt;
&lt;p&gt;Allerdings habe ich im Laufe des Projekts auch empirisch nachgewiesen, dass man beim
Trennschleifen keine normale Werkstattjacke mit hohem Synthetik-Anteil tragen sollte:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker2/jacket.jpg" class= "Medium"&gt;&lt;/p&gt;</content><category term="DIY &amp; Workshop"/></entry><entry><title>Bin ich ein Verbrecher?</title><link href="https://techbotch.org/blog/phishing/index.html" rel="alternate"/><published>2022-04-12T00:00:00+02:00</published><updated>2022-04-12T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-04-12:/blog/phishing/index.html</id><summary type="html">&lt;p&gt;Das Internet – schier unendlicher Quell von Wissen, Unterhaltung, Werbung und
Betrug.  Eine besonders beliebte Form der beiden Letzteren liegt darin, dem
potentiellen Opfer eine Email zu schreiben: in der Hoffnung dieses möge den
Inhalt lesen und glauben und letztlich irgendwo draufklicken, Kontakt
aufnehmen, irgendwas kaufen, einfach so Geld überweisen etc …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Das Internet – schier unendlicher Quell von Wissen, Unterhaltung, Werbung und
Betrug.  Eine besonders beliebte Form der beiden Letzteren liegt darin, dem
potentiellen Opfer eine Email zu schreiben: in der Hoffnung dieses möge den
Inhalt lesen und glauben und letztlich irgendwo draufklicken, Kontakt
aufnehmen, irgendwas kaufen, einfach so Geld überweisen etc. etc.&lt;/p&gt;
&lt;p&gt;Meine erste SPAM Email habe ich irgendwann in den 90er Jahren bekommen. Damals
war das was völlig neues und ich war erstmal sehr verwundert, um was es sich da
handelte. Heute ist das natürlich ganz normal und der SPAM-Filter ist so
selbstverständlich geworden, wie der Regenschirm bei schlechtem Wetter.&lt;/p&gt;
&lt;p&gt;Und die Filter funktionieren recht gut – nur wenige unerwünschte Nachrichten
schaffen es heute noch bis in mein Postfach. Erfreulicherweise sind die meisten
Emails dieser Art sind so schlecht gemacht, dass die paar, die ich von Hand
aussortieren muss schon am Betreff eindeutig zu erkennen sind und so ungelesen
gelöscht werden können. Ganz selten lese ich sie doch mal – meist vor allem aus
einem gewissen Genuss am Abgründigen.  Z.B. weil sie so schlecht gemacht sind,
dass sie schon wieder Unterhaltungswert haben. &lt;/p&gt;
&lt;p&gt;Heute hat mich so ein Exemplar erreicht, dass ich Euch nicht vorenthalten
möchte, denn ich fand es recht unterhaltsam. &lt;/p&gt;
&lt;h1&gt;Es wird ernst!&lt;/h1&gt;
&lt;p&gt;Geschrieben hat sie laut Absender der brave "Officier Dieter Flick". Die Email
selbst ist sehr knapp gehalten. Der liebe Dieter muss ein geplagter Mann sein,
denn ganz offenbar arbeitet er unter schwierigen Bedingungen des Schweizer
Polizeiapparats, der sich augenscheinlich nicht einmal eine eigene Email
Adresse leisten kann. Und so muss der treue Amtmann unter einer &lt;code&gt;@quickline.ch&lt;/code&gt;
Adresse den Amtsgeschäften nachgehen. Immerhin nimmt Officier Flick den
Datenschutz sehr ernst, denn zum Schutze meiner Persönlichkeitsrechte hat er es
vermieden die Email direkt an mich zu adressieren und stattdessen ein neutrales
Alias &lt;code&gt;Kontrollburo-munchen@alumnidirector.com&lt;/code&gt; verwendet. Soviel Umsicht muß
gelobt werden.&lt;/p&gt;
&lt;p&gt;Officier Flick ist kein Mann vieler Worte und kommt gerne schnell auf den
Punkt. Das merkt man schon am Betreff der Email: &lt;em&gt;Betreff: Öffnen der Datei&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Und das wollen wir tun, denn der brave Mann soll sich nicht vergeblich die Mühe
gemacht haben.&lt;/p&gt;
&lt;p&gt;Die Gewichtigkeit der Angelegenheit wird durch die Tatsache unterstrichen, dass
man im Anhang der Email das eigentliche Amtsschreiben im von Behörden
favorisierten JPG-Format findet.  Auch sei hier auf die inzwischen erreichte
europäische Integration der Polizeibehörden hingewiesen, denn unser Schweizer
Beamter schreibt im Auftrag der deutschen Bundespolizei – und das auf Antrag
von Catherine de Bolle:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/phishing/aklcj-nmva1.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Frau de Bolle muss schier übermenschliche Energie haben, denn laut
&lt;a href="https://de.wikipedia.org/wiki/Catherine_De_Bolle"&gt;Wikipedia&lt;/a&gt; ist sie aktuell
die Direktorin von Europol. Zuvor war sie Generalkommissarin der
Nationalpolizei des Königreichs Belgien. Und trotz dieser Verpflichtungen
findet Sie die Zeit sich mit meinen Fall zu befassen. Respekt!  Auch scheint
sie dabei mit Maryvonne Caillibotte, Staatsanwältin der Republik Versailles 
zusammenzuarbeiten. Ich dachte immer, Franzosen und Belgier mögen sich nicht so
gerne, aber vielleicht irre ich da. Möglicherweise aber auch nicht – eventuell
hat diese polizeipolitische Verwicklung ja auch die Ausrufung der &lt;em&gt;Republik
Versailles&lt;/em&gt; und die damit verbundene Loslösung von Frankreich maßgeblich
befördert?&lt;/p&gt;
&lt;p&gt;Das Schreiben selbst ist dann von &lt;em&gt;Michael Rupp, Generaldirektor der Nationalen
Gendarmerie&lt;/em&gt; unterschrieben. Einer deutschen Bundesbehörde von so großer
Bedeutung, dass sie normalerweise im Verborgenen operiert – nur so ist zu
erklären, dass ich noch nie von ihr gehört habe.&lt;/p&gt;
&lt;p&gt;Ich finde allein das Schreiben ist doch schon ein Krimi in sich! Hier erfahren
wir, dass ich die Tat beging, nachdem ich im Internet angegriffen wurde. Wird
sich das strafmildernd auswirken? Bin ich gar das Opfer? Und sogleich nimmt die
Geschichte eine unerwartete Wendung: &lt;em&gt;Nacktfotos/-videos von Minderjährigen
wurden von einem Cyber-Gendarm aufgenommen&lt;/em&gt;! Unerhört! Am Ende gar
Amtsmissbrauch, um an illegales Video-Material zu kommen? Hat der Cyber-Gendarm
damit im Darknet gehandelt?&lt;/p&gt;
&lt;p&gt;Doch bevor die Geschichte sich zu diesen Höhepunkten aufschwang gab es eine
weniger dramatische Einführung inklusive wertvoller juristischer Belehrungen.
Oder wusstet Ihr, dass "Jeder unanständige Mord, der ohne Gewalt oder Drohung
gegen die Person oder mit Hilfe der Person eines Kindes beiderlei Geschlechts
unter 16 Jahren begangen wird, mit Freiheitsstrafe geahndet wird"?&lt;/p&gt;
&lt;p&gt;Da ist eine Textanalyse natürlich Pflicht:&lt;/p&gt;
&lt;p&gt;Zunächst wird auf die feine Linie hingewiesen, die den anständigen vom
unanständigen Mord unterscheidet. Eine, wie ich finde, sehr feinsinnige
Einführung. Auch haben wir hier mitnichten eine plumpe Räuberpistole vor uns,
denn es geht um &lt;em&gt;Morde ohne Gewalt oder Drohung gegen die Person&lt;/em&gt;. Vielleicht
sind hier eher metaphorische Morde gemeint? &lt;/p&gt;
&lt;p&gt;Besonders gelungen finde ich aber das subtile Zitat von Luc Bessons
Filmkunstwerk &lt;a href="https://www.imdb.com/title/tt0110413/"&gt;Leon der Profi&lt;/a&gt;: Wer
fühlt sich vom Text nicht sofort an Léon (Jean Reno) und Mathilda (Natalie
Portman) erinnert – in der fesselnden Szene in der Léon Mathilda in die Kunst
des Auftragsmordens einführt und Ihr väterlich beibringt, immer einen zweiten
Sicherheitsschuss ins Herz anzuschließen und darauf zu achten, nicht ins Gesicht
zu schießen, damit das Opfer identifizierbar bleibt. Nichts anderes will uns
Herr Rupp sagen, wenn er schreibt "Mord [...] mit Hilfe eines Kindes [...]"!
Aber auch Freunde moderner Geschlechterbilder werden angesprochen, denn
ausdrücklich ist hier die Rede von "&lt;em&gt;einem&lt;/em&gt; Kind beiderlei Geschlechts" – ein
Zwitter also.&lt;/p&gt;
&lt;p&gt;Aber trotz aller Brillanz des Textes sind dem Autor leider auch ein paar
handwerkliche Fehler vorzuwerfen die den Genuß trüben. So kennt das deutsche
Strafgesetzbuch keinen Paragraphen 372 und in §390, Absatz 1 der
Strafprozessordnung geht es weder um &lt;em&gt;Vorladungen durch Kriminalpolizisten&lt;/em&gt;,
noch um die &lt;em&gt;Verschärfung der Strafe bei sexuellen Übergriffen und
Vergewaltigungen im Internet&lt;/em&gt;, sondern ganz langweilig um &lt;a href="https://www.gesetze-im-internet.de/stpo/__390.html"&gt;Rechtsmittel des
Privatklägers&lt;/a&gt;.
Auch bleibt offen, wie eine rein digitale Vergewaltigung so konkret ablaufen
würde.&lt;/p&gt;
&lt;h1&gt;Ausblick&lt;/h1&gt;
&lt;p&gt;Ich werde jetzt erstmal meinen alten Freund Ben Matlock anrufen und fragen, ob
er meine Verteidigung übernehmen würde.&lt;/p&gt;
&lt;p&gt;Also Ganoven unserer Zeit: seid auf der Hut, denn der lange Arm des Gesetzes
schläft nicht und wird auch Euch erreichen...&lt;/p&gt;
&lt;h1&gt;Update&lt;/h1&gt;
&lt;p&gt;Nach eingehender Konsultation mit Ben Matlock riet mir dieser, zunächst selbst
auf die Anschuldigungen zu antworten, was ich natürlich getan habe:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Bitte lesen Sie meine Antwort.&lt;/p&gt;
&lt;p&gt;Dokument, das an Ihre Datei angehängt ist.&lt;/p&gt;
&lt;p&gt;MfG&lt;br&gt;
      Dr. Kunibert von Socken und Sinnen&lt;/p&gt;
&lt;p&gt;On Mon, Apr 11, 2022 at 02:59:13PM +0000, Officier - Dieter Flick wrote:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Bitte lesen Sie Ihre Vorladung.&lt;/p&gt;
&lt;p&gt;-Dokument, das an Ihre Datei angehängt ist&lt;/p&gt;
&lt;p&gt;Herzliche Grüße .&lt;/p&gt;
&lt;p&gt;Dieter Flick&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;--&lt;br&gt;
   Dr. Kunibald von Socken und Sinnen&lt;br&gt;
   Simpelweg 7&lt;br&gt;
   29693 Hodenhagen&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Der Anhang (natürlich jpg) enthält die eigentliche Mitteilung:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/phishing/Antwortbrief.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Nehmt dies – ihr Schurken. Mal sehen, was zurück kommt. Ich halte Euch auf dem
Laufenden.&lt;/p&gt;
&lt;h1&gt;Update 2022-04-13&lt;/h1&gt;
&lt;p&gt;Ihr werdet es kaum glauben – die haben echt geantwortet!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ZU DEINER AUFMERKSAMKEIT ,&lt;/p&gt;
&lt;p&gt;Wir bestätigen den Empfang Ihrer E-Mail.&lt;/p&gt;
&lt;p&gt;Laut den gegen Sie empfangenen Internet-Datenströmen wurde eine Straftat
begangen.&lt;/p&gt;
&lt;p&gt;Unsere Hauptaufgabe besteht darin, zu schützen und zu sanktionieren, wenn in
unserem Tätigkeitsbereich eine Straftat begangen wird.&lt;/p&gt;
&lt;p&gt;In diesem Fall werden wir Sie einem Artikel der Justiz unterwerfen, der es
Ihnen ermöglichen könnte, sich zu äußern, ohne diese Angelegenheit öffentlich
zu machen und ohne Ihren Beruf oder Ihren Ruf zu gefährden.
Wir stellen Ihnen folgende Fälle vor:&lt;/p&gt;
&lt;p&gt;1- GERICHTSVERFAHREN: Herrn Marcus PAINTINGER, Staatsanwalt der Republik
München, wird innerhalb von 72 Stunden von unseren Dienststellen beschlagnahmt.
Der Fall wird öffentlich gemacht, um dadurch andere abzuschrecken, die diese
Taten im Internet haben. Sie riskieren bis zu 5 Jahre Gefängnis.&lt;/p&gt;
&lt;p&gt;2- GÜTLICHE EINIGUNG: Der Fall wird mit den französischen Justizbehörden
behandelt und wir, Sie müssen eine feste Geldstrafe von 4.978 €
(Viertausendneunhundertachtundsiebzig Euro) zahlen, die von der nationalen
Gesetzgebung zu diesem Zweck vorgesehen ist. Sie werden auch in einer
Überwachungsfrist von 6 Monaten ausgesetzt sein und im Falle eines Rückfalls
werden wir die Justiz ergreifen.&lt;/p&gt;
&lt;p&gt;Bitte antworten Sie uns, um das entsprechende Verfahren entsprechend der von
Ihnen gewählten Option aus den beiden oben genannten Optionen einzuleiten,
andernfalls wird das Gerichtsverfahren eingeleitet.&lt;/p&gt;
&lt;p&gt;Ps.Bilanz / EUROPOL&lt;/p&gt;
&lt;p&gt;https://www.bmfsfj.de/bmfsfj/aktuelles/alle-meldungen/gemeinsam-gegen-sexuelle-ausbeutung-von-kindern-im-internet-89392&lt;/p&gt;
&lt;p&gt;Herzliche Grüße,&lt;/p&gt;
&lt;p&gt;Mr. Michael RUPP,&lt;/p&gt;
&lt;p&gt;Polizeidirektor&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;BUNDESPOLIZEIINSPEKTION MÜNCHEN&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Diesmal kein jpg – nehmen die die Sache vielleicht nicht mehr so ernst?&lt;/p&gt;
&lt;p&gt;Der Text ist natürlich wieder reines Gold! Aber es gibt noch andere spannende
Details. Z.B. ist diesmal der Absender
&lt;code&gt;Kontrollburo-munchen@alumnidirector.com&lt;/code&gt;. Hier die Email header:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Return-Path: &amp;lt;Kontrollburo-munchen@alumnidirector.com&amp;gt;
Authentication-Results: kundenserver.de; dkim=pass header.i=@mail.com
Received: from mout.gmx.com ([74.208.4.200]) by mx.kundenserver.de (mxeue010
        [212.227.15.41]) with ESMTPS (Nemesis) id 1MUo4n-1nW7hn2RGb-00Qj2O for
        &amp;lt;kunibald.von-socken-und-sinnen@techbotch.org&amp;gt;; Wed, 13 Apr 2022 09:50:30
        +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mail.com;
        s=dbd5af2cbaf7; t=1649836229;
        bh=xAMzgJRoySXc3Qb7UdVLZM1WO70nxdKpQ92RhPf2KlY=;
        h=X-UI-Sender-Class:From:To:Subject:Date;
        b=7Is2t3EmqfuqZQ6yI0U5PKF2Y99RFH+JaXR9hOzEY9zhJbTCI/jLigxQPFeseEjzM
        YLQTYnXGAnCUznIjsLfx64HMPw00eRsSaclAvu7b/a4Ovj7fNsAiks92K8EYTBN0Rz
        IgLMr5hwJ31Biea7sMA47ecPwB5jVrgTH3Q4dalQ=
X-UI-Sender-Class: 214d933f-fd2f-45c7-a636-f5d79ae31a79
Received: from [2.58.241.134] ([2.58.241.134]) by web-mail.mail.com
        (3c-app-mailcom-lxa07.server.lan [10.76.45.8]) (via HTTP); Wed, 13 Apr 2022
        09:50:29 +0200
MIME-Version: 1.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nach den Timestamps scheint die email über mail.com an gmx.com zu mir geleitet
worden zu sein.  Allerdings schreiben SPAM Mailer gerne mal gefälschte header
dazu.  Die IP Adresse des vermeintlichen mail.com servers ist in Taiwan
verortet, die des GMX hosts in Deutschland.&lt;/p&gt;
&lt;p&gt;Unter www.alumnidirector.com bekommt man nur eine leere weiße Seite.  Bei der
Recherche im Netz findet mal auch die Aussage, &lt;code&gt;alumndirector.com&lt;/code&gt; sei ein
disposable Email Service. Das würde ja gut passen, allerdings findet man keine
Seite, um sich dort zu registrieren oder sowas. Vielleicht weiß whois ja mehr:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ whois alumnidirector.com
[...]
Domain Name: alumnidirector.com
Registry Domain ID: 3082525_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.register.com
Registrar URL: http://www.register.com
Updated Date: 2019-02-07T20:35:14Z
Creation Date: 1997-08-22T04:00:00Z
Registrar Registration Expiration Date: 2022-08-21T04:00:00Z
Registrar: Register.com, Inc.
Registrar IANA ID: 9
Reseller: 
Domain Status: clientTransferProhibited http://icann.org/epp#clientTransferProhibited
Registry Registrant ID: 
Registrant Name: ATTN Domain Inquiries
Registrant Organization: World Media Group
Registrant Street: 90 Washington Valley Rd. #1128
Registrant City: Bedminster
Registrant State/Province: NJ
Registrant Postal Code: 07921
Registrant Country: US
Registrant Phone: +1.9089982344
Registrant Phone Ext: 
Registrant Fax: 
Registrant Fax Ext: 
Registrant Email: domains@world.com
Registry Admin ID: 
Admin Name: ATTN Domain Inquiries
Admin Organization: World Media Group
Admin Street: 90 Washington Valley Rd. #1128
Admin City: Bedminster
Admin State/Province: NJ
Admin Postal Code: 07921
Admin Country: US
Admin Phone: +1.9089982344
Admin Phone Ext: 
Admin Fax: 
Admin Fax Ext: 
Admin Email: domains@world.com
Registry Tech ID: 
Tech Name: ATTN Domain Inquiries
Tech Organization: World Media Group
Tech Street: 90 Washington Valley Rd. #1128
Tech City: Bedminster
Tech State/Province: NJ
Tech Postal Code: 07921
Tech Country: US
Tech Phone: +1.9089982344
Tech Phone Ext: 
Tech Fax: 
Tech Fax Ext: 
Tech Email: domains@world.com
Name Server: pdns1.ultradns.net
Name Server: pdns4.ultradns.org
Name Server: pdns2.ultradns.net
Name Server: pdns3.ultradns.org
DNSSEC: Unsigned
Registrar Abuse Contact Email: domain.operations@web.com
Registrar Abuse Contact Phone: +1.8777228662
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hm. Wenig erhellend.&lt;/p&gt;
&lt;p&gt;Als nächstes fühlen wir doch mal dem Server etwas auf den Zahn:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ sudo nmap -O alumnidirector.com &amp;gt; nmap.txt
Starting Nmap 7.80 ( https://nmap.org ) at 2022-04-13 21:12 CEST
Nmap scan report for alumnidirector.com (35.186.238.101)
Host is up (0.015s latency).
rDNS record for 35.186.238.101: 101.238.186.35.bc.googleusercontent.com
Not shown: 962 filtered ports
PORT      STATE SERVICE
25/tcp    open  smtp
43/tcp    open  whois
80/tcp    open  http
83/tcp    open  mit-ml-dev
84/tcp    open  ctf
85/tcp    open  mit-ml-dev
89/tcp    open  su-mit-tg
110/tcp   open  pop3
143/tcp   open  imap
443/tcp   open  https
465/tcp   open  smtps
587/tcp   open  submission
700/tcp   open  epp
993/tcp   open  imaps
995/tcp   open  pop3s
1084/tcp  open  ansoft-lm-2
1085/tcp  open  webobjects
1089/tcp  open  ff-annunc
1443/tcp  open  ies-lm
1935/tcp  open  rtmp
3389/tcp  open  ms-wbt-server
5222/tcp  open  xmpp-client
5432/tcp  open  postgresql
5900/tcp  open  vnc
5901/tcp  open  vnc-1
5999/tcp  open  ncd-conf
8080/tcp  open  http-proxy
8081/tcp  open  blackice-icecap
8085/tcp  open  unknown
8086/tcp  open  d-s-n
8088/tcp  open  radan-http
8089/tcp  open  unknown
8090/tcp  open  opsmessaging
8099/tcp  open  unknown
9100/tcp  open  jetdirect
9200/tcp  open  wap-wsp
20000/tcp open  dnp
30000/tcp open  ndmps
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
OS fingerprint not ideal because: Missing a closed TCP port so results incomplete
No OS matches for host
Network Distance: 7 hops

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 21.49 seconds
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Uiii – da sind aber vieeele Ports offen! Was'n da los? Komisch auch, dass nmap
das OS nicht identifizieren konnte. Die scheinbar offenen ports sind
größtenteils auch nicht sehr gesprächig. Jedenfalls wollen sie nicht so einfach
per telnet mit mir reden:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ telnet alumnidirector.com 1443
Trying 35.186.238.101...
Connected to alumnidirector.com.
Escape character is &amp;#39;^]&amp;#39;.
Connection closed by foreign host.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ein Port hat meine Aufmerksamkeit aber besonders auf sich gezogen: &lt;code&gt;9100/tcp
open  jetdirect&lt;/code&gt;. Das könnte bedeuten, dass wir auf deren Drucker zugreifen
können.&lt;/p&gt;
&lt;p&gt;Nach diesem kleinen technischen Exkurs ist es aber an der Zeit, die Herren mit einer
Antwort zu würdigen um nicht den Schwung zu verlieren:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sehr geehrter Herr Rupp,&lt;/p&gt;
&lt;p&gt;Nach Rücksprache mit meinem Advokaten, würde ich natürlich eine
   diskrete Regelung im Sinne einer gütlichen Einigung anstreben. Um die
   notwendigen administrativen Schritte einleiten zu können benötige ich
   hierzu die üblichen Dokumente:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Eine Kopie Ihres Personalausweises&lt;/li&gt;
&lt;li&gt;Die vom Konsul der Republik München gegengezeichnete polizeiliche
      Diensturkunde&lt;/li&gt;
&lt;li&gt;Die Bankverbindung des Polizeireviers&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ich bin sicher, Sie können mir hier problemlos weiterhelfen, so dass die
   Sache schnell aus der Welt geschafft werden kann.&lt;/p&gt;
&lt;p&gt;hochachtungsvoll&lt;/p&gt;
&lt;p&gt;Dr. Kunibald von Socken und Sinnen&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Fortsetzung folgt.&lt;/p&gt;
&lt;h1&gt;Update 2022-04-14&lt;/h1&gt;
&lt;p&gt;Meine Brieffreunde haben sich wieder gemeldet.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wir bestätigen den Eingang Ihrer Bereitschaft, diesen Streit mit Option 2
gütlich beizulegen.&lt;/p&gt;
&lt;p&gt;Sie haben von uns, lieber Herr, nichts zu verlangen, Sie sind auch nicht
verpflichtet, sich für die gütliche Einigung zu entscheiden.
Sie haben zwei Möglichkeiten, wenn Sie wissen, dass Sie nicht einbrechen, dann
haben Sie die Wahl, sich für das rechtliche Verfahren zu entscheiden.
Sie haben nicht das Recht, mich nach meinen persönlichen Daten zu fragen,
geschweige denn nach Polizeidokumenten.&lt;/p&gt;
&lt;p&gt;Zur Erinnerung:&lt;/p&gt;
&lt;p&gt;2 - GÜTLICHE EINIGUNG: Der Fall wird mit den Justizbehörden, Deutschland und
unseren Büros behandelt. Sie müssen eine feste Geldstrafe in Höhe von 4.978 € (
viertausendneunhundertachtundsiebzig Euro) zahlen, die in den nationalen
Rechtsvorschriften zu diesem Zweck vorgesehen ist. Sie werden auch in einer
Überwachungsphase für 6 Monate ausgesetzt sein und im Falle eines Rückfalls
werden wir die Justiz ergreifen. Sobald die Geldstrafe bezahlt wurde, schließen
wir die Datei und geben Ihnen ein Formular zum Ausfüllen.&lt;/p&gt;
&lt;p&gt;Sie haben eine Straftat begangen, die strafrechtlich mit einer Freiheitsstrafe
geahndet werden kann, so dass Sie, um Ihre Situation zu regeln, die Geldstrafe
in Höhe von 4.978 € (viertausendneunhundertachtundsiebzig Euro) zahlen müssen,
die in der nationalen Gesetzgebung zu diesem Zweck vorgesehen ist. Finden Sie
so schnell wie möglich die RIB, auf der die Regularisierung vorgenommen werden
muss.&lt;/p&gt;
&lt;p&gt;RIB (Bankverbindung) GENERALDIREKTION DES FINANZMINISTERIUMS&lt;/p&gt;
&lt;p&gt;Kontoname (Schatzmeister) : JEDEMI LENGO PATHI&lt;br&gt;
IBAN : DE42 1101 0101 5384 6101 93&lt;/br&gt;
BIC : SOBKDEB2XXX&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Grund für die Übertragung: Datei : Ordner : réf Sendung:61133479&lt;/p&gt;
&lt;p&gt;Bitte lesen Sie das auszufüllende Dokument und senden Sie es nicht an uns
zurück.&lt;/p&gt;
&lt;p&gt;P-s: Sobald die Überweisung erfolgt ist, senden Sie uns bitte eine gescannte
Kopie des Überweisungsauftrags zur Bestätigung.&lt;/p&gt;
&lt;p&gt;Mr. Michael RUPP,&lt;br&gt;
Polizeidirektor&lt;br&gt;
------------------------------------------------------------------&lt;br&gt;
BUNDESPOLIZEIINSPEKTION MÜNCHEN&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Also ich finde, die könnten schon ein bisschen mehr auf meine Bitten eingehen,
zumal diese natürlich ganz klar in den Gesetzen der Republik München festgeschrieben 
sind.&lt;/p&gt;
&lt;p&gt;Außerdem hat die Email noch ein Formular im Anhang, das ich ausfüllen, aber
nicht zurückschicken soll??? Immerhin räumt es mir die Urheberrechte an der Tat
ein. Das ist doch schonmal was.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/phishing/Gütliche-einigung.png"&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sehr geehrter Herr Rupp,&lt;/p&gt;
&lt;p&gt;In Ihrer Nachricht sagen Sie "Sie haben von uns, lieber Herr, nichts zu
verlangen" – das ist nicht korrekt. Ich darf diesbezüglich Artikel 6 des
Gesetzes über die Aufgaben und Befugnisse der Bayerischen Polizei
(Polizeiaufgabengesetz – PAG) in der Fassung der Bekanntmachung vom 14.
September 1990 zitieren:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Auf Verlangen des von einer Maßnahme Betroffenen hat der Polizeibeamte sich
auszuweisen.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;D.h. ich bin gesetzlich berechtigt, die Ausweiskopie einzufordern.&lt;/p&gt;
&lt;p&gt;Weiterhin bin ich auch berechtigt, die von mir angeforderte polizeiliche
Diensturkunde anzufordern. §47 des Deutschen
Polizeibürokratieaufgabenverfolgungsgesetzes sagt hier eindeutig:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(2) liegt gegen einen Beschuldigten ein imaginiertes Verfahren wegen
steuerlicher, sexueller oder verkehrspolizeilicher Vergehen vor, ist die
ermittelnde Stelle verpflichtet, dem Beschuldigten die Schwere der Sache
durch Übersendung einer vom zuständigen Konsul gegengezeichnete
polizeiliche Diensturkunde zu bestätigen.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ich muss daher auf die Übersendung dieser Dokumente bestehen, da es mir sonst
nicht möglich ist, das von Ihnen geforderte Bußgeld zu bezahlen.&lt;/p&gt;
&lt;p&gt;Hochachtungsvoll&lt;/p&gt;
&lt;p&gt;Dr. Kunibald von Socken und Sinnen&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mal sehen, was sie dazu sagen. In der Zwischenzeit befassen wir uns mal mit der
Bankverbindung. Ich war sehr überrascht, eine deutsche IBAN zu bekommen. Ich
hatte erwartet, dass sie mir sagen ich solle den Betrag mit Western Union nach
Albanien schicken, oder auf ein Konto im Kongo überweisen, oder sowas. Eine
Bank ist nicht angegeben, also recherchieren wir doch mal die BIC. Die gehört
der &lt;a href="https://www.solarisbank.com/de/"&gt;Solarisbank AG&lt;/a&gt; in Berlin – nie gehört.&lt;/p&gt;
&lt;p&gt;Die Homepage dieser Bank sagt "Bauen Sie Ihre eigenen Banking-Produkte mit uns
Unsere Banking-as-a-Service-Plattform hat alles was Sie brauchen, um Ihre
eigenen Banking-Produkte zu bauen." – hm. Also keine so ganz richtige Bank,
sondern scheinbar eines dieser zwielichtigen "Fintech" Startups?&lt;/p&gt;
&lt;p&gt;Wikipedia sagt: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Die Bank wurde im März 2016 vom deutschen Fintech-Unternehmen FinLeap[3]
sowie Marko Wenthin und Andreas Bittner gegründet&lt;/p&gt;
&lt;p&gt;[...]&lt;/p&gt;
&lt;p&gt;Am 25. Januar 2022 hat die Bafin eine Sonderprüfung durch PwC angeordnet.
Grund dafür sei eine bankaufsichtliche Prüfung aus dem Jahr 2020, in der
Mängel in der Compliance festgestellt wurden.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Klingt jetzt nicht gut. Trustpilot findet sie auch &lt;a href="https://de.trustpilot.com/review/solarisbank.com"&gt;nicht so
toll&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/phishing/Trustpilot-solarisbank.png" class="Large"&gt;&lt;/p&gt;
&lt;p&gt;Und auch dieser &lt;a href="https://www.wiwo.de/my/unternehmen/banken/solarisbank-jetzt-lieben-kriminelle-auch-diese-bank/27946392.html"&gt;Artikel in der
Wirtschaftswoche&lt;/a&gt;
passt in Bild.&lt;/p&gt;
&lt;p&gt;Aber ganz eigentlich hatte ich mich auf den Ausweis gefreut. Also Daumen drücken...&lt;/p&gt;
&lt;h1&gt;Update 2022-04-15&lt;/h1&gt;
&lt;p&gt;Irgendwie sind die nicht sehr einsichtig:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wir bestätigen den Empfang Ihrer E-Mail.&lt;/p&gt;
&lt;p&gt;Nach der Verweigerung der Zusammenarbeit sind wir verpflichtet, das rechtliche
Verfahren einzuleiten, so dass Sie in unsere Räumlichkeiten geladen werden, der
Fall veröffentlicht und an die Medien geschickt wird, damit die öffentliche
Meinung weiß, was Ihnen vorgeworfen wird. Alle Beweise werden offengelegt
(Nacktfotos, Gespräche, besuchte Websites usw.).&lt;/p&gt;
&lt;p&gt;Wir haben Ihnen die Möglichkeit gegeben, die Angelegenheit gütlich zu regeln,
aber Sie haben unsere E-Mail nicht positiv beantwortet.
Innerhalb von 72 Stunden kommen die Gendarmerie-Dienste zu Ihnen nach Hause und
bringen Sie an Bord.&lt;/p&gt;
&lt;p&gt;Herzliche Grüße&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Immerhin wollen sie mich an Bord bringen – eine Kreuzfahrt vielleicht?  Wie
auch immer – einen Versuch mache ich noch und versuche die angeknackste
Email-Beziehung zu kitten:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sehr geehrte Damen und Herren,&lt;/p&gt;
&lt;p&gt;Ich bin ein wenig verwundert über Ihre Antwort, denn ich hatte in
unserer Konversation den Eindruck gewonnen, dass Sie das Geld ganz
gerne hätten. Ich finde, da könnten Sie sich schon die Mühe machen,
die beiden Dokumente zu schicken...&lt;/p&gt;
&lt;p&gt;Außerdem finde ich dass meine bisherigen Emails schon ausgesprochen positiv
waren. Aber ich verspreche mir Mühe zu geben und zukünftig mehr Enthusiasmus
an den Tag zu legen. Als Zeichen meines guten Willens habe ich Ihnen im
Anhang ein motivierendes Bild angehängt, das Ihnen bestimmt gefallen wird.&lt;/p&gt;
&lt;p&gt;Aber vielleicht haben Sie ja einen anderen Vorschlag? Ich bin schon
gespannt.&lt;/p&gt;
&lt;p&gt;MfG&lt;br&gt;
Dr. Kunibald von Socken und Sinnen&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Und wie geschrieben habe ich ihnen dieses Bild angehängt – im Original scharf,
aber ich hab keine Lust auf Copyright-Schwierigkeiten, daher mit Blur. Aber ich 
denke, Ihr seht schon, worum es geht.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/phishing/Motivation.jpg" class="Large"&gt;&lt;/p&gt;
&lt;h1&gt;2022-04-18&lt;/h1&gt;
&lt;p&gt;Ich dachte, das Verbrechen schläft nie, aber scheinbar feiern Ganoven Ostern
und arbeiten nicht an den Feiertagen. :-(&lt;/p&gt;
&lt;h1&gt;2022-04-24&lt;/h1&gt;
&lt;p&gt;Noch immer keine Antwort. Die haben unsere Brieffreundschaft einfach so einschlafen 
lassen. :-(&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>SSH-Bot Statistik</title><link href="https://techbotch.org/blog/ssh-bot-statistics/index.html" rel="alternate"/><published>2022-04-10T00:00:00+02:00</published><updated>2022-04-10T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-04-10:/blog/ssh-bot-statistics/index.html</id><summary type="html">&lt;p&gt;In einem &lt;a href="https://techbotch.org/blog/endlessh/index.html"&gt;Post&lt;/a&gt; vor ein paar Wochen
hatte ich erzählt, wie ich &lt;code&gt;endlessh&lt;/code&gt; auf meinem Homeserver installiert habe,
um die ssh-scanner Deppen ein wenig zu ärgern. Vermutlich bringt es nicht
wirklich was, aber es verschafft mir ein wohliges Gefühl. &lt;/p&gt;
&lt;p&gt;Heute wollen wir uns mal anhand der Logfiles ansehen, wieviele ssh-Attacken …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In einem &lt;a href="https://techbotch.org/blog/endlessh/index.html"&gt;Post&lt;/a&gt; vor ein paar Wochen
hatte ich erzählt, wie ich &lt;code&gt;endlessh&lt;/code&gt; auf meinem Homeserver installiert habe,
um die ssh-scanner Deppen ein wenig zu ärgern. Vermutlich bringt es nicht
wirklich was, aber es verschafft mir ein wohliges Gefühl. &lt;/p&gt;
&lt;p&gt;Heute wollen wir uns mal anhand der Logfiles ansehen, wieviele ssh-Attacken
überhaupt so passieren.&lt;/p&gt;
&lt;h1&gt;Daten&lt;/h1&gt;
&lt;p&gt;Zunächst stellt sich die Frage, wo wir überhaupt Infos dazu finden, wer alles
so versucht hat, sich via ssh einzuloggen. Also begeben wir uns mal nach
&lt;code&gt;/var/log/&lt;/code&gt;, wo derartiges zu erwarten ist. Dort liegen diverse logfiles – aber
in welchem/n landen die Meldungen von endlessh? &lt;/p&gt;
&lt;p&gt;Dazu verwende ich den &lt;code&gt;silver-searcher&lt;/code&gt;, kurz &lt;code&gt;ag&lt;/code&gt;, der ist eine schnelle
Implementierung des Such-Tools &lt;code&gt;ack&lt;/code&gt;. Wer das noch nicht kennt, sollte es
dringend anschauen – damit kann man rasend schnell und bequem herausfinden, in
welchen Files ein Begriff (typischerweise eine Variable oder ein Befehl)
vorkommt. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ag endlessh
user.log:1:Apr 10 00:00:25 hal endlessh[780]: 2022-04-09T22:00:25.627Z ACCEPT host=::ffff:178.62.118.126 port=61000 fd=207 n=204/4096
user.log:2:Apr 10 00:01:05 hal endlessh[780]: 2022-04-09T22:01:05.628Z CLOSE host=::ffff:178.62.118.126 port=61000 fd=207 time=40.001 bytes=45
user.log:3:Apr 10 00:19:11 hal endlessh[780]: 2022-04-09T22:19:11.877Z ACCEPT host=::ffff:112.85.42.229 port=53414 fd=207 n=204/4096
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Uiii – viele Zeilen. Zu viele. Also etwas nachbearbeiten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ag endlessh | cut -f 1 -d: | sort -u
messages
messages.1
syslog
syslog.1
user.log
user.log.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Besser. Am wenigsten Rauschen gibt es in den &lt;code&gt;usr.log&lt;/code&gt; files. Also nehmen wir
die. Zuerst habe ich mal drei davon in einer Datei zusammengeführt. Und als
nächstes schmeißen wir mal alles raus, was uns nicht interessiert:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ grep endlessh user.log &amp;gt; user.log.clean
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wenn man sich den Inhalt ansieht findet man zwei verschiedene Arten von Einträgen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;07T19:24:02.901Z ACCEPT host=::ffff:112.85.42.229 port=45982 fd=208 n=205/4096
07T19:24:22.904Z CLOSE host=::ffff:112.85.42.229 port=45982 fd=208 time=20.003 bytes=5
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also &lt;code&gt;ACCEPT&lt;/code&gt; und &lt;code&gt;CLOSE&lt;/code&gt;. Letztere enthalten eigentlich alle Information, die
man so haben können wollte: Timestamp, Dauer der Verbindung (time) und die
Anzahl der ausgetauschten Bytes.&lt;/p&gt;
&lt;p&gt;Damit sollte sich doch was machen lassen. Als erstes aber muss ich das alles
mal parsen und in Tabellenform bringen, damit es analysierbar wird. Dazu bauen
wir ein kleines Python Script:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;#!/usr/bin/env python3
&amp;quot;Format user.log entries as CSV&amp;quot;
import sys, re

print(&amp;quot;,&amp;quot;.join([&amp;quot;timestamp&amp;quot;, &amp;quot;action&amp;quot;, &amp;quot;host&amp;quot;, &amp;quot;port&amp;quot;, &amp;quot;time&amp;quot;, &amp;quot;bytes&amp;quot;]))
for line in sys.stdin:
    line = line.rstrip()
    line = re.sub(&amp;quot;^.*endlessh\[[0-9]+\]: &amp;quot;, &amp;quot;&amp;quot;, line)
    timestamp, action, fields = line.split(&amp;quot; &amp;quot;, maxsplit=2)
    fields = fields.split(&amp;quot; &amp;quot;)
    fields = dict(x.split(&amp;quot;=&amp;quot;) for x in fields)
    if action == &amp;quot;CLOSE&amp;quot;:
        print(
            &amp;quot;,&amp;quot;.join(
                [
                    timestamp,
                    action,
                    fields[&amp;quot;host&amp;quot;],
                    fields[&amp;quot;port&amp;quot;],
                    fields[&amp;quot;time&amp;quot;],
                    fields[&amp;quot;bytes&amp;quot;],
                ]
            )
        )
    elif action == &amp;quot;ACCEPT&amp;quot;:
        print(&amp;quot;,&amp;quot;.join([timestamp, action, fields[&amp;quot;host&amp;quot;], fields[&amp;quot;port&amp;quot;], &amp;quot;&amp;quot;, &amp;quot;&amp;quot;]))
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und damit können wir die Daten nun formatieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ ./format.py &amp;lt; user.log.clean &amp;gt; user.csv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;... und in R analysieren.&lt;/p&gt;
&lt;p&gt;Die Logs, die ich hier auswerte decken den Zeitraum der letzten 13 Tage ab und
enthalten 2975 akzeptierte und 2840 abgeschlossene Verbindungen. D.h. 135 sind
aktuell offen. Im Mittel gab es also 228 Verbindungen am Tag.&lt;/p&gt;
&lt;h2&gt;Wie lang dauern die Sessions?&lt;/h2&gt;
&lt;p&gt;Meine Vermutung war, dass die ssh Bots auch nicht blöd sind und nach ein paar
Sekunden aufgeben, um nicht zu viel Zeit zu verschwenden. Für sehr viele stimmt
das auch, aber eine erstaunlich große Zahl lässt sich gefühlt ewig
festhalten:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ssh-bot-statistics/histogram-time.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Der geduldigste Bot hat sich 72756 Sekunden festhalten lassen – das sind
beeindruckende 20 Stunden! Der Median lag immerhin noch bei 1025s = 17min. 60%
der Bots blieben länger, als 30s und fast die Hälfte (49.9%) waren über eine
Stunde gebunden.&lt;/p&gt;
&lt;p&gt;Das hatte ich nicht erwartet.&lt;/p&gt;
&lt;h2&gt;Wieviel Daten werden übertragen?&lt;/h2&gt;
&lt;p&gt;Im Median wurden bei den Sessions 1784 Bytes ausgetauscht. In der dicksten
Session waren es 125 kB.  &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ssh-bot-statistics/histogram-bytes.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Erwartungsgemäß korreliert die Dauer der Verbindung sehr stark (&lt;span class="math"&gt;\(r^2=0.9999\)&lt;/span&gt;)
mit dem Datenvolumen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ssh-bot-statistics/time-bytes.png" class= "Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Connections nach Tageszeit&lt;/h1&gt;
&lt;p&gt;Außerdem hat mich interessiert, ob es irgendein zeitliches Muster für die
Bot-Angriffe gibt. Meine Annahme war, dass Bots nie müde werden und die
Uhrzeiten der Connections mehr oder weniger gleichverteilt sind. Und damit
liege ich sowas von falsch:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ssh-bot-statistics/histogram-time-of-day.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wie es scheint, halten sich viele ssh-Bots einigermaßen an deutsche Bürozeiten.
WTF???&lt;/p&gt;
&lt;p&gt;Da wir hier nur knapp 2 Wochen abdecken macht eine Analyse nach Wochentag wenig
Sinn. Vielleicht reiche ich das in der Zukunft einmal nach.&lt;/p&gt;
&lt;h1&gt;Wieviele verschiedene IP-Adressen?&lt;/h1&gt;
&lt;p&gt;Im Datensatz finden sich insgesamt 240 einzigartige IP-Adressen. Und per
Augenmaß sind manche sehr aktiv und andere kommen eher selten vor. Also schauen
wir uns das mal an:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ssh-bot-statistics/connections-per-IP.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Schaut man in die Daten findet man dies: 140 IP Adressen haben genau einmal
versucht sich zu verbinden, 35 Adressen hatten zwei Connections, drei
Connections gab es noch bei 14 IPs. Am anderen Ende des Spektrums gab es je
eine IP, die es 746 bzw. 816 mal versucht haben.&lt;/p&gt;
&lt;p&gt;In der Grafik ist das aber kaum zu erkennen. Das ist durchaus typisch bei
solchen Verteilungen – es dürfte sich hier um eine sog. Power-Law Verteilung
handeln. Und die kann man am besten visualisieren, wenn man beide Achsen
logarithmisch darstellt – dann sollte der Zusammenhang in etwa linear aussehen,
wenn es eine Power-Law Verteilung ist:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ssh-bot-statistics/connections-per-IP_log.png" class= "Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Woher kommen die Angriffe?&lt;/h1&gt;
&lt;p&gt;Zuguterletzt wüsste ich noch gerne, woher die Attacken eigentlich kommen.
Anhand der IP-Adressen könne wir versuchen, das Ursprungsland zu
identifizieren. Konkret habe ich dazu die API von
&lt;a href="https://app.ipgeolocation.io/"&gt;ipgeolocation.io&lt;/a&gt; verwendet.  Bei denen gibt es
einen kostenlosen Account, der zwar limitiert ist, aber für die Zwecke dieser
Auswertung völlig ausreichend ist.&lt;/p&gt;
&lt;p&gt;Natürlich muss man diese Daten sehr mit Vorsicht genießen, denn es ist
anzunehmen, dass ein Angreifer sowas nicht von seinem heimischen PC aus macht,
sondern eher fremder Leute Rechner dafür einspannt, die er unter Kontrolle
gebracht hat. Zum Zweck der Analyse betrachte ich nur &lt;em&gt;unique IPs&lt;/em&gt;. Und so sieht die
Länderverteilung aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ssh-bot-statistics/countries.png" class= "Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Ich habe in den Daten durchaus ein paar Überraschungen gefunden. Insbesondere
hat mich verwundert, dass es wirklich gelingt einen nicht unerheblichen Teil
der Connections sehr in die Länge zu ziehen. Aber machen wir uns nichts vor –
auch die Bot-Programmierer haben mit Sicherheit schon von asynchronem I/O
gehört und so ist nicht zu erwarten, dass sie das besonders schmerzt. Vor allem
da sie vermutlich eine Armada gehackter Fremdrechner zur Verfügung haben. Aber
vielleicht streut es ja doch wenigstens ein kleines bisschen Sand ins Getriebe
einiger naviverer Angreifer.&lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Funkklingel</title><link href="https://techbotch.org/blog/wireless-doorbell/index.html" rel="alternate"/><published>2022-04-03T00:00:00+02:00</published><updated>2022-04-03T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-04-03:/blog/wireless-doorbell/index.html</id><summary type="html">&lt;p&gt;Hin und wieder wollen andere Menschen uns darauf aufmerksam machen, dass Sie
sich gerade vor unserem Haus befinden. Manche davon kennen wir, andere nicht.
Manche möchten gerne hereingelassen werden, andere würden nur gerne ein Paket
loswerden, das an uns adressiert ist. Allen gemein ist, dass es sie nervt, dass
unsere …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Hin und wieder wollen andere Menschen uns darauf aufmerksam machen, dass Sie
sich gerade vor unserem Haus befinden. Manche davon kennen wir, andere nicht.
Manche möchten gerne hereingelassen werden, andere würden nur gerne ein Paket
loswerden, das an uns adressiert ist. Allen gemein ist, dass es sie nervt, dass
unsere Klingel nicht funktioniert. &lt;/p&gt;
&lt;p&gt;Eigentlich gibt es einen Klingelknopf am Gartenzaun, aber der ist uralt und wir
wollen die Klingel nach der Sanierung des Hauses eh erneuern, aber aus
verschiedenen Gründen ist das bisher nicht passiert.  Wenn ich ganz ehrlich bin
fand ich den klingellosen Zustand eigentlich auch ganz angenehm, denn man hat
so wirklich seine Ruhe. Dennoch wurde die Behebung dieses Misstands im
Familienrat auf die Tagesordnung gebracht. Und so hatte ich irgendwann
halbherzig so eine Funkklingel angeschafft und den Sender neben dem Briefkasten
montiert. Die funktioniert auch ganz OK. Aber es hat sich herausgestellt dass
die meisten Leute, mangels Hoftor, einfach ungefragt bis zur Haustür vorrücken
und dort vergeblich nach einer Klingelmöglichkeit suchen. Zudem halten die
blöden Knopfzellen im Sender nicht ewig und was noch blöder ist – man bekommt
nicht wirklich mit wenn sie leer sind – bis einem irgendwann auffällt, dass es
in letzter Zeit so friedlich ist und niemand klingelt.&lt;/p&gt;
&lt;p&gt;Also muss eine bessere Lösung her.&lt;/p&gt;
&lt;h1&gt;Wunschliste und Planung&lt;/h1&gt;
&lt;p&gt;Meine Vorstellung besteht nun darin, je einen Klingelknopf am nicht vorhanden
Tor und einen zweiten direkt am Haus anzubringen. Beide sollen dann per Funk je
einen Empfänger (je einen im EG und OG) zu verheißungsvollem "Gongen" ermuntern.&lt;/p&gt;
&lt;p&gt;Außerdem will ich nicht diese blöden Plastik-Klingelsender einfach an Wand bzw.
Zaun pappen, sondern altmodische Messing-Klingelknöpfe haben. Zuguterletzt
fände ich es auch ganz nett, wenn auch mein Homeassistant mitbekäme, wenn es
klingelt. Also ist ein wenig Basteln angesagt. &lt;/p&gt;
&lt;p&gt;Die Einkaufsliste umfasst also&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2x Funkklingel mit je einem Sender und Empfänger. Letzter bitte mit Stromversorgung 
  aus der Steckdose&lt;/li&gt;
&lt;li&gt;2x Messingklingelknopf&lt;/li&gt;
&lt;li&gt;ein bisschen Holz für das Gehäuse&lt;/li&gt;
&lt;li&gt;Kleines Netzteil für einen der beiden Sender (beim zweiten gibt's keinen
  Stromanschluss)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nach etwas Recherche habe ich mich für das Modell AVANTEK D-3B entschieden.
Zwar habe ich nur ein Set mit einem Sender und zwei Empfängern gefunden, aber
dafür konnte ich den Sender einzeln kaufen und bin so zu meiner
Wunschkonfiguration gekommen. Angeblich reicht das Funksignal bis zu 300m weit
und die Empfänger können als Relais-Stationen fungieren, um die Reichweite zu
einem Zweitempfänger nochmal zu erhöhen. Die Beschreibung prahlt mit 52
verschiedenen Melodien bei 115dB (niemals...). Laut ist das Teil wirklich (kann
man zum Glück runterregeln) aber die 52 "Melodien" haben mir spontan ein
DejaVue an die Zeiten des Jamba-Spar-Abos verschafft. Bis auf 2 halbwegs
dezente Ding-Dong Töne ist der Rest wohl eher auf die Zielgruppe
(prä-)pubertärer Nutzer optimiert.  Aber die muss ich ja nicht verwenden.&lt;/p&gt;
&lt;p&gt;Und so schaut eine Sender-Empfänger-Kombi aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/avantec-d-3B.jpg" class= "Large" alt="Funkklingel Avantc D-3B Sender und Empfänger"&gt;&lt;/p&gt;
&lt;h1&gt;Technik&lt;/h1&gt;
&lt;p&gt;Zuerst machen wir mal so einen Sender auf. Als erstes fällt auf, dass der
Sender keine Dichtung hat.  D.h. es empfiehlt sich nicht, ihn einfach so zu
montieren. Von wegen IP55...  Im Inneren befindet sich eine recht simple
Platine, die auf der einen Seite nur den Taster und zwei LEDs trägt und auf der
Rückseite finden wir neben einer Knopfzelle diverse Bauteile:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/pcb-front.jpg" class= "Large" alt="Vordereite der Platinemit Taster und LEDS"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/pcb-back.jpg" class= "Large" alt="Rückseite der Platine mit diversen Bauteilen."&gt;&lt;/p&gt;
&lt;p&gt;Bei genauerer Betrachtung haben wir da&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Knopfzellenhalter (CR2032)&lt;/li&gt;
&lt;li&gt;Quarz (26.2982 MHz)&lt;/li&gt;
&lt;li&gt;Eine Antenne&lt;/li&gt;
&lt;li&gt;Einen IC&lt;/li&gt;
&lt;li&gt;Einen Datenport (VCC, GND, CLK, DATA)&lt;/li&gt;
&lt;li&gt;Diverse passive SMD Bauteile sowie ein Transistor&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Alles in allem recht unspektakulär. Spannend aber ist der IC. Ich musste die
Augen ordentlich zusammenkneifen und eine gute Lupe zuhilfe nehmen, um dann bei
optimaler Beleuchtung was lesen zu können: CMT2157B steht drauf. Eine
Googlesuche später habe ich tatsächlich ein Datenblatt. Die Beschreibung sagt
"240 MHz-960 MHz Single Chip OOK Transmitter with Encoder". Das Ding funkt bei
der vorliegenden Konfiguration auf der Frequenz 433.92 MHz. Das klingt
erfolgversprechend in Sachen HA-Anbindung. Laut Datenblatt ist der Chip
programmierbar wenn man einen Jumper brückt. Dazu ist der Datenport da.
Allerdings habe ich keine Angaben zum Protokoll. Nur den Verweis auf ein
Programmiergerät das ich nicht habe.&lt;/p&gt;
&lt;h1&gt;Anschließen&lt;/h1&gt;
&lt;p&gt;Die beiden Empfänger kommen in je eine Steckdose im Erdgeschoss und 1. Stock.
Bei Bedarf kann man dann einen davon rausziehen und in eine Außensteckdose auf
der Terrasse verpflanzen. Das finde ich einen echten Vorteil gegenüber fest
installierten Gongs/Türklingeln.&lt;/p&gt;
&lt;p&gt;Ein Klingelknopf soll an den Gartenzaun – netterweise habe ich noch das
ursprüngliche Klingelkabel und so habe ich beschlossen, das zu benutzen und den
Sender dann im Haus an selbiges anzuschließen. So kann ich mir mittels Netzteil
auch die Knopfzelle sparen und der Sender muss weder Wind noch Wetter ertragen.&lt;/p&gt;
&lt;p&gt;Den zweiten Sender baue ich in ein kleines Holzkästchen ein, auf das der andere
Messing-Klingelknopf kommt. Und anstelle der Knopfzelle nehme ich eine größere
Batterie, damit das möglichst lange hält. D.h. ich stelle mir das in etwa so vor:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/schematics.svg" class= "Large" alt="Schaltung Klingelknöpfe und Sender"&gt;&lt;/p&gt;
&lt;h1&gt;Funkprotokoll&lt;/h1&gt;
&lt;p&gt;Bleibt noch die Frage, ob und wie man das Klingelsignal auch am Heimserver
auffangen kann.  Wäre doch cool, wenn ich das irgendwie in Homeassistant
einspeisen könnte und dann z.B. eine Email oder andere Nachricht versenden
würde, wenn es an der Tür klingelt.&lt;/p&gt;
&lt;p&gt;Wir hatten ja schon gelernt, dass wir hier einen 433MHz Sender vor uns haben
und dass der On/Off-keying (OOK) verwendet. D.h. das sollte sich ganz gut
reverse-engineeren lassen.&lt;/p&gt;
&lt;p&gt;Also erstmal den RTL-SDR Stick rauskramen. Als erstes habe ich einfach mal
&lt;code&gt;rtl_433&lt;/code&gt; gestartet, den Klingelknopf gedrückt und gehofft, dass da vielleicht
schon was kommt. Leider nicht. &lt;/p&gt;
&lt;p&gt;Aber das wäre ja auch zu langweilig gewesen. Also dickere Geschütze auffahren.
In diesem Fall den &lt;em&gt;Universal Radio Hacker&lt;/em&gt; (&lt;a href="https://github.com/jopohl/urh"&gt;urh&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Das wollen wir mal in ein virtual environment installieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pipx install urh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun können wir es verwenden:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;urh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Als erstes mal den Spectrum-Analyzer starten, ein paarmal auf den
Klinkelknopf drücken und schauen, ob wir das Signal finden:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/urh-spectrum.png"  alt="Spectrum"&gt;&lt;/p&gt;
&lt;p&gt;Das schaut doch schon ganz gut aus. Als nächstes wollten wir mal das Signal
aufzeichnen. Also in den recording mode, dreimal den Knopf drücken. Und schon
haben wir dies:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/urh-recording.png"  alt="Recorded signal"&gt;&lt;/p&gt;
&lt;p&gt;Hübsch. Das speichern wir ab und wechseln in das Interpretation interface. &lt;/p&gt;
&lt;p&gt;Zunächst zoomen wir mal ordentlich in das Signal hinein:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/urh-recording-zoom.png"  alt="Recorded signal"&gt;&lt;/p&gt;
&lt;p&gt;Das Signal ist sehr gleichförmig und wird über bestimmte Perioden ein bzw. aus
geschaltet. On-Off-Keying (OOK) eben. OOK ist letztlich ein Spezialfall von
ASK (amplitude shift keying = Amplitudenmodulation).&lt;/p&gt;
&lt;p&gt;Als nächstes gilt es, das zu decodieren. Also setzen wir die
Demodulation auf &lt;em&gt;ASK&lt;/em&gt; und schauen, was wir bekommen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/urh-recording-demod.png"  alt="Demodulated signal"&gt;&lt;/p&gt;
&lt;p&gt;Wunderbar. Das sieht schon richtig digital aus. Und nun müssen wir über etwas
reden, das mich anfänglich total verwirrt hat: Auf den ersten Blick hätte ich
gesagt, dass ich hier ein Folge von Bits sehe, die man als &lt;code&gt;0101010110010&lt;/code&gt;
interpretieren würde. Aber das ist so nicht ganz richtig, denn auf dieser Ebene
(Roh-Signal) spricht man noch nicht von &lt;em&gt;Bits&lt;/em&gt;, sondern von &lt;em&gt;Symbols&lt;/em&gt;.  Bits
bekommen wir erst nach der Decodierung. Diese &lt;em&gt;kann&lt;/em&gt; die Symbols eins zu eins
in Bits verwandeln, aber das muss nicht so sein. Z.B. gibt es Signale, die auf
Symbol-Ebene nicht binär sind, sondern z.B. vier verschiedene Signal-Level
kennen und so 2 Bits pro Symbol übertragen können. Und auf der anderen Seite
gibt es Methoden, die binär sind, aber mehr als ein Symbol pro Bit verwenden.
Und schließlich gibt es Codierungs-Verfahren die den Input Bit-Stream so
verändern, dass es möglichst viele Übergänge von 0 auf 1 im Rohsignal gibt,
damit sich der Empfänger leichter tut, den Takt (&lt;code&gt;CLK&lt;/code&gt;) sauber synchron zu
halten. Die Bits sind quasi die Nutzlast, die Symbols der Träger – so wie wir
unser analog Signal durch De&lt;em&gt;modulation&lt;/em&gt; aus dem Radiosignal extrahiert hatten
bekommen wir das digitale Signal in Bits durch De&lt;em&gt;codierung&lt;/em&gt; aus dem
Symbol-Stream.&lt;/p&gt;
&lt;p&gt;Ich habe ein sehr schöne Übersicht der kompletten Kette in einer
wissenschaftlichen Publikation (Abb. 5 in &lt;a href="https://www.researchgate.net/publication/320441691_Deep_Learning_for_Wireless_Physical_Layer_Opportunities_and_Challenges"&gt;Tianqi Wang at al. Deep Learning for
Wireless Physical Layer: Opportunities and Challenges, &lt;em&gt;China Communications&lt;/em&gt;,
14:11, Nov.
2017&lt;/a&gt;)
gefunden (Copyright bei den Autoren):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/overview-digital-comm.png" class="Large"  alt="Overview
diagram of tpical digital wireless communication: source - encoding -
modulation - transmission and back."&gt;&lt;/p&gt;
&lt;p&gt;Bevor wir nun anfangen das demodulierte Signal zu decodieren werfen wir mal
einen Blick auf das, was wir schon auf Symbol-Ebene sehen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/symbol-stream.png"  alt="Demodulated symbol stream"&gt;&lt;/p&gt;
&lt;p&gt;Die Message startet mit 16 Symbols, die abwechselnd 1 und 0 sind (gelb
hinterlegt). Das nennt man die &lt;em&gt;Preamble&lt;/em&gt;. Die braucht der Empfänger, um
aufzuwachen und zu lernen wie hoch die &lt;em&gt;Symbol Rate&lt;/em&gt; ist – also wie lang so ein
Symbol dauert.&lt;/p&gt;
&lt;p&gt;Als nächstes folgt eine Sequenz, die man &lt;em&gt;Sync&lt;/em&gt; oder &lt;em&gt;Sync Word&lt;/em&gt; nennt. Das ist
eine vordefinierte Folge von Symbols. Der Empfänger prüft nun, ob das Sync Word
so aussieht wie erwartet. Wenn ja kann es losgehen.&lt;/p&gt;
&lt;h2&gt;Lektüre&lt;/h2&gt;
&lt;p&gt;Jetzt ist ein guter Zeitpunkt, um mit dem reinen Rumraten aufzuhören und 
sich durch die Lektüre von Datenblättern zu bilden. &lt;/p&gt;
&lt;p&gt;Ich habe ein bisschen im großen weiten Netz recherchiert und auf den Seiten
&lt;a href="http://www.cmostek.com"&gt;www.cmostek.com&lt;/a&gt; und &lt;a href="https://hoperf.com"&gt;hoperf.com&lt;/a&gt;
weitere Datenblätter und application notes gefunden. Teils bezogen diese sich
nicht genau auf diesen exakten Chip, aber ich habe den Eindruck, dass das
meiste übertragbar ist.  V.a. die Dokumente
&lt;code&gt;AN112_CMT2150A_Configuration_Guideline&lt;/code&gt; und
&lt;code&gt;AN1004-CMT2157A_CMT2219A_communication_example(1920 coding)&lt;/code&gt; erscheinen sehr
hilfreich.&lt;/p&gt;
&lt;p&gt;Und darin findet man, dass es mehrere verschiedene Formate gibt und diese 
konfigurierbar sind. Das erste im Handbuch ist das &lt;em&gt;1920 packet format&lt;/em&gt; und 
man kann da im Konfigurations-Tool verschiedenes einstellen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/1920-format.png" class="Large" alt="1920 packet format overview"&gt;&lt;/p&gt;
&lt;p&gt;Zwar ist die Länge bzw. das Vorhandensein der Preamble konfigurierbar, aber das
folgende Beispiel legt 16 Symbols nahe und passt somit perfekt zu unserem
Signal (&lt;code&gt;0xaaaa&lt;/code&gt;, wenn man die Symbols als Bits interpretiert):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/preamble.png" class="Medium" alt="Preamble description"&gt;&lt;/p&gt;
&lt;p&gt;Und als nächstes wird dort definiert, dass das sync word (dort &lt;em&gt;head_n pattern&lt;/em&gt;
genannt) so aussehen muss (&lt;code&gt;0xcaca5353&lt;/code&gt;, wenn man die Symbols als Bits
interpretiert):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/sync.png" class="Large" alt="Sync signal description"&gt;&lt;/p&gt;
&lt;p&gt;Und auch das finden wir genau so in unseren Signalen (grün hinterlegt). Damit
ist das Vorgeplänkel abgeschlossen und es folgen die eigentlichen Daten. Und
die können nun laut Data Sheet unterschiedlich codiert sein. Hier die Abbildung aus dem 
Datenblatt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/bit-encoding.png" class="Large" alt="Bit encoding options."&gt;&lt;/p&gt;
&lt;p&gt;Schauen wir also mal auf die Datenpakete, die wir nach Preamble und Sync haben:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;1: 11011011011011011011011011011011010011010010011011010011011011010010010011011...
2: 11011011011011011011011011011011010011010011010010010011011010010010010011010...
3: 11011011011011011011011011011011010011010010011011010011011011010010010011011...
4: 11011011011011011011011011011011010011010011010010010011011010010010010011010...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Für mich schaut das doch sehr nach 3 Symbols pro Bit aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;1: 110 110 110 110 110 110 110 110 110 110 110 100 110 100 100 110 110 100 110 ...
2: 110 110 110 110 110 110 110 110 110 110 110 100 110 100 110 100 100 100 110 ...
3: 110 110 110 110 110 110 110 110 110 110 110 100 110 100 100 110 110 100 110 ...
4: 110 110 110 110 110 110 110 110 110 110 110 100 110 100 110 100 100 100 110 ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ich denke, das dürfte stimmen. Ich sehe nur die beiden Triplets 110 (0) und 100
(1). Und wenn man nun einfach im Texteditor die beiden Symbol-Triplets durch
das entsprechende Bit ersetzt, bekommt man das hier: &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;1: 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 ...
2: 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 0 ...
3: 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 ...
4: 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 0 ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Passt!&lt;/p&gt;
&lt;p&gt;Gegenprobe – 4 Symbols pro Bit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;1:  1101 1011 0110 1101 1011 0110 1101 1011 0100 1101 0010 0110 1101 0011 ... 
2:  1101 1011 0110 1101 1011 0110 1101 1011 0100 1101 0011 0100 1001 0011 ... 
3:  1101 1011 0110 1101 1011 0110 1101 1011 0100 1101 0010 0110 1101 0011 ... 
4:  1101 1011 0110 1101 1011 0110 1101 1011 0100 1101 0011 0100 1001 0011 ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nee – das ist es ganz klar nicht, denn es sollten nur 1110 und 1000 vorkommen.&lt;/p&gt;
&lt;p&gt;Analog für 5 und 6 Symbols pro Bit...&lt;/p&gt;
&lt;h1&gt;Big picture&lt;/h1&gt;
&lt;p&gt;Bevor wir uns dem genauen Inhalt der Daten widmen, treten wir aber einen
Schritt zurück und betrachten nochmal unsere demodulierten Daten:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/3-packets.png"&gt;&lt;/p&gt;
&lt;p&gt;Für mich schaut das so aus, als hätten wir bei einem Klingel-Event tatsächlich
drei separate Datenpakete, die durch eine kurze Pause getrennt sind und so rein
optisch ziemlich gleich aussehen.&lt;/p&gt;
&lt;p&gt;Also spielen wir mal mit der Einstellung rum, damit er das als separate
Messages erkennt. Und schon ...&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/sliced.png"&gt;&lt;/p&gt;
&lt;p&gt;... sind die Teile als separate Messages erkannt so dass aus den ursprünglich 4
Messages nun 3∙3=9 Messages geworden sind.&lt;/p&gt;
&lt;h1&gt;Daten Analyse&lt;/h1&gt;
&lt;p&gt;Nun stellt sich noch die Frage, was die ganzen Daten bedeuten. Vor allem ist zu
erwarten, dass jeder Klingelknopf eine andere ID sendet, weil es sonst auch bei
allen Nachbarn klingelt. Und in der Tat musste ich den separat erworbenen
Sender auch erstmal an den Empfängern anmelden, damit er erkannt wurde.  Bei
einem so simplen Gerät wie einer Haustürklingel würde ich erwarten, dass hier
einfach jedes mal der Gleiche Code gesendet wird und keine Tricks wie Rolling
codes verwendet werden, denn die Sicherheitsimplikationen eines Klingel Hacks
bestehen im Wesentlichen in der Möglichkeit von Klingelstreichen und dazu braucht
man einfach nur den Knopf drücken und wegrennen, also lohnt sich der Aufwand
nicht. Oben hatten wir schon gesehen, dass es da so &lt;code&gt;D0&lt;/code&gt;, &lt;code&gt;D1&lt;/code&gt; etc. Bits
gibt – die sind für den Fall, dass mehr als ein Taster angeschlossen ist.&lt;/p&gt;
&lt;p&gt;Um der Sache mit der Sender-ID auf den Grund zu gehen zeichnen wir ein neues
Signal auf.  Diesmal drücken wir die beiden unterschiedlichen Sender
abwechselnd, um zu erkennen, ob es Unterschiede gibt. Hier zunächst 
das analoge Signal:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/alternating-analog.png"&gt;&lt;/p&gt;
&lt;p&gt;Wie man leicht sehen kann ist die Amplitude der beiden Sender sehr verschieden
– einen habe ich direkt neben die Antenne meines Empfängers gehalten, den
anderen weiter weg.  Auf diese weise sehe ich leicht wer der Sender ist und
auch urh kann so die Participants automatisch zuordnen. Und so schaut das dann
in der Analyse aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wireless-doorbell/alternating-demod.png"&gt;&lt;/p&gt;
&lt;p&gt;Wie versprochen, hat urh erkannt, dass hier zwei verschiedene Sender (A:
hellgrün und B: dunkelgrün) beteiligt waren und das in der Zeilenbeschriftung
kenntlich gemacht). Je drei Messages in jeder Gruppe. Die Preamble hat das
Programm korrekt erkannt. Bei der Länge des Sync words habe ich nachgeholfen,
weil urh nicht wissen kann wo es endet.&lt;/p&gt;
&lt;p&gt;Bisher haben wir also folgendes Bild vom Message Format (Koordinaten und Länge
in Symbols):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Start&lt;/th&gt;
&lt;th&gt;End&lt;/th&gt;
&lt;th&gt;Length&lt;/th&gt;
&lt;th&gt;Bedeutung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;Preamble&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;Sync&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;134&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td&gt;Address/ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;135&lt;/td&gt;
&lt;td&gt;146&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Buttons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;147&lt;/td&gt;
&lt;td&gt;154&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;CRC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Das Ganze hat nur ein klitzekleines Problem: Es kann nicht stimmen, denn wie
wir uns erinnern, brauchen wir 3 Symbols/Bit und 86 ist nicht durch 3 teilbar.
Und auch der Start des Button Feldes kann nicht stimmen, denn dort sind wir
bezüglich der Bit-Codierung aus dem Raster:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;1:  011 010 011 011 
2:  011 010 011 011 
3:  011 010 011 011 
4:  010 010 010 011 
5:  010 010 010 011 
6:  010 010 010 011 
7:  011 010 011 011 
8:  011 010 011 011 
9:  011 010 011 011 
10: 010 010 010 011 
11: 010 010 010 011 
12: 010 010 010 011
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das sind keine gültigen Codes für Bits.  Was ist da los?  Also nochmal das
Datenblatt studieren. Und dort erfahren wir, dass es mehrere verschiedene
&lt;em&gt;Button-Modes&lt;/em&gt; gibt: &lt;em&gt;Normal&lt;/em&gt;, &lt;em&gt;Matrix&lt;/em&gt;, &lt;em&gt;Toggle&lt;/em&gt; und &lt;em&gt;PWM&lt;/em&gt;. Bei den letzten
drei stimmt die Angabe, dass es 4 Bits sind. Im Normal-mode hingegen können 1-4
Button Bits eingestellt werden. Da der Sender eh nur einen Button hat kann es
natürlich sein, dass nur ein Bit konfiguriert ist. Wenn wir das mal so annehmen
könnte das also so aussehen:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Start&lt;/th&gt;
&lt;th&gt;End&lt;/th&gt;
&lt;th&gt;Length (Sym/Bits)&lt;/th&gt;
&lt;th&gt;Bedeutung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;Preamble&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;Sync&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;144&lt;/td&gt;
&lt;td&gt;96/32&lt;/td&gt;
&lt;td&gt;Address/ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;145&lt;/td&gt;
&lt;td&gt;147&lt;/td&gt;
&lt;td&gt;3/1&lt;/td&gt;
&lt;td&gt;Buttons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;148&lt;/td&gt;
&lt;td&gt;154&lt;/td&gt;
&lt;td&gt;7 ?&lt;/td&gt;
&lt;td&gt;CRC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;32 Bit für &lt;em&gt;Address&lt;/em&gt; würde auch insofern Sinn machen, als die Seriennummern auf
den beiden Sender "1K26" bzw. "1L21" lauten – also 4 Byte = 32 Bit.&lt;/p&gt;
&lt;p&gt;Prüfen wir doch mal diese Hypothese, indem wir versuchen, das Address-Wort zu
decodieren. Eigentlich kann urh das und man kann eigene Decoder definieren,
aber irgendwie habe ich es nicht hinbekommen, meine simple Symbol -&amp;gt; Bit
Übersetztung in urh anzuwenden, ohne dass es über decoding errors gemeckert hat
Ich glaube da muss ich mal das Handbuch gründlicher lesen. &lt;/p&gt;
&lt;p&gt;Also machen wir das von Hand. Dazu habe ich die 96 Symbols aus dem Signal
ausgeschnitten und ein eine Textdatei kopiert und mir schnell ein kleines
Python-Skript geschrieben, um die Daten in Bits zu übersetzen und in Binär, Hex
und ASCII auszugeben.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Bits                                Hex         ASCII
00000000000101100100011100111010    0016473a    ..G:
00000000000101100100011100111010    0016473a    ..G:
00000000000101100100011100111010    0016473a    ..G:
00000000000101011100111101101111    0015cf6f    ..Ïo
00000000000101011100111101101111    0015cf6f    ..Ïo
00000000000101011100111101101111    0015cf6f    ..Ïo
00000000000101100100011100111010    0016473a    ..G:
00000000000101100100011100111010    0016473a    ..G:
00000000000101100100011100111010    0016473a    ..G:
00000000000101011100111101101111    0015cf6f    ..Ïo
00000000000101011100111101101111    0015cf6f    ..Ïo
00000000000101011100111101101111    0015cf6f    ..Ïo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hm – nicht erhellend. Aber wir haben auch noch was übersehen: Aus dem
Datenblatt (dort wird von &lt;em&gt;Sync ID&lt;/em&gt; gesprochen, was wir &lt;em&gt;Address&lt;/em&gt; nannten): &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The Sync ID is sent and received starting from the LSB. For
example, if the “Sync ID Length” is set to 16 and the “Sync ID Value” is set to
1, the binary value of the Sync ID is “0000 0000 0000 0001”. In this case,
bit&amp;lt;0&amp;gt; = 1 is received first and bit&amp;lt;15&amp;gt; = 0 is received at the end of the Sync
ID field.&lt;/em&gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Also versuchen wir das mal reversed, also LSB zuerst:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Bits                                Hex         ASCII
01011100111000100110100000000000    5ce26800    \âh.
01011100111000100110100000000000    5ce26800    \âh.
01011100111000100110100000000000    5ce26800    \âh.
11110110111100111010100000000000    f6f3a800    öó¨.
11110110111100111010100000000000    f6f3a800    öó¨.
11110110111100111010100000000000    f6f3a800    öó¨.
01011100111000100110100000000000    5ce26800    \âh.
01011100111000100110100000000000    5ce26800    \âh.
01011100111000100110100000000000    5ce26800    \âh.
11110110111100111010100000000000    f6f3a800    öó¨.
11110110111100111010100000000000    f6f3a800    öó¨.
11110110111100111010100000000000    f6f3a800    öó¨.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun dürfte es korrekt decodiert sein. Dennoch sehe ich nichts, was
der Seriennummer ähnelt. Grumpf!&lt;/p&gt;
&lt;p&gt;An diesem Punkt fällt mir wirklich nicht mehr viel ein, das ich noch tun
könnte, um der genauen Codierung auf den Grund zu gehen. Vielleicht, wenn ich
noch einen Stapel weitere Sender hätte? Wie auch immer. Ich weiß nun, wie die
Datenpakete meiner beiden Sender aussehen und kann sie somit erkennen und auf
sie reagieren. Ich könnte sie auch klonen und Sender mit anderer ID bauen – nur
nicht anhand der Seriennummer, weil mir dieses Puzzle-Teil fehlt.
Das fuchst mich zwar gewaltig, aber das Leben ist halt hart. &lt;/p&gt;
&lt;p&gt;Und dann ist da noch eine große Ungereimtheit. Schaut Euch mal das Ende der
Messages an:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;  SYNC-ID    B    CRC?
___________ ___ _______
... 100 110 110 1101101
... 100 110 110 1101101
... 100 110 110 1101101
... 100 100 110 1101101
... 100 100 110 1101101
... 100 100 110 1101101
... 100 110 110 1101101
... 100 110 110 1101101
... 100 110 110 1101101
... 100 100 110 1101101
... 100 100 110 1101101
... 100 100 110 1101101
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Alles in Symbols. Die ersten beiden Triplets gehören noch zur Sync-ID. Dann
kommt unser Button Bit (B) und schließlich 7 Symbols die CRC sein sollen. Mal
davon abgesehen, dass wir laut Datenblatt eigentlich 8 Symbols CRC erwarten und
nicht nur 7 fällt nochwas auf: Die vermeintlichen CRC Symbols sind in allen 12
Messages identisch! Das kann nicht sein, denn wir haben ja zwei
unterschiedliche Messages von zwei Sendern und es müsste mit dem Teufel
zugehen, wenn beide den selben CRC Wert hätten!&lt;/p&gt;
&lt;p&gt;Irgendwas ist da noch oberfaul...&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Das hat Spaß gemacht, obwohl es mir erstmal nicht gelungen ist das
   Message-Format komplett zu verstehen. Und das trotz Datenblatt...  Dafür
   habe ich unterwegs viel über digitale Funk-Kommunikation gelernt.&lt;/li&gt;
&lt;li&gt;urh ist ein wirklich praktisches Werkzeug – das werde ich in Zukunft öfter
   verwenden.&lt;/li&gt;
&lt;li&gt;Wenn ich irgendwann Lust habe bastle ich vielleicht mal eine Lösung, um das
   an den homeassistant anzubinden (wahrscheinlich würde es reichen, die Events
   einfach an den MQTT Server weiter zu geben), oder vielleicht auch eine
   Standalone Lösung um z.B. eine Email zu versenden, wenn es klingelt. Aber
   für heute soll es gut sein.&lt;/li&gt;
&lt;li&gt;Wenn mir noch eine geniale Eingebung kommt, wie genau die Codierung der
   Seriennummer funktioniert werde ich den Post ergänzen. Sollte der geneigte
   Leser eine gute Idee haben, wo genau ich auf dem Schlauch stehe  – immer her
   damit.&lt;/li&gt;
&lt;/ol&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Natürliche Inhaltsstoffe</title><link href="https://techbotch.org/blog/natural-ingredients/index.html" rel="alternate"/><published>2022-03-03T00:00:00+01:00</published><updated>2022-03-03T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-03-03:/blog/natural-ingredients/index.html</id><summary type="html">&lt;p&gt;Natürlichkeit wird ja heutzutage gerne als wichtiges Qualitätsmerkmal beworben
und offenbar finden manche Leute, dass eine ganz natürliche COVID-19 Infektion
einer bösen künstlichen Impfung vorzuziehen sei. Und auch das Marketing hat 
den Trend zur Natürlichkeit voll für sich entdeckt. Was da nicht alles als
natürlich beworben wird versetzt einen schon …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Natürlichkeit wird ja heutzutage gerne als wichtiges Qualitätsmerkmal beworben
und offenbar finden manche Leute, dass eine ganz natürliche COVID-19 Infektion
einer bösen künstlichen Impfung vorzuziehen sei. Und auch das Marketing hat 
den Trend zur Natürlichkeit voll für sich entdeckt. Was da nicht alles als
natürlich beworben wird versetzt einen schon hin und wieder in Erstaunen. Z.B.
mein Duschbad: Ich stehe noch recht verschlafen unter dem lauwarmen Wasserstrahl und
schon schreit es mir entgegen: "94% natürliche Inhaltsstoffe!"&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/natural-ingredients/duschbad.jpg" class= "Large" alt="Duschbadflasche mit der Angabe 
'94% natürliche Inhaltsstoffe'"&gt;&lt;/p&gt;
&lt;p&gt;Hä? Ich bin kein Chemiker, aber soweit ich weiß bestehen Duschbäder, Shampoo &amp;amp;
Co im Wesentlichen aus Detergenzien, Duftstoffen und verschiedenen
Hilfsstoffen. Und die sind alle nicht so wirklich natürlichen Ursprungs.
Versteht mich nicht falsch – das ist auch ganz normal und zu erwarten. Was also
steht da in meiner Dusche? Ein von naturbeseelten Jungfrauen handgepresster
Extrakt der jamaikanischen Duschbadfeige?&lt;/p&gt;
&lt;p&gt;Wohl eher nicht...&lt;/p&gt;
&lt;h1&gt;Nachdenken&lt;/h1&gt;
&lt;p&gt;Was also steckt dann hinter der Werbebotschaft? &lt;/p&gt;
&lt;p&gt;Man kann dem Etikett entnehmen, dass das Produkt zu 85% aus Wasser besteht.
D.h. es bleiben noch 9% andere "natürliche" Zutaten.  Ziehen wir das Wasser ab,
haben wir also 9/15 = 60% Inhaltsstoffe natürlichen Ursprungs. Das klingt
schon weniger spektakulär, wäre aber doch auch nicht so schlecht.&lt;/p&gt;
&lt;p&gt;Und wir erfahren, dass es sich bei dem Shampoo nicht um ausgepresste
Zitronenfalter handelt, denn da steht &lt;em&gt;ohne tierische Bestandteile&lt;/em&gt;. Na immerhin.&lt;/p&gt;
&lt;p&gt;Mal Inhaltsstoffe nachlesen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/natural-ingredients/label.jpg" class= "Large" alt="Duschbadflasche Rückseite:
Etikett mit Inhaltsstoffen."&gt;&lt;/p&gt;
&lt;p&gt;Auf Deutsch:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Wasser&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/Natriumdodecylpoly(oxyethylen)sulfat"&gt;Natrium Laureth Sulfat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/Cocoamidopropyl-Betaine"&gt;Cocamidopropyl Betain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/Natriumchlorid"&gt;Natriumchlorid&lt;/a&gt; (AKA Kochsalz)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Monolaurin"&gt;Glyceryl Laurat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Duftstoffe&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.internetchemie.info/chemie-lexikon/stoffe/p/peg-7%20glyceryl%20cocoate.php"&gt;PEG-7 Glyceryl Cocoate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/1,2-Propandiol"&gt;Propylen-Glycol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/Natriumhydroxid"&gt;Natriumhydroxid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/Citronens%C3%A4ure"&gt;Zitronensäure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/Linalool"&gt;Linalool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/Limonen"&gt;Limonen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/Natriumbenzoat"&gt;Natrium-Benzoat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/Natriumsalicylat"&gt;Natriumsalicylat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://de.wikipedia.org/wiki/Benzylalkohol"&gt;Benzylalkohol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Diverse gelbe und blaue Farbstoffe&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Wenn ich mir die Liste so ansehe, fallen mir eigentlich nur zwei Bestandteile
ins Auge, die ich als komplett &lt;em&gt;natürlich&lt;/em&gt; einstufen würde: Wasser und
Kochsalz. &lt;em&gt;Natürlichen Ursprungs&lt;/em&gt; sind die Zitronensäure, Linalool und Limonen,
aber natürlich werden die industriell gewonnen.  Nummer 3, 5 und 7 werden
offenbar aus Kokosöl gewonnen und dann teils chemisch modifiziert, aber unter
&lt;em&gt;natürlich&lt;/em&gt; stellt man sich dann doch was anderes vor.  Wenn man weit genug
zurück geht lässt sich natürlich alles auf ein natürliches Ausgangsprodukt
zurückführen.&lt;/p&gt;
&lt;p&gt;Und um den Werbe-Sprech auf die Spitze zu treiben, steht auch noch drauf
"Flasche besteht zu 100% aus recyceltem Material (&lt;em&gt;exkl. Kappe&lt;/em&gt;)". Sind wir hier
bei den Simpsons??? Dann rechnet verdammt nochmal die blöde Kappe mit ein und
sagt "80%".&lt;/p&gt;
&lt;p&gt;Leute – wollt Ihr mich verarschen?&lt;/p&gt;
&lt;p&gt;Jeder weiß, dass ein Duschbad aus Chemikalien zusammengemischt wird. Und das
ist auch völlig OK so. Aber müssen so peinliche Versuche des Greenwashings
unbedingt sein? Glaubt die Marketingabteilung diesen Quatsch selber?&lt;/p&gt;</content><category term="Science &amp; Medicine"/></entry><entry><title>ssh scanner ärgern</title><link href="https://techbotch.org/blog/endlessh/index.html" rel="alternate"/><published>2022-01-17T00:00:00+01:00</published><updated>2022-01-17T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-01-17:/blog/endlessh/index.html</id><summary type="html">&lt;p&gt;Eigentlich schützt Euch ja die Firewall in der Fritzbox, oder was auch immer
Ihr für einen Router habt, vor unliebsamen Zugriffen aus dem großen bösen
Internet. Aber was, wenn ich selber so ein klitzekleines Bisschen Zugriff von
außen haben will? Z.B. über ssh? Na ist ja nicht so tragisch …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Eigentlich schützt Euch ja die Firewall in der Fritzbox, oder was auch immer
Ihr für einen Router habt, vor unliebsamen Zugriffen aus dem großen bösen
Internet. Aber was, wenn ich selber so ein klitzekleines Bisschen Zugriff von
außen haben will? Z.B. über ssh? Na ist ja nicht so tragisch – dann muss man
halt eine Portfreigabe im Router erstellen und aufpassen, dass der sshd
vernünftig konfiguriert ist. Ich deaktiviere standardmäßig root-logins und
lasse nur key-authentication zu. Also ist es nix mit Passworte durchprobieren.&lt;/p&gt;
&lt;p&gt;Erwartungsgemäß probieren immer wieder böse Buben, ob ich nicht vielleicht ein
dusseliges Passwort verwende, oder vergessen habe, irgendeinen Default-login zu
deaktivieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ grep &amp;quot;Invalid user&amp;quot; /var/log/auth.log
Jan 15 00:21:35 hal sshd[185621]: Invalid user test from 107.189.1.92 port 46106
Jan 15 00:21:36 hal sshd[185626]: Invalid user ubuntu from 107.189.1.92 port 46734
Jan 15 00:21:36 hal sshd[185628]: Invalid user test from 107.189.1.92 port 47018
Jan 15 00:21:37 hal sshd[185632]: Invalid user postgres from 107.189.1.92 port 47552
Jan 15 00:21:38 hal sshd[185636]: Invalid user ansible from 107.189.1.92 port 49096
Jan 15 00:21:38 hal sshd[185638]: Invalid user oracle from 107.189.1.92 port 49356
Jan 15 04:00:30 hal sshd[190959]: Invalid user admin from 185.217.1.246 port 15521
Jan 15 04:01:41 hal sshd[190985]: Invalid user 0 from 185.217.1.246 port 29103
Jan 15 04:02:37 hal sshd[191037]: Invalid user !root from 185.217.1.246 port 53051
Jan 15 06:58:18 hal sshd[195374]: Invalid user test from 209.141.35.132 port 34914
Jan 15 06:58:21 hal sshd[195379]: Invalid user ubuntu from 209.141.35.132 port 37472
Jan 15 06:58:22 hal sshd[195381]: Invalid user test from 209.141.35.132 port 38736
Jan 15 11:51:10 hal sshd[203732]: Invalid user admin from 36.110.228.254 port 18399
Jan 15 11:51:15 hal sshd[203736]: Invalid user admin from 36.110.228.254 port 41074
Jan 15 12:07:03 hal sshd[204138]: Invalid user admin from 185.246.130.20 port 12404
Jan 15 12:07:12 hal sshd[204145]: Invalid user 0 from 185.246.130.20 port 28684
Jan 15 12:07:18 hal sshd[204147]: Invalid user !root from 185.246.130.20 port 17496
Jan 15 12:26:48 hal sshd[204774]: Invalid user test from 205.185.120.140 port 53702
Jan 15 12:26:50 hal sshd[204778]: Invalid user ubuntu from 205.185.120.140 port 55166
Jan 15 12:26:52 hal sshd[204780]: Invalid user test from 205.185.120.140 port 56554
Jan 15 12:26:54 hal sshd[204785]: Invalid user postgres from 205.185.120.140 port 58614
Jan 15 12:26:56 hal sshd[204789]: Invalid user ansible from 205.185.120.140 port 32904
Jan 15 13:08:20 hal sshd[205817]: Invalid user test from 107.189.14.180 port 45476
Jan 15 13:08:21 hal sshd[205821]: Invalid user ubuntu from 107.189.14.180 port 45780
Jan 15 13:08:21 hal sshd[205823]: Invalid user test from 107.189.14.180 port 45972
Jan 15 13:08:21 hal sshd[205827]: Invalid user postgres from 107.189.14.180 port 46282
Jan 15 13:08:22 hal sshd[205831]: Invalid user ansible from 107.189.14.180 port 46590
Jan 15 13:08:22 hal sshd[205833]: Invalid user oracle from 107.189.14.180 port 46756
Jan 15 13:25:26 hal sshd[206276]: Invalid user  from 64.62.197.122 port 53472
Jan 15 14:53:57 hal sshd[208592]: Invalid user test from 107.189.29.142 port 58866
Jan 15 14:53:58 hal sshd[208596]: Invalid user ubuntu from 107.189.29.142 port 59282
Jan 15 14:53:58 hal sshd[208598]: Invalid user test from 107.189.29.142 port 59418
Jan 15 14:53:58 hal sshd[208602]: Invalid user postgres from 107.189.29.142 port 59722
Jan 15 14:53:59 hal sshd[208606]: Invalid user ansible from 107.189.29.142 port 60190
Jan 15 14:53:59 hal sshd[208608]: Invalid user oracle from 107.189.29.142 port 60416
Jan 15 14:58:44 hal sshd[208736]: Invalid user admin from 51.89.77.27 port 41136
Jan 15 14:58:44 hal sshd[208738]: Invalid user admin from 51.89.77.27 port 41174
Jan 15 15:20:29 hal sshd[209298]: Invalid user pi from 71.187.69.52 port 37960
Jan 15 15:20:29 hal sshd[209299]: Invalid user pi from 71.187.69.52 port 37964
Jan 15 15:52:18 hal sshd[210060]: Invalid user user from 94.255.228.237 port 36390
Jan 15 15:52:22 hal sshd[210062]: Invalid user admin from 101.205.144.60 port 37998
Jan 15 15:52:28 hal sshd[210084]: Invalid user support from 58.22.132.50 port 40725
Jan 15 15:52:30 hal sshd[210086]: Invalid user User from 136.52.3.49 port 57176
Jan 15 15:52:33 hal sshd[210090]: Invalid user admin from 96.38.146.117 port 52568
Jan 15 15:52:35 hal sshd[210093]: Invalid user admin from 70.163.218.23 port 56940
Jan 15 15:52:39 hal sshd[210097]: Invalid user admin from 178.115.225.144 port 48076
Jan 15 15:52:41 hal sshd[210099]: Invalid user admin from 72.175.211.181 port 42469
Jan 15 15:52:43 hal sshd[210102]: Invalid user admin from 201.173.250.21 port 57601
Jan 15 15:52:50 hal sshd[210104]: Invalid user admin from 122.96.238.19 port 59202
Jan 15 15:52:54 hal sshd[210106]: Invalid user admin from 101.205.151.22 port 44024
Jan 15 15:52:59 hal sshd[210110]: Invalid user engineer from 124.88.248.142 port 40133
Jan 15 15:53:07 hal sshd[210117]: Invalid user squid from 177.99.235.37 port 45643
Jan 15 15:53:09 hal sshd[210119]: Invalid user admin from 45.20.25.125 port 36426
Jan 15 15:53:12 hal sshd[210122]: Invalid user ubnt from 172.115.148.192 port 55202
Jan 15 15:53:18 hal sshd[210124]: Invalid user telecomadmin from 45.23.234.228 port 59974
Jan 15 15:53:20 hal sshd[210126]: Invalid user &amp;lt;empty&amp;gt; from 104.157.37.95 port 53962
Jan 15 15:53:21 hal sshd[210128]: Invalid user &amp;lt;empty&amp;gt; from 2.202.216.226 port 34346
Jan 15 16:21:42 hal sshd[210880]: Invalid user pi from 93.96.81.152 port 51342
Jan 15 16:21:43 hal sshd[210882]: Invalid user pi from 93.96.81.152 port 51350
Jan 15 17:40:25 hal sshd[212791]: Invalid user test from 209.141.40.109 port 49130
Jan 15 17:40:28 hal sshd[212795]: Invalid user ubuntu from 209.141.40.109 port 51232
Jan 15 17:40:29 hal sshd[212797]: Invalid user test from 209.141.40.109 port 52306
Jan 15 17:40:32 hal sshd[212801]: Invalid user postgres from 209.141.40.109 port 54444
Jan 15 17:40:35 hal sshd[212824]: Invalid user ansible from 209.141.40.109 port 56526
Jan 15 20:51:35 hal sshd[217570]: Invalid user ubnt from 171.247.46.2 port 18441
Jan 15 20:52:23 hal sshd[217642]: Invalid user admin from 45.141.84.10 port 6463
Jan 15 20:52:29 hal sshd[217652]: Invalid user 0 from 45.141.84.10 port 45173
Jan 15 20:52:33 hal sshd[217656]: Invalid user !root from 45.141.84.10 port 19301
Jan 15 20:52:48 hal sshd[217678]: Invalid user admin from 171.247.46.2 port 20337
Jan 15 20:52:50 hal sshd[217681]: Invalid user admin from 171.247.46.2 port 20363
Jan 15 20:52:52 hal sshd[217683]: Invalid user admin from 171.247.46.2 port 20497
Jan 15 20:52:55 hal sshd[217685]: Invalid user admin from 171.247.46.2 port 20553
Jan 15 21:08:54 hal sshd[218095]: Invalid user ubnt from 82.15.89.15 port 40376
Jan 15 21:09:08 hal sshd[218183]: Invalid user admin from 82.15.89.15 port 41178
Jan 15 21:09:08 hal sshd[218185]: Invalid user admin from 82.15.89.15 port 41206
Jan 15 21:09:09 hal sshd[218187]: Invalid user admin from 82.15.89.15 port 41210
Jan 15 21:09:09 hal sshd[218189]: Invalid user admin from 82.15.89.15 port 41234
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;77 Versuche in 24 Stunden – nicht schlecht. Und es wären eigentlich viel mehr,
denn ich habe zudem noch &lt;code&gt;fail2ban&lt;/code&gt; laufen, um die hartnäckigen Skripte in die
Schranken zu weisen: nach ein paar Versuchen werden die entsprechenden IP
Adressen geblockt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ grep &amp;quot;Ban&amp;quot; /var/log/fail2ban.log
2022-01-15 00:21:38,387 fail2ban.actions        [721]: NOTICE  [sshd] Ban 107.189.1.92
2022-01-15 04:02:38,438 fail2ban.actions        [721]: NOTICE  [sshd] Ban 185.217.1.246
2022-01-15 11:51:15,822 fail2ban.actions        [721]: NOTICE  [sshd] Ban 36.110.228.254
2022-01-15 12:07:18,717 fail2ban.actions        [721]: NOTICE  [sshd] Ban 185.246.130.20
2022-01-15 12:26:57,248 fail2ban.actions        [721]: NOTICE  [sshd] Ban 205.185.120.140
2022-01-15 13:08:22,238 fail2ban.actions        [721]: NOTICE  [sshd] Ban 107.189.14.180
2022-01-15 14:53:59,716 fail2ban.actions        [721]: NOTICE  [sshd] Ban 107.189.29.142
2022-01-15 14:58:44,637 fail2ban.actions        [721]: NOTICE  [sshd] Ban 51.89.77.27
2022-01-15 17:40:35,500 fail2ban.actions        [721]: NOTICE  [sshd] Ban 209.141.40.109
2022-01-15 20:52:33,700 fail2ban.actions        [721]: NOTICE  [sshd] Ban 45.141.84.10
2022-01-15 20:52:55,733 fail2ban.actions        [721]: NOTICE  [sshd] Ban 171.247.46.2
2022-01-15 21:09:10,049 fail2ban.actions        [721]: NOTICE  [sshd] Ban 82.15.89.15
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mit diesen Maßnahmen fühle ich mich eigentlich ganz sicher.&lt;/p&gt;
&lt;p&gt;Aber irgendwie wäre es lustiger, die Skript-Kiddies wenigstens ein bisschen zu
ärgern.  Und so habe ich mir &lt;a href="https://github.com/skeeto/endlessh"&gt;endlessh&lt;/a&gt;
installiert und lasse das auf Port 2222 lauschen. Im Router habe ich dann die
Portfreigabe so eingerichtet, dass Anfragen auf Port 22 auf endlessh umgeleitet
werden. Den echten ssh Port gebe ich dann auf einem anderen externen Port frei. Auf
diese Weise dürfte der Großteil der ssh Anfragen bei endlessh landen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/endlessh/portfreigabe.png" class= "Large"
alt="Fritzbox Dialog für Portfreigabe: Port 22 (extern) auf Port 2222 (intern)"&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;endlessh&lt;/code&gt; ist ein ssh &lt;em&gt;tarpit&lt;/em&gt; – d.h. es nimmt Connection-Anfragen entgegen
und tritt dann in einen quälend langsamen Dialog mit dem Client – bis dieser
keine Lust mehr hat. Auf diese Weise wird quasi ein wenig Sand ins Getriebe der
ssh Attacke gestreut. Wirklich viel bringt es nicht, spricht aber das allzu
menschliche Rachebedürfnis an.&lt;/p&gt;
&lt;p&gt;Ich lass das jetzt mal eine Weile so laufen, bis mir eine noch unterhaltsamere
Idee kommt.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Homeassistant Mysterium</title><link href="https://techbotch.org/blog/homeassistant-mystery/index.html" rel="alternate"/><published>2022-01-11T00:00:00+01:00</published><updated>2022-01-11T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-01-11:/blog/homeassistant-mystery/index.html</id><summary type="html">&lt;p&gt;Wie Ihr sicher wisst, habe ich bei mir Homeassistant laufen, um verschiedene
Kleinigkeiten zu automatisieren. HA ist sicher nicht perfekt, aber ich habe
mich so weit ganz gut darin eingelebt.&lt;/p&gt;
&lt;p&gt;Und wie ich gerade so ein bisschen mit dem System spiele bin ich wohl auf
irgendwas gekommen, dass ich noch …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wie Ihr sicher wisst, habe ich bei mir Homeassistant laufen, um verschiedene
Kleinigkeiten zu automatisieren. HA ist sicher nicht perfekt, aber ich habe
mich so weit ganz gut darin eingelebt.&lt;/p&gt;
&lt;p&gt;Und wie ich gerade so ein bisschen mit dem System spiele bin ich wohl auf
irgendwas gekommen, dass ich noch nie gesehen hatte: plötzlich kam ein Dialog
der irgendwas mit "create filter" und zwei so komischen Balken mit Dreiecken
drauf, die nach Schieberegler aussahen. &lt;/p&gt;
&lt;p&gt;Und natürlich habe ich das einzig vernünftige getan: Ich habe auf "create"
geklickt, ohne mir das alles genauer anzusehen oder durchzulesen, denn Männer
haben ein natürliches Verständnis für Technik und brauchen niemanden, der sie am 
Händchen nimmt. Ohnehin werde ich ja in einer zehntel-Sekunde selber sehen, was 
genau das bewirkt...&lt;/p&gt;
&lt;h1&gt;Verdruss&lt;/h1&gt;
&lt;p&gt;... nämlich dass das komplette HA Interface komplett unsichtbar wird.&lt;/p&gt;
&lt;p&gt;Was???&lt;/p&gt;
&lt;p&gt;Kann ja garnicht sein. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tab neu laden – nix&lt;/li&gt;
&lt;li&gt;Browser schließen und neu starten – nada&lt;/li&gt;
&lt;li&gt;Cookies und Cache löschen – niente&lt;/li&gt;
&lt;li&gt;Vom Smartphone zugreifen und HA neu starten – nö&lt;/li&gt;
&lt;li&gt;HA Docker Container neu starten – nein nein&lt;/li&gt;
&lt;li&gt;&lt;code&gt;home-assistant.log&lt;/code&gt; lesen – kein Glück&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GRUMPF!!!&lt;/p&gt;
&lt;p&gt;Was in Dreiteufelsnamen hab ich da gemacht??? Also die Suchmaschine meines
geringsten Misstrauens anwerfen und suchen. Aber wonach? "HASSIO screen empty"?
Nicht sonderlich hilfreich. HA community Forum durchforsten. Kopf gegen die
Wand hauen. Hat alles nix gebracht.&lt;/p&gt;
&lt;p&gt;Also experimenteller Ansatz und ein wenig im Browser im leeren Fenster
rumspielen, linke/rechte Maustaste und so. Vielleicht reagiert die GUI ja auch in
unsichtbarer Form auf irgendwas und ich finde irgendwas hilfreiches.&lt;/p&gt;
&lt;h1&gt;Das Problem befindet sich meist zwischen Bildschirm und Stuhllehne&lt;/h1&gt;
&lt;p&gt;Und schließlich hat es Klick gemacht: Ich habe diverse Browser-Plugins 
laufen. Z.B.  uBlock, I don't care about cookies, Cookie AutoDelete, etc.. Die
habe ich nach und nach alle mal deaktiviert und siehe da: ohne uBlock ist alles
wieder normal. &lt;/p&gt;
&lt;p&gt;Ich hatte offenbar einen Rechtsklick in den Hintergrund gemacht, bin
auf "Block Element" gekommen und hatte dann dies vor mir:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/homeassistant-mystery/ublock-filter.png" class= "Medium"
alt="Dialog mit zwei waagerechten Slidern und mehreren Buttons: Preview,
Create, Pick und Quit"&gt;&lt;/p&gt;
&lt;p&gt;Und so hatte ich sehr effektiv das gesamte HA User-Interface blockiert. Ich bin
so ein Depp...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Defekter LED-Strahler</title><link href="https://techbotch.org/blog/broken-LED-light/index.html" rel="alternate"/><published>2022-01-09T00:00:00+01:00</published><updated>2022-01-09T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-01-09:/blog/broken-LED-light/index.html</id><summary type="html">&lt;p&gt;Die Glühbirne – Symbol der Erleuchtung und präferierte Lichtquelle des 20.
Jahrhunderts.  Aber inzwischen ist sie ja in Ungnade gefallen, weil sie sich
erdreistet, neben ein bisschen Licht vor allem jede Menge Wärme zu produzieren,
was nicht ihre Aufgabe ist. Zur Strafe für diese Kompetenzüberschreitung wurde
sie nach und nach durch …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Die Glühbirne – Symbol der Erleuchtung und präferierte Lichtquelle des 20.
Jahrhunderts.  Aber inzwischen ist sie ja in Ungnade gefallen, weil sie sich
erdreistet, neben ein bisschen Licht vor allem jede Menge Wärme zu produzieren,
was nicht ihre Aufgabe ist. Zur Strafe für diese Kompetenzüberschreitung wurde
sie nach und nach durch  Halogenbirnen, Leuchtstofflampen und schließlich die
LED ersetzt. Als das mit den LED-Leuchten anfing, war ich absolut kein Freund
dieser Leuchtmittel, weil sie in der Farbtemperatur so weit von natürlichem
Licht entfernt waren, wie ein Mistkäfer vom Nirvana. Und da ich weder mich,
noch mein Rib-Eye Steak in blaustichigem kaltem Licht besonders attraktiv fand,
bin ich der alten Glühbirne lange treu geblieben.&lt;/p&gt;
&lt;p&gt;Doch das ist lang her und die LED hat viel dazugelernt. Daher erleuchte ich
mein Heim heute im Wesentlichen mit verschiedenen Ausprägungen von
Leuchtdioden. So haben wir z.B. in der Decke jede Menge so kleine runde
LED-Strahler. Die machen mit ihren 3000 K Farbtemperatur ein sehr angenehmes,
heimeliges Licht.&lt;/p&gt;
&lt;p&gt;Die Industrie hatte uns allerdings auch versprochen, dass LEDs quasi ewig
halten und daher nicht ständig getauscht werden müssen, wie es bei
durchgebrannten Glühbirnen der Fall war. Folgerichtig sind die Leuchtmittel in
vielen Lampen garnicht mehr austauschbar – wozu auch, wenn sie ewig halten?
Soweit die Theorie.  In der Praxis jedoch, sind mir in den letzten drei Jahren
drei solche LED-Strahler ausgefallen – und das waren nicht die super billigen.
Das nervt!&lt;/p&gt;
&lt;p&gt;Jede dieser Leuchten besteht aus zwei Elementen: der eigentlichen LED-Leuchte
und einem Vorschaltgerät, das für konstanten Strom bei korrekter Spannung
sorgt. Und so stellt sich die Frage, ob ich eigentlich immer beides entsorgen
muss, oder ob da nicht evtl. noch was zu machen ist. Es könnte ja z.B. sein,
dass "nur" das Vorschaltgerät ausgefallen ist. &lt;/p&gt;
&lt;h1&gt;Diagnostik&lt;/h1&gt;
&lt;p&gt;Das sollte sich doch herausfinden lassen. Und so habe ich mal diverse
Kombinationen von alten/neuen Leuchten und Vorschaltgeräten getestet. Und siehe
da: in allen Fällen funktionierte die Leuchte wunderbar an einem neuen
Vorschaltgerät, während auch neue Leuchten kein Photon von sich gaben, wenn sie
an alte Vorschaltgeräte angeschlossen wurden.&lt;/p&gt;
&lt;p&gt;Mit anderen Worten: die Stromquellen fallen aus, nicht die Leuchten. Das
klingt verheißungsvoll, denn wie schwierig kann es schon sein, einen
Kondensator oder sowas auf der Platine auszutauschen?&lt;/p&gt;
&lt;p&gt;Freundlicherweise haben meine Vorschaltgeräte Schrauben und sind nicht
verklebt oder so:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/broken-LED-light/vorschaltgerät.jpg" class= "Large" alt="nobile Vorschaltgerät
für LED Leuchte"&gt;&lt;/p&gt;
&lt;p&gt;Also öffnen wir mal eins und schauen, ob wir sehen, was da durchgebrannt ist.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/broken-LED-light/vorschaltgerät-geöffnet.jpg" class= "Large" alt="Vorschaltgerät
geöffnet mit sichtbaren Schmauchspuren unten links im Gehäuse"&gt;&lt;/p&gt;
&lt;p&gt;Aha – da sehe ich doch schon ein paar Schmauchspuren oben links. Das ist doch
bestimmt der Elko, in selbiger Ecke. Elko tauschen kann ich und ich verfüge
sogar über einen vorzeigbaren Bestand verschiedener Kapazitäten und
Spannungsfestigkeiten. Kurz: der Sieg sollte mein sein.&lt;/p&gt;
&lt;h1&gt;Demut&lt;/h1&gt;
&lt;p&gt;Der Vollständigkeit halber betrachten wir auch noch die Unterseite der Platine:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/broken-LED-light/vorschaltgerät-rückseite.jpg" class= "Large"
alt="Vorschaltgerät – Platinenrückseite: jede Menge Ruß und der IC, sowie ein
Widerstand sind ganz offensichtlich durchgebrannt!"&gt;&lt;/p&gt;
&lt;p&gt;Der Anblick ist ernüchternd! Das bloße Auge erkennt mühelos, dass der IC unten
in der Mitte (IC1) einen größeren Krater aufweist, durch den der
sprichwörtliche &lt;em&gt;magische Rauch&lt;/em&gt; ausgetreten ist und dabei einen fetten
schwarzen Fleck links vom Chip hinterlassen hat. Zudem sieht auch die SMD-Diode
auf der rechten Seite unten (D9) nicht gesund aus und neben Diode D4 findet
sich ein Lötpunkt der irgendwie angekokelt anmutet. &lt;/p&gt;
&lt;p&gt;Der IC ist so im Eimer, dass man keine Chance hat, die Typenbezeichnung noch zu
lesen.  Dummerweise ist das Vorschaltgerät meiner Ersatzlampen nicht mehr
baugleich und so muss ich dumm sterben im Hinblick auf die Identität des
Bauteils. Grumpf!&lt;/p&gt;
&lt;p&gt;Da bleibt mir vorerst nichts, als meine Niederlage einzugestehen,
zähneknirschend ein neues Vorschaltgerät einzubauen und die havarierten
Exemplare zu entsorgen.&lt;/p&gt;
&lt;p&gt;Einziger Lichtblick: die Vorschaltgeräte kann man separat erwerben – so muss
ich zumindest die funktionstüchtigen Leuchten nicht immer wegschmeißen...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Netgear EX6130 mit openWRT</title><link href="https://techbotch.org/blog/openwrt-on-netgear-EX6130/index.html" rel="alternate"/><published>2022-01-05T00:00:00+01:00</published><updated>2022-01-05T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2022-01-05:/blog/openwrt-on-netgear-EX6130/index.html</id><summary type="html">&lt;p&gt;Damit ich auch in jeder Ecke des Hauses in den Genuss von zufriedenstellendem
WLAN-Empfang komme, habe ich neben der Fritzbox noch ein paar kleine Access
Points installiert. Mir gefiel der Formfaktor der Netgear EX6130 bzw. EX6120
sehr gut, denn ich wollte nicht überall so richtige Router hinstellen und diese
kleinen …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Damit ich auch in jeder Ecke des Hauses in den Genuss von zufriedenstellendem
WLAN-Empfang komme, habe ich neben der Fritzbox noch ein paar kleine Access
Points installiert. Mir gefiel der Formfaktor der Netgear EX6130 bzw. EX6120
sehr gut, denn ich wollte nicht überall so richtige Router hinstellen und diese
kleinen Geräte sind nicht viel größer, als z.B. ein Sonoff S20.&lt;/p&gt;
&lt;p&gt;Sie funktionieren sehr ordentlich. Was mir aber auf den Geist geht ist die
Firmware: Netgear möchte einem eigentlich gerne einen Account in ihrer Cloud
andrehen und da habe ich null Interesse dran. Außerdem würde alternative
Firmware auch weitere Möglichkeiten eröffnen. Z.B. Weitere SSIDs auf der
gleichen Hardware.  Das könnte evtl nützlich sein, um irgendwann mal die
diversen IoT Geräte in ihr eigenes virtuelles WLAN zu verbannen.&lt;/p&gt;
&lt;p&gt;Als ich die Dinger gekauft hatte, gab es noch keine freie Firmware dafür, aber
inzwischen kann man &lt;a href="https://openwrt.org"&gt;openWRT&lt;/a&gt; auf den Teilen installieren
und das wollen wir heute mal machen.&lt;/p&gt;
&lt;p&gt;Zuerst galt es ein geeignetes Image zu finden. Das war leicht, denn man findet diese 
Access Points in der &lt;a href="https://openwrt.org/toh/start"&gt;Table of Hardware&lt;/a&gt; und dort
dann &lt;a href="https://openwrt.org/toh/hwdata/netgear/netgear_ex6130"&gt;Links&lt;/a&gt; zur Geräteseite.&lt;/p&gt;
&lt;h1&gt;Firmware erstmalig einspielen&lt;/h1&gt;
&lt;p&gt;Der EX6120/6130 unterstützt Firmware uploads – d.h. man kann ganz einfach in
der GUI das neue Firmware-File hochladen und flashen. Danach muss man sich via
Ethernet- Kabel mit dem AP verbinden und kann ihn dann unter dem Hostname
&lt;code&gt;OpenWrt.lan&lt;/code&gt; via http erreichen. Das geht allerdings nur bei Geräten für die
ein "factory" image von openWRT existiert. In meinem Fall heißt das Firmware Image
&lt;code&gt;openwrt-21.02.1-ramips-mt7620-netgear_ex6130-squashfs-factory.chk&lt;/code&gt; – d.h.
das passt.&lt;/p&gt;
&lt;p&gt;Als erstes ein Passwort setzen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/openwrt-on-netgear-EX6130/set-password.png" class= "Large" alt="Password set Dialog"&gt;&lt;/p&gt;
&lt;p&gt;Und als nächstes das WLAN konfigurieren:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/openwrt-on-netgear-EX6130/wifi-setup.png" class= "Large" alt="Password set Dialog"&gt;&lt;/p&gt;
&lt;p&gt;SSID setzten, Verschlüsselung einstellen, WLAN aktivieren, Hostname
konfigurieren, DHCP-Client aktivieren und DHCP-Server deaktivieren – fertig.
Wie das genau geht erkläre ich jetzt nicht alles – dazu gibt es die Doku auf
der openWRT Seite.&lt;/p&gt;
&lt;p&gt;Sobald auf dem Gerät mal openWRT drauf ist, verwendet man dann nicht mehr
&lt;em&gt;factory&lt;/em&gt; , sondern &lt;em&gt;sysupgrade&lt;/em&gt; Images – die überschreiben nicht alles und Ihr
behaltet die Konfiguration auch nach dem update.&lt;/p&gt;
&lt;p&gt;Wenn die Konfiguration umfangreicher ist, lohnt es sich ggf. unter &lt;code&gt;System&lt;/code&gt; &amp;gt;
&lt;code&gt;Backup/Flash Firmware&lt;/code&gt; eine Sicherung zu erstellen. Aber für einen simplen
Access Point lohnt es sich nicht.&lt;/p&gt;
&lt;h1&gt;Firmware via &lt;code&gt;nmrpflash&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;Solange alles glatt läuft ist over the air der beste Weg für Firmware updates.
Aber was, wenn was schief läuft und wir nicht mehr in den Router oder AP
reinkommen? Dafür gibt es je nach Gerät oft Abhilfe. In meinem Fall das Tool
&lt;a href="https://github.com/jclehner/nmrpflash"&gt;&lt;code&gt;nmrpflash&lt;/code&gt;&lt;/a&gt;. Gut sortierte Linux
Distributionen haben das an Bord, andernfalls von Github (Auch für Windows und
Mac).&lt;/p&gt;
&lt;p&gt;Zwar habe ich gerade keinen derartigen Notfall, aber ausprobieren will ich es dennoch 
mal. Dazu schauen wir erstmal welche Interfaces wir so haben:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ nmrpflash -L
wlp3s0           192.168.0.84     44:af:28:3a:43:f5
enp2s0f0         0.0.0.0          8c:8c:aa:e4:c4:aa
virbr0           192.168.122.1    52:54:00:c4:12:33
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;OK – mein Ethernet Interface ist also &lt;code&gt;enp2s0f0&lt;/code&gt;. Nun den zu flashenden
Router/AP via Ethernet Kabel direkt am Computer anschließen aber noch nicht
einschalten, denn der Router/AP ist nur ganz kurz nach dem Einschalten "auf
Empfang" für Firmware updates.&lt;/p&gt;
&lt;p&gt;Nun das Flash-Kommando absetzen und sofort danach den AP einschalten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ sudo nmrpflash -i enp2s0f0 -f openwrt-21.02.1-ramips-mt7620-netgear_ex6130-squashfs-factory.chk
Advertising NMRP server on enp2s0f0 ... \
Received configuration request from b0:39:56:e4:e5:e5.
Sending configuration: 10.164.183.252/24.
Received upload request: filename &amp;#39;firmware&amp;#39;.
Uploading openwrt-21.02.1-ramips-mt7620-netgear_ex6130-squashfs-factory.chk ... OK
Waiting for remote to respond.
Timeout while waiting for 0000.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hm – das klingt nicht so dolle. Ich habe dann noch ein wenig mit der &lt;code&gt;-T&lt;/code&gt;
Option (timeout) gespielt, aber die Meldung nicht wegbekommen. Dennoch scheint
der Firmware Upload funktioniert zu haben, denn während ich im Netz nach
Lösungen gesucht habe sind dann irgendwann die ganzen LEDs am AP angegangen und
ich konnte ihn via Kabel konfigurieren. Im Anschluss funktionierte der AP im
Grunde.  Allerdings ist es mir nicht mehr gelungen in das Web interface rein zu
kommen.  Ich habe dann noch ein paar Versuche gemacht und mit den werten für
&lt;code&gt;-t&lt;/code&gt; und &lt;code&gt;-T&lt;/code&gt; (also verschiedene Timeouts) herumgespielt – ohne echten Erfolg.
Um dem Spiel ein Ende zu machen habe ich dann direkt nach dem Flashen via
&lt;code&gt;nmrpflash&lt;/code&gt; in der GUI sofort das &lt;code&gt;sysupgrade&lt;/code&gt; Image geflasht und erst dann mit
der Konfiguration begonnen. Aber auch das führte zum gleichen Ergebnis. Grumpf!&lt;/p&gt;
&lt;p&gt;Mein Linux hat &lt;code&gt;nmrpflash 0.9.14&lt;/code&gt; dabei. Auf Github gibt es schon die &lt;code&gt;0.9.16&lt;/code&gt;.
Ob das den Kohl fett macht?  Ausprobieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ sudo ../nmrpflash -i enp2s0f0 -f openwrt-21.02.1-ramips-mt7620-netgear_ex6130-squashfs-factory.chk
Waiting for Ethernet connection.
Advertising NMRP server on enp2s0f0 ... \
Received configuration request from b0:39:56:e4:e5:e5.
Sending configuration: 10.164.183.252/24.
Received upload request: filename &amp;#39;firmware&amp;#39;.
Uploading openwrt-21.02.1-ramips-mt7620-netgear_ex6130-squashfs-factory.chk ... OK (5189694 b)
Waiting for remote to respond.
Received keep-alive request (5).  
Remote finished. Closing connection.
Reboot your device now.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Na das klingt doch schon besser!&lt;/p&gt;
&lt;p&gt;Und weil ich von Natur aus faul bin habe ich dann doch ein Backup der Config des
ersten APs gemacht und hier nur eingespielt und den Hostname geändert. &lt;/p&gt;
&lt;p&gt;Die Backups sind übrigens normale tar archive von bestimmten files in &lt;code&gt;/etc/&lt;/code&gt; –
das heißt, dass man sie ggf. auch auspacken, manuell oder via Script bearbeiten
kann, um sie dann wieder einzupacken. Das kann nützlich sein, falls man echt
viele von den Dingern hat und größere Veränderungen im Netz ausrollen möchte.
So viele habe ich aber nicht.&lt;/p&gt;
&lt;p&gt;Auf jeden Fall geht nun alles wie es soll. Sehr gut!&lt;/p&gt;
&lt;h1&gt;Nachtrag zur Konfiguration&lt;/h1&gt;
&lt;p&gt;Nach dem Firmware-Wechsel hatte ich auf einmal ein paar komische Probleme.
Meist lief alles gut, aber gelegentlich kam es vor, dass plötzlich hostnames im
lokalen Netz nicht mehr aufgelöst werden konnten. Zuerst hab ich mich nur
gewundert und nach einem Reboot, oder mal kurz Wlan aus und wieder einschalten
ging dann auch wieder alles. Aber dann wurde ich stutzig – könnte das mit
openWRT zu tun haben?&lt;/p&gt;
&lt;p&gt;Also habe ich ein bisschen herumgestochert und schließlich kam mir der
Verdacht, dass hier evtl. ein DNS-Konflikt zwischen dem AP und der Fritzbox
vorliegen könnte. Also mal anklopfen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;❯ nmap -Pn ap1
Starting Nmap 7.80 ( https://nmap.org ) at 2022-01-10 21:36 CET
Nmap scan report for ap1 (192.168.0.3)
Host is up (0.0075s latency).
rDNS record for 192.168.0.3: AP1.fritz.box
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
53/tcp  open  domain
80/tcp  open  http
443/tcp open  https
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Oha! In der Tat ist da ein DNS auf Port 53 aktiv! Also habe ich das mal in der
Konfig abgeschaltet: &lt;code&gt;System&lt;/code&gt; &amp;gt; &lt;code&gt;Startup&lt;/code&gt; &amp;gt; &lt;code&gt;dnsmasq&lt;/code&gt; &amp;gt; &lt;code&gt;Disabled&lt;/code&gt;. Und wo ich
schon dabei war das gleiche für &lt;code&gt;firewall&lt;/code&gt; und &lt;code&gt;odhcpd&lt;/code&gt;. Wir betreiben den
"Router" ja nur als Access Point und da müssen ein paar Funktionen eines
normalen Routers deaktiviert werden.&lt;/p&gt;
&lt;p&gt;Das teste ich jetzt mal ein paar Tage und hoffe, dass es meine Probleme auch
behoben hat.&lt;/p&gt;
&lt;h1&gt;Update&lt;/h1&gt;
&lt;p&gt;Habe das nun ein paar Tage so laufen lassen und die Probleme sind tatsächlich
verschwunden. Also lag ich wohl richtig. :-)&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Außenbeleuchtung mit dem Handy steuern</title><link href="https://techbotch.org/blog/outdoor-light-ESPhome/index.html" rel="alternate"/><published>2021-12-30T00:00:00+01:00</published><updated>2021-12-30T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-12-30:/blog/outdoor-light-ESPhome/index.html</id><summary type="html">&lt;p&gt;Seit vielen Jahren ist der ESP8266 eine feste Größe in der Maker-Welt. Einen
zusätzlichen Schub für dessen Popularität kam sicher von seinem Einsatz in
kommerziell erhältlichen Geräten von Sonoff, Shelly &amp;amp; Co.  Und so steuert
dieser billige, aber leistungsfähige Microcontroller mit seinen WLAN
Fähigkeiten weite Teile der nerdiger Heimautomation.&lt;/p&gt;
&lt;p&gt;Die kommerziellen …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Seit vielen Jahren ist der ESP8266 eine feste Größe in der Maker-Welt. Einen
zusätzlichen Schub für dessen Popularität kam sicher von seinem Einsatz in
kommerziell erhältlichen Geräten von Sonoff, Shelly &amp;amp; Co.  Und so steuert
dieser billige, aber leistungsfähige Microcontroller mit seinen WLAN
Fähigkeiten weite Teile der nerdiger Heimautomation.&lt;/p&gt;
&lt;p&gt;Die kommerziellen Geräte und sogar manche Module bringen schon eine Firmware
mit, aber gewöhnlich gebietet die Maker-Ehre, diese umgehend durch eine
open-source Firmware zu ersetzen, die man besser konfigurieren kann und die
typischerweise viel mehr Funktionen bietet. Am populärsten dürfte
&lt;a href="https://tasmota.github.io/docs/"&gt;TASMOTA&lt;/a&gt; sein – und auch für mich war das
bisher immer die erste Wahl in solchen Fällen.&lt;/p&gt;
&lt;p&gt;TASMOTA läuft stabil, bietet einen eigenen kleinen Web-Server im Device und
spricht auch problemlos mit einem MQTT Server. Ein Update over the air ist nach
der initialen Installation auch kein Problem. Was will man also mehr? &lt;/p&gt;
&lt;p&gt;Naja – zum Einen hat mich schlicht die Neugierde gestochen und zum Anderen habe
ich mich eigentlich schon gewundert, wozu ich den MQTT Server eigentlich
brauche: Warum redet die Firmware nicht direkt mit Homeassistant (oder was auch
immer Ihr im Einsatz habt)? Und zuguterletzt ist die Unterstützung für den
ESP32 in TASMOTA immer noch in der Beta Phase.&lt;/p&gt;
&lt;p&gt;Und so habe ich beschlossen, einfach mal etwas anderes auszuprobieren. Auswahl
gibt es genug: Z.B. &lt;a href="https://github.com/letscontrolit/ESPEasy"&gt;ESPeasy&lt;/a&gt;,
&lt;a href="https://esphome.io"&gt;ESPhome&lt;/a&gt; oder
&lt;a href="https://github.com/xoseperez/espurna"&gt;ESPurna&lt;/a&gt;. Irgendwie hat mich das Konzept
von ESPhome angesprochen und so werden wir das heute mal ausprobieren.&lt;/p&gt;
&lt;p&gt;Ein Projekt muss also her!&lt;/p&gt;
&lt;p&gt;Und das war schnell gefunden: Ich würde gerne die Außenbeleuchtung des Hauses
fernsteuern und ggf.  automatisieren, damit ich mich mit strahlendem Licht
verwöhnen kann, wenn ich im Winter mal abends vom Einkaufen komme, denn es ist
lästig dann immer mit Kisten und Tüten im dunklen Hof rumzutappen, nur weil die
Sonne zu dieser Jahreszeit zu faul ist, mich abends zu illuminieren.&lt;/p&gt;
&lt;p&gt;Irgendwo habe ich noch einen Shelly rumliegen – der sollte doch ideal sein für
dieses Vorhaben. Dann brauchen wir noch einen USB-UART Adapter zum Firmware-Flashen und 
schon kann es losgehen.&lt;/p&gt;
&lt;h1&gt;Firmware konfigurieren und compilieren&lt;/h1&gt;
&lt;p&gt;Als erstes müssen wir mal das Konzept von ESPhome verstehen: Von Tasmota ist
man es gewöhnt die Firmware zu flashen und dann die Konfiguration im laufenden Modul
vorzunehmen. Bei ESPhome läuft das umgekehrt. D.h. zuerst baut man eine Konfiguration
in Form eines YAML Files und lässt sich dann die Firmware compilieren.&lt;/p&gt;
&lt;p&gt;Also los! zunächst ESPhome Software auf dem Laptop installieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pipx install esphome
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;und dann ein config File erstellen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;esphome wizard außenbeleuchtung.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun ein paar Fragen zum konkreten Gerät und WLAN beantworten und schon haben
wir ein config File. Jedenfalls theoretisch, denn der Wizard kennt den Shelly
nicht und so habe ich erstmal ein generisches Board ausgewählt.  Diesem Basis
config File fehlt aber noch jede echte Funktion. D.h. wir müssen noch
definieren, welche GPIO pins in unserem Device das Relais schalten bzw. an den
Schalter angeklemmt werden.  &lt;a href="https://esphome.io/devices/sonoff.html"&gt;Hier&lt;/a&gt;
findet Ihr die nötige Information für unseren Shelly 1 (und viele andere
Geräte):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Pin&lt;/th&gt;
&lt;th style="text-align: left;"&gt;Function&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;GPIO4&lt;/td&gt;
&lt;td style="text-align: left;"&gt;Relay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;GPIO5&lt;/td&gt;
&lt;td style="text-align: left;"&gt;SW Input&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Dieses neue Wissen lassen wir nun in unser config File einfließen und schreiben
je eine &lt;code&gt;switch&lt;/code&gt;, &lt;code&gt;light&lt;/code&gt; und &lt;code&gt;binary_sensor&lt;/code&gt; Sektion. Und so sieht das dann am
Ende aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;esphome&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;aussenbeleuchtung&lt;/span&gt;

&lt;span class="nt"&gt;esp8266&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;board&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;esp01_1m&lt;/span&gt;

&lt;span class="c1"&gt;# Enable logging&lt;/span&gt;
&lt;span class="nt"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="c1"&gt;# Enable Home Assistant API&lt;/span&gt;
&lt;span class="nt"&gt;api&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;KdEmwzrv5916as1o&amp;quot;&lt;/span&gt;

&lt;span class="nt"&gt;ota&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;KdEmwzrv5916as1o&amp;quot;&lt;/span&gt;

&lt;span class="nt"&gt;wifi&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;ssid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;philnet&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tb2wV4Szxv6Nqe6W&amp;quot;&lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# Enable fallback hotspot (captive portal) in case wifi connection fails&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;ap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;ssid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Shelly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Außenbeleuchtung&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Setup&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;syHeaBfGhBVGuso9&amp;quot;&lt;/span&gt;

&lt;span class="nt"&gt;captive_portal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;


&lt;span class="c1"&gt;# Device Specific Config&lt;/span&gt;
&lt;span class="nt"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;gpio&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;pin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;GPIO4&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;shelly_1_relay&lt;/span&gt;

&lt;span class="nt"&gt;light&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;binary&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Shelly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Light&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;shelly_1_relay&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;lightid&lt;/span&gt;

&lt;span class="nt"&gt;binary_sensor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;gpio&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;pin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;GPIO5&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;#mode: INPUT_PULLUP&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;#inverted: True&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Switch&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Shelly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1&amp;quot;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;on_press&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;then&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;light.toggle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;lightid&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;internal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;true&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;switchid&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das wollen wir nun compilieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;esphome compile außenbeleuchtung.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und so sollte das aussehen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;INFO Reading configuration außenbeleuchtung.yml...
INFO Generating C++ source...
INFO Compiling app...
Processing aussenbeleuchtung (board: esp01_1m; framework: arduino; platform: platformio/espressif8266 @ 2.6.3)
--------------------------------------------------------------------------------------
HARDWARE: ESP8266 80MHz, 80KB RAM, 1MB Flash
Library Manager: Installing ottowinter/ESPAsyncTCP-esphome @ 1.2.3

Unpacking  [------------------------------------]    0%
Unpacking  [#-----------------------------------]    3%

   [...]

Unpacking  [##################################--]   96%
Unpacking  [####################################]  100%
Library Manager: ESPAsyncTCP-esphome @ 1.2.3 has been installed!
Library Manager: Installing esphome/ESPAsyncWebServer-esphome @ 2.1.0

Unpacking  [------------------------------------]    0%
Unpacking  [#-----------------------------------]    2%
Unpacking  [##----------------------------------]    5%
Unpacking  [###---------------------------------]    8%

   [...]

Unpacking  [##################################--]   97%
Unpacking  [####################################]  100%
Library Manager: ESPAsyncWebServer-esphome @ 2.1.0 has been installed!
Library Manager: Installing dependencies...
Library Manager: ESPAsyncTCP-esphome @ 1.2.3 is already installed
Library Manager: Installing esphome/AsyncTCP-esphome

Unpacking  [------------------------------------]    0%
Unpacking  [##----------------------------------]    6%

   [...]

Unpacking  [#################################---]   93%
Unpacking  [####################################]  100%
Library Manager: AsyncTCP-esphome @ 1.2.2 has been installed!
Library Manager: Installing Hash
Library Manager: Installing ESP8266WiFi
Dependency Graph
|-- &amp;lt;ESPAsyncTCP-esphome&amp;gt; 1.2.3
|-- &amp;lt;ESPAsyncWebServer-esphome&amp;gt; 2.1.0
|   |-- &amp;lt;ESPAsyncTCP-esphome&amp;gt; 1.2.3
|   |-- &amp;lt;Hash&amp;gt; 1.0
|   |-- &amp;lt;ESP8266WiFi&amp;gt; 1.0
|-- &amp;lt;DNSServer&amp;gt; 1.1.1
|-- &amp;lt;ESP8266WiFi&amp;gt; 1.0
|-- &amp;lt;ESP8266mDNS&amp;gt; 1.2
Compiling .pioenvs/aussenbeleuchtung/src/esphome/components/api/api_connection.cpp.o
Compiling .pioenvs/aussenbeleuchtung/src/esphome/components/api/api_frame_helper.cpp.o
Compiling .pioenvs/aussenbeleuchtung/src/esphome/components/api/api_pb2.cpp.o
Compiling .pioenvs/aussenbeleuchtung/src/esphome/components/api/api_pb2_service.cpp.o

   [...]

Compiling .pioenvs/aussenbeleuchtung/FrameworkArduino/umm_malloc/umm_malloc.cpp.o
Compiling .pioenvs/aussenbeleuchtung/FrameworkArduino/umm_malloc/umm_poison.c.o
Archiving .pioenvs/aussenbeleuchtung/libFrameworkArduino.a
Indexing .pioenvs/aussenbeleuchtung/libFrameworkArduino.a
Linking .pioenvs/aussenbeleuchtung/firmware.elf
RAM:   [====      ]  38.5% (used 31532 bytes from 81920 bytes)
Flash: [====      ]  41.6% (used 425572 bytes from 1023984 bytes)
Building .pioenvs/aussenbeleuchtung/firmware.bin
============================ [SUCCESS] Took 12.95 seconds ============================
INFO Successfully compiled program.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wenn das ohne Fehler durchläuft, dann sind wir bereit für den nächsten Schritt.&lt;/p&gt;
&lt;h1&gt;Flash!&lt;/h1&gt;
&lt;p&gt;Zur Programmierung (flashen) brauchen wir einen USB-UART-Adapter. Z.B. so einen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-light-ESPhome/uart-adapter.jpg" class="Medium" alt="Bild vom USB-UART Adapter in
kleinem Gehäuse."&gt;&lt;/p&gt;
&lt;p&gt;Mit dem muss der Shelly nun verkabelt werden.  Freundlicherweise ist die UART
Schnittstelle beim Shelly von außen erreichbar. Hier das Pinout (Bild ©
&lt;a href="https://shelly.cloud/knowledge-base/devices/shelly-1/"&gt;shelly.cloud&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-light-ESPhome/shelly1_pinout.jpg" class="Large" alt="Abbildung des Shelly Pinouts"&gt;&lt;/p&gt;
&lt;p&gt;Und so muss das ganze angeschlossen werden:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left;"&gt;Shelly&lt;/th&gt;
&lt;th style="text-align: center;"&gt;&lt;/th&gt;
&lt;th style="text-align: left;"&gt;UART Adapter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;GND&lt;/td&gt;
&lt;td style="text-align: center;"&gt;–&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GND&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;GPIO0&lt;/td&gt;
&lt;td style="text-align: center;"&gt;–&lt;/td&gt;
&lt;td style="text-align: left;"&gt;GND (Flash mode)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;3.3V&lt;/td&gt;
&lt;td style="text-align: center;"&gt;–&lt;/td&gt;
&lt;td style="text-align: left;"&gt;3.3V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;RX&lt;/td&gt;
&lt;td style="text-align: center;"&gt;–&lt;/td&gt;
&lt;td style="text-align: left;"&gt;TX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left;"&gt;TX&lt;/td&gt;
&lt;td style="text-align: center;"&gt;–&lt;/td&gt;
&lt;td style="text-align: left;"&gt;RX&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Achtung! Der ESP Chip im Shelly läuft mit 3.3V – auf keinen Fall 5V anlegen,
wenn er länger leben soll.&lt;/p&gt;
&lt;p&gt;Wie man im Pinout sehen kann, gibt es da auch noch einen Jumper der
entsprechend der zu schaltenden Spannung gesetzt werden muss. Für die
Programmierung ist das egal, aber nun wäre ein guter Zeitpunkt, das zu prüfen.&lt;/p&gt;
&lt;p&gt;Jetzt ist es an der Zeit, die Firmware zu compilieren und auf den Shelly zu
flashen. Also den USB2UART Adapter anschließen:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-light-ESPhome/ready-for-programming.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Anschließend ist etwas Geschick gefragt, denn wir müssen den ESP in den flash mode
bringen.  Dazu muss GPIO0 auf Masse gezogen sein, wenn wir den USB-UART
Adapter einstecken. Manche Leute bauen sich dazu ein spezielles Kabel mit
einem Schalter, aber dazu bin ich grade zu faul und deswegen mach ich das mit
einer Büroklammer. Und der Moment der Wahrheit:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;esphome upload außenbeleuchtung.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und wenn alles gut ging, dann schaut das in etwa so aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Found multiple options, please choose one:
  [1] /dev/ttyUSB0 (USB2.0-Serial)
  [2] Over The Air (aussenbeleuchtung.local)
(number): 1
esptool.py v3.2
Serial port /dev/ttyUSB0
Connecting....
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 80:7d:3a:f0:22:ab
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 2MB
Flash will be erased from 0x00000000 to 0x00068fff...
Flash params set to 0x0330
Compressed 429744 bytes to 297901...
Wrote 429744 bytes (297901 compressed) at 0x00000000 in 6.9 seconds (effective 500.6 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
INFO Successfully uploaded program.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wenn das erfolgreich war, dann können zukünftige Firmware Uploads ohne den
Adapter durchgeführt werden. ESPhome sucht das entsprechende Gerät dann im
lokalen Netz und sendet das Firmware File direkt an den ESP.&lt;/p&gt;
&lt;h1&gt;Ausprobieren&lt;/h1&gt;
&lt;p&gt;Bevor wir alles an Ort und Stelle einbauen, wollen wir erstmal einen kleinen
Testaufbau machen.  &lt;/p&gt;
&lt;p&gt;Mein Außenlicht hängt an einem Stromstoßschalter in der Verteilung, der von
zwei Tastern angesteuert wird. Einer dieser Taster wird in Zukunft an den
Shelly geklemmt, der dann den Stromstoßschalter ansteuert. Und genau so machen
wir unseren Testaufbau: einen Taster, eine Glühbirne und zum Schluss den Strom
anschließen – Kinder, nicht zuhause nachmachen, denn Strom is böse (Abbildung ©
shelly.cloud).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-light-ESPhome/shelly1_wiring_ac.jpg" class= "Medium" alt="Anschlussdiagramm für den
Shelly 1: Last an O und I, Schalter zwischen SW und L"&gt;&lt;/p&gt;
&lt;p&gt;Und im echten Leben sieht der Aufbau so aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-light-ESPhome/wired-up.jpg" class= "Large" alt="Mein Versuchsaufbau mit Shelly,
Taster und Glühbirne."&gt;&lt;/p&gt;
&lt;p&gt;Sieht doch schon ganz gut aus.  Man möge mir verzeihen, dass ich einen blauen
Draht verwendet habe, um die Phase auf den &lt;em&gt;I&lt;/em&gt; Eingang des Shelly zu schalten.
Oh und bitte gleich auch, dass ich eine ökologisch völlig unkorrekte Glühbirne
nehme. Gut dass mein Blog keine Kommentarfunktion hat... ;-)&lt;/p&gt;
&lt;p&gt;Aber tut es auch, was es soll?  &lt;/p&gt;
&lt;video src="https://techbotch.org/blog/outdoor-light-ESPhome/movie.mp4" controls class="Large" 
alt="Licht an solange Taste gedrückt ist, dann wieder aus. Stuerung aus
Homeassistatn geht auch."&gt;&lt;/video&gt;

&lt;p&gt;Taster drücken – Licht an, loslassen – Licht aus. Auf den ersten Blick mag es
so aussehen, als würde das noch nicht wie gewünscht funktionieren, weil wir den
Taster halten müssen, damit das Licht brennt. Aber nicht vergessen: Der Taster
soll ja letztendlich den Stromstoßschalter steuern, d.h. das passt schon so.&lt;/p&gt;
&lt;h1&gt;Integration in Homeassistant&lt;/h1&gt;
&lt;p&gt;Bis jetzt haben wir noch nichts gewonnen, denn die Schaltung tut einfach nur
das, was auch ohne den Shelly schon ging. Als nächstes binden wir unseren
Shelly also in Homeassistant ein. Damit das funktioniert muss der Shelly im
WLAN sein – also Strom dran. Danach gehen wir in Homeassistant nach
&lt;code&gt;Configuration&lt;/code&gt; &amp;gt; &lt;code&gt;Devices &amp;amp; Services&lt;/code&gt; und wählen dort &lt;code&gt;Add Integrations&lt;/code&gt; und
suchen dann nach &lt;code&gt;ESPhome&lt;/code&gt;.  Der folgende Dialog will den hostname des Shelly
wissen (&lt;code&gt;aussenbeleuchtung&lt;/code&gt;) und schon ist er verfügbar. &lt;/p&gt;
&lt;p&gt;Im Grunde geht nun schon alles, aber wir müssen wg. des Stromstoßschalters den
virtuellen Schalter ein und wieder ausschalten, um das Licht einzuschalten. Das
ist doof, also brauchen wir einen virtuellen Taster. Das können wir erreichen,
indem wir in HA ein &lt;em&gt;script&lt;/em&gt; erzeugen. Das geht ganz leicht unter
&lt;code&gt;Configuration&lt;/code&gt; &amp;gt; &lt;code&gt;Automations &amp;amp; Scenes&lt;/code&gt; &amp;gt; &lt;code&gt;Scripts&lt;/code&gt;. Ihr braucht drei Komponenten:
1. Außenlicht an
2. delay 250ms
3. Außenlicht aus&lt;/p&gt;
&lt;p&gt;In YAML sieht das Ergebnis dan so aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;alias&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;Außenlicht&lt;/span&gt;
&lt;span class="nt"&gt;sequence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;turn_on&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;device_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;829099e30125c023320cb8131fa7203d&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;entity_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;light.aussenlicht&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;light&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;hours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;minutes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nt"&gt;milliseconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;250&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;turn_off&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;device_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;829099e30125c023320cb8131fa7203d&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;entity_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;light.aussenlicht&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;light&lt;/span&gt;
&lt;span class="nt"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;single&lt;/span&gt;
&lt;span class="nt"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;mdi:lightbulb-on-outline&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Alles was nun noch fehlt, ist ein GUI Button dafür einzubinden uns schon
funktioniert das.&lt;/p&gt;
&lt;h1&gt;Endmontage&lt;/h1&gt;
&lt;p&gt;Technisch funktioniert nun alles korrekt. Was bleibt ist der Einbau hinter dem
Taster. Ich hoffe mal, das passt da wirklich rein. Ich werde berichten...&lt;/p&gt;
&lt;p&gt;Und zum Schluss noch ein Tip: Wenn man mehrere ESPhome Geräte 
im Einsatz hat kann es schnell unübersichtlich werden. Und irgendwie wollen die Dinger auch
gewartet werden. Dabei hilft:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;esphome dashboard ./
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das ist sehr praktisch um seine ESP-Armee unter Kontrolle zu haben.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Whisky im Käfig</title><link href="https://techbotch.org/blog/whisky-cage/index.html" rel="alternate"/><published>2021-12-19T00:00:00+01:00</published><updated>2021-12-19T00:00:00+01:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-12-19:/blog/whisky-cage/index.html</id><summary type="html">&lt;p&gt;Wie jedes Jahr kommt Weihnachten wieder sehr überraschend. Und so ist es
höchste Zeit, sich Gedanken über Geschenke zu machen. Das ist nicht immer
leicht, denn manche Leute haben einfach schon alles, andere haben keine Hobbies
oder Leidenschaften und wieder andere kaufen sich alles, was ihr Herz begehrt
umgehend. Und …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wie jedes Jahr kommt Weihnachten wieder sehr überraschend. Und so ist es
höchste Zeit, sich Gedanken über Geschenke zu machen. Das ist nicht immer
leicht, denn manche Leute haben einfach schon alles, andere haben keine Hobbies
oder Leidenschaften und wieder andere kaufen sich alles, was ihr Herz begehrt
umgehend. Und so ist eine eigene Branche entstanden: &lt;em&gt;Geschenkartikel&lt;/em&gt;. Also
Dinge die man sich selbst im Leben nicht kaufen würde und deren einziger Zweck
darin besteht verschenkt zu werden. Die Beschenkten müssen sich dann artig
bedanken und Freude heucheln, bevor sie die fragwürdige Gabe weiter verschenken
oder diskret entsorgen.&lt;/p&gt;
&lt;p&gt;Aber zum Glück gibt es auch Leute, zu denen einem sofort etwas einfällt,
worüber sie sich freuen würden. So kenne ich z.B. ein paar Menschen, die meine
Leidenschaft für Whisky teilen. Und so habe ich ein paar hoffentlich
geschmacklich erhebende Flaschen besorgt und hoffe insgeheim später zu einem
Probeschlückchen eingeladen zu werden.&lt;/p&gt;
&lt;p&gt;Bleibt noch die Aufgabe, das Geschenk würdig zu verpacken. Normalerweise würde
man nun zu einer Pappröhre mit Sternen greifen, eine weihnachtsmanngeschmückte
länglich-hohe Geschenktüte verwenden, oder die Flaschen in
tannenbaumschwangeres Geschenkpapier hüllen. Aber das ist mir zu langweilig.
Ich finde man muss sich seine Geschenke schon auch verdienen. Außerdem futtert
man sich über die Feiertage ja gewöhnlich auch etwas Festtagsspeck an und da
kann ein bisschen körperliche Betätigung nicht schaden. Und so habe ich
beschlossen, die Flaschen in einen maßgefertigten Stahlkäfig einzuschweißen. So
kommen die Kinder nicht an den Alkohol und der Beschenkte kann sich mit der
Metallsäge ein wenig abarbeiten, so dass die Gans nicht so ansetzt.&lt;/p&gt;
&lt;p&gt;Also in die Werkstatt und ein bisschen Material mit dem Trennschleifer
zurechtschneiden, Schweißgerät anwerfen und einen hübschen Flaschenkäfig
zusammenbraten: Erstmal je zwei 5mm Stahlplatte von 10x10cm zuschneiden.  Dann
vier Rundstäbe (14mm) von je 27cm abschneiden. Nun die Stäbe auf die
Grundplatte schweißen, etwas abkühlen lassen, Flasche hineingeben und zuletzt
den Deckel drauf und festschweißen.&lt;/p&gt;
&lt;p&gt;Das hat Spaß gemacht und ich finde das Ergebnis sieht ganz gut aus, auch wenn ich 
immer noch kein Schweißmeister bin.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/whisky-cage/whisky-cage.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das Ganze wird dann noch in einer Schachtel verpackt, bekommt nun doch das
obligatorische Geschenkpapier und außen klebe ich noch ein Metallsägeblatt
drauf, falls der Beschenkte keine Metallsäge besitzen sollte:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/whisky-cage/wrapped.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Also wenn das keine Weihnachtsstimmung auslöst, dann weiß ich auch nicht.&lt;/p&gt;
&lt;h2&gt;Update&lt;/h2&gt;
&lt;p&gt;Und weil Geschenke auspacken immer Freude macht, habe ich von einem der Beschenkten auch
ein paar Unboxing-Photos bekommen.&lt;/p&gt;
&lt;p&gt;Kandidat 1 hat sich für rohe Gewalt entscheiden:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/whisky-cage/unboxing1.jpg" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/whisky-cage/unboxing2.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wohingegen Kandidat 2 den Geduldsspielansatz wählte:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/whisky-cage/puzzle1.jpg" class= "Large"&gt;
&lt;img src="https://techbotch.org/blog/whisky-cage/puzzle2.jpg" class= "Large"&gt;
&lt;img src="https://techbotch.org/blog/whisky-cage/puzzle3.jpg" class= "Large"&gt;&lt;/p&gt;</content><category term="DIY &amp; Workshop"/></entry><entry><title>Fußpedal für TIG Schweißgerät</title><link href="https://techbotch.org/blog/tig-foot-pedal/index.html" rel="alternate"/><published>2021-10-01T00:00:00+02:00</published><updated>2021-10-01T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-10-01:/blog/tig-foot-pedal/index.html</id><summary type="html">&lt;p&gt;Neulich hatte ich ja schon von meinem Schweißgerät erzählt. Bisher hatte ich
damit nur Elektrode geschweißt, aber eigentlich ist es ein TIG-Gerät mit AC und
DC. D.h. man kann auch Aluminium damit schweißen. Das allwissende Netz sagt,
dass man dazu unbedingt ein Fußpedal braucht mit dem sich der Schweißstrom …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Neulich hatte ich ja schon von meinem Schweißgerät erzählt. Bisher hatte ich
damit nur Elektrode geschweißt, aber eigentlich ist es ein TIG-Gerät mit AC und
DC. D.h. man kann auch Aluminium damit schweißen. Das allwissende Netz sagt,
dass man dazu unbedingt ein Fußpedal braucht mit dem sich der Schweißstrom
während der Arbeit regulieren lässt. Dummerweise war bei meinem (Welbach Entrix
315a) kein Pedal im Lieferumfang und so dachte ich ganz naiv – bestell ich das
halt separat. Im Grunde nicht falsch, aber in der Praxis war das sehr
beschwerlich, denn der Händler (Expondo) hat zwar sehr nette und freundliche
Leute im Service, allerdings scheinen diese von Schweißgeräten absolut
überhaupt nichts zu verstehen und auch die Prozesse hat die Firma offenbar
nicht so ganz im Griff (lange Geschichte). Jedenfalls hat es mich nun fast 4
Monate gekostet so ein Pedal zu bekommen. &lt;/p&gt;
&lt;p&gt;Immerhin ist das ersehnte Pedal nun endlich gekommen. Zwischendurch hatte ich
schon die Hoffnung aufgegeben und wollte ein Pedal selber bauen, oder ein
x-beliebiges kaufen und dann so umbauen, dass es zu meinem Gerät passt.
Eigentlich ist da nichts dabei, denn so ein Pedal enthält eigentlich nur zwei
oder drei Bauelemente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Einen Mikroschalter, der die selbe Funktion hat wie die Taste am Brenner –
  Gasstrom und HF-Zündung anwerfen.&lt;/li&gt;
&lt;li&gt;Einen variablen Widerstand, der sich beim Treten des Pedals entsprechend ändert&lt;/li&gt;
&lt;li&gt;Manchmal einen zweiten regelbaren Widerstand zum Voreinstellen des maximalen
  Schweißstroms&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Letzter ist nur nötig, wenn diese Strom-Vorwahl nicht direkt am Gerät erfolgt.
Wie Ihr seht taugt also echt jedes Pedal und notfalls muss man halt den
Widerstand austauschen, was nicht so schwierig sein sollte.&lt;/p&gt;
&lt;p&gt;Allerdings fehlen uns dazu drei wichtige Informationen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Die Belegung des (bei mir 7-poligen) Steckers&lt;/li&gt;
&lt;li&gt;Der Wert der WiderständInnen&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Im Netz konnte ich nichts dazu finden und der Versuch das vom Expondo Service
in Erfahrung zu bringen blieb erwartungsgemäß fruchtlos.&lt;/p&gt;
&lt;p&gt;Aber da ich nun ein original-Pedal habe, wollte ich das hier mal für die Nachwelt 
dokumentieren, falls jemand das gleiche Problem hat...&lt;/p&gt;
&lt;h1&gt;Spezifikationen&lt;/h1&gt;
&lt;p&gt;Im Gegensatz zu vielen anderen Pedalen gibt es keinen Drehwiderstand zum Voreinstellen
des maximalen Stroms – den stellt man direkt am Schweißgerät ein. Das Innere ist
von zeitloser Schlichtheit geprägt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/tig-foot-pedal/switch.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/tig-foot-pedal/resistor.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Ein Mikroschalter, der bei leichtem antippen des Pedals schaltet (von aus auf an) und
ein Schiebewiderstand. Also nichts überraschendes.&lt;/p&gt;
&lt;p&gt;Der Stecker sieht so aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/tig-foot-pedal/connector.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/tig-foot-pedal/connector2.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Freundlicherweise sind die Pins bzw. Buchsen beschriftet: Pin 1 liegt auf Ein
Uhr und dann geht es im Uhrzeigersinn bis Pin 6 weiter. Pin 7 befindet sich in
der Mitte. Etwas Recherche ergab, dass das wohl ein &lt;em&gt;GX-16 Stecker&lt;/em&gt; ist (in
meinem Fall weiblich, 7-pin) – auch unter den Namen &lt;em&gt;Luftfahrtstecker&lt;/em&gt; oder
&lt;em&gt;Aviation connector&lt;/em&gt; zu finden. Allerdings bezweifle ich, dass irgendein
Flugzeugbauer auf diesem Planeten solche Stecker verbaut, denn diese Sorte
Stecker gibt es exclusiv vom Chinesen Deines Vertrauens, aber nicht bei RS
Components, Mouser &amp;amp; Co. Auf Ebay, Amazon, Alibaba &amp;amp; Co sind sie für kleines
Geld zu haben.&lt;/p&gt;
&lt;p&gt;Bleibt noch die Beschaltung zu bestimmen. Dazu habe ich das Multimeter gezückt
und alle denkbaren Pin-Kombinationen ausgemessen – in Ruhe und mit getretenem
Pedal. Dies habe ich gefunden:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pin 1–2: Mikroschalter: in Ruhe offen, schließt bei leichter Betätigung des
  Pedals.&lt;/li&gt;
&lt;li&gt;Pin 3–5: 10kΩ Poti: In Ruhe Durchgang, ca. 10kΩ bei voll durchgetretenem Pedal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Damit sind eigentlich alle relevanten Parameter bekannt und es wäre ein
leichtes, ein Pedal eines anderen Schweißgeräts entsprechend anzupassen.
Dennoch bin ich ganz froh, dass ich das jetzt garnicht tun muss...&lt;/p&gt;</content><category term="DIY &amp; Workshop"/></entry><entry><title>Gartenherd</title><link href="https://techbotch.org/blog/outdoor-kitchen/index.html" rel="alternate"/><published>2021-08-31T00:00:00+02:00</published><updated>2021-08-31T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-08-31:/blog/outdoor-kitchen/index.html</id><summary type="html">&lt;p&gt;Ich liebe schöne Steaks – am liebsten vom Grill und medium-rare. Lecker! Aber
natürlich braucht es Beilagen, wie Salat, oder Kartoffeln. Und im
Kartoffel-Fall heißt es dann zwischen Küche und Grill hin- und her-rennen, damit
ich beides im Griff habe. Und die Küche ist im 1. Stock. Unzumutbar!&lt;/p&gt;
&lt;p&gt;Also muss Abhilfe …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich liebe schöne Steaks – am liebsten vom Grill und medium-rare. Lecker! Aber
natürlich braucht es Beilagen, wie Salat, oder Kartoffeln. Und im
Kartoffel-Fall heißt es dann zwischen Küche und Grill hin- und her-rennen, damit
ich beides im Griff habe. Und die Küche ist im 1. Stock. Unzumutbar!&lt;/p&gt;
&lt;p&gt;Also muss Abhilfe geschaffen werden. Mein Vorschlag, den Grill in der Küche
aufzustellen wurde von der häuslichen Legislative zurückgewiesen, also muss wohl der
Herd in den Garten. Aber wie?&lt;/p&gt;
&lt;h1&gt;Heimwerken&lt;/h1&gt;
&lt;p&gt;Ein Gartenherd muss also her. &lt;/p&gt;
&lt;p&gt;Wie es der Zufall so wollte, hatten wir noch eine Naturholz-Anrichte auf Rollen
hier rumstehen, die kürzlich einem neuen Möbelstück weichen musste und nun ganz
traurig im Schuppen auf neue Aufgaben wartete. Und die ist genau richtig für
mein Vorhaben. Zuerst habe ich ihr neue Rollen spendiert, denn die alten hatten
langsam begonnen, sich aufzulösen.&lt;/p&gt;
&lt;p&gt;Ein bisschen Recherche später hatte ich auch ein schönes zweiflammiges
Gaskochfeld gefunden, das mir gut geeignet erscheint. Das soll nun links in die
Anrichte eingebaut werden und rechts bleibt etwas Platz zum Arbeiten und Sachen
abstellen. Aber nicht vergessen, die Gasdüsen zu tauschen: Ab Werk sind welche
für Erdgas verbaut und für den Betrieb mit Propan liegen passende Düsen bei.&lt;/p&gt;
&lt;p&gt;Nun alles schön ausmessen und den Ausschnitt anzeichnen.  Ich habe vor, die
langen Schnitte mit der Tauchsäge zu machen, weil sie dann schöner werden und
nur die Ecken mit der Stichsäge zu vollenden. Also Führungsschiene auf die
Linien und los geht's. Bei 4cm Massivholzplatte (ich glaube es ist Buche) hat
sich meine Tauchsäge ganz schön gequält und das Ganze war weniger leicht, als
erwartet. Aber letztlich hat alles wunderbar funktioniert an den ersten drei
Schnitten. Ja – ein wenig schwarz sind einige Schnittflächen schon geworden,
aber das sieht man ja später nicht. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-kitchen/ausschnitt.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Super-GAU&lt;/h1&gt;
&lt;p&gt;Also noch die letzte Seite, bevor die Stichsäge zum Einsatz kommt. Und was soll
ich Euch sagen? Granatensch***e: Trotz aller Vorsicht und Schiene habe ich es
offenbar geschafft, die Säge im Schlitz zu verkanten und so den allseits
gefürchteten Rückschlag auszulösen. Nein – keine Sorge: Alle Beine und Finger
noch dran und ich habe nichtmal einen Kratzer. Zum Glück bin ich
sicherheitsbewusst und stelle mich immer schön außerhalb der Gefahrenzone.
Außerdem hat der elektronische Motorstopp vorbildlich funktioniert. &lt;/p&gt;
&lt;p&gt;Aber die Tischplatte hatte leider nicht so viel Glück und hat was abgekriegt.
Zuerst ist die Säge noch in das Hinterende des Schnitts reingerauscht und hat
ihn verlängert und dort natürlich Grip am hinteren Ende des Sägeblatts bekommen
und so abgehoben. Auf dem Weg nach unten hat sie schließlich die Kante der Platte
verunstaltet.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-kitchen/ausschnitt2.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/outdoor-kitchen/holzdefekt.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und die Führungsschiene hat es auch erwischt ...&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-kitchen/schienenschaden.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Die Schiene kann man ersetzen oder vielleicht reicht ja auch eine neue
Gummilippe, aber das mit dem Werkstück ist nun super ärgerlich! Was also tun? &lt;/p&gt;
&lt;h1&gt;Plan B&lt;/h1&gt;
&lt;p&gt;Der Plan lautet: Narbe füllen. Mit selbstgemachtem Holzkitt aus Holzleim und
Holzstaub aus dem Werkstattsauger. Letzterer sollte schon halbwegs die richtige
Farbe haben...&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-kitchen/holzstaub.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/outdoor-kitchen/holzkitt1.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/outdoor-kitchen/holzkitt2.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Alles schön vermischen und in die Defekte reinpfriemeln. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-kitchen/reparatur.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Trocknen lassen und überschleifen. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-kitchen/schliff1.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Besser – nur ein bisschen dunkel und der Kitt ist etwas geschrumpft,
oder einfach verlaufen, jedenfalls braucht es eine zweite Runde: Diesmal ein
kommerzieller hellerer Kitt aus der Tube. Rein damit, aushärten lassen,
schleifen, fertig.&lt;/p&gt;
&lt;h1&gt;Feinarbeit&lt;/h1&gt;
&lt;p&gt;Nun die ganze Oberfläche mal schön mit dem Exzenterschleifer aufhübschen, um
auch noch ein paar alte Gebrauchsspuren zu beseitigen.  Dann eine Runde
Leinölfirnis drauf, einen Tag trockenen lassen, zweite Lage Öl, wieder einen
Tag trocknen lassen und final meine neue Wachspaste zum Einsatz bringen und
schön polieren.&lt;/p&gt;
&lt;h1&gt;Schublade anpassen&lt;/h1&gt;
&lt;p&gt;Da das Kochfeld dicker ist, als die Platte, passt nun die Schublade nicht mehr
rein.  Zuerst hatte ich erwogen, nur die Front als Blende einzubauen, aber im
Grunde fehlt nur ein knapper Zentimeter und so habe ich das Hinterstück der
Schublade auf der Tischkreissäge etwas gekürzt und die Ecke der Zargen mit der
Handsäge abgeschnitten.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-kitchen/schubladenmodifikation.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Jetzt passt es schon fast. Nur die linke Zarge ist noch etwas zu dick – da ist
noch die Metallklammer im Weg, die das Kochfeld von unten hält. Es fehlen
vielleicht 3mm. Abfräsen? Mit der Tischkreissäge nuten? Nee – ich hab dann
letztlich ein weiteres Loch in die Blechklammer gebohrt, so dass man sie ein
paar mm weiter nach rechts rücken kann. Und schon passt alles.&lt;/p&gt;
&lt;h1&gt;Finaler Sieg&lt;/h1&gt;
&lt;p&gt;Das sieht doch ganz gut aus und ich bin sehr zufrieden, auch wenn das 
Projekt nicht ohne Rückschläge (!) verlief.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/outdoor-kitchen/fertig1.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/outdoor-kitchen/fertig2.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Neben dem Gasanschluss ist noch ein Stromkabel zu erkennen – das ist für die
elektrische Zündung. Allerdings glaube ich nicht, dass ich mir die Mühe machen
werde, jedes mal ein Verlängerungskabel zu bemühen. Also vorerst mit dem
Feuerzeug anzünden. Und wenn ich irgendwann ganz viel Lust habe, rüste ich
vielleicht so einen Zünder mit Batteriebetrieb nach, wie man ihn am Gasgrill
hat.&lt;/p&gt;
&lt;p&gt;Nach all der Aufregung ist meine Gartenküche nun doch recht schön geworden,
finde ich. Und darauf trinke ich erstmal ein Bier...&lt;/p&gt;</content><category term="DIY &amp; Workshop"/></entry><entry><title>Thinclient Stromverbrauch</title><link href="https://techbotch.org/blog/t610-power-usage/index.html" rel="alternate"/><published>2021-08-29T00:00:00+02:00</published><updated>2021-08-29T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-08-29:/blog/t610-power-usage/index.html</id><summary type="html">&lt;p&gt;In einem früheren Post hatte ich beschrieben, wie ich einen HP T610 plus Thin
Client in eine OPNsense Firewall verwandelt habe. Die verwende ich aktuell
gerade nicht mehr, aber ich bin daraufhin gefragt worden, wieviel Strom das
Ganze eigentlich zieht. Und so habe ich den Thin Client rausgekramt und wollte …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In einem früheren Post hatte ich beschrieben, wie ich einen HP T610 plus Thin
Client in eine OPNsense Firewall verwandelt habe. Die verwende ich aktuell
gerade nicht mehr, aber ich bin daraufhin gefragt worden, wieviel Strom das
Ganze eigentlich zieht. Und so habe ich den Thin Client rausgekramt und wollte
mal schnell nachmessen.&lt;/p&gt;
&lt;h1&gt;Netzteil-Havarie&lt;/h1&gt;
&lt;p&gt;Allerdings gestaltete sich das komplexer, als erwartet, denn er wollte nicht
hochfahren.  Bei genauerer Betrachtung stellte sich heraus, dass doch
tatsächlich die Netzkabelbuchse am Netzteil den Geist aufgegeben hatte: Die
drei Pins standen krumm und schief in der Buchse, die hinten gebrochen war.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/t610-power-usage/buchse.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Mist! Aber ich habe ja noch das Netzteil von meinem T520 rumliegen – das sollte
auch passen. Leider handelt es sich dabei um ein 65W Netzteil, während das
Original 90W liefern kann. Und das hat der Thin Client natürlich gemerkt (der
Stecker hat einen Sense-Pin) und anstatt zu booten wurde ich mit vier Pieptönen
und rotem Blinken des Einschaltknopfs bedacht.&lt;/p&gt;
&lt;p&gt;Also anders. Erstmal die Kiste mit den alten Netzteilen durchwühlen. 19V
Netzteile waren schon einige dabei, aber keines mit passendem Stecker. Nun
könnte ich den Stecker transplantieren und den Widerstand für den Sense-Pin
passend einlöten, aber für einen schnellen Test habe ich erstmal einen anderen
Weg eingeschlagen.&lt;/p&gt;
&lt;p&gt;Erstmal Netzteil öffnen. Leider haben heutige Netzteile keine Schrauben mehr,
also Gehäuse knacken. Das geht eigentlich ganz einfach: Seitlich auf die
Werkbank legen und mit einem dicken fetten Schraubenzieher an der Naht in der
Mitte ansetzen. Mit leichten Hammerschlägen auf den Schraubenzieher Schritt für
Schritt die Klebenaht rundum sprengen und dabei nicht zu grob sein, damit
nichts absplittert.  Wenn man das gut macht lässt sich das Gehäuse am Ende
wieder mit Plastikkleber verschließen und man sieht nix.&lt;/p&gt;
&lt;p&gt;Interessanterweise haben Netzkabel für Kompaktnetzteile ja seit vielen Jahren
immer drei Leitungen, also inklusive Schutzleiter – dieser war im Inneren
jedoch nirgends angeschlossen ...&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/t610-power-usage/cracked-open.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Nun die zerbröselte Buchse rausnehmen und die Pins ablöten.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/t610-power-usage/buchse-gebrochen.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Dann den Stecker vom Netzkabel abtrennen, abisolieren und anlöten.
Schrumpfschlauch zur Isolation nicht vergessen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/t610-power-usage/soldered.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Netzteil wieder zusammenbauen und 
unserer Leistungsmessung steht nichts mehr im Wege.&lt;/p&gt;
&lt;h1&gt;Stromverbrauch messen&lt;/h1&gt;
&lt;p&gt;Dazu habe ich so ein günstiges Verbrauchsmessgerät (Voltcraft 4500 Advanced).
Also selbiges in die Steckdose, Thin Client einstecken und booten. Diesmal fuhr
er brav hoch ohne zu murren. Anfangs schwankt der Verbrauch noch ziemlich, aber
sobald alles schön hochgefahren ist hat er sich dann bei 21.2 W eingependelt.
Allerdings sind auch eine zusätzliche SSD, sowie eine 4-Port
Server-Netzwerkkarte eingebaut. Mal sehen, wieviel die ausmachen. Und zum
Vergleich noch der Verbrauch meines T520 (wobei das evtl. auch ein T620 ist –
das Typenschild ist mehrdeutig. Gekauft habe ich ihn jedenfalls als T520).&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Konfiguration&lt;/th&gt;
&lt;th&gt;Verbrauch (idle)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;T610 plus&lt;/td&gt;
&lt;td&gt;13.7 W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T610 plus + SSD&lt;/td&gt;
&lt;td&gt;14.5 W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T610 plus + SSD + Ethernet Karte&lt;/td&gt;
&lt;td&gt;21.2 W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T520&lt;/td&gt;
&lt;td&gt;8 W&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;D.h. die Ethernetkarte braucht vergleichsweise viel Strom.  Nun ist das ohne
jede Last. Für einen Homeserver bzw. die heimische Firewall ist das vermutlich
der relevante Wert, denn in diesem Zustand befindet sich das Gerät wohl
die meiste Zeit. Aber es wäre natürlich interessant zu wissen, wie hoch man den
Verbrauch treiben kann.&lt;/p&gt;
&lt;p&gt;Also wollen wir das Ding mal ein bisschen stressen und schauen, wieviel Strom
er dann gerne hätte. Dazu installieren wir uns &lt;code&gt;stress-ng&lt;/code&gt; und machen mal ein 
bisschen Druck auf den Kessel:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apt install stress-ng
stress-ng -a 0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Die Option &lt;code&gt;-a 0&lt;/code&gt; sorgt dafür, dass für jeden Prozessorkern Stress bereitet wird.
Und in der Tat bricht ein bisschen Stress aus, wie man an den ersten Zeilen des Outputs
von &lt;code&gt;top&lt;/code&gt; leicht erkennen kann:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;top - 19:25:57 up 14 min,  2 users,  load average: 705.59, 385.15, 150.64
Tasks: 618 total, 254 running, 345 sleeping,   0 stopped,  19 zombie
%Cpu0  :  0.5 us, 72.8 sy, 26.7 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  3.1 us, 69.5 sy, 27.2 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
MiB Mem :   3398.2 total,   1712.5 free,   1229.5 used,    456.1 buff/cache
MiB Swap:    976.0 total,    972.5 free,      3.5 used.   1693.4 avail Mem
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ein load average von &amp;gt;700 fällt nun wirklich in die Kategorie Stress – zum
Vergleich: wenn ich einfach nur via ssh eingeloggt bin und nichts besonderes
mache, bekomme ich: &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;load average: 0.00
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und wieviel Strom braucht er nun unter Stress? Knapp 32 W. Das ist weniger, als
ich erwartet hatte. Aber warum will das Gerät dann ein 90W Netzteil haben? Die
Erklärung kann eigentlich nur darin liegen, dass es hier um Leistungsreserven
für weitere angeschlossene Peripherie geht. Vielleicht eine besonders
stromfressende Grafikkarte oder Festplatte und diverse USB Geräte, die mit
Strom versorgt werden wollen. Grafikkarten sind echte Stromfresser: Im Netz
habe ich Werte bis zu 300 Watt für high-end Gaming Karten gefunden.
Festplatten scheinen eher im Bereich von 3 - 11 Watt zu liegen. Außerdem
verfügt der Thin Client über insgesamt vier USB-2 und zwei USB-3 Anschlüsse,
die jeweils mit 2.5 W bzw. 4.5W spezifiziert sind – in Summe sind das auch
nochmal bis zu 19 W.&lt;/p&gt;
&lt;h1&gt;Kosten&lt;/h1&gt;
&lt;p&gt;Laut &lt;a href="https://www.bdew.de/media/documents/BDEW-Strompreisanalyse_no_halbjaehrlich_Ba_online_10062021.pdf"&gt;Bundesverband der Energie- und
Wasserwirtschaft&lt;/a&gt;
kostete eine Kilowattstunde Strom im Juli 2021 durchschnittlich 31.94 Cent.
Also kostet unser Thin Client im 24/7 Betrieb ohne Last jährlich&lt;/p&gt;
&lt;div class="math"&gt;$$\frac{21.2}{1000} kW  \cdot 24h \cdot 365 \cdot 0.3194 €/kWh = 59.32 €$$&lt;/div&gt;
&lt;p&gt;Ob das nun viel oder wenig ist sei jedem selbst überlassen und das hängt
natürlich von der Anwendung ab. Was ich aber schon erstaunlich finde ist der
vergleichsweise bescheidene Ruhe-Verbrauch meines Heimservers. Das ist ein HP
Micro Server Gen8 mit 2 Festplatten, einer SSD und einem Xeon E3-1270 V2 mit
3.50GHz mit 4 Cores. Meine Eaton USV sagt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ upsc eaton ups.realpower
23
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also 23 Watt ohne Last. Wenn ich den nun stresse, geht die load average über
800 und der Stromverbrauch steigt auf 85 W. &lt;/p&gt;
&lt;script type="text/javascript"&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Kindling Cracker</title><link href="https://techbotch.org/blog/kindling-cracker/index.html" rel="alternate"/><published>2021-08-24T00:00:00+02:00</published><updated>2021-08-24T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-08-24:/blog/kindling-cracker/index.html</id><summary type="html">&lt;p&gt;Kürzlich habe ich mir ein Schweißgerät angeschafft. Primär ist es ein
TIG-Schweißgerät, aber man kann auch Elektrode-Schweißen damit. Ich hab zwar
vor Jahren mal einen kleinen MIG/MAG-Schweißkurs besucht und viel Spaß dabei
gehabt, aber TIG und Elektrode sind totales Neuland für mich. Und ich vermute,
dass auch MAG nach …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Kürzlich habe ich mir ein Schweißgerät angeschafft. Primär ist es ein
TIG-Schweißgerät, aber man kann auch Elektrode-Schweißen damit. Ich hab zwar
vor Jahren mal einen kleinen MIG/MAG-Schweißkurs besucht und viel Spaß dabei
gehabt, aber TIG und Elektrode sind totales Neuland für mich. Und ich vermute,
dass auch MAG nach der Zeit nicht mehr wirklich gut geht. Also wieder neu
lernen.&lt;/p&gt;
&lt;p&gt;Und das geht am besten mit einem konkreten Projekt, das nicht zu schwierig ist.
Und so versuche ich mich heute daran, einen Kindling-Cracker zu bauen. Nun
werdet Ihr mit Recht fragen, was in aller Welt ein "Kindling Cracker" sein
soll. Ganz einfach: das ist eine kleine Vorrichtung aus Stahl, mit der man
Holzscheite relativ gefahrlos in Anzündholz verwandeln kann. Das Prinzip beruht
darauf, dass man eine Art Axtkopf mit der Schneide nach oben in einem
Stahlrahmen befestigt, oben noch einen Sicherheitsring montiert und dann das
Holzscheit in die Vorrichtung stellt und mit einem Hammer drauf haut und so
Holz spaltet, ohne sich dabei den Daumen abzutrennen, wie es sonst üblich ist,
wenn man das mit Beil und Hackstock macht.&lt;/p&gt;
&lt;p&gt;Sowas kann man kaufen, aber selbermachen ist viel schöner und der Sinn war ja,
Schweißen zu lernen. Also habe ich ein bisschen Stahl gekauft. Für den Ring und
die seitlichen Streben habe ich mich für 20mm Vierkantstahl entscheiden. Der
sah sehr stabil aus und ich hoffe, dass ich da nicht gleich ein Loch
reinbrenne...&lt;/p&gt;
&lt;h1&gt;Measure once cut twice&lt;/h1&gt;
&lt;p&gt;... oder so ähnlich lautet die Handwerkerweisheit in den USA. Gemeint ist
damit, dass man es nicht so machen soll, wie ich. Denn wenn man ein
Stahlquadrat von 20cm Kantenlänge haben will, dann sollte man keine 25cm Stücke
schneiden. Aber ich greife vor.&lt;/p&gt;
&lt;p&gt;Zuerst schneiden wir mal den Vierkantstahl zurecht: 20cm Stücke auf Gehrung mit
der Kaltkreissäge, oder wenn man keine hat, mit der Flex. Merke: 20cm sind weniger,
als 25cm.  Keine Ahnung, warum ich das im ersten Durchgang verbaselt habe. Aber
hier sieht man die Früchte meiner letztlich erfolgreichen Sägetätigkeit:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/layout.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Sieht doch garnicht so schlecht aus.&lt;/p&gt;
&lt;h1&gt;Lasset Metall schmelzen!&lt;/h1&gt;
&lt;p&gt;Nun kann man das so noch nicht verschweißen, denn die Stäbe sind 20mm dick und
der Schweißzusatzstoff wird sich nie und nimmer in diesen winzigen Spalt
hineinfinden und außerdem soll ja nicht einfach flüssiges Metall draufgetropft
werden, sondern das Basismaterial schön aufschmelzen und mit unserer Elektrode
verschmelzen, so dass wir eine schöne belastbare Schweißnaht bekommen.  Dazu
müssen wir erstmal ein bisschen Material wegschleifen, so dass wir an den zu
schweißenden Stellen einen schönen V-förmigen Spalt bekommen in dem wir dann
schweißen können. So sah das dann aus, auch wenn es schlecht zu erkennen ist,
weil die blöde Handykamera die Perspektive so verzerrt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/bevels.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;So wie ich das geschliffen habe, wird nicht alles Material verschweißt werden,
denn in der Mitte habe ich recht viel stehen lassen. Aber das sollte stabil
genug sein.&lt;/p&gt;
&lt;p&gt;Also alles wieder im Quadrat ausrichten und mit Klemmen fixieren. Schweißgerät
an, Elektrode (3.2mm RR) rein und mal grob den Strom einstellen – ich fang mal
mit 130A an – das ist an der Obergrenze für die Elektrodenstärke, aber ich hab
gehört, dass Anfänger sich leichter tun, wenn sie sich eher auf der "heißen"
Seite halten. Eine Weile rumfummeln bis die blöde Elektrode zu zünden geruht
und dann schön zusammenschweißen. Also erstmal nur eine kleine Heftung in jede
Ecke, damit sich nicht alles verzieht, Moment warten, Schlacke abklopfen und
die Spalten schön zuschweißen. Kurz abkühlen lassen, Schlacke abklopfen, laute
Flüche ausstoßen, weil das teils überhaupt nicht schön geworden ist. &lt;/p&gt;
&lt;p&gt;Einige Nähte sahen auf Anhieb OK aus, aber andere waren furchtbar: Irgendwie
voller Krater, oder einfach nicht vernünftig gefüllt und an anderer Stelle dann
zu dick geworden. Also in den Schraubstock und nochmal ordentlich mit dem
Winkelschleifer bearbeiten, bis die halbwegs brauchbaren Schweißnähte schön
glatt sind und die schlechten nochmal neu öffnen für den zweiten Versuch – oder
den dritten ...&lt;/p&gt;
&lt;p&gt;Hier ein Beispiel für eine  wieder aufgeschliffene Stelle:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/v-second-try.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und so sah sie nach dem 2. Versuch aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/second-try.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Besser – so wird's doch langsam. Diese hier gefällt mir z.B. ganz gut und ist
nach dem Abschleifen schön glatt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/better-weld.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Einen viereckigen Ring haben wir nun also schonmal. Aber wir brauchen ja noch mehr.&lt;/p&gt;
&lt;h1&gt;Klinge und Basis&lt;/h1&gt;
&lt;p&gt;Unsere Klinge machen wir aus einer 12mm Stahlplatte. Erstmal zurechtschneiden,
so dass sie am Ende zwischen die beiden Stützen passt und dann mit dem
Winkelschleifer eine Schneide dranschleifen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/blade.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/kindling-cracker/frame-fitting.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Nun die Klinge an die Stützen anschweißen – dazu müssen wir aber erstmal die
Seiten der Klinge ein bisschen anschleifen, damit wir das vernünftig
verschweißen können.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/blade-bevel.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;In jede Ecke eine kleine Heftung und losbraten:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/tack-welds.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Nicht wirklich schön, aber es scheint zu halten:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/poor-welding.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Nun dringend mit dem Winkleschleifer bearbeiten, damit es nicht ganz so gepfuscht aussieht ;-)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/cleanup.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Als nächstes kommt das eingangs gebastelte Viereck nun auf die Stützen mit der
Klinge:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/assembly.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Damit das Konstrukt auch stehen bleibt, brauchen wir nun eine Fußplatte. Ich habe aber keine 20x20cm
Stahlplatte da – nur zwei halb so große. Die verschweißen wir in der Mitte:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/baseplate1.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/kindling-cracker/baseplate2.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/kindling-cracker/baseplate3.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Mit dem oberen Teil der Schweißnaht bin ich sehr zufrieden und ich dachte
schon, dass ich nun zum Großmeister des Elektrodenschweißens werde. Jedoch
verließ mich mein Talent offenbar nach dem Neustart mit frischer Elektrode und
der untere Teil ist wieder ziemlicher Pfusch geworden.&lt;/p&gt;
&lt;p&gt;Aber wie las ich im weisen Netz – "Grinder and paint make me the welder I ain't...". 
Wohl wahr:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/baseplate-clean.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Als nächstes galt es, den Spalter auf die Grundplatte zu schweißen. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/ready.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Testlauf&lt;/h1&gt;
&lt;p&gt;Nun muss das Teil natürlich erstmal ausprobiert werden. Also schnell ein Scheit
Holz besorgen, rein stellen und mit dem Hammer draufhauen. Geht gut. D.h. ich
lasse das so wie es ist und schweiße nicht noch so kleine Keile auf die Klinge,
um die Spaltwirkung zu erhöhen. Notfalls kann man das dann später noch
nachrüsten. Nur die Klinge werde ich noch etwas nachschärfen.&lt;/p&gt;
&lt;h1&gt;Säubern und lackieren&lt;/h1&gt;
&lt;p&gt;Als erstes muss das ganze gesäubert werden – mit der Drahtbürste im
Winkelschleifer schön von oben bis unten gründlich durchbürsten, bis der ganze
anhaftende Mist weg ist.&lt;/p&gt;
&lt;p&gt;Nun das Ganze noch schön lackieren, damit die Narben meiner Schweißkunst gnädig
bedeckt werden. Dafür habe ich mir eine Dose "Schmiedelack" besorgt. Der
fungiert als Grundierung, Rostschutz und Lack in einem, also ideal für
Pfuscher. Meiner ist anthrazitfarben mit so Glimmerkörnchen drin. Zum Lackieren
verwende ich meine professionelle Lackierkabine – auch als "großer Pappkarton"
bekannt:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/spraypaintbox.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;h1&gt;Fazit&lt;/h1&gt;
&lt;p&gt;Nun ist es also vollendet, mein Wunderwerk. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/kindling-cracker/kindling-cracker.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Ich finde, dafür, dass das mein
allererstes Schweißprojekt war, ist es garnicht so schlecht geworden.
Allerdings muss ich zugeben, dass ich noch wirklich viel zu lernen habe in
Sachen Schweißen.  Und so habe ich im Laufe des Projekts geschätzte 80% der
Zeit nicht mit Schweißen verbracht, sondern mit Winkelschleifen. Zum einen,
um die Teile vorzubereiten, aber noch viel mehr für die Nachbearbeitung:
verhunzte Schweißnähte wieder wegschleifen, um neu anzusetzen, oder wenigstens
um sie etwas weniger furchtbar aussehen zu lassen. Und ich bin froh, mehrere
Winkelschleifer zu haben. Im ersten hatte ich die Drahtbürste, im zweiten eine
Trennscheibe und im dritten und meistgebrauchten eine Schruppscheibe. So konnte
ich schnell im Wechsel bürsten und schleifen, ohne jedes Mal das Werkzeug
auswechseln zu müssen.&lt;/p&gt;
&lt;p&gt;Neben dem Winkelschleifer braucht man noch jede Menge Schutzausrüstung:
Werkstattjacke, Lederschürze, Schweißerhandschuhe, Automatikschweißhelm,
Baumwollkappe (damit einem nicht der Funkenregen die Haare absengt),
Schutzbrille/Gesichtsschutz, FFP2-Maske und Ohrstöpsel. Offenbar sah ich
voller Montur so beeindrucken aus, dass die beste Ehefrau von allen fast einem
Lachkrampf erlegen wäre, als ihr Auge auf mich viel. &lt;/p&gt;
&lt;p&gt;Das nächste, was ich gelernt habe ist, dass man echt dauernd die Lüftung in der
Schweißhöhle laufen haben muss, weil Elektrodenschweißen eine sehr rauchige
Angelegenheit ist. &lt;/p&gt;
&lt;p&gt;Nun werde ich noch ein bisschen mehr üben und sobald es ein kleines bisschen
weniger peinlich ist will ich mein Glück dann mal mit TIG- und
MAG-Schweißen versuchen. Beides sollte deutlich sauberer sein und zumindest MAG
hatte ich, wie gesagt, schonmal in einen Schnupperkurs gemacht und es erschien
mir deutlich leichter, als Elektrode. Mal sehen wie blöd ich mich dabei
anstelle...&lt;/p&gt;
&lt;h1&gt;Nachtrag&lt;/h1&gt;
&lt;p&gt;Inzwischen habe ich eine &lt;a href="https://techbotch.org/blog/kindling-cracker2/index.html"&gt;neue
Version&lt;/a&gt; gebaut, die ich
noch etwas besser finde.&lt;/p&gt;</content><category term="DIY &amp; Workshop"/></entry><entry><title>Wachspaste</title><link href="https://techbotch.org/blog/wax-paste/index.html" rel="alternate"/><published>2021-08-20T00:00:00+02:00</published><updated>2021-08-20T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-08-20:/blog/wax-paste/index.html</id><summary type="html">&lt;p&gt;Ich mag Holzoberflächen. Die haben was sehr Angenehmes, sehen gut aus und
fühlen sich einfach gut an – v.a. wenn sie nicht mit Lack oder Farbe versiegelt
wurden. Ja – das ist manchmal sinnvoll und erwünscht – z.B. wenn das Stück
draußen überleben soll, das Holz billig und hässlich war, oder …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich mag Holzoberflächen. Die haben was sehr Angenehmes, sehen gut aus und
fühlen sich einfach gut an – v.a. wenn sie nicht mit Lack oder Farbe versiegelt
wurden. Ja – das ist manchmal sinnvoll und erwünscht – z.B. wenn das Stück
draußen überleben soll, das Holz billig und hässlich war, oder eben wegen des
visuellen Effekts. Aber für viele Möbel oder Gegenstände ist eine natürliche
Holzoberfläche am schönsten. &lt;/p&gt;
&lt;p&gt;Aber ein bisschen schützen muss man sie doch. Dafür verwende ich gerne
gekochtes Leinöl, auch  als Leinölfirnis bekannt. Und wenn man das nicht
halbliterweise im Baumarkt kauft, sondern einen 5l Kanister von einer Ölmühle
nimmt ist das garnicht teuer. Manche Leute schwören aber auf Wachs, oder
empfehlen eine geölte und völlig durchgetrocknete Oberfläche zum Abschluss mit
Wachspaste zu behandeln. Das mache ich z.B. mit dem Holzgriff an meinem
chinesischen Kochmesser. Weil der ständig beim abspülen nass wird und dann mit
der Zeit die Oberfläche leidet, bekommt er öfter mal einen Tropfen Leinöl
und/oder eine kurze Abreibung mit einer Wachspaste ("Antikwachs"). Die hatte
ich mal irgendwo gekauft und sie funktioniert zufriedenstellen, aber die riecht
nicht so besonders toll.&lt;/p&gt;
&lt;h1&gt;Selber machen&lt;/h1&gt;
&lt;p&gt;Und so will ich mich heute mal daran versuchen, meine eigene Wachspaste
herzustellen. Die Zutaten für 300g sind simpel:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;240g Leinöl, gekocht&lt;/li&gt;
&lt;li&gt;60g Bienenwachs&lt;/li&gt;
&lt;li&gt;5-10 Tropfen Orangenöl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Leinöl hab ich eh da und im großen weiten Netz fand ich Bienenwachs in
Barrenform, a 30g das Stück:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wax-paste/waxbars.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das Orangenöl ist nur für den angenehmeren Geruch und kann weggelassen werden.&lt;/p&gt;
&lt;h1&gt;Auf geht's&lt;/h1&gt;
&lt;p&gt;Als erstes müssen wir das Wachs und Leinöl abwiegen und das Ganze
schmelzen und mischen. Und gegen Ende ein paar Tropfen Orangenöl dazu.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wax-paste/jar.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Das offizielle Rezept geht so: Wasser in einem kleinen Topf heiß machen, ein
leeres Marmeladenglas mit Wachs und Öl füllen und rein ins Wasserbad. Nun ist
Geduld gefragt: Nicht kochen, sondern in aller Ruhe einschmelzen und
gelegentlich mal ein bisschen umrühren.&lt;/p&gt;
&lt;p&gt;Da Geduld aber nicht meine Stärke ist, habe ich das inoffizielle Rezept
verwendet das darin besteht, das Ganze in der Mikrowelle aufzuheizen, ein wenig
zu rühren und wieder in die Mikrowelle. Aufpassen, dass es heiß wird, aber
nicht zu heiß. Hat gut funktioniert.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wax-paste/melting1.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/wax-paste/melting2.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/wax-paste/melting3.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/wax-paste/molten.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wenn alles schön flüssig und homogen ist, abkühlen lassen. Und da ist nun doch
ein Wasserbad zum Einsatz gekommen: ein kaltes, denn das Abkühlen hat mir
einfach zu lang gedauert!&lt;/p&gt;
&lt;p&gt;Das Ergebnis sieht ein bisschen aus, wie Rapshonig und hat eine ganz ähnliche
Konsistenz:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/wax-paste/ready1.jpg" class= "Medium"&gt;
&lt;img src="https://techbotch.org/blog/wax-paste/ready2.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Wenn das so bleibt bin ich hochzufrieden. Morgen schau ich mir mal an, wie 
die Konsistenz sich über Nacht verändert hat.&lt;/p&gt;
&lt;p&gt;Update: über Nacht ist es ein wenig fester geworden, aber immer noch sehr
angenehm. D.h. ich werde die Paste nicht weiter verdünnen.&lt;/p&gt;
&lt;h1&gt;Varianten&lt;/h1&gt;
&lt;p&gt;Die Konsistenz der Paste kann man über das Wachs/Öl-Verhältnis steuern: Man
findet Rezepte von 1:4 bis 1:8.  Ich fange mal mit 1:4 an schau mir die
Konsistenz nach dem Abkühlen an und wenn mir die Pampe zu fest ist, kann ich
sie immer noch erneut schmelzen und mehr Öl zugeben.&lt;/p&gt;
&lt;p&gt;Man kann auch unterschiedliches Öl verwenden: Wenn die Paste im Küchenbereich
zum Einsatz kommt, wäre es vorteilhaft, wenn das Ganze lebensmittelecht wäre.
Manche Leute nehmen dann Parafinöl statt Leinölfirnis – ich bleibe bei
Leinölfirnis, weil meine zwar gekocht ist, aber keine Additive enthält, wie es
bei vielen Sorten Firnis der Fall ist, um deren Trockung zu beschleunigen.
Zuguterletzt könnte man auch Speiseöl (Leinöl) verwenden – das geht auch,
trocknet aber langsamer.&lt;/p&gt;
&lt;p&gt;Man könnte auch seine eigene Leinölfirnis herstellen, indem man normales Leinöl
kocht.  Allerdings dauert der Spaß eine ganze Weile und ist nicht ungefährlich,
denn heißes Öl brennt auch sehr gut. Der Siedepunkt von normalem Leinöl liegt
bei 350 °C und der &lt;a href="https://de.wikipedia.org/wiki/Flammpunkt"&gt;Flammpunkt&lt;/a&gt;
beträgt 315 °C. Mit anderen Worten: Wenn das Öl kocht, kann man es anzünden und
es besteht die Möglichkeit ein schönes kleines Feuerinferno zu produzieren (vor
allem wenn Ihr einen Gaskocher nehmt und eine Flamme in den Topf schlägt, aber
nicht nur dann). Wer es dennoch versuchen will, möge es bitte im Freien tun und
eine Löschdecke bereit halten (kein Wasser!).&lt;/p&gt;
&lt;p&gt;Wenn das Wachs härter werden soll, dann nimmt man nur 50g Bienenwachs und fügt
10g Carnaubawachs hinzu. Das erhöht die Schutzwirkung und je mehr Carnaubawachs
Ihr nehmt, desto glänzender lässt sich die Oberfläche polieren.&lt;/p&gt;</content><category term="DIY &amp; Workshop"/></entry><entry><title>Dokumenten-Scanner</title><link href="https://techbotch.org/blog/automated-document-scanner/index.html" rel="alternate"/><published>2021-08-16T00:00:00+02:00</published><updated>2021-08-16T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-08-16:/blog/automated-document-scanner/index.html</id><summary type="html">&lt;p&gt;Ich hasse Bürokratie! Vor allem, wenn sie damit verbunden ist, dass ich mich um
Papierkram kümmern muss. Und jeder von uns hat genug davon: Rechnungen,
Schreiben von Krankenkasse, Rentenversicherung &amp;amp; Co, Autoversicherung, etc.
Alle schicken uns dauernd Papier, das man momentan nicht wirklich braucht, aber
das dennoch wichtig ist und aufgehoben …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Ich hasse Bürokratie! Vor allem, wenn sie damit verbunden ist, dass ich mich um
Papierkram kümmern muss. Und jeder von uns hat genug davon: Rechnungen,
Schreiben von Krankenkasse, Rentenversicherung &amp;amp; Co, Autoversicherung, etc.
Alle schicken uns dauernd Papier, das man momentan nicht wirklich braucht, aber
das dennoch wichtig ist und aufgehoben werden will – und zwar so, dass man es
im Falle eines Falles auch wiederfindet.&lt;/p&gt;
&lt;p&gt;Dazu hat man normalerweise gefühlte hundert verschiedene Ordner, in die man den
ganzen Mist getrennt nach Thema und sortiert nach Datum einsortiert. Und wenn man sehr fleißig
und gewissenhaft ist, dann macht man das immer sofort nachdem ein Brief eingegangen ist 
und hat fast gar keine Mühe. Bin ich aber nicht, und es macht jede Menge Mühe!&lt;/p&gt;
&lt;p&gt;Und so haben wir uns zusätzlich zum Multifunktionsdruckkopierscanfaxgerät noch so einen
kleinen automatischen Dokumentenscanner angeschafft. Mein Plan ist es, jedes neue Dokument &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mit einer fortlaufenden Nummer zu bestempeln&lt;/li&gt;
&lt;li&gt;Einzuscannen&lt;/li&gt;
&lt;li&gt;Der Reihe nach abzuheften – ausschließlich nach der Nummer sortiert&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Die Scans sollen in ein elektronisches Dokumenten-Management  System laufen, in
dem ich dann hoffentlich alles schnell wieder finde. Und sollte ich doch mal
ein Papier-Original brauchen, kann ich es anhand der Nummer ausfindig machen.
Langfristig hoffe ich, die Papierkopien einfach wegwerfen zu können. Aber Eins
nach dem Anderen.&lt;/p&gt;
&lt;h1&gt;Scanner&lt;/h1&gt;
&lt;p&gt;Der betreffende Scanner ist ein Brother ADS-2800W. Der ist recht flott, scannt
in einem Durchgang beide Seiten und kann recht flexibel konfiguriert werden, so
dass wir die privaten und beruflichen Sachen leicht separat halten können. &lt;/p&gt;
&lt;p&gt;U.a. kann er direkt auf einen sFTP-Server scannen und das ist meine
Wunschkonfiguration.  Also habe ich auf dem Heimserver einen neuen User &lt;code&gt;ads&lt;/code&gt;
für den Scanner angelegt und in dessen home Directory je einen Ordner für die
unterschiedlichen Scan-Jobs angelegt. Noch je nach Bedarf eine paar User-Groups
generieren und die Folder mit passenden Gruppen-Ownerships und Permissions
versehen und schon hat alles seine Ordnung.&lt;/p&gt;
&lt;p&gt;In unseren eigenen Home-Directories habe ich dann Symlinks auf die Ordner
angelegt, für die wir jeweils die nötigen Permissions haben. Sieht doch schon
alles sehr ordentlich aus. Der Zugriff funktioniert wie geplant und auch meine
Frau hat unter Windows kein Problem, da sie wahlweise die ohnehin eingerichtete
Datei-Synchronisation oder den Direktzugriff via SMB verwenden kann.&lt;/p&gt;
&lt;p&gt;Die Konfiguration des Scanners erfolgt ganz bequem per https Zugriff. Als
erstes stellen wir mal alle Netzwerk-Profile auf &lt;code&gt;SFTP&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/automated-document-scanner/profiles.png" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Nun können wir jedes der Profile konfigurieren. Dort hinterlegen wir u.a. den User Name
für unseren Scanner User &lt;code&gt;ads&lt;/code&gt;. Dort könnte man auch das dazugehörige Passwort eintragen,
aber auf meinem Server lasse ich keine Passwort-basierten ssh-connections zu – d.h. 
wir brauchen ein Key-Pair.&lt;/p&gt;
&lt;p&gt;Dazu springen wir ans Ende der schier endlosen Liste von Optionen, denn dort
findet man die Links &lt;code&gt;Client Key Pair&lt;/code&gt; und &lt;code&gt;Server Public Key&lt;/code&gt;. Als erstes
generieren wir ein Client Key Pair für unseren user &lt;code&gt;ads&lt;/code&gt; und exportieren den
Public Key auf unseren Rechner. Dort gespeichert muss er noch auf dem Server
(meiner heißt &lt;code&gt;hal&lt;/code&gt;) hinterlegt und an die richtige Stelle kopiert werden:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;scp publickey.pub ads@hal:
ssh ads@hal
echo publickey.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun will ssh ja jedes mal verifizieren, dass der Server auch der ist, der er zu
sein vorgibt und prüft dazu den Public-Key des selbigen. Ihr kennt das – wenn
man sich erstmals einloggt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;The authenticity of host &amp;#39;hal (192.168.0.XYZ)&amp;#39; can&amp;#39;t be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Wobei da statt &lt;code&gt;xxxxxxxxxxx...&lt;/code&gt; natürlich der echte Fingerprint steht.  Also
muss unser Scanner den Fingerprint des Servers kennen, um die Verbindung zu
akzeptieren. Auch das sah zunächst einfach aus.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/automated-document-scanner/server-key-import.png" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Na dann besorgen wir uns mal einen Public Key:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ssh-keyscan hal &amp;gt; serverkey.pub
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und so sieht &lt;code&gt;serverkey.pub&lt;/code&gt; dann aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;hal ssh-rsa XXXXXXXXXXXXXXXXXXXXXXXX[...]
hal ecdsa-sha2-nistp256 XXXXXXXXXXXXXXXXXXXXXXXX[...]
hal ssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXX[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Sehr gut – das macht Sinn. Also dieses File über das Web-Interface des Scanners
importieren &lt;code&gt;Submit&lt;/code&gt; drücken.  Und schon:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/automated-document-scanner/error.png" class= "Large" alt="The file is either no longer available or does not contain a valid public key."&gt;&lt;/p&gt;
&lt;p&gt;Grumpf! Was'n da los?&lt;/p&gt;
&lt;p&gt;Könnte es sein, dass der Scanner garnicht den Key haben will, sondern nur den
Fingerprint? Also erstellen wir den mal:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ssh-keygen -l -f serverkey.pub &amp;gt; serverkey.fingerprint
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Die &lt;code&gt;-l&lt;/code&gt; Option bewirkt, dass wir einen Fingerprint bekommen und &lt;code&gt;-f&lt;/code&gt;
spezifiziert den Key für den wir selbigen haben wollen.&lt;/p&gt;
&lt;p&gt;Neues Spiel – neues Glück: File Upload, &lt;code&gt;submit&lt;/code&gt;, Error!&lt;/p&gt;
&lt;p&gt;Schlecht.&lt;/p&gt;
&lt;p&gt;Eine halbe Ewigkeit habe ich im Netz herum recherchiert, diverse andere
Optionen für &lt;code&gt;ssh-keyscan&lt;/code&gt; und &lt;code&gt;ssh-keygen&lt;/code&gt; ausprobiert. Erfolglos. Die einzige
Abwechslung bestand darin, dass ich ab einem gewissen Punkt eine völlig andere
Fehlermeldung bekam: "&lt;em&gt;The server public key and file name are already in
use.&lt;/em&gt;". Das hat es nur noch verwirrender gemacht...&lt;/p&gt;
&lt;p&gt;Ich habe mich sogar soweit erniedrigt, das Handbuch zu lesen. Kein Glück.&lt;/p&gt;
&lt;p&gt;Und so habe ich letztlich den Brother-Support kontaktiert. Die haben mein
Ticket erstmal in die nächste Ebene eskaliert und dann verschiedene Vorschläge
gemacht, die es aber auch nicht gelöst haben. Allerdings haben sie mir auf
meine Bitte hin einen gültigen Server-Key geschickt:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+dUdstqYzMq9ZRJ[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und dann fiel es mir wie Schuppen von den Augen! Wer sieht den Unterschied? Da
steht nur &lt;code&gt;ssh-rsa&lt;/code&gt; gefolgt vom Key. &lt;em&gt;Aber nicht der Servername!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Also habe ich mein Key-File in den Texteditor geladen und die erste Spalte gelöscht.
Und siehe da:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/automated-document-scanner/success.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Die Wurzel des Übels ist übrigens der &lt;code&gt;ssh-keyscan&lt;/code&gt; Befehl (bzw. meine
Unwissenheit) und nicht die Brother Firmware.  Alternativ hätten wir uns den
public Key unseres Servers auch direkt aus dessen Dateisystem besorgen können:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ ll /etc/ssh/*.pub
-rw-r--r-- 1 root root 172 2019-10-07 22:28 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-r--r-- 1 root root  92 2019-10-07 22:28 /etc/ssh/ssh_host_ed25519_key.pub
-rw-r--r-- 1 root root 392 2019-10-07 22:27 /etc/ssh/ssh_host_rsa_key.pub
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;World-readable (&lt;em&gt;public&lt;/em&gt;-Key ...) und von vornherein korrekt formatiert!&lt;/p&gt;
&lt;p&gt;Nun können wir unsere Netzwerk-Scan Profile schön konfigurieren:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/automated-document-scanner/profile-config.png" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Die Liste der Optionen geht noch ein bisschen weiter, aber ich wollte Euch
damit nicht langweilen.&lt;/p&gt;
&lt;h1&gt;Write only FTP&lt;/h1&gt;
&lt;p&gt;Was den Dokumentenscanner angeht ist nun alles eingerichtet und einem sicheren
Datentransfer steht nichts mehr im Wege. Allerdings habe ich noch ein
Multifunktionsgerät, das kein SFTP beherrscht, sondern nur normales FTP. Das
gute alte FTP-Protokoll funktioniert zwar zuverlässig, ist aber jetzt nicht so
auf der Höhe der Zeit, was Sicherheit angeht.  Um das MUFU dennoch nutzen zu
können ist es empfehlenswert, ein paar Sicherheitsvorkehrungen zu treffen. &lt;/p&gt;
&lt;p&gt;Zunächst brauchen wir aber mal einen Server. Ich verwende
&lt;a href="http://www.proftpd.org/"&gt;proftpd&lt;/a&gt; – der ist ziemlich angenehm und flexibel
konfigurierbar. Der Server selbst ist im Nullkommanix installiert:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apt install proftpd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Aber wenn wir nichts unternehmen, sind alle user-accounts via FTP zugreifbar –
das wollen wir nicht.  Nur der user &lt;code&gt;ads&lt;/code&gt; soll FTP machen können. Im
Config-File (&lt;code&gt;/etc/proftpd/proftpd.conf&lt;/code&gt;) fügen wir daher folgendes ein:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;lt;Limit LOGIN&amp;gt;
DenyAll
AllowUser ads
&amp;lt;/Limit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Besser. Aber eigentlich ist es auch blöd, wenn der &lt;code&gt;ads&lt;/code&gt; user mehr darf, als er
unbedingt braucht. Kurz: ich hätte gerne &lt;em&gt;write-only&lt;/em&gt; Zugriff dafür. Kein
Lesezugriff auf bereits hochgeladene Files und auch keine Möglichkeit
Directories zu listen. Klingt etwas paradox, aber geht ganz leicht:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;lt;Limit READ&amp;gt;
DenyAll
&amp;lt;/Limit&amp;gt;

&amp;lt;Limit LIST&amp;gt;
DenyAll
&amp;lt;/Limit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun noch schnell den Daemon neu starten und schon ist das einigermaßen abgesichert:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo systemctl restart proftpd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;EDMS&lt;/h1&gt;
&lt;p&gt;Was nun noch fehlt ist das EDMS (Electronic Document Management System). Ich
teste gerade zwei vielversprechende Kandidaten:
&lt;a href="https://www.mayan-edms.com/"&gt;Mayan-EDMS&lt;/a&gt; und
&lt;a href="https://github.com/jonaswinkler/paperless-ng"&gt;Paperless-ng&lt;/a&gt;.  Ersteres scheint
mir deutlich mächtiger, aber auch komplexer, Zweiteres wirkt sehr
übersichtlich, kann aber dafür nicht so viel. Ich werde mit beiden noch ein
wenig herumspielen, bevor ich mich festlege...&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Neue Stahlbohrer</title><link href="https://techbotch.org/blog/new-drill-bits/index.html" rel="alternate"/><published>2021-07-10T00:00:00+02:00</published><updated>2021-07-10T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-07-10:/blog/new-drill-bits/index.html</id><summary type="html">&lt;p&gt;Manchmal bohre ich Löcher in Sachen. Holz, Metall oder Stein/Beton. Und wie es
sich gehört, habe ich für jeden dieser Einsatzbereiche andere Bohrer. Nun sind
einige meiner Bohrer nicht so die tollste Qualität und ein paar sind im Laufe
der Jahre gebrochen oder verloren gegangen und so habe ich …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Manchmal bohre ich Löcher in Sachen. Holz, Metall oder Stein/Beton. Und wie es
sich gehört, habe ich für jeden dieser Einsatzbereiche andere Bohrer. Nun sind
einige meiner Bohrer nicht so die tollste Qualität und ein paar sind im Laufe
der Jahre gebrochen oder verloren gegangen und so habe ich mich aufgerafft und
mir mal ein neues Metallbohrer-Set gegönnt. Nach ein wenig Recherche habe ich
mich für das 25-teilige Set von Bosch entschieden: HSS-G, also geschliffen
nicht geschüttelt, äh ich meine gewalzt. Angeblich sind die stabiler oder präziser
oder sowas. Durchmesser geht von 1.0 bis 13.0 mm in 0.5mm Schritten. Das sollte
für so ziemlich alle meine Metallbohrbedürfnisse reichen. War auch nicht so
teuer und kam in einer netten Kassette, die sich ganz ordentlich anfühlt,
auch wenn sie nur aus Plastik ist.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/new-drill-bits/drillbit-set1.jpg" class= "Small"&gt;
&lt;img src="https://techbotch.org/blog/new-drill-bits/drillbit-set2.jpg" class= "Small"&gt;&lt;/p&gt;
&lt;p&gt;Leider hatte ich gerade kein Loch, das dringender Bohrung harrte und so habe
ich das Set erstmal einfach so auf dem Esstisch platziert und eingehend
bewundert. Und ich hab mir ölige Pfoten geholt, weil ich sie alle mal
rausgenommen habe – Beschriftung prüfen; nicht dass da einer doppelt ist und
dafür eine andere Größe fehlt. Und mal sehen, ob sie grade sind, ob sie scharf
aussehen, wie der Schliff so ist etc. Alle da und Beschriftung gut lesbar, außer
bei den ganz winzigen, auf denen eh kein Platz ist.&lt;/p&gt;
&lt;p&gt;Alle Bohrer? Nein – da gab es einen rebellischen 5mm Bohrer, dessen
Beschriftung so oberflächlich ausgefallen ist, dass man sie nicht lesen konnte.
Was'n da passiert?  Und ist es auch wirklich ein 5,0mm Bohrer? Also nachmessen
– mit der Mitutoyo Schieblehre, die Ihr in einem der letzten Posts kennen
gelernt habt. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/new-drill-bits/5mm-bit-measurement.jpg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;4.82mm – das ist ein bisschen wenig! Mit ein bisschen Toleranz hatte ich schon
gerechnet, aber fast 0.2mm? Sind die alle so weit weg vom angegebenen
Durchmesser? Also hab ich die anderen 24 auch mal vermessen. Und was soll ich
sagen – alle anderen waren exakt x.0 bzw. x.5mm dick – im Rahmen der
Messgenauigkeit von 0.02mm + Ableseungenauigkeit. &lt;/p&gt;
&lt;p&gt;Also das nervt mich jetzt schon. Gibt's bei Bosch keine Qualitätskontrolle?
Und so hätte ich das Set schon fast wieder zurückgeschickt. Aber hab ich Lust,
einen Retourenschein zu drucken, alles wieder einzupacken, zur Post zu fahren
und das gleiche erneut zu bestellen?? Nein! Ein neuer 5mm Bohrer dieser Serie
kostet 2,99€ und den hab ich dann mitgenommen, als ich eh wegen was anderem in
unseren lokalen Baumarkt musste. Und auch den hab ich vermessen (den neuen
Bohrer, nicht den Baumarkt): 5.0mm. So soll das sein!&lt;/p&gt;</content><category term="DIY &amp; Workshop"/></entry><entry><title>Vergessenes Windows Password</title><link href="https://techbotch.org/blog/Win10-password-recovery/index.html" rel="alternate"/><published>2021-06-05T00:00:00+02:00</published><updated>2021-06-05T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-06-05:/blog/Win10-password-recovery/index.html</id><summary type="html">&lt;p&gt;Gerade haben wir Besuch von einer Freundin, der ich vor einer ganzen Weile mal
ihr Laptop mit Windows 10 eingerichtet hatte – wie es sich gehört mit einem
eingeschränkten Account zum arbeiten und einem separaten Admin Account.
Dummerweise hat sie in der Zwischenzeit das Passwort für letzteren vergessen.
Und so war …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Gerade haben wir Besuch von einer Freundin, der ich vor einer ganzen Weile mal
ihr Laptop mit Windows 10 eingerichtet hatte – wie es sich gehört mit einem
eingeschränkten Account zum arbeiten und einem separaten Admin Account.
Dummerweise hat sie in der Zwischenzeit das Passwort für letzteren vergessen.
Und so war heute der Versuch angesagt, das wieder in Ordnung zu bringen.  Nun
kann man vom eingeschränkten Konto aus nicht einfach das Passwort des Admins
ändern – dazu wäre ein weiterer Admin-Account nötig. Und den haben wir
natürlich nicht.&lt;/p&gt;
&lt;p&gt;Was also tun?&lt;/p&gt;
&lt;h1&gt;Taschenspielertricks&lt;/h1&gt;
&lt;p&gt;Um das in den Griff zu bekommen, können wir einen kleinen Hacker-Trick
anwenden: &lt;/p&gt;
&lt;p&gt;Wir jubeln dem Windows die Shell ("Kommandozeileneingabe" / &lt;code&gt;cmd&lt;/code&gt;) als
Bildschirmtastatur unter, so dass wir vor dem Login Zugriff darauf bekommen und
dann schwarze Magie einsetzen können, um das Passwort neu zu setzten. Naiv
könnte man glauben, dass wir das ja einfach im laufenden Windows System machen
können, aber da wäre man schief gewickelt, denn dafür haben wir mit unserem
eingeschränkten Konto keine Berechtigung.&lt;/p&gt;
&lt;p&gt;Also anders. Ein Weg führt über ein Windows Installationsmedium, ein anderer über 
ein portables LINUX auf einem USB Stick. Und letzteres machen wir nun.&lt;/p&gt;
&lt;h1&gt;Pinguin zu Hilfe&lt;/h1&gt;
&lt;p&gt;Also erstmal ein LINUX ISO besorgen. Ich hab das Desinfect der Ct genommen, aber
es ginge auch genauso eine Debian live-CD oder jedes andere LINUX, das sich vom
USB-Stick starten lässt.&lt;/p&gt;
&lt;p&gt;Erstmal Stick erzeugen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;dd if=desinfect_ct_2021_12.iso of=/dev/sda bs=1M
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Dann den Stick in das Windows Laptop rein und selbigen "Neu starten". Nicht
"Herunterfahren" und dann neu einschalten, denn sonst landet man im Windows
Quick-Boot und kann nicht vom Stick booten. Während er wieder hochfährt dann
ins Boot Menü gehen – beim vorliegenden Lenovo Ideapad geht das mit &lt;code&gt;F12&lt;/code&gt;. Im
Boot Menu wählen wir den USB Stick aus und landen im LINUX System.&lt;/p&gt;
&lt;p&gt;Dann eine Shell öffnen und die Operation kann beginnen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# Windows Disk mounten (hier müsst Ihr das richtige Device finden)
sudo mount /dev/nvme0n1p3 /mnt/

# In den richtigen Ordner wechseln
cd /mnt/Windows/System32/

# osk sichern und die cmd shell als osk unterjubeln
mv osk.exe osk.bak
cp cmd.exe osk.exe

# Fertig – neu starten
reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Diesmal lassen wir den Rechner ganz normal ins Windows booten. Und wenn wir auf
dem Login Screen angekommen sind, wählen wir das &lt;em&gt;Eingabehilfe&lt;/em&gt; Icon und dort
die &lt;em&gt;Bildschirm-Tastatur&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/Win10-password-recovery/Win10-login.png" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/Win10-password-recovery/Eingabehilfe.png" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Und wie von Geisterhand bekommen wir nun eine Shell.  Sehr gut!
In besagter Shell machen wir nun dies:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;net user Admin UnserNeuesPasswort
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun schließen wir die Shell und können uns mit dem soeben festgelegten
Admin-Passwort wieder problemlos einloggen.&lt;/p&gt;
&lt;h1&gt;Aufräumen&lt;/h1&gt;
&lt;p&gt;Nur eines bleibt noch zu tun: Unseren kleinen Hack wieder rückgängig machen,
damit nicht Hinz und Kunz in unsere Admin-Shell reinkommen. Also nicht vergessen!&lt;/p&gt;
&lt;p&gt;Dazu müsst Ihr wieder "Neu starten" und in das LINUX booten. Dort dann:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo mount /dev/nvme0n1p3 /mnt/
cd /mnt/Windows/System32/
mv osk.bak osk.exe
reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Fertig! &lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Server-Notstrom</title><link href="https://techbotch.org/blog/ups-setup/index.html" rel="alternate"/><published>2021-06-03T00:00:00+02:00</published><updated>2021-06-03T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-06-03:/blog/ups-setup/index.html</id><summary type="html">&lt;p&gt;Wenn Ihr meinen Blog schon länger lest, habt Ihr sicher mitgekriegt, dass ich
einen kleinen Heimserver habe, der mir v.a. als Fileserver/NAS und Backup-System
für die Laptops dient. Daneben habe ich meinen Home-Assistant darauf laufen und
denke gerade darüber nach, auch noch ein Dokumenten-Management-System hinzuzufügen.&lt;/p&gt;
&lt;p&gt;Insofern ist normalerweise …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Wenn Ihr meinen Blog schon länger lest, habt Ihr sicher mitgekriegt, dass ich
einen kleinen Heimserver habe, der mir v.a. als Fileserver/NAS und Backup-System
für die Laptops dient. Daneben habe ich meinen Home-Assistant darauf laufen und
denke gerade darüber nach, auch noch ein Dokumenten-Management-System hinzuzufügen.&lt;/p&gt;
&lt;p&gt;Insofern ist normalerweise nicht viel Last auf der Maschine, aber sie ist für
mich schon recht wichtig. Und so habe ich beschlossen, dem Serverchen mal eine
Unterbrechungsfreie Stromversorgung zu spendieren, damit es im Falle eines
Stromausfalls eine Chance hat, sauber herunter zu fahren. Und so habe ich mich
ein wenig umgesehen und mich letztlich für dieses Exemplar entschieden (Bild
von der Seite des Herstellers):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ups-setup/Eaton-Ellipse-Pro.jpg" class= "Small"&gt;&lt;/p&gt;
&lt;p&gt;Das ist eine &lt;a href="http://powerquality.eaton.de/ELP850DIN.aspx"&gt;Eaton Ellipse Pro
850&lt;/a&gt;. Die kostet nicht die Welt
und sollte mehr als genug Kapazität haben, um meinen kleinen Server ca. 20-30
Minuten zu Versorgen, bevor er dann doch ein Shutdown fällig wird. Eine Nummer
kleiner (650) hätte es sicher auch getan, aber der Preisunterschied war so
gering, dass ich mir dachte, ein wenig überdimensioniert schadet auch nicht –
so bleibt der Akku länger brauchbar, auch wenn er irgendwann langsam an Wums
verliert.&lt;/p&gt;
&lt;p&gt;Außer dem Server habe ich nichts dran hängen – Fritzbox, Switch etc. brauchen
keinen Notstrom.&lt;/p&gt;
&lt;p&gt;Das Maschinchen ist erfreulich klein und so passt es im Netzwerkschrank
problemlos neben den Server. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/ups-setup/UPS-and-server.jpg" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Eaton kannte ich bisher noch nicht, aber das Gerät hatte online gute
Rezensionen und ich muss sagen, es fühlt sich gut verarbeitet an und der
Formfaktor ist perfekt für meine Zwecke. Und wie Ihr gleich sehen werdet, wird
das Ding perfekt von LINUX unterstützt.&lt;/p&gt;
&lt;h1&gt;Software&lt;/h1&gt;
&lt;p&gt;Solang der Strom nur ein paar Minuten ausfällt ist die Welt in Ordnung: die UPS
läuft dann im Akku-Betrieb und der Server bekommt garnichts mit, außer, dass
das Netzwerk nicht mehr geht.  Und genau da liegt der Hase im Pfeffer: &lt;em&gt;Der
Server kriegt garnichts mit!&lt;/em&gt; Und wenn der Stromausfall länger dauert, ist das
ein echtes Problem, denn dann soll der Server ja herunterfahren, bevor der
Batterie die Elektronen ausgehen.&lt;/p&gt;
&lt;p&gt;Und deswegen brauchen wir eine Software auf dem Server, die mit der UPS reden kann
und mitbekommt, wenn der Akku zur Neige geht und es an der Zeit ist, die Sitze hoch
zu klappen und das Licht auszuschalten. Oder so ähnlich.&lt;/p&gt;
&lt;p&gt;Für diesen Zweck hat eine UPS eine Schnittstelle, über die man mit ihr reden
kann. Früher typischerweise RS232, heute eher USB. Für Windows gibt's
eigentlich immer eine Software vom Hersteller, unter LINUX sieht die Sache oft
anders aus: da sehen wir uns nach open-source Lösungen um. Erfreulicherweise
sind aber viele Hersteller daran interessiert, dass ihre Geräte mit LINUX
funktionieren und unterstützen entsprechende Projekte durch Specs, Code oder
Hardware. &lt;/p&gt;
&lt;p&gt;Also erstmal das USB-Kabel rein in die UPS und das andere Ende in den Server.
Und schon können wir nachsehen, ob und was erkannt wird:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ lsusb
[...]
Bus 003 Device 002: ID 0463:ffff MGE UPS Systems UPS
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Aha – das sieht doch garnicht schlecht aus – immerhin weiß LINUX, was wir da
vor uns haben. Bleibt die Frage, was für Software wir brauchen. Aber die Frage
ist schnell beantwortet. Eine kurze Recherche ergab, dass es da das &lt;a href="https://networkupstools.org/"&gt;Network
UPS Tools&lt;/a&gt; project (kurz NUT) gibt.  Debian und
andere gängige Distributionen haben das eh im Lieferumfang und so ist es
schnell installiert:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apt install nut
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das System beschert uns Treiber, einen Server-Prozess (&lt;code&gt;usbd&lt;/code&gt;), der permanent
über den Zustand der UPS informiert ist, sowie diverse Tools, um mit dem System
zu interagieren. Verwirrenderweise fangen diese Befehle keineswegs mit &lt;code&gt;nut&lt;/code&gt;
an, sondern mit &lt;code&gt;ups&lt;/code&gt;. Aber das seht ihr gleich.&lt;/p&gt;
&lt;h1&gt;Konfiguration&lt;/h1&gt;
&lt;p&gt;Damit das alles funktioniert müssen wir nun ein bisschen Konfigurations-Arbeit
leisten. Alle config Files finden sich in &lt;code&gt;/etc/nut/&lt;/code&gt;. Als erstes erklären wir
dem System mal, was für ein Gerät wir haben, damit der richtige Treiber
verwendet wird – und dazu fügen wir dies in &lt;code&gt;ups.conf&lt;/code&gt; ein:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[Eaton]
    driver = usbhid-ups
    port = auto
    vendorid = 0463
    pollfreq = 30
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Außerdem sollten wir mal einen Blick in &lt;code&gt;nut.conf&lt;/code&gt; werfen – dort sollte dies stehen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;MODE=standalone
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Denn wir haben ja nur einen Server mit einer UPS – NUT kann nämlich auch viel
komplexere Installationen managen, bei der mehrere Rechner von einer UPS, oder
mehreren versorgt werden und ein Computer mit der UPS redet und im Falle eines
Stromausfalls seine Kollegen warnt, so dass auch diese Clients bescheid wissen.
Aber das brauchen wir heute nicht, also &lt;code&gt;standalone&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Nun ist es an der Zeit, den Daemon zu starten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ upsdrvctl start

Network UPS Tools - UPS driver controller 2.7.4
Network UPS Tools - Generic HID driver 0.41 (2.7.4)
USB communication driver 0.33
Using subdriver: MGE HID 1.39
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Als nächstes prüfen wir mal, ob unsere UPS nun erkannt wurde und ansprechbar ist:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ upsc -l 
Eaton
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Da ist sie ja! Gleich mal nachfragen, was die UPS so zu erzählen hat:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ upsc Eaton
battery.charge: 100
battery.charge.low: 20
battery.runtime: 3328
battery.type: PbAc
device.mfr: EATON
device.model: Ellipse PRO 850 
device.serial: P358M01BMG
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Cool – jede Menge Variablen, die uns Information über die UPS geben. Und die kann
man auch gezielt abfragen.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ upsc Eaton battery.charge
100
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also 100% Akkuladung. Oder&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ upsc Eaton ups.load
9
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also 9% der Maximal-Last. Und wenn wir wissen wollen, wie lange die UPS den
Server mit Akku-Power maximal über Wasser halten kann:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ upsc Eaton battery.runtime
3328
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;3328s = 55.5 Minuten. Nicht übel, aber ausreizen solle man das sicher nicht...&lt;/p&gt;
&lt;h1&gt;Automatische Überwachung&lt;/h1&gt;
&lt;p&gt;Das ist ja alles schön und gut, aber was noch fehlt ist das wichtigste: Der
automatische Shutdown. Um den kümmert sich das tool &lt;code&gt;upsmon&lt;/code&gt;. Dazu müssen wir erstmal einen
user anlegen – also diesen Eintrag in &lt;code&gt;upsd.users&lt;/code&gt; hinzufügen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[upsmon]
    password = GarbleGrr980234234
    actions = SET
    instcmds = ALL
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun werfen wir noch einen Blick in&lt;code&gt;upsmon.conf&lt;/code&gt;. In der Version, die bei meinem
Debian mitkam war schon vieles richtig vorkonfiguriert, aber 
v.a. das MONITOR statement muss man selbst anpassen/erstellen.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;MONITOR Eaton@localhost 1 upsmon GarbleGrr980234234 slave
MINSUPPLIES 1
SHUTDOWNCMD &amp;quot;/sbin/shutdown -h +0&amp;quot;
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nun ist ein guter Zeitpunkt, den daemon neu zu starten, damit er unsere config auch
verwendet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl restart nut-server.service
systemctl restart nut-monitor.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h1&gt;Fine tuning&lt;/h1&gt;
&lt;p&gt;Damit ist das Ganze im Grunde einsatzbereit. Aber wie läuft das nun ab, wenn der 
Strom ausfällt? Und wann fährt der Server dann runter?&lt;/p&gt;
&lt;p&gt;Die ausführliche Antwort ist
&lt;a href="https://networkupstools.org/docs/user-manual.chunked/ar01s06.html#UPS_shutdown"&gt;hier&lt;/a&gt;
zu finden – aber die Kurzfassung sieht so aus:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Alles normal (&lt;code&gt;ups.status: OL&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Strom fällt aus&lt;/li&gt;
&lt;li&gt;UPS schaltet auf Batteriebetrieb (&lt;code&gt;ups.status: OB&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Irgendwann wird der Akku leer (&lt;code&gt;ups.status: OB LB&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;upsmon&lt;/code&gt; leitet den shutdown ein&lt;/li&gt;
&lt;li&gt;Die UPS dreht den Strom ab und fährt sich auch selbst runter&lt;/li&gt;
&lt;li&gt;Irgendwann kommt der Strom wieder und die UPS und Server starten wieder&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Wann genau &lt;em&gt;Battery low&lt;/em&gt; erreicht wird sieht man hier:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ upsc Eaton battery.charge.low
20
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also bei 20%. Aber was, wenn ich feige bin, oder der Server hundert Jahre für
den Shutdown braucht? Dann will ich vielleicht schon bei 30% den shutdown.
Kein Problem – dann stellen wir das in der UPS so ein: &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ upsrw -s battery.charge.low=30 -u upsmon -p GarbleGrr980234234 Eaton
OK

$  upsc Eaton battery.charge.low
30
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hat geklappt – sehr schön.&lt;/p&gt;
&lt;h1&gt;Stunde der Wahrheit&lt;/h1&gt;
&lt;p&gt;Zeit das alles auszuprobieren!&lt;/p&gt;
&lt;p&gt;Stecker an der UPS ziehen. Sofort springt der Lüfter an und sie fängt an zu
piepsen. Der Server läuft brav weiter und wir können auch am Status sehen,
dass wir nun auf Battery-Power laufen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ upsc eaton ups.status
OB
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Zudem bekommen eingeloggte user auf ihrem Terminal diese Message:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Broadcast message from nut@hal (somewhere) (Thu Jun  3 16:31:16 2021):

UPS Eaton@localhost on battery
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das Piepsen nervt, also stellen wir das mal ab:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;upscmd -u upsmon -p GarbleGrr980234234 eaton beeper.mute
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Besser! &lt;/p&gt;
&lt;p&gt;Als nächstes schauen wir mal, wie es um die Batterie steht und was der
Battery-Low level ist:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@hal:~# upsc eaton battery.charge
48
root@hal:~# upsc eaton battery.charge.low
30
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also haben wir noch 48% Batterie und bei 30% geht's in den shutdown. Um das zu
beschleunigen, setzen wir den Battery-Low Cutoff mal höher:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;upsrw -s battery.charge.low=45 -u upsmon -p GarbleGrr980234234 eaton
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und schon geht das System zum Shutdown über:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Broadcast message from nut@hal (somewhere) (Thu Jun  3 16:38:01 2021):

UPS Eaton@localhost battery is low

Broadcast message from nut@hal (somewhere) (Thu Jun  3 16:38:21 2021):

Auto logout and shutdown proceeding

Connection to hal closed by remote host.
Connection to hal closed.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Cool – ich glaube, das war ein guter Kauf.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Messschieber</title><link href="https://techbotch.org/blog/vernier-calipers/index.html" rel="alternate"/><published>2021-05-24T00:00:00+02:00</published><updated>2021-05-24T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-05-24:/blog/vernier-calipers/index.html</id><summary type="html">&lt;p&gt;Manchmal will ich kleines Zeug vermessen – Schrauben, Dichtungen, Löcher in
irgendwas, die Fortpflanzungsorgane von SUV-Fahrern, Blech, Draht, etc. Solange
sich die Dimensionen im Zentimeterbereich abspielen ist ein Lineal das Mittel
der Wahl, aber darunter geht es oft nicht mehr um plus/minus ein Millimeter,
sondern eher Zehntelmillimeter. Und da wird …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Manchmal will ich kleines Zeug vermessen – Schrauben, Dichtungen, Löcher in
irgendwas, die Fortpflanzungsorgane von SUV-Fahrern, Blech, Draht, etc. Solange
sich die Dimensionen im Zentimeterbereich abspielen ist ein Lineal das Mittel
der Wahl, aber darunter geht es oft nicht mehr um plus/minus ein Millimeter,
sondern eher Zehntelmillimeter. Und da wird anderes Werkzeug nötig.
Typischerweise eine Schieblehre, auch Messschieber genannt. Damit kann man
Innen- und Außenmaße kleiner Objekte leicht vermessen.&lt;/p&gt;
&lt;p&gt;Heutzutage sind vor allem digitale Messschieber beliebt – sie sind leicht abzulesen
und schon für 10 bis 20€ zu haben. Natürlich sind das dann keine Markengeräte mit
Prüfzertifikat, aber sie funktionieren ziemlich gut und sind super simpel in der 
Bedienung. Auch ich habe zwei davon herumliegen und mag sie im Grunde ganz gern. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vernier-calipers/digital-calipers.jpg" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht, stammt dieser vom renomierten Messgerätebauer Tchibo. Aber er misst,
soweit ich das beurteilen kann, ganz vernünftig und reproduzierbar.&lt;/p&gt;
&lt;p&gt;Heute haben viele Modelle eine Datenschnittstelle zum Auslesen von Messwerten
und das kann vermutlich praktisch sein. Meine digitalen Schieber sind schon
ziemlich alt und haben das nicht. Wobei – wenn man das Batteriefach öffnet, und
genau hinschaut, dann kann man vier Kontakte durchscheinen sehen, wo bei
neueren Modellen die Schnittstelle lokalisiert ist. Vermutlich haben die
"besseren" Modelle einfach eine entfernbare Abdeckung und meins nicht, aber ich
hab's auch noch nie vermisst.&lt;/p&gt;
&lt;h1&gt;Blackout&lt;/h1&gt;
&lt;p&gt;Was aber mächtig nervt, ist die Tatsache, dass die Teile immer dann, wenn der
Gelegenheitsnutzer, wie ich es nunmal bin, etwas damit messen möchte, die blöde
Batterie leer ist. Zuerst dachte ich, es liegt daran, dass der Messschieber in
der Plastikschachtel versehentlich eingeschaltet wird, weil der Schaumstoff im
Deckel auf den on/off Knopf drückt. Also habe ich den Schaumstoff mit einem
Skalpell etwas ausgeschnitten und dachte nun wäre alles gut:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vernier-calipers/digital-calipers2.jpg" class= "Large"&gt;&lt;/p&gt;
&lt;p&gt;Falsch gedacht. Beim nächsten mal das gleiche Spiel: Messschieber geht nicht,
LR44 Batterie suchen, keine finden, losfahren, eine kaufen, einsetzen, geht
wieder, messen – das nervt!&lt;/p&gt;
&lt;p&gt;Aber woran liegt das? Nun – das Ding hat keinen richtigen ein/aus Schalter,
sondern einen kleinen Drucktaster. Das bedeutet, dass es niemals völlig
stromlos ist, sondern zumindest im Standby-Modus abwartet, ob besagter Taster
gedrückt wird, um dann in den "An" Modus zu wechseln. D.h. das Gerät zieht auch
dann Strom, wenn es eigentlich aus ist. Nun kann sowas sehr lange gut gehen,
wenn der eingesetzte Microcontroller einen super-duper Stromsparmodus hat und
die Firmware diesen auch nutzt. Nun weiß ich nicht, welcher µController in
meiner Schieblehre steckt und wie sparsam man den schalten kann, aber das
Resultat ist unbefriedigend. Online findet man Leute, die sich das genauer
angesehen haben und behaupten, dass diese billigen Messschieber eigentlich nur
das Display abschalten und ansonsten normal weiterlaufen und es so kein Wunder
ist, dass sie Batterien fressen.&lt;/p&gt;
&lt;h1&gt;Abhilfe?&lt;/h1&gt;
&lt;p&gt;Was also tun? So prinzipiell sehe ich mehrere Möglichkeiten, das Problem anzugehen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Batterien nach Benutzung entnehmen&lt;/li&gt;
&lt;li&gt;Stromkreis unterbrechen&lt;/li&gt;
&lt;li&gt;Größere Batterien verwenden&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lösung 1 ist mir zu lästig. Ja ich weiß – es ist nur ein Handgriff, aber ich
weiß genau, dass ich das nicht zuverlässig tun werde.&lt;/p&gt;
&lt;p&gt;Ansatz 2 klingt attraktiv. Im Netz finden sich diverse Bastelprojekte in denen
ein kleiner Schiebeschalter o.Ä.  installiert wurde. Leider ist im Gehäuse der
Messschieber echt kein Platz mehr für sowas und die entsprechenden Lösungen
bestehen dann darin, den Schalter irgendwie extern anzubringen – meist mit einem
Blob Heißkleber oder sowas am Gehäuse befestigt. Das funktioniert und sieht
erwartungsgemäß super scheiße aus. Und so richtig haltbar wirkt das auch nicht...&lt;/p&gt;
&lt;p&gt;Bleibt Lösung 3: auch das findet sich vielfach im Netz und wird als tolle
Lösung beworben, wenn jemand einen Batteriehalter für zwei AAA Batterien an
seinen Messchieber angepappt und verkabelt hat. Muss ich darauf hinweisen, dass
das Resultat die Eleganz und Handlichkeit eines Wandschranks hat? Also auch
keine Option.&lt;/p&gt;
&lt;p&gt;Einen kleinen Lichtblick gibt es aber: größere Batterien müssen nicht unbedingt
größer sein. Nämlich dann, wenn es Alternativen mit höherer Kapazität bei
gleicher Bauform gibt. Das Zauberwort heißt "Silberoxidzelle" – also SR44 statt
LR44! Die haben mehr Strom drin und halten länger. Die Spannung ist nicht exakt
gleich, aber ich denke, der Unterschied zwischen 1.5V (LR44) und 1.55V (SR44)
sollte nicht ins Gewicht fallen. Und so habe ich gerade die leere LR44 Batterie
durch so eine SR44 ersetzt. Mal sehen, wieviel das in der Praxis bringt.&lt;/p&gt;
&lt;h1&gt;Analogisierung&lt;/h1&gt;
&lt;p&gt;Aber wenn ich ganz ehrlich bin, weiß ich schon, wie das ausgeht: Ich ärgere mich
etwas seltener, aber eben doch regelmäßig. Nun wäre eine Möglichkeit, die
Billigdinger zu verschenken und mir ein Gerät eines namhaften Markenherstellers
zuzulegen. Z.B. einen Mitutoyo 500-181-30. Leider hat der aber einen
Listenpreis von 112,00€  und kostet selbst als Sonderaktion noch 83€. Nee –
ganz ehrlich: das ist bestimmt die richtige Wahl, wenn wenn Du das beruflich
machst und jeden Tag in die Hand nimmst, aber mir ist das deutlich zu teuer!&lt;/p&gt;
&lt;p&gt;Also zum letzten Weg aus der Misere: Analogisierung! Digitale Anzeigen sind ja
nett, aber ich wäre eigentlich auch völlig zufrieden, wenn ich das ganz
altmodisch auf einer Skala ablesen muss. Und als Mitglied der Generation, die noch ohne 
Handy aufgewachsen ist weiß ich, dass der Messschieber kein Produkt der modernen
Digitaltechnik ist, sondern ganz analoge und batteriefreie Messschieber schon ewig
existieren.&lt;/p&gt;
&lt;p&gt;Und so habe ich dann doch einen Mitutoyo bestellt – einen analogen mit
Nonius-Skala. Der war für gut 30€ zu haben und wenn es nicht der Japaner sein
muss bekommt man sowas auch schon für 10-20 Taler. Hier meine beiden Schätzchen
– oben ein uralter Messchieber unbekannter Provenience und darunter der Neue
vom Japaner:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vernier-calipers/analog-calipers.jpg" class= "Large"&gt;&lt;/p&gt;
&lt;h1&gt;WTF ist eine Nonius-Skala?&lt;/h1&gt;
&lt;p&gt;Schön, dass ihr fragt, denn die Nonius-Skala gehört zu den Dingen, die mich schon 
immer fasziniert haben, weil sie einfach eine geniale Erfindung ist! Überhaupt 
bin ich ein großer Fan von alter Messtechnik, denn es ist unglaublich, was man
in puncto Präzision erreichen kann, ganz ohne Elektronik, Laser oder Computer.&lt;/p&gt;
&lt;p&gt;Und das funktioniert so: zunächst mal braucht man eine Technik, um eine
vorgegebene Strecke in viele gleich große Segmente zu unterteilen. Und das kann
die Menschheit schon ziemlich lang und wer es nicht komplett verdrängt hat,
wird sich vielleicht erinnern, mal im Geometrie-Unterricht gelernt zu haben,
wie man mit einem Zirkel eine Strecke halbiert. Und schlaue Leute haben Wege erdacht,
auch andere Teilungen zu konstruieren. Und so konnten schon früh ziemlich genaue
Lineale hergestellt werden mit denen man millimetergenau messen kann. &lt;/p&gt;
&lt;p&gt;Nun könnte man auf die Idee kommen einfach ein Lineal zu bauen, das eben auch
für Zehntelmillimeter entsprechende Striche hat. Aber das würde nicht wirklich
funktionieren, denn beim Ablesen würde unser Auge einfach nicht mehr mitmachen.
Viel zu viele Striche auf engem Raum, alles sehr unübersichtlich und schwer
mitzuzählen...  Unsere optische Auflösung für sowas liegt so bei 0.5mm.&lt;/p&gt;
&lt;p&gt;Ein gewisser &lt;em&gt;Pedro Nunes&lt;/em&gt; (latinisiert &lt;em&gt;Petrus Nonius&lt;/em&gt;) kam im 16. Jahrhundert
auf eine bahnbrechende Idee, die dann 1631 von &lt;em&gt;Pierre Vernier&lt;/em&gt; aufgegriffen
und vereinfacht wurde. Und so heißt es bei uns "Nonius-Skala" und im Englischen
"Vernier scale". Aber was ist nun diese Idee?&lt;/p&gt;
&lt;p&gt;Während wir, wie oben erwähnt, Probleme haben, superfeine Skalen abzulesen,
sind wir recht gut darin, die Übereinstimmung von Linien zu prüfen/vergleichen.
Wenn wir also die abzulesende Skala irgendwie entzerren könnten und dann
prüfen, welche Striche am besten zueinander ausgerichtet sind, dann wäre das
viel genauer. Und genau das tut eine Nonius-Skala. &lt;/p&gt;
&lt;p&gt;Aber zuerst schauen wir mal, wie man einen simplen Messchieber abliest:
Selbiger hat einen Teil, der eine Millimeterskala trägt und einen gegenüber der
Skala verschieblichen Teil mit einer Linie zum Ablesen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vernier-calipers/scales.svg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und nun kommt der Trick: Wenn wir nun statt eines einzelnen Ablesestrichs eine
Nonius-Skala anbringen, dann können wir genauer ablesen. Dazu nehmen wir z.B.
eine Strecke von 9mm und unterteilen diese in 10 Teile a 0.9mm:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vernier-calipers/Nonius0.svg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Ist der Messchieber geschlossen, steht also der "nullte" Strich der
Nonius-Skala auf 0.0mm der zehnte auf 9.0mm und übrigen 9 Striche sind mit
keinem der Striche auf der Linealskala so richtig ausgerichtet.  Da wir die 9mm
in 10 gleiche Abschnitte geteilt haben, befindet sich der erste Stich nun an
Position 0.9mm – d.h. es fehlen 0.1mm zur Übereinstimmung. Beim nächsten Strich
sind es analog 1.8mm und es fehlen 0.2mm und so weiter. Das bedeutet aber
auch, dass eine Verschiebung um 0.1mm dazu führt, dass der erste Nonius-Strich
perfekt auf die 1mm Linie ausgerichtet ist:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vernier-calipers/Nonius1.svg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und wenn wir einen weiteren Zehntel-Millimeter
weiter gehen, ist plötzlich der zweite Nonius-Strich auf die 2mm Linie
ausgerichtet ist: &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vernier-calipers/Nonius2.svg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;0.3mm:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vernier-calipers/Nonius3.svg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;und 1.0mm:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vernier-calipers/Nonius10.svg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Aber natürlich ist das nicht auf den ersten Millimeter beschränkt – hier 12.3mm:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/vernier-calipers/Nonius123.svg" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Und damit es leichter ist, verwendet man normalerweise nicht 9mm, wie in
meiner Erklärung, sondern z.B. 19mm, oder 49mm – das kann man dann sehr gut mit bloßem
Auge ablesen – sogar am Bildschirm kann man es gut erkennen und in der echten
Welt ist es nochmal einfacher. In der Praxis geht noch mehr und so hat mein
neuer Messchieber eine Auflösung von 0.02mm plus meine Ableseungenauigkeit, die
in etwa in der gleichen Größenordnung liegt. In Summe kann das geübte Auge also
mit so einem Instrument auf ca. 0.04mm genau messen und der billige, den ich
in der Werkstatt liegen habe, kommt immerhin auch auf 0.1mm Auflösung.&lt;/p&gt;
&lt;p&gt;Ist das nicht toll!?!&lt;/p&gt;
&lt;p&gt;Und vor allem: nie wieder über leere Batterien ärgern!&lt;/p&gt;</content><category term="DIY &amp; Workshop"/></entry><entry><title>Kühlschranküberwachung</title><link href="https://techbotch.org/blog/frdge-alarm/index.html" rel="alternate"/><published>2021-05-16T00:00:00+02:00</published><updated>2021-05-16T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-05-16:/blog/frdge-alarm/index.html</id><summary type="html">&lt;p&gt;Meine Frau ist Kinderärztin und hat in ihrer Praxis diverse Medikamente, wie
z.B. Impfstoffe vorrätig – die müssen bei ca. 2-8°C gelagert werden und da ist
es wichtig, die Kühlschränke regelmäßig zu kontrollieren, damit keiner
unbemerkt ausfällt.  Und so sind diese mit Thermometern ausgestattet, die
täglich abgelesen und protokolliert …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Meine Frau ist Kinderärztin und hat in ihrer Praxis diverse Medikamente, wie
z.B. Impfstoffe vorrätig – die müssen bei ca. 2-8°C gelagert werden und da ist
es wichtig, die Kühlschränke regelmäßig zu kontrollieren, damit keiner
unbemerkt ausfällt.  Und so sind diese mit Thermometern ausgestattet, die
täglich abgelesen und protokolliert werden. Das ist lästig und hilft natürlich
auch nicht, wenn mal am Wochenende was schiefgehen sollte. &lt;/p&gt;
&lt;h1&gt;Das geht doch auch automatisch!&lt;/h1&gt;
&lt;p&gt;Und so kam der Wunsch nach einer automatischen Kühlschranküberwachung auf.
Sowas gibt's kommerziell – z.B. von Liebherr, die auch Medikamentenkühlschränke
herstellen. Allerdings haben diese Systeme auch medizinische Preise und da
dachte ich mir: Das kann man doch selbst bauen!&lt;/p&gt;
&lt;p&gt;Also kurz nachgedacht, ein bisschen im Netz recherchiert und schon hatte ich einen Plan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Als Sensor nehmen wir einen ZigBee Temperatur/Luftfeuchtesensor, wie z.B. den
  von &lt;a
  href="https://www.aqara.com/us/temperature_humidity_sensor.html"&gt;Aquara&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Um mit dem Sensor reden zu können, brauchen wir ein ZigBee Gateway. Die Wahl
  fiel auf den &lt;a href="https://phoscon.de/en/conbee2"&gt; Conbee 2&lt;/a&gt; von
  Phoscon bzw. Dresden Elektronik.&lt;/li&gt;
&lt;li&gt;Zuguterletzt brauchen wir noch einen Computer. Ein Raspberry PI wäre eine
  gute Möglichkeit, aber ich hatte noch einen alten Thin Client rumliegen (HP
  T610) und so hab ich den genommen.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Als erstes mal ein Debian netinst image besorgen und installieren. &lt;/p&gt;
&lt;h1&gt;deCONZ&lt;/h1&gt;
&lt;p&gt;Als nächstes brauchen wir Software/Treiber für den Conbee 2. Die vom Hersteller
heißt &lt;a href="https://www.phoscon.de/en/conbee2/software#deconz"&gt;deCONZ&lt;/a&gt;
und es gibt sogar ein ein deb Repository, so dass sie leicht zu installieren
ist.  Und auch eine &lt;code&gt;systemd&lt;/code&gt; Integration kommt mit.  Allerdings bietet deCONZ
keine eigene Möglichkeit, Daten zu loggen, oder einen Alarm zu konfigurieren.
D.h. wir brauchen zusätzlich Homeassistant (oder etwas ähnliches), um diese
Funktionen zu realisieren. Homeassistant hat eine deCONZ Integration, aber es geht auch 
ohne. Und deshalb sparen wir uns ein Element in der Software-Kette und installieren
deCONZ nicht.&lt;/p&gt;
&lt;h1&gt;Homeassistant&lt;/h1&gt;
&lt;p&gt;Homeassistant bietet alle Funktionen, die mir so vorschweben. Um die Sache
möglichst einfach und gut wartbar zu halten verwende ich das Docker-Image.&lt;/p&gt;
&lt;p&gt;Erstmal Docker installieren:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo apt install docker.io docker-compose
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;... ein &lt;code&gt;docker-compose.yml&lt;/code&gt; file für den Homeassistant bauen&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;version: &amp;#39;3&amp;#39;
services:
    homeassistant:
        container_name: home-assistant
        image: homeassistant/home-assistant:stable
        volumes:
            - ~/.config/homeassistant:/config
        devices:
            - /dev/ttyACM0:/dev/ttyACM0
        environment:
            - TZ=Europe/Berlin
        restart: always
        network_mode: host
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Der Conbee 2 wird auf meinem Rechner als &lt;code&gt;/dev/ttyACM0&lt;/code&gt; eingebunden. D.h. wir
müssen zum einen sicherstellen, dass unser user auch die nötigen permissions
hat (&lt;code&gt;sudo gpasswd -a phil dialout&lt;/code&gt;) und das device im Container eingebunden
wird (s.o.).&lt;/p&gt;
&lt;p&gt;Nun können wir das Ganze starten:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;docker-compose up
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Auf Port 8123 des Thinclients findet sich nun der Homeassistant.&lt;/p&gt;
&lt;p&gt;Dort unter &lt;code&gt;Configuration &amp;gt; Integrations &amp;gt; Add Integration&lt;/code&gt; nach "Zigbee" suchen
und die Integration "Zigbee Home Automation" installieren und im nächsten Dialog
das richtige Device (&lt;code&gt;/dev/ttyACM0 – ConBee II, ...&lt;/code&gt; auswählen und schon haben wir
ihn:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/frdge-alarm/Conbee-integration.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Um den Sensor zu verbinden müssen wir nun auf "1 device" gehen und dort auf den
einzigen Eintrag "Zigbee coordinator". &lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/frdge-alarm/Conbee-device-info.png" class= "Small"&gt;&lt;/p&gt;
&lt;p&gt;Hier nun "Add devices via this device".  Nun müssen wir den kleinen Knopf am
Sensor ein paar Sekunden gedrückt halten, bis die LED dreimal blinkt. Dadurch
schaltet er in den Pairing Mode und verbindet sich auch unmittelbar mit unserem
Conbee:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/frdge-alarm/LUMI-device.png" class= "Small"&gt;&lt;/p&gt;
&lt;p&gt;Noch den Sensornamen editieren, damit er netter aussieht, das Ganze ins
Dashboard integrieren und wir haben eine Temperaturanzeige:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/frdge-alarm/hass-dashboard.png" class= "Medium"&gt;&lt;/p&gt;
&lt;p&gt;Sehr schön!&lt;/p&gt;
&lt;p&gt;Beim Einrichten des Dashboard haben wir auch herausgefunden, dass der
Temperatursensor &lt;code&gt;sensor.lumi_lumi_weather_753be063_temperature&lt;/code&gt; heißt und der
Batterie-level &lt;code&gt;sensor.lumi_lumi_weather_753be063_power&lt;/code&gt;.  Das merken wir uns,
weil wir es gleich benötigen.&lt;/p&gt;
&lt;h1&gt;Big brother&lt;/h1&gt;
&lt;p&gt;Nun fehlt noch die automatische Überwachung, denn es wäre doch ideal, wenn man
automatisch eine Email bekäme, sobald die Temperatur aus dem Sollbereich geht.
Und ein Battery-low Alarm wäre ebenfalls schön. Dazu brauchen wir mehrere
Mechanismen, die Homeassistant zur Verfügung stellt.&lt;/p&gt;
&lt;p&gt;Wie im docker-compose File konfiguriert, exportiert der Docker Container seinen
config folder unter &lt;code&gt;.config/homeassistant/&lt;/code&gt; und dort spielt sich das Folgende
ab.&lt;/p&gt;
&lt;p&gt;Als erstes konfigurieren wir eine email notification. Und dazu schreiben wir dieses
&lt;code&gt;notifications.yaml&lt;/code&gt; file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;- name: email_alert
  platform: smtp
  server: smtp.yourprovider.com
  port: 587
  timeout: 15
  sender_name: &amp;quot;Kuehlschrankueberwachung&amp;quot;
  sender: !secret smtp_user
  encryption: starttls
  username: !secret smtp_user
  password: !secret smtp_pass
  recipient:
    - yourname@yourprovider.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und wenn Ihr Euch viel Frust sparen wollt, dann verwendet Ihr im &lt;code&gt;sender_name&lt;/code&gt;
keine Umlaute oder sowas – das Problem zu debuggen hat mich Stunden gekostet...&lt;/p&gt;
&lt;p&gt;Den SMTP User und Passwort haben wir hier in die Datei &lt;code&gt;secrets.yaml&lt;/code&gt; ausgelagert:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;smtp_user: fridge@yourprovider.com
smtp_pass: ajfdsoi23h;oih;oicjw90213    # or whatever your password is.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Die Notification könnt Ihr im User-Interface testen: Unter &lt;code&gt;Developer
Tools/Services&lt;/code&gt; wählt Ihr &lt;code&gt;notify.email_alert&lt;/code&gt; aus und drückt mal auf &lt;code&gt;Call
Service&lt;/code&gt;. Wenn alles korrekt ist, solltet Ihr nun eine Email bekommen.&lt;/p&gt;
&lt;p&gt;Um nun einen Temperatur-Alarm zu bekommen, brauchen wir noch einen &lt;code&gt;binary_sensor&lt;/code&gt;, 
dessen Status von der Temperatur abhängt und einen &lt;code&gt;alert&lt;/code&gt;, der von diesem Sensor ausgelöst wird
und den &lt;code&gt;email_alert&lt;/code&gt; verwendet. All das kommt in &lt;code&gt;configuration.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;binary_sensor:
  - platform: template
    sensors:
      fridge_temp:
        value_template: &amp;quot;{{ not ( 2.0 &amp;lt;= states(&amp;#39;sensor.lumi_lumi_weather_753be063_temperature&amp;#39;)|float &amp;lt;= 8.0 ) }}&amp;quot; 
      fridge_battery:
        value_template: &amp;quot;{{ states(&amp;#39;sensor.lumi_lumi_weather_753be063_power&amp;#39;)|float &amp;lt; 30 }}&amp;quot;

alert:
  fridge_temp:
    name: &amp;quot;Kühlschrank-Alarm&amp;quot;
    entity_id: binary_sensor.fridge_temp
    repeat:
      - 15
      - 30
      - 60
    skip_first: false
    title: &amp;quot;Temperatur-Alarm&amp;quot;
    message: &amp;quot;Kühlschrank-Alarm!\n\nMedikamentenkühlschrank: {{ states(&amp;#39;sensor.lumi_lumi_weather_753be063_temperature&amp;#39;) }} C.&amp;quot;
    done_message: &amp;quot;Kühlschrank wieder im Normbereich.\n\nMedikamentenkühlschrank: {{ states(sensor.lumi_lumi_weather_753be063_temperature&amp;#39;&amp;#39;) }} C.&amp;quot;
    notifiers:
      - email_alert
 fridge_battery:
    name: &amp;quot;Batterie-Alarm&amp;quot;
    entity_id: binary_sensor.fridge_battery
    repeat:
      - 1440
    skip_first: false
    title: &amp;quot;Batterie-Alarm&amp;quot;
    message: &amp;quot;Batterie-Alarm!\n\nMedikamentenkühlschrank: Batterie {{ states(&amp;#39;sensor.lumi_lumi_weather_753be063_power&amp;#39;) }} %.&amp;quot;
    notifiers:
      - email_alert
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Den Temperatur-Alarm bekommen wir also sobald der Sollbereich verlassen wird
und dann erneut nach 15 Minuten, dann nach weiteren 30 Minuten und dann alle 60
Minuten. Und wenn wieder alles in Ordnung ist gibt's Entwarnung.&lt;/p&gt;
&lt;p&gt;Für den Batterie-Alarm reicht eine Benachrichtigung pro Tag und wir brauchen auch
keine Entwarnung.&lt;/p&gt;
&lt;p&gt;Außerdem müssen wir noch sicherstellen, dass unsere notification auch eingebunden wird. 
Dazu diese Zeile in das &lt;code&gt;configuration.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;notify: !include notifications.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mit den Sensoren für die anderen Kühlschränke können wir nun analog verfahren.&lt;/p&gt;
&lt;h1&gt;Backup&lt;/h1&gt;
&lt;p&gt;Soweit funktioniert nun alles und da wäre es schade, wenn uns die Ganze Mühe verloren ginge,
wenn der Thinclient abraucht oder ähnliches. Also basteln wir noch schnell ein kleines &lt;/p&gt;
&lt;p&gt;Skript, das die ganze Konfiguration in ein TAR Archiv verpackt, so dass wir diese leicht
aufbewahren können, falls irgendwann man eine Neuinstallation ansteht:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;#!/bin/sh
apt-mark showmanual &amp;gt; manual-packages.txt
sudo tar -czf backup.tgz \
    backup.sh \
    docker-compose.yml \
    .config/homeassistant/ \
    .ssh/ \
    /etc/ssh/sshd_config \
    /etc/apt/sources.list \
    manual-packages.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Und passt das alles nun problemlos auf den alten Thinclient? Ja - problemlos:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ df -h /dev/sda*
Filesystem      Size  Used Avail Use% Mounted on
udev            1.7G     0  1.7G   0% /dev
/dev/sda1       511M  5.2M  506M   2% /boot/efi
/dev/sda2        14G  4.6G  8.0G  37% /
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Das ist halt ein ein Minimalsystem, ohne grafische Oberfläche und so Gedöns...&lt;/p&gt;
&lt;h1&gt;Fertig?&lt;/h1&gt;
&lt;p&gt;Im Grunde bin ich nun zufrieden, aber es gibt noch zwei Dinge, die ich auf die
Dauer nachrüsten will:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Einen Wochenreport, der den Temperaturverlauf der vergangenen Woche
   darstellt, damit man zeigen kann, dass der Kühlschrank die ganze Zeit ok war.&lt;/li&gt;
&lt;li&gt;Ein GSM-Modem, damit im Falle eines Stromausfalls noch ein
   Notruf abgesetzt werden kann. Dazu braucht es dann entweder eine USV, oder
   ich ziehe das Ganze auf ein altes Laptop um – das hat die Batterie schon inklusive.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Aber für heute sind wir erstmal fertig.&lt;/p&gt;</content><category term="Computer &amp; Electronics"/></entry><entry><title>Nistkasteneinfluglochadapter</title><link href="https://techbotch.org/blog/nistkasteneinfluglochadapter/index.html" rel="alternate"/><published>2021-04-24T00:00:00+02:00</published><updated>2021-04-24T00:00:00+02:00</updated><author><name>Phil</name></author><id>tag:techbotch.org,2021-04-24:/blog/nistkasteneinfluglochadapter/index.html</id><summary type="html">&lt;p&gt;Frühlingszeit, Vogelbrutzeit! D.h. überall zwitschert es und gefiederte Tiere
bekommen den Drang, sich zu paaren und dann geeignete Orte zur Eiablage zu
finden. Und die Biester sind anspruchsvoll! Die brüten nicht einfach irgendwo,
sondern haben sehr genaue Vorstellungen über Größe, Höhe und Geometrie des
Nistplatzes. Sogar der Durchmesser des …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Frühlingszeit, Vogelbrutzeit! D.h. überall zwitschert es und gefiederte Tiere
bekommen den Drang, sich zu paaren und dann geeignete Orte zur Eiablage zu
finden. Und die Biester sind anspruchsvoll! Die brüten nicht einfach irgendwo,
sondern haben sehr genaue Vorstellungen über Größe, Höhe und Geometrie des
Nistplatzes. Sogar der Durchmesser des Einfluglochs spielt eine Rolle – so
bevorzugt die Blaumeise Löcher von 26-28mm, während eine Kohlmeise nur
einzieht, wenn die Haustür 32-34mm misst. Und da wundert man sich über das
Vogelsterben, wenn die Viecher so wählerisch sind...&lt;/p&gt;
&lt;h1&gt;Wir bauen ein Vogelheim&lt;/h1&gt;
&lt;p&gt;Und so helfen Vogelliebhaber landauf, landab, dass diese heiklen Wesen
geeignete Plätze finden und bauen fleißig Nistkästen. Der Bund Naturschutz hat
sogar eine längliche &lt;a
href="http://www.bund-rvso.de/downloads/nistkastengroesse.pdf"&gt;Tabelle&lt;/a&gt; im
Angebot, aus der man die gewünschten Bedingungen nach Vogelart ablesen kann.&lt;/p&gt;
&lt;p&gt;Nun ist ein Nistkasten kein anspruchsvolles Projekt und stellt in der Tat oft
das Einstiegsprojekt für angehende Jungheimwerker dar. Ein paar Brettchen, eine
Säge und ein paar Nägel oder Schrauben und schon ist die Konstruktion
bezugsfertig. Doch wer die Bedürfnisse der gefiederten Mieter ernst nimmt kommt
schließlich an den Punkt an dem das Einflugloch gebohrt wird und stellt dann
indigniert fest, dass kein 32mm Forstnerbohrer im Haus ist und auch das
Lochsägeset die von Vögeln favorisierten schrägen Maße ohne Vorwarnung
auslässt!&lt;/p&gt;
&lt;h1&gt;Moderne Probleme erfordern moderne Lösungen!&lt;/h1&gt;
&lt;p&gt;Aber einen echten Maker schreckt das nicht, denn wozu besitzt man denn den
3D-Drucker!?! Und schon haben wir einen guten Plan: Das Loch wird in einem
übergroßen Standardmaß gebohrt – z.B 35, 40 der 50mm. Und dann kommt ein
Adapterring rein, der genau den gewünschten Innendurchmesser hat. Perfekt! Und
so kann ich exakt die Wünsche der Blaumeise umsetzen und falls diese die Miete
nicht pünktlich zahlt, oder Plastik in die Biomülltonne stopft, dann ändere ich
im nächsten Jahr den Durchmesser auf Gartenrotschwanz und hoffe, dass der ein
besserer Mieter ist.&lt;/p&gt;
&lt;p&gt;Also frisch ans Werk und einen Einfluglochadapter konstruieren! Ich nehme für
sowas gerne &lt;a href="https://openscad.org/"&gt;Openscad&lt;/a&gt; – das ist kein
interaktives CAD-Programm, sondern eine simple Programmiersprache in der man
3D-Modelle erzeugen kann. Das ist vielleicht nicht ideal, um eine Brücke, oder
eine ganze Turbine zu entwerfen, aber es ist super, wenn man Bauteile
konstruieren möchte, deren Maße konfigurierbar sein sollen. Parametrische 
Modelle also. Und genau das haben wir ja vor. &lt;/p&gt;
&lt;p&gt;Der Adapter ist im Grunde simpel und besteht aus wenigen Elementen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ein Zylinder&lt;/li&gt;
&lt;li&gt;Ein zylindrisches Loch&lt;/li&gt;
&lt;li&gt;Ein Ring, damit das Ganze nicht ganz durchrutschen kann&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Und damit das ganze schön fest sitzt habe ich ihm noch drei dünne Rippen
spendiert, die etwas vorstehen. Und für besonders anspruchsvolles Federvieh
habe ich noch die Möglichkeit vorgesehen, elliptische Löcher zu machen.&lt;/p&gt;
&lt;p&gt;In Openscad kann man solche geometrischen Elemente super leicht erzeugen,
modifizieren und kombinieren. Und das sieht dann so aus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;// Nistkasteneinfluglochadapterring
// für perfekte runde, oder ovale Einfluglöcher
//
// v0.1, 2021-04-18 
// Phil


main(od=35, id1=28, id2=28, l=20, rh=2, rw=5, pr=0.7);

///////////////////////////////////////////////////////////

module main (od, id1, id2, l, rh, rw, pr) {
    // od  : outer diameter
    // id1 : inner diameter 1
    // id2 : inner diameter 2
    // l   : length
    // rh  : rim hight
    // rw  : rim width
    // pr  : press fit ridge height

    // increase rendering resolution
    $fs = $fs * 0.01;
    $fa = 1;

    difference(){
        plug(od, l, rh, rw, pr);
        bore(l, id1, id2);
    }
}

module plug(od, l, rh, rw, pr) {
    cylinder(h=l, d=od);     // outer
    cylinder(h=rh, d=od+2*rw); // rim

    // press fit ridges
    translate([od/2,0,0])
        cylinder(d=2*pr, h=l);
    rotate(a=[0,0,120]) {
        translate([od/2,0,0])
            cylinder(d=2*pr, h=l);
    }
    rotate(a=[0,0,-120]) {
        translate([od/2,0,0])
            cylinder(d=2*pr, h=l);
    }
}

module bore(l, id1, id2) {
    translate([0,0,-1]) {
        linear_extrude(height=l+2){
            resize([id1, id2])circle();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="https://techbotch.org/blog/nistkasteneinfluglochadapter/model1.png", class="Medium", alt="3D Modell"&gt;
&lt;img src="https://techbotch.org/blog/nistkasteneinfluglochadapter/model2.png", class="Medium", alt="3D Modell"&gt;&lt;/p&gt;
&lt;p&gt;Sieht doch schon ganz brauchbar aus. Also den 3D-Drucker anwärmen, Modell
rendern und slicen und das G-Code File in den Drucker laden. Sehr schön – es
gibt doch nichts schöneres, als das beruhigende Surren meines Ultimakers.&lt;/p&gt;
&lt;p&gt;Und wenn das ganze ein Geschenk sein soll, dann druckt man gleich zwei verschiedene 
Größen und legt den Source Code bei. Und dann sieht das so aus:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://techbotch.org/blog/nistkasteneinfluglochadapter/Fertiger-adapter.jpg", class="Medium", alt="Adapter"&gt;&lt;/p&gt;
&lt;p&gt;Da kann der moderne Vogel nun wirklich nichts mehr auszusetzen haben!&lt;/p&gt;</content><category term="DIY &amp; Workshop"/></entry></feed>