Fail: USB-Switch

Man spricht und schreibt eher ungern über eigene Fehler und/oder das eigene Unvermögen.

Aber Fehler gehören dazu. Man kann zwar ohne sie auch lernen, aber am besten und meisten lernt man meiner Meinung immer noch aus Fehlern.

Folgende Bastelei liegt schon ewig auf dem Tisch, genau genommen seit 2016:

An den Fädeldrähten sieht man – da passte etwas am Layout nicht. Der Schaltplan dazu sieht wie folgt aus:

Keine Ahnung woran es lag, der Knoten im Kopf mit negiertem Output Enable, high side switch und Inverter war wahrscheinlich zu groß. Eigentlich total Pillepalle aber es wollte einfach nicht.

Mit Fädeldraht hat es dann auch funktioniert aber das ganze Teil ist so unbefriedigend, dass ich mich entschieden habe keinen Artikel zu schreiben. Der USB-Switch ist schlecht beschaffbar und noch bescheidener zu Löten, die Einschaltfolge (erst Strom dann Daten beim Einschalten, beim Ausschalten umgekehrt) wird nicht eingehalten, die Höhe von Stecker und Buchse passen nicht zueinander, von richtigem Differential-Pair-Routing fange ich noch nicht einmal an zu sprechen.

Trotzdem hat das Teil seinen Zweck zumindest einmal erfüllt. Ob es mal eine out-of-box funktionierende Variante geben wird – keine Ahnung. Am liebsten wäre – zumindest mir – etwas, das deutlich mehr kann, sprich: USB Switch, Strommessung, Stromlimit, Schalten per PC (ohne zusätzliche Hardware), usw.

Vielleicht. Irgendwann.


Neuer Regler oder Exorzist?

Hmm.

Ab und zu schaue ich, was die Heizung bei meinen Eltern so treibt und heute gab es beim Solarregler folgendes zu sehen:

Das Teil hat schon länger ab und zu mal ein Zeichen blinken lassen, ich bin mir aber nicht ganz sicher, ob es wirklich nur das Display, die Strecke zwischen Mikrocontroller und LCD-Controller oder doch mehr ist.

Gehackt sollte es zumindest nicht sein, da die Energieerfassung auf dem VBus nur mithört.

Mal sehen, wie sich das Ganze entwickelt.

Wir brauchen mehr Cyber!

Was für ein Skandal. Kaum werden Daten von Politikern „gecybert“, „doxed“ und ins Netz geblasen, ist es ein Angriff auf die Demokratie und es müssen Gesetze gemacht, Behörden vergrößert und Qualitätssiegel eingeführt werden.

Was war bei den Datenskandalen zuvor, bei denen primär „normalsterbliche“ betroffen waren? Da hat es offenbar keinen gejuckt, weil einfach niemand von den „wichtigen“ betroffen war!?

Oder was war mit der mehrfach zerlegten Wahlmeldesoftware? War die lausige Security dort nicht viel mehr der Wegbereiter für Angriffe auf die Demokratie? Wo war Cyberhorst da, um Leute einzustellen, die es besser machen und auch noch ein Siegel draufkleben?

Aus dem aktuellen Fall sind nur wenige Details bekannt und werden es wahrscheinlich auch nicht viel mehr werden. Für mich hört es sich aber am ehesten danach an, als hätten viele der betroffenen ihren persönlichen Datenschutz nicht im Griff. Schlechte Passwörter, jeden Mist anklicken und empfindliche Daten auf den Computern anderer Leute (vulgo in der Cloud).

Was helfen uns Gesetze, wenn die Leute noch immer zu blöd sind, sichere und vor allem unterschiedliche Passwörter für unterschiedliche Dienste zu verwenden? Was bringt stärkere Behörden, wenn die Cracker unterm Radar fliegen (well, hackers gonna hack)? Was bringen uns irgendwelche teuren Qualitätssiegel, wenn diese nur Momentaufnahmen sind und man als User keine Chance hat, die Integrität und Unterschiede der untersuchten und präsentierten Software zu prüfen?

Für mich ist alles nur ein verdammtes Strohfeuer, das unser Politiker da gerade anzünden. Und Geldverschwendung obendrein.

Da wäre es vermutlich sinnvoller, einen Internetführerschein und Grundkurse in Sachen Internet- und Datensicherheit einzuführen.

Ich meine klar, jeden kann es mal erwischen – nur wenn man sieht, wie blind manche herumrennen, muss man Angst und Bange sein.

Hierzu eine kleine Anekdote aus meiner Hochschulzeit: eines Tages kam eine Mail vom Rechenzentrum, dass gerade Phishing-Attacken auf Mitglieder der Hochschule liefen, die durch eine fremde gekaperte WordPress-Installation durchgeführt wurde und man auf keinen Fall den Link klicken solle und sich schon gleich gar nicht dort einloggen solle. Auch war ein Muster einer solchen Mail angehängt. Soweit, so gut. Nur war das kein Bild, kein CopyPasta, sondern die Originalmail. Mit funktionierenden Links.

Auf freundlichen Hinweis hat der Admin die Mail dann zurückgezogen und erneut „sauber“ geschickt. Es ist nicht bekannt, wie viele zumindest auf den Link geklickt haben…

Um nun für User einen Unterschied zu machen: Wo es früher noch hieß, dass Passwörter oft geändert werden sollten und kryptisch sein müssen, zum Beispiel, indem man Sätze verendet und Leetspeak o. ä. appliziert – so wird aus dem Satz „Das ist das Haus vom Nikolaus“ das Passwort „DidHvN“ oder „D!d4vN“, hat einer der alt eingesessenen Passwortevangelisten (mir fällt der Name gerade nicht ein) seine damalige Empfehlung korrigiert. Wenn ich mich richtig erinnere ist es besser, einfach den kompletten Satz zu verwenden, „Das ist das Haus vom Nikolaus“. Denn: So ein Passwortcheck ist mein Mastermind, das sagt „Zeichen ist vorhanden aber an der falschen Stelle“, sondern einfach nur „true“ oder „false“. Klar, mit Wörterbuchattacken kann man immer noch arbeiten, aber auch die werden bei langen Passwörtern langsam schwierig; und ja, ein Beobachter hat es bei „korrigierbaren“ Passwörtern auch einfacher und kann sich den Sinn erschließen. Aber da gilt die Regel: Lass dir nicht über die Schulter schauen!

Das Problem an häufigen Passwortänderungen ist, dass sie dann entweder trivial oder unter die Tastatur geklebt werden. Lieber ein anständiges Passwort, das zwar nicht so oft geändert wird aber dafür auch nicht irgendwo notiert wird.

Zum Thema Cloud bin ich immer noch der Meinung: „(wenn überhaupt:) Traue nur einem Computer, den du aus dem Fenster werfen kannst“ und: „Es gibt keine Cloud, es gibt nur Computer anderer Leute“ (ok, war schon oben). Sprich: Man kann nur die Kontrolle über die Daten haben, die man bei sich hat. Seid Datensparsam, lagert Daten im öffentlichen Raum, die auch jeder sehen darf.

Auch müssen sich die Firmen – und da schweife ich mal in Richtung Hacking und Datenlecks ab – endlich mal ändern. Ich hatte es bis jetzt nicht nur einmal, dass auf eine Meldung einer Sicherheitslücke entweder gar nicht oder mit „kann gar nicht sein“ reagiert wurde. Teilweise wurde erst nach einem Proof of Concept Initiative ergriffen. Und dann nicht mit „ja, wir haben ein Problem, wir analysieren es“, sonder mit „wie haben Sie das gemacht??ß?sz?“. Denen hat also nicht der Hinweis „ihr habt da und da ein Problem“ gereicht, sondern brauchten auch noch eine Erklärung.

Das dreisteste, was ich dabei erlebt hatte war dann ein Admin, der mich nach der „Sicherheitsberatung“ und dem Schließen der Lücke durch deren Enwicklungsdienstleister bat, den Fix zu verifizieren. Anhand der Blackbox. Auf meine Antwort, dass das ohne Einblick in die Quellen sinnlos wäre und dass ich ihm keinen Code-Review schenken werde, kam nichts mehr zurück.

Liebe Firmen, nehmt bitte endlich Meldungen zu Bugs und Vulnerabilities ernst und schaut erst einmal selbst nach, wenn ihr Hinweise bekommt! Viele, die etwas entdecken, erwarten keine Gegenleistung, dafür dürft ihr aber nicht erwarten, den A… hinterhergetragen zu bekommen.

PSA: HMC5883L vs. QMC5883L

Mittlerweile bestelle ich ja auch ganz gerne bastelfreundliche Module, darunter zuletzt auch ein GY-271, ein Kompassmodul, das einen Honeywell HMC5883L enthalten sollte. Beim I2C-Detect ist schon aufgefallen, dass die Adresse nicht wie erwartet ist – 0x0D (7-bit) statt 0x1E (7-bit).

Im Datenblatt von Honeywell steht leider nichts vom Package-Marking, also mal auf die Suche begeben.

Wie sich herausstellt, werden mittlerweile auch ganz gerne die nahezu pinkompatiblen und komplett softwareinkompatiblen QMC5883 der Firma qst verbaut. Zum Hersteller konnte ich nichts in Erfahrung bringen. Auch nicht auf baidu.com. Etwas irritierend auch, dass in den Meta-Infos des Datenblatts als Verfasser „Honeywell“ steht. Da war wohl eher der Wunsch Vater des Gedanken.

Wie auch immer, hier mal ein Foto der ICs bzw. Module im Vergleich:


Hier sieht man auch, dass die Beschaltung wohl leicht anders ist.

Auf Datenblätter verlinke ich mal nicht, die findet man sehr einfach im Internet.

Ranzbox

Ganz im ernst, wer benutzt die Sprachbox der Telekom freiwillig?

Wenn ich bei Kunden Telekom-Anschlüsse einrichte, ist es eine der ersten Fragen, ob sie sie benutzen wollen und die Antwort ist in aller Regel „Nein“.

Die Gründe sind meistens:

  • Kein Anrufbeantworter gewünscht
  • Es gibt bereits einen klassischen Anfrufbeantworter
  • Der Anrufbeantworter in der meist vorhandenen Fritz!Box soll genutzt werden
  • Der Anruf der Sprachbox um 23:00, dass um 18:00 jemand angerufen hat aber keine Nachricht hinterlassen hat, nervt.

Das Dumme: Sie ist Opt-out, also standardmäßig aktiv.

In der nächsten Zeit werde ich das Vergnügen vermutlich wieder öfter haben, da die Telekom nun begonnen hat, ihre letzten Kunden vor die Entscheidung gestellt hat, ob sie keinen Anschluss oder einen mit All-IP haben möchten. Dabei machen sie das, was vermutlich keiner will: sie schalten die Sprachbox an.

Warum können sie die Einstellung nicht einfach übernehmen? Und warum ist das Teil nicht einfach Opt-in und im Willkommensschreiben steht etwas, dass es sie gibt und wie man sie aktiviert?

Und warum ruft das Teil u. a. zu Unzeiten an? Ich weiß nicht, ob es mittlerweile gemacht wird, aber warum nicht WMI (Benachrichtigung ans Endgerät) nutzen und erst nach dem nächsten ausgehenden Anruf melden

Ok, eines kann sie, was der lokale Anrufbeantworter nicht kann: Benachrichtigung per SMS, wobei: eine entsprechende Fritz!Box kann per E-Mail benachrichtigen – inklusive der Aufzeichnung. Kann das auch die Sprachbox?

Ein Schritt weiter und oft ein echter Mehrwert wäre speech to text und als SMS/E-Mail an den Kunden – sofern das der Datenschutz erlaubt

Ein anderes Ärgernis: SMS ins Festnetz. Zum Glück ist SMS so gut wie tot. Die letzte, die ich bekommen hab kam auch kurz vor 23 Uhr. Die anrufende Nummer war etwas kryptisches und natürlich hat das Teil abgebrochen, als der AB angenommen hat. Also hieß es warten, bis der Anruf wiederholt wird. Schlussendlich war es ein Kunde, der seine Dateien gelöscht und nicht gecheckt hat, dass er meine Handynummer nicht hat. Gleichzeitig war meine Schwester im Ausland und dementsprechend machte ich mir (aufgrund der eigenwilligen Rufnummer) Sorgen, dass etwas passiert sei.

Warum kann die Telekom (oder jeder beliebige Anbieter) nicht einfach SMS, die auf den Hausanschluss gingen, aufs Handy weiterleite? Von den meisten Kunden haben sie ja die entsprechenden Nummern und technisch wäre es auch möglich. Zudem war die Sprachsynthese zumindest damals eher nicht so toll.

Genauso hat die Telekom mehrere Jahre gebraucht, um den automatischen Rückruf (ein Merkmal aus früheren Zeiten) im VoIP-Netz zurückzubringen, wobei er auch jetzt nur selten angeboten wird.

Übrigens: Wer die Sprachbox deaktivieren möchte: 08003302424 anrufen und im Hauptmenü die 4 drücken.

Fotolicht und Drehplatte

Schon vor einer guten Weile liegen hier ein paar LED-Panele herum, die ich schon länger in einem eher abenteuerlichen Aufbau (wenn man das Anlehnen am Mikroskoparm so bezeichnen darf) als Fotolicht verwendet hab.

Nachdem ich bei einer Aufräum- und Ausmuster-Aktion an eine Drehplatte (eigentlich zum Vermessen von Lautsprechern) gekommen bin, ist nun folgende Konstruktion entstanden:

Die ersten so entstandenen Aufnahmen waren glaube ich die vom Pirozeda, nachdem es mir aber irgendwann zu blöd wurde, mussten etwas besseres her. Zwei Pressspanplatten, ein paar Winkel, ein Rohr und bisschen Faden – fertig ist die kippbare Fotoleuchte. Durch die flächige Ausleuchtung ist es nahezu schattenfrei, auch Reflexionen machen erstaunlich wenige Probleme.

Leiterkarten – und natürlich auch andere Dinge – lassen sich damit nun ziemlich gut ablichten:

Klick für volle Größe

Das Bild ist um 90° gedreht, in der Ansicht von oben kommt das Licht von „Norden und Süden“ – was die Schatten zwischen den Tastern verursacht.

Aber warum die Drehplatte? Zum einen erhöht sie den Aufbau ein wenig, was in Sachen Ausleuchtung von Vorteil sein kann, zum anderen: 360°-Ansichten. Das erste Video ist leider noch nicht ganz so toll. Drei Dinge fallen auf:

  • Frame you f…! -> Das Ausrichten ist etwas trickier als man denkt, aber Übung macht den Meister
  • Focus you f…! -> In der Aufnahme habe ich vergessen, auf manuellen Fokus zu stellen, dadurch gibt es kein Pumpen mehr
  • (Don’t) Flicker you f…! -> Da brauch ich wohl andere LED-Treiber

Für die 360°-Aufnahmen wird’s wohl noch bisschen Software brauchen, einfach nur drehen lassen ist schön und gut, besser ist es IMHO das ganze interaktiv zu haben.

Zudem braucht’s wahrscheinlich auch ein bisschen Postprocessing bei der Aufnahme. Meine Kamera kann UHD (auch wenn 4K draufsteht), da fallen ca. 800 MB/min, was auch in etwa der Dauer einer Umdrehung der Platte entspricht. Bei 24 fps gibt das 1440 Bilder und eine Winkelauflösung von 0,25° – viel zu viel. 360 Frames, also 1° Winkelauflösung dürften für die meisten Anwendungen mehr als ausreichend sein. Wahrscheinlich reichen auch Full-HD als Auflösung (wie das Youtube-Video, übrigens ursprünglich mit x265 und 6 MBit/s auf ca. 50 MB rekomprimiert).

Mal schauen, wann ich Zeit und Lust dazu habe.

Wen es noch interessiert, hier ein Framegrab aus dem usprünglichen Video (JPEG rekomprimiert mit 85%, ansonsten ist der Bildinhalt unverändert):

Pirozeda-Hat

Nachdem der Pirozeda relativ beliebt ist habe ich ein neues Design erstellt, das ein paar Punkte in Angriff nimmt die mir bis jetzt nicht so gut gefallen haben:

Folgendes ist neu:

  • Entspricht (größtenteils) den Raspberry Pi HAT-Spezifikationen (inkl. EEProm)
  • Neben dem Optokoppler kann man nun auch einen ADUM1301 verwenden
  • …oder einfach Widerstände, wenn man sich der Sache sicher ist
  • Mit ADMUM1301 oder Direktverbindung können nun hardwareseitig einfach Firmware-Updates aufgespielt und der µC resettet werden
  • Am Mikrocontroller gibt es nun zwei Status-LEDs
  • Es gibt nun eine RTC (DS1307Z)

Wer die Design-Daten vorab haben will, kann sich gerne bei mir melden. Sobald sie aufgeräumt sind, kommt natürlich alles auf die Projektseite.

Was noch ganz cool wäre, aber hinsichtlich Platz wahrscheinlich nicht mehr geht: Steckplatz für ein kleines Display und eine Status-LED könnte auch mit dem Pi verbunden sein (um auf ersten Blick den Status der kompletten Verarbeitungskette zu sehen).

AI my ass

Rant.

Künstliche Intelligenz ist in aller Munde und wird trotzdem (oder gerade deshalb) meist missverstanden.

Viel zu oft kommt dann noch Marketing-Bullshit dazu, dann wird mit Begriffen um sich geworfen bis es einem die Haare aufstellt. Früher war etwas supergeil, wenn man „Laser“ dazuschrieb, heute muss es schon mehr sein. Artificial Intelligence, Machine Learning, Deep Learning, Neural Networks und wenn man alle haben will, muss noch Cloud und Blockchain und vielleicht noch Virtual und Augmented Reality dazu.

Und keiner weiß was überhaupt gemeint ist.

Das Von Leitner-Institut für verteiltes Echtzeit-Java titelte bereits:

Machine Learning bedeutet heute, was man früher unter Statistik führte. Wenn du Machine Learning im früheren Sinn meinst, sagst du heute Deep Learning.

Was bedeuten die Begriffe nun wirklich? Ich versuche es mal mit meinem gefährlichen Halbwissen:

Artificial Intelligence oder Künstliche Intelligenz ist einfach nur der Sammelbegriff. Wenn man an Gott Schöpfer glaubt hätte selbst der Mensch Künstliche Intelligenz, weil sie nicht auf natürliche Weise sondern eben durch Fremdeinwirkung geschaffen wurde. Der Begriff sagt nichts darüber aus, ob es sich um eine biologische (gibt es dazu Forschung?), mechanische oder elektronische Implementierung handelt. Auch nichts über Algorithmen und Verfahren.

Machine Learning ist da etwas konkreter: Es ist ein Verfahren auf dem Weg zur Artificial Intelligence. Kurz: man dreht Daten durch einen Algorithmus, der dadurch aus ihnen lernt. Daraus entsteht dann kein „Ich denke, also bin ich“ sondern eine üblicherweise undurchschaubare Datensuppe, mit denen ein weiterer/verwandter Algorithmus von Eingangsdaten, die nur noch Ähnlichkeiten zu den gelernten Daten aufweisen müssen auf die zugehörigen Ergebnisse schließen kann.

Wobei es auch hier verschiedene Möglichkeiten des Lernen gibt, z. B. kann man zu den Daten gewünschte Ergebnisse verknüpfen oder den Algo einfach nur blind lernen (und somit eigene Klassifikationen finden) lassen. Letzteres hat den Charme, dass zum Beispiel unerwartete Zusammenhänge gefunden werden können. Es gibt dazu interessante Vorlesungen IIRC der Caltech auf YouTube.

Deep Learning ist ein Verfahren des Machine Learning.

Neural Networks oder Neuronale Netze sind ein Modell für die Datenverarbeitung, grob kann man Neuronen mit Logikgattern vergleichen. Deren Netzwerke sind analog dazu ein „Gattergrab“.

Cloud ist eine größere Ansammlung von Wassertropfen. In der Informatik sind es die Computer, in aller Regel sehr viele, anderer Menschen von denen man nicht weiß, wo sie geografisch, politisch und in Sachen Datenschutz sowie -sicherheit stehen. ML kann darauf ausgeführt werden, im Endeffekt ist es aber „Sharks with lasers“.

Blockchain ist, soweit ich es verstanden habe, ein kryptographisches Verfahren zum Manipulationsschutz von Informationen, indem diese in Listen und Verschlüsselung verkettet werden. (ja, ich müsste für eine verständliche Definition bei Wikipedia spicken). Der ganze Fuzz um Blockchain in einer Formel: hash_neu = hashfunktion(hash_alt + daten). Hat nichts mit AI/ML/NN zu tun.

VR und AR hat so gut wie nichts mit alledem zu tun.

Man darf sich einfach nicht verarschen lassen, wenn mit Fachbegriffen um sich geworfen wird. Auch wenn man selbst keine Ahnung hat, ist es oft amüsant entlarvend, wenn man die einfache Frage stellt: „Was ist denn der Unterschied zwischen x und y?“

Dann kann man sich oft nur zurücklehnen und genießen.

Für mich ist künstliche Intelligenz übrigens, wenn man dem Computer ein Netzwerkkabel einsteckt und er im Nebenraum das Licht ausschaltet. Oh nein, das richtige Wort lautet Malware.

Wie gut sind COB-LEDs?

Chip on Board-LED-Module – mittlerweile in Flutern sehr weit verbreitet und sehr günstig zu beschaffen.

Da ich bei einer Aufräumaktion eine Schreibtischleuchte (noch mit Leuchtstofflampen und fehlendem Treiber) ergattern konnte war der erste Gedanke: Umrüsten auf LED.

Im Asiamarkt (ok, eBay) gab es 4 Module – 2x warmweiß und 2x kaltweiß – für nicht ganz 6 Euro bei nicht einmal 2 Wochen Versand:

Leider sind Module mit 2700 K Farbtemperatur eher selten, also ca. 3250 K und 6250 K. Aber warum überhaupt verschiedene Werte? Kaltweiß ist besser, um Farben neutral zu sehen, warmweiß ist angenehmer für’s Auge. Allerdings muss man dazu sagen: es ist nur die halbe Wahrheit. Ein wichtiger ist der CRI. Echte weiße LEDs gibt es nicht, es handelt sich in aller Regel um blauen LEDs, die bestimmte Farbstoffe anregen und je nach Material ist das Spektrum und damit die Farbwiedergabe unterschiedlich – aber das nur am Rande.

Um die Spannung und Ströme der Streifen gering zu halten, sind die LEDs in mehrere Stränge, meist mit der Länge 3 angeordnet. Bei einer Flussspannung von 3,2 Volt sind das 9,6 Volt, mit einem Vorwiderstand haben die meisten Streifen eine Betriebsspannung von 12 Volt. Das ist bei den meisten COBs meist nicht der Fall. 4 LEDs in Reihe, mehrere dieser Stränge parallel und fertig. Durch Fertigungstoleranzen schwanken die Vorwärtsspannungen ein bisschen, das kann man im Griff haben aber das kostet natürlich. Bei einigen hundert LEDs für 6 Euro: never ever.

Aber wie schlecht sind sie wirklich? Der Test funktioniert relativ einfach: LED an eine Spannungsquelle anschließen und die Spannung so weit erhöhen, bis sie leicht zu glimmen anfangen – bei den gekauften Exemplaren war das bei 9 Volt:

Montage von 4 Fotos bei gleicher Belichtungszeit

Die Belichtung wurde so eingestellt, dass möglichst keine Übersteuerung der Farbkanäle stattfindet, hat auch fast geklappt.

Man sieht gewisse Ungleichmäßigkeiten, not too bad, not too good either. Richtiges Binning hat auf keinen Fall stattgefunden.

Die Leuchtpunkte der unteren LED wurden ausgeschnitten, ausgerichtet und durch ein kleines Python-Script (mit pillow statt pil) gejagt:

from PIL import Image
im = Image.open('P1120207.png', 'r')
width, height = im.size
pixel_values = list(im.getdata())

y = 8

for x in range(0, width):
px = pixel_values[width*y+x]
print(str(px[0]) + "\t" + str(px[1]) + "\t" + str(px[2]))

Das Script spuckt die RGB-Werte der 8. Zeile aus. Auch wenn der blaue Farbkanal am ehesten heraussticht, ist es besser den grünen zu verwenden – weniger Clipping und durch Chroma-Subsampling (besser kein JPEG verwenden) und des Bayer-Pattern ist grün einfach besser ;).

Aus Excel kam dann folgendes Diagramm:

Mit ein bisschen Phantasie erkennt man die Stranglänge. Die Aussagekraft des Diagramms ist zugegebenermaßen etwas eingeschränkt: Es ist kein kalibriertes System sondern eher ein Schätzeisen aber es reicht für einen groben Vergleich: Es gibt einen ausreißenden Strang (nach oben) und einige LED-Chips in den Stränge, die deutlich darunter liegen. Grundlegend ist die Bewertung mit dem Diagramm aber etwas besser möglich als durch das Ansehen der Bilder, da der Faktor subjektive Wahrnehmung verringert wird und Nuancen in Helligkeitsunterschieden besser erkennbar sind.

Mal sehen, wie sich die Streifen dann im tatsächlichen Einsatz machen…

MCP2221 mit C# – aber schnell.

Nachdem die Python-Lib ganz gut funktioniert (ein paar Bugs habe ich bereits gefunden, Fixes stehen noch aus), wollte ich die Implementierung auch in C# umsetzen. Zwar gibt es von Microchip schon eine Lib, allerdings ist diese nicht Native und auch nicht open source und dadurch auf bestimmte .NET-Versionen eingeschränkt.

Um das Rad nicht neu erfinden zu müssen, wollte ich zumindest für die USB-HID-Kommunikation eine fertige Bibliothek verwenden. Bei der Suche bin ich auf HidLibrary gestoßen, die zwar nicht mehr so aktiv gepflegt wird – aber das muss nicht unbedingt viel bedeuten. Ja, auch Software kann mal fertig sein 😉

Heruntergeladen und die ersten Funktionsblöcke geschrieben. Als ersten Test habe ich i2c_detect portiert und laufen lassen. Für 127 Adressen dauert der Scan knapp über 17 Sekunden. Mit Microships MCP2221 I2C/SMBus Terminal sind es nicht ganz 11 Sekunden und mit meiner Python-Lib unter 0,7 Sekunden. Was ist da los?

Im ersten Schritt habe ich mit System.Diagnostics.Stopwatch die Schreib und Lesezeiten gemessen – jeweils braucht die Lib im Schnitt 21 ms, für jeden Probe einer Adresse sind zwei Schreib-/Lesezyklen erforderlich, kommt kein ACK für eine Adresse ist ein weiterer Zyklus für ein i2c_cancel erforderlich. Macht für einen Proben einer nicht genutzten Adresse ca. 126 ms, für 127 Adressen sind das bisschen über 16 Sekunden – kommt also hin.

Visual Studio kann Performance-Analysen und der schuldige ist schnell gefunden:

Es hängt also am HidLibrary.HidDevice::IsConnected bzw. EnumerateDevices.

Auf GitHub gibt es (Stand November 2018) auch Bugs zum Thema Performance.

Die Tickets existieren seit 2011, 2014 und 2016 – also besteht offenbar kein Interesse, das zu fixen. Ein User namens kaczart hat eine Lösung gefunden.

Um im ersten Schritt nicht zu viel zu verbasteln, habe ich einfach mal „IsConnected“ ein einstweiliges „return true;“ verpasst. Nun benötigt ein Schreibvorgang um die 3,4 ms und ein Lesevorgang knapp 2,3 ms. Unterm Strich dauert der Scan nun 2,5 Sekunden. Besser aber noch nicht gut genug.

In anderen „Projekten“ hat mir in Sachen Timing gerne mal der Debugger in die Suppe gespuckt, also mal als Release ausgeführt und Tadaa: 0,78 Sekunden. Fast so schnell wie die Python-Implementierung.

Um es nochmal genau zu wissen habe das „return true;“ aus HidDevice::IsConnected wieder entfernt und als Release ausgeführt: 14 Sekunden.

Der Hund liegt also definitiv in der Lib begraben. Workaround, Fixen, nach Alternativen suchen oder selber machen (oder einfach eine Weile abhängen lassen und etwas anderes machen)?

Mal sehen.