Đã 5 năm kể từ khi NYCTrainSign đóng cửa
- Bảng LED cá nhân hiển thị thời gian tàu đến của tàu điện ngầm New York City (dựa trên Raspberry Pi)
- Điều tra lý do công ty thất bại và viết một exploit để tiếp quản fleet của họ
- Khi đó nó cực kỳ nổi trên Instagram/Facebook, nhưng cũng có rất nhiều người không nhận được hàng
- Mua được một chiếc qua người bán đồ cũ rồi tháo ra xem thì bên trong ở mức dưới chuẩn, và đây là một mô hình kinh doanh không bền vững
- BOM (Bill of Material) quá cao (tức là chi phí sản xuất bản thân đã rất cao)
- Tôi thường nhân chi phí BOM lên khoảng 4 lần để ước tính giá bán lẻ
Giá linh kiện
- Raspberry Pi 3 - $35
- Adafruit LED Matrix Hat - $25
- LED Matrix * 2 - $60
- Nguồn 5V 2A - $5
- Thẻ MicroSD 4GB - $7
- Vỏ gỗ - $15
- Ngoài ra dây điện, nút bấm, ốc vít, đóng gói, v.v. - $3
- Chỉ tính sơ như vậy cũng đã là $150, nên lẽ ra phải bán với giá $600
Họ không biết mẹo này
- Xem website của họ trên Web Archive thì có vẻ họ định bán với giá $599
- Nhưng ban đầu họ cũng từng bán với giá $299 hoặc $100 (bản beta)
- Có vẻ họ cũng từng thử cho thuê với giá $30/tháng (nhưng phần cứng cần chi phí đầu vào nên cách này chắc cũng khó khả thi)
Ai là người bán xẻng
- "Trong cơn sốt vàng thì hãy bán xẻng" — vậy ai là người kiếm tiền bằng cách bán xẻng ở đây? Adafruit
- Việc dùng "Adafruit LED Matrix HAT" đã làm giá tăng thêm $25 (khoảng 20%)
- Đây là khoản có thể cắt giảm chỉ với một chút công sức kỹ thuật, vì nó không phải thứ bắt buộc
- Có thể tự đi dây trực tiếp. Hoặc dùng các HAT rẻ hơn giá khoảng $2
- Phần lớn sản phẩm của Adafruit chỉ được dùng ở giai đoạn prototype ban đầu, rồi khi sản xuất thực tế sẽ được thay bằng thứ rẻ hơn
- Cũng có thể xem Raspberry Pi là người bán xẻng, nhưng dùng Arduino hay ESP32 ngay từ đầu có lẽ hơi quá đà
- Theo tôi thì bắt đầu với Pi 3 rồi sau đó chuyển sang Pi Zero W mới là hướng đúng
Đọc thử code
- Tôi đã xem qua code Python và NodeJS nằm trong MicroSD
- Có 2 thành phần chính: server Python (LED server) và server NodeJS (Config server)
LED Server
- Chức năng vẽ lên LED Matrix và lấy thông tin tàu từ API của công ty
- Giao tiếp với Config server để lấy thiết lập người dùng
- Nhận dữ liệu tàu, tạo hình ảnh/văn bản rồi render lên LED Matrix
Config Server
- Lưu thông tin người dùng vào JSON và nhận yêu cầu cập nhật để chỉnh sửa file tương ứng
- Khi khởi động, Config Server sẽ lấy thông tin mới nhất
- Kết nối tới AWS IoT Core để nhận thay đổi cấu hình theo thời gian thực từ MQTT server
Chất lượng code
- Chất lượng code có nhiều vấn đề
- Transit API không tính đến chuyện mỗi ga có thể có nhiều tuyến tàu
- Không có quy trình cập nhật firmware
- Nhiều đoạn code Python chỉ đơn giản dùng system call để thực hiện thay đổi hệ thống
- Python LED server giao tiếp với NodeJS Config server để lấy thông tin, có lẽ vì AWS IoT Core dễ code hơn bằng NodeJS còn Python thì dễ quản lý phần hiển thị hơn
- Trộn lẫn tab và space (có lẽ do cấu hình code editor bị sai)
- Toàn bộ git history được lưu trong micro sd
- Bash history cũng được lưu lại
- Hầu như không có tái sử dụng code
Hồi sinh chiếc Sign
Lấy shell
- Phần lớn Raspberry Pi không mã hóa MicroSD nên rất dễ lấy root shell
- Chỉ cần boot vào single-user mode rồi reset mật khẩu của user
pi
- API của công ty đã không còn tồn tại, và thiết bị được lập trình để dùng dữ liệu local hardcode khi không có kết nối Internet
Dựng lại server
Giành quyền điều khiển Sign
- Giống như nhiều thiết bị IoT khác, Sign cũng dùng rất nhiều system call
- Một trong số đó dùng Sign ID bằng cách nối trực tiếp vào shell command
- Vì tôi kiểm soát trực tiếp API server, nên có thể điều khiển từ xa tất cả các Sign
- Sau vài lần thử, tôi đã viết được exploit
- Khi thiết bị Sign bật lên, nó lấy thông tin cấu hình và gửi yêu cầu lấy image logo
- Lúc này Sign ID sẽ được gửi kèm
- Lưu ID này lại, rồi ở lần yêu cầu image logo tiếp theo sẽ gửi exploit tới Sign
- Nếu người dùng reboot Sign thì exploit sẽ chạy khi khởi động lại
- Exploit cập nhật đoạn code cần thiết và khiến thiết bị pair với server của chúng tôi
- Giờ các thiết bị đó hoạt động tốt với API server mới
Chuyện gì đã xảy ra?
- Vấn đề là họ giảm giá bán quá nhiều
- Tạo ra với giá $150 mà bán $117 là không thể
- $300 cũng vẫn quá rẻ. Ngay từ đầu lẽ ra phải bán $600
- Với một startup thì họ có quá nhiều người làm marketing và chi phí quảng cáo
- Họ cũng không thể làm ra đủ sản phẩm so với nhu cầu (làm thủ công)
- Dù vậy họ vẫn tiếp tục nhận đơn, gần như kiểu Ponzi, dùng tiền từ đơn mới để làm những đơn cũ đã bán giảm giá
- Họ cũng không thể chuyển sản xuất sang Trung Quốc
- Theo LinkedIn thì có 4 nhà sáng lập, sau đó tăng lên 11 người, và có thời điểm lên tới 15 người
- Chỉ cần tính $60k cho mỗi founder thì cũng phải bán ít nhất 600 thiết bị có lãi $400/chiếc
- Theo screenshot do founder chia sẻ thì họ đạt doanh thu $250k chỉ trong 2 tháng
- Nhưng vì giảm giá máy quá nhiều nên không biết thực sự lãi được bao nhiêu
- Các founder không làm rõ rốt cuộc chuyện gì đã xảy ra, vì sao chỉ giao được rất ít sản phẩm, và toàn bộ số tiền đã biến đi đâu
- Một founder nói rằng cá nhân mình hoàn toàn không nhận được đồng nào
- Tôi tin rằng nếu đội NYCTrainSign ít nhất chịu nói chuyện với ai đó có kiến thức về điện tử thì họ đã có thể thành công
- Nhưng thay vào đó, cố vấn chính của họ lại là một giáo sư khoa học máy tính ở đại học
- NYCTrainSign về bản chất là một dự án do CEO làm lúc rảnh, rồi sau đó cố bán với giá $300~$600 mà không tính đến những gì sẽ xảy ra tiếp theo
- Kết luận là "Good Idea, Good Timing, Bad Team, Bad Product"
Điều gì xảy ra tiếp theo
- Lúc mới bắt đầu việc này, tôi từng mơ sẽ bán Sign của riêng mình
- Tôi đã làm một cái bằng ESP32 và đến giờ vẫn đang dùng
- Nhưng càng nghĩ thì tôi càng thấy mình không phải người phù hợp để làm rồi bán thứ này
- Thị trường LED Sign vốn đã cạnh tranh rất khốc liệt: có Tidbyt và vô số công ty trên Amazon
- Vì vậy tôi quyết định chỉ giữ nó như một dự án học tập cá nhân
- Những gì liên quan đến NYCTrainSign đã được công khai dưới dạng mã nguồn mở
- Bao gồm cả API server kèm exploit code
- Ngoài ra, tôi sẽ tiếp tục host server NYCTrainSign mới (chi phí host rất rẻ)
- Tôi không định thêm tính năng mới gì, nhưng có một số ý tưởng cho firmware được cải thiện
- Nếu bạn có Sign thì tôi đã làm sẵn một website để quản lý từ xa, cứ thử dùng
- "Nếu không có Sign thì đừng mua mới"
2 bình luận
Thú vị phết haha
Nhưng nếu cái này được đánh giá là có khả năng sinh lời rồi đem ra kinh doanh, thì liệu có vấn đề pháp lý gì không nhỉ?
Cảm giác như đang xem một game tycoon vậy.
Code Quality > Có vẻ như trong phần chất lượng mã có lỗi gõ nhầm thành "không có" đối với nhiều vấn đề khác nhau