21 Punkte von xguru 2023-01-16 | 2 Kommentare | Auf WhatsApp teilen

Fünf Jahre nach der Pleite von NYCTrainSign

  • Eine persönliche LED-Anzeigetafel für die Ankunftszeiten der New Yorker U-Bahn (auf Raspberry Pi-Basis)
  • Untersuchung, warum das Unternehmen scheiterte, und Schreiben eines Exploits, um ihre Flotte zu übernehmen
  • Damals auf Instagram/Facebook extrem beliebt, aber viele Leute haben ihre Ware nie erhalten
  • Über einen Gebrauchtverkäufer eines besorgt und tatsächlich zerlegt; innen war es unter Niveau, und das Geschäft war nicht nachhaltig
    • Die BOM (Bill of Materials) war viel zu hoch (also die Herstellungskosten selbst)
    • Ich schätze den Einzelhandelspreis meist, indem ich die BOM-Kosten mit etwa 4 multipliziere

Teilepreise

  • Raspberry Pi 3 - $35
  • Adafruit LED Matrix Hat - $25
  • LED Matrix * 2 - $60
  • 5V 2A Power Supply - $5
  • 4GB MicroSD Card - $7
  • Holzgehäuse - $15
  • Dazu Kabel, Tasten, Schrauben, Verpackung usw. - $3
  • Selbst mit dieser simplen Rechnung kommt man auf $150, also hätten sie $600 verlangen müssen

Sie kannten den Trick nicht

  • Im Webarchiv ihrer Website sieht es so aus, als hätten sie es für $599 verkaufen wollen
  • Anfangs wurde es aber auch für $299 oder sogar $100 verkauft (Beta-Version)
  • Offenbar gab es auch einen Versuch, es für $30 im Monat zu vermieten (bei Hardware mit hohen Anfangskosten wäre auch das schwierig gewesen)

Wer hat die Schaufeln verkauft

  • „Im Goldrausch verkauft man Schaufeln“ – wer hat hier also mit den Schaufeln Geld verdient? Adafruit
  • Durch die Nutzung des „Adafruit LED Matrix HAT“ stieg der Preis um $25 (rund 20 %)
  • Das hätte sich mit etwas Engineering-Aufwand einsparen lassen, weil es nicht zwingend nötig war
    • Man hätte auch direkt verkabeln können. Oder günstigere HATs für $2 verwenden
  • Die meisten Produkte von Adafruit werden nur fürs frühe Prototyping verwendet und in der Serienfertigung durch günstigere Teile ersetzt
  • Man könnte auch Raspberry Pi als Schaufelverkäufer sehen, aber Arduino oder ESP32 zu nutzen wäre wohl etwas übertrieben gewesen
  • Sie hätten mit dem Pi 3 anfangen und später auf den Pi Zero W wechseln sollen

Den Code lesen

  • Ich habe mir den Python- und NodeJS-Code auf der MicroSD angesehen
  • Es gibt zwei Hauptkomponenten: den Python-Server (LED-Server) und den NodeJS-Server (Config-Server)

LED-Server

  • Zuständig für das Zeichnen auf der LED Matrix und für das Abrufen der Zugdaten über die Firmen-API
  • Kommuniziert mit dem Config-Server, um Benutzereinstellungen abzurufen
  • Holt Zugdaten, erzeugt Bilder/Text und rendert sie auf der LED Matrix

Config-Server

  • Speichert Benutzerdaten in JSON und aktualisiert die Datei bei Update-Anfragen
  • Beim Booten holt der Config-Server die neuesten Informationen
  • Verbindet sich mit AWS IoT Core und erhält Echtzeit-Änderungen der Konfiguration über einen MQTT-Server

Codequalität

  • Es gibt diverse Probleme mit der Codequalität
  • Die Transit-API berücksichtigt nicht, dass jede Station mehrere Zuglinien haben kann
  • Es gibt keinen Firmware-Update-Prozess
  • Viele Python-Teile führen Systemänderungen einfach per System-Call aus
  • Der Python-LED-Server kommuniziert mit dem NodeJS-Config-Server, um Informationen zu holen; vermutlich, weil AWS IoT Core in NodeJS leichter zu programmieren war und Python sich besser für die Display-Steuerung eignete
  • Tabs und Spaces sind gemischt (vermutlich falsche Einstellungen im Code-Editor)
  • Die komplette Git-History liegt auf der MicroSD
  • Auch die Bash-History ist gespeichert
  • Kaum Code-Wiederverwendung

Wiederbelebung des Signs

Eine Shell bekommen

  • Bei den meisten Raspberry Pis ist die MicroSD nicht verschlüsselt, daher ist es leicht, eine Root-Shell zu bekommen
  • Man muss nur im Single-User-Modus booten und das Passwort des pi-Users zurücksetzen
  • Die Firmen-API existiert bereits nicht mehr, und das Gerät ist so gebaut, dass es ohne Internetverbindung fest kodierte lokale Daten verwendet

Den Server neu aufbauen

Kontrolle über das Sign erlangen

  • Wie andere IoT-Geräte nutzt auch das Sign viele System-Calls
  • Einer davon hängt die Sign-ID direkt an einen Shell-Befehl an
  • Da ich den API-Server direkt kontrolliere, kann ich alle Signs aus der Ferne steuern
  • Nach einigen Versuchen wurde ein Exploit geschrieben
    • Wenn das Sign eingeschaltet wird, holt es Konfigurationsdaten und stellt eine Anfrage für das Bildlogo
    • Dabei wird die Sign-ID mitgesendet
    • Diese ID wird gespeichert, und bei der nächsten Anfrage nach dem Bildlogo wird der Exploit an das Sign gesendet
    • Wenn der Nutzer das Sign neu startet, wird der Exploit beim Neustart ausgeführt
    • Der Exploit aktualisierte den nötigen Code und sorgte dafür, dass das Gerät mit unserem Server gepairt wurde
  • Jetzt funktionieren diese Geräte sauber mit dem neuen API-Server

Was ist passiert?

  • Das Problem waren zu viele Verkäufe mit hohen Rabatten
    • Herstellung für $150 und Verkauf für $117 ist unmöglich
    • Selbst $300 war zu billig. Sie hätten von Anfang an $600 verlangen müssen
  • Für ein Startup gab es zu viele Marketing-Leute und zu hohe Werbekosten
  • Sie konnten im Verhältnis zur Nachfrage auch nicht viele Produkte herstellen (Handarbeit)
    • Trotzdem nahmen sie weiter Bestellungen an und fertigten damit fast wie bei einem Ponzi-Schema frühere, rabattiert verkaufte Geräte mit dem Geld neuer Bestellungen
    • Auch eine Verlagerung der Produktion nach China gelang nicht
  • Laut LinkedIn gab es 4 Gründer, später 11 Mitarbeiter und zu einem bestimmten Zeitpunkt sogar 15
    • Selbst wenn man nur $60k pro Gründer ansetzt, müssten sie 600 Geräte mit $400 Gewinn pro Stück verkaufen
  • Laut einem vom Gründer geteilten Screenshot wurden in 2 Monaten $250k Umsatz gemacht
    • Wegen der hohen Rabatte auf die Geräte ist aber unklar, wie viel Gewinn tatsächlich übrig blieb
  • Die Gründer haben nicht klar dargelegt, was passiert ist, warum nur wenige Produkte verschickt wurden und wohin das ganze Geld verschwunden ist
  • Einer der Gründer sagte, er persönlich habe überhaupt kein Geld erhalten
  • Ich glaube, NYCTrainSign hätte Erfolg haben können, wenn das Team zumindest mit jemandem aus dem Elektronikbereich gesprochen hätte
    • Stattdessen war ihr wichtigster Advisor ein Informatikprofessor an einer Universität
  • NYCTrainSign war ein Projekt, das der CEO in seiner Freizeit gebaut hatte und später für $300 bis $600 verkaufen wollte, ohne die späteren Folgen zu bedenken
  • Unterm Strich: „Good Idea, Good Timing, Bad Team, Bad Product“

What Happens Now

  • Als ich damit angefangen habe, träumte ich zunächst davon, mein eigenes Sign zu verkaufen
  • Ich habe eines mit ESP32 gebaut und nutze es noch heute
  • Aber je länger ich darüber nachdenke, desto mehr glaube ich, dass ich nicht die richtige Person bin, um so etwas zu bauen und zu verkaufen
  • Der Markt für LED-Signs ist bereits hart umkämpft: Es gibt Tidbyt und unzählige Firmen auf Amazon
  • Deshalb bleibt es einfach ein persönliches Lernprojekt
  • Alles zu NYCTrainSign wurde als Open Source veröffentlicht
    • Einschließlich des API-Servers mit Exploit-Code
  • Außerdem wird der neue NYCTrainSign-Server weiterhin gehostet (die Hosting-Kosten sind sehr gering)
  • Es werden zwar keine neuen Funktionen hinzukommen, aber es gibt Ideen für verbesserte Firmware
  • Wenn du ein Sign hast, kannst du die dafür eingerichtete Website zur Fernverwaltung nutzen
  • „Wenn du kein Sign hast, kauf dir jetzt bitte keins“

2 Kommentare

 
loblue 2023-01-18

Interessant, haha.
Aber wenn man das als profitabel einschätzt und kommerzialisiert, gäbe es dann keine rechtlichen Probleme?

 
kloty 2023-01-16

Das wirkt wie das Zuschauen bei einem Tycoon-Spiel.

Code Quality > Ich glaube, bei der Code-Qualität gibt es einen Tippfehler, sodass mehrere Probleme fälschlicherweise als „keine“ angezeigt werden.