21 points par xguru 2023-01-16 | 2 commentaires | Partager sur WhatsApp

Cinq ans après la fermeture de NYCTrainSign

  • Un panneau LED personnel indiquant les heures d’arrivée du métro de New York (basé sur Raspberry Pi)
  • Enquêter sur les raisons de l’échec de l’entreprise et écrire un exploit pour reprendre leur flotte
  • À l’époque, c’était extrêmement populaire sur Instagram/Facebook, mais beaucoup de gens n’ont jamais reçu leur produit
  • En en récupérant un via un vendeur d’occasion et en le démontant, il s’est avéré que l’intérieur était de piètre qualité et que le modèle économique n’était pas viable
    • Le BOM (Bill of Materials) était beaucoup trop élevé (autrement dit, le coût de fabrication lui-même était trop important)
    • En général, j’estime le prix de vente au détail en multipliant le coût du BOM par environ 4

Prix des composants

  • Raspberry Pi 3 - $35
  • Adafruit LED Matrix Hat - $25
  • LED Matrix * 2 - $60
  • Alimentation 5V 2A - $5
  • Carte MicroSD 4GB - $7
  • Boîtier en bois - $15
  • Divers fils, boutons, vis, packaging, etc. - $3
  • Rien qu’avec ce calcul, on arrive déjà à $150, donc il aurait fallu le vendre $600

Ils ne connaissaient pas l’astuce

  • En regardant leur site sur le web archive, il semble qu’ils aient essayé de le vendre $599
  • Mais au début, ils l’ont aussi vendu à $299, voire $100 (version bêta)
  • Ils ont aussi apparemment tenté de le louer à $30/mois (ce qui aurait aussi été difficile, le hardware nécessitant un coût initial)

Qui vendait les pioches

  • « Pendant la ruée vers l’or, vendez des pioches » : ici, qui a gagné de l’argent en vendant les pioches ? Adafruit
  • L’utilisation de l’"Adafruit LED Matrix HAT" augmentait le prix de $25 (environ 20%)
  • C’est quelque chose qu’on aurait pu économiser avec un peu d’effort d’ingénierie, puisque ce n’était pas indispensable
    • Un câblage direct aurait été possible. Ou alors utiliser des HAT bon marché à $2
  • La plupart des produits Adafruit ne servent qu’au prototypage initial, puis sont remplacés en production par des alternatives moins chères
  • On peut aussi considérer Raspberry Pi comme un vendeur de pioches, mais utiliser Arduino ou ESP32 aurait sans doute été excessif
  • À mon avis, il aurait fallu commencer avec un Pi 3, puis passer à un Pi Zero W

Lecture du code

  • J’ai examiné le code Python & NodeJS présent sur la MicroSD
  • Il y a 2 composants principaux : un serveur Python (serveur LED) et un serveur NodeJS (serveur de configuration)

Serveur LED

  • Il s’occupe de l’affichage sur la matrice LED et de récupérer les informations sur les trains via l’API de l’entreprise
  • Il communique avec le serveur de configuration pour récupérer les préférences utilisateur
  • Il récupère les données des trains, génère des images/du texte, puis les rend sur la matrice LED

Serveur de configuration

  • Il stocke les informations utilisateur en JSON et met à jour le fichier correspondant lorsqu’il reçoit une requête de mise à jour
  • Au démarrage, le serveur de configuration récupère les informations les plus récentes
  • Il se connecte à AWS IoT Core et reçoit en temps réel les changements de configuration depuis le serveur MQTT

Qualité du code

  • Il y a de nombreux problèmes de qualité dans le code
  • L’API Transit ne prend pas en compte le fait qu’une station puisse avoir plusieurs lignes de train
  • Il n’y a pas de processus de mise à jour du firmware
  • Beaucoup de code Python modifie simplement le système via des appels système
  • Le serveur LED en Python récupère ses informations en parlant au serveur de configuration NodeJS ; j’imagine que c’est parce qu’AWS IoT Core était plus facile à coder en NodeJS, tandis que Python était plus pratique pour gérer l’affichage
  • Il y a un mélange de tabs et d’espaces (sans doute à cause d’une mauvaise configuration de l’éditeur)
  • Tout l’historique git est stocké sur la microSD
  • L’historique bash y est aussi stocké
  • Il n’y a pratiquement aucune réutilisation de code

Résurrection du panneau

Obtenir un shell

  • Comme la plupart des Raspberry Pi n’ont pas de MicroSD chiffrée, il est facile d’obtenir un shell root
  • Il suffit de démarrer en mode single-user et de réinitialiser le mot de passe de l’utilisateur pi
  • L’API de l’entreprise n’existe déjà plus, et l’appareil est conçu pour utiliser des données locales codées en dur quand il n’a pas de connexion Internet

Recréer le serveur

Prendre le contrôle du panneau

  • Comme beaucoup d’autres appareils IoT, le panneau utilise de nombreux appels système
  • L’un de ces appels concatène directement l’ID du panneau dans une commande shell
  • Comme je contrôlais directement le serveur API, je pouvais prendre le contrôle à distance de tous les panneaux
  • Après plusieurs essais, j’ai écrit un exploit
    • Quand le panneau démarre, il récupère ses informations de configuration et envoie une requête pour le logo image
    • À ce moment-là, l’ID du panneau est transmis
    • Je stocke cet ID, puis lors de la requête suivante pour le logo image, j’envoie l’exploit au panneau
    • Si l’utilisateur redémarre le panneau, l’exploit s’exécute au redémarrage
    • L’exploit met à jour le code nécessaire et force l’appairage avec notre serveur
  • Désormais, ces appareils fonctionnent correctement avec le nouveau serveur API

Que s’est-il passé ?

  • Le problème, c’était les ventes à trop forte remise
    • Impossible de fabriquer à $150 et de vendre à $117
    • Même $300, c’était trop bas. Il aurait fallu demander $600 dès le départ
  • Pour une startup, ils avaient trop de personnel marketing et des coûts publicitaires trop élevés
  • Ils n’ont pas non plus réussi à fabriquer suffisamment de produits par rapport à la demande (production manuelle)
    • Malgré cela, ils continuaient à prendre des commandes, au point que cela ressemblait à un schéma de Ponzi où l’argent des nouvelles commandes servait à fabriquer les unités précédemment vendues à prix cassé
    • Ils n’ont pas non plus réussi à délocaliser la production en Chine
  • D’après LinkedIn, il y avait 4 fondateurs, puis l’effectif est monté à 11, et jusqu’à 15 personnes à un moment donné
    • Même en comptant seulement $60k par fondateur, il aurait fallu vendre au moins 600 appareils dégageant $400 de marge
  • D’après une capture d’écran partagée par un fondateur, ils auraient fait $250k de chiffre d’affaires en deux mois
    • Mais comme les remises sur les appareils étaient trop importantes, on ne sait pas quel bénéfice ils ont réellement dégagé
  • Les fondateurs n’ont jamais clairement expliqué ce qui s’était passé, pourquoi si peu de produits avaient été expédiés, ni où tout l’argent était parti
  • L’un des fondateurs a affirmé n’avoir personnellement rien touché du tout
  • Je pense que NYCTrainSign aurait pu réussir s’ils avaient au moins parlé avec quelqu’un ayant des compétences en électronique
    • Au lieu de cela, leur principal conseiller était un professeur d’informatique à l’université
  • NYCTrainSign, c’était le projet que le CEO avait bricolé sur son temps libre, puis qu’il a essayé de vendre $300~$600 sans réfléchir à ce qui allait suivre
  • En résumé : "Good Idea, Good Timing, Bad Team, Bad Product"

What Happens Now

  • Quand j’ai commencé tout ça, je rêvais au départ de vendre mon propre panneau
  • J’en ai fabriqué un avec un ESP32, et je l’utilise encore aujourd’hui
  • Mais plus j’y réfléchis, moins je pense être la bonne personne pour le fabriquer et le vendre
  • Le marché des panneaux LED est déjà très concurrentiel : il y a Tidbyt et d’innombrables sociétés sur Amazon
  • J’ai donc décidé d’en rester à un projet d’apprentissage personnel
  • Tout ce qui concerne NYCTrainSign a été publié en open source
    • Y compris le serveur API avec le code de l’exploit
  • Je compte aussi continuer à héberger le nouveau serveur NYCTrainSign (les coûts d’hébergement sont très faibles)
  • Je ne prévois pas d’y ajouter de nouvelles fonctionnalités, mais j’ai des idées pour un firmware amélioré
  • Si vous avez un panneau, j’ai mis en place un site pour le gérer à distance, donc n’hésitez pas à l’utiliser
  • « Si vous n’avez pas de panneau, n’en achetez pas un maintenant »

2 commentaires

 
loblue 2023-01-18

C’est intéressant haha
Mais si jamais ils jugent que c’est rentable et décident d’en faire une activité commerciale, est-ce que ça ne risquerait pas de poser des problèmes juridiques ?

 
kloty 2023-01-16

On a dirait un jeu de gestion façon tycoon.

Code Quality > je pense qu’il y a une coquille, et que plusieurs problèmes de qualité du code sont indiqués comme « aucun ».