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
Interessant, haha.
Aber wenn man das als profitabel einschätzt und kommerzialisiert, gäbe es dann keine rechtlichen Probleme?
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.