# 죽은 IoT 회사를 넘겨 받기

> Clean Markdown view of GeekNews topic #8265. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=8265](https://news.hada.io/topic?id=8265)
- GeekNews Markdown: [https://news.hada.io/topic/8265.md](https://news.hada.io/topic/8265.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2023-01-16T11:06:02+09:00
- Updated: 2023-01-16T11:06:02+09:00
- Original source: [blog.kchung.co](https://blog.kchung.co/taking-over-a-dead-iot-company/)
- Points: 21
- Comments: 2

## Topic Body

### NYCTrainSign이 폐업한지 5년  
- 뉴욕시 지하철의 도착시간을 알려주는 개인용 LED 전광판 (라즈베리파이 기반)  
- 회사가 실패한 이유를 조사하고, 그들의 Fleet을 넘겨받기 위한 Exploit를 작성   
- 당시 인스타/페북에서 엄청 인기였지만, 물건을 못받은 사람도 많음  
- 중고판매자를 통해서 구해 실제로 뜯어보니 내부는 수준 이하였고, 지속 가능하지 못한 비즈니스였음  
  - BOM(Bill of Material)이 너무 높음 (즉 제조원가 자체가 높음)  
  - 나는 보통 BOM 비용에 4배정도를 곱해서 소매 가격을 추측함  
### 부품 가격들   
- Raspberry Pi 3 - $35  
- Adafruit LED Matrix Hat - $25  
- LED Matrix * 2 - $60  
- 5V 2A Power Supply - $5  
- 4GB MicroSD Card - $7   
- Wood Case - $15  
- 그외 전선, 버튼, 나사, 패키징 등 - $3   
- 즉, 이렇게만 계산해봐도 $150 이니 $600은 받았어야 함   
### 그들은 트릭을 몰랐음  
- 웹아카이브에서 그들의 홈페이지를 보니 $599로 팔려고 했었던 듯   
- 하지만 처음엔 $299 나 $100 에도 팔았음(베타버전)  
- 월$30에 대여해주려는 시도도 했었던듯 (하드웨어는 초기비용이 필요해서 이 방식도 어려웠을 것)  
### 누가 삽을 팔았나   
- "골드러시때는 삽을 팔아라" 여기서 누가 삽을 팔아 돈을 벌었을까? Adafruit   
- "Adafruit LED Matrix HAT" 을 사용함으로써 $25(약 20%)의 가격이 상승했음   
- 이것은 약간의 엔지니어링 노력이면 절감할 수 있음. 꼭 필요한 것이 아니기 때문에   
  - 직접 와이어링도 가능했음. 또는 $2 짜리 저렴한 HAT들도 있음   
- 대부분 Adafruit의 제품은 초기 프로토타이핑에만 사용되고, 실 생산때는 더 저렴한 것으로 교체됨   
- 라즈베리파이도 삽 판매자라고 생각할 수 있지만, Arduino나 ESP32를 쓰는 것은 좀 오버인것 같음   
- 파이3로 시작했다가, Pi Zero W로 교체하는게 맞았을거라고 봄   
### 코드 읽어 보기   
- MicroSD에 들어 있는 Python & NodeJS 코드를 살펴봤음   
- 2개의 메인 컴포넌트가 있음 : Python 서버(LED 서버) 와 NodeJS 서버(Config 서버)  
#### LED Server   
- LED Matrix에 그리는 기능과 회사 API로 부터 열차 정보를 가져오는 기능  
- Config 서버와 통신해서 사용자 설정을 가져옴   
- 열차 데이터를 받아와서 이미지/텍스트를 생성해서 LED Matrix에 렌더링   
#### Config Server   
- 사용자 정보를 JSON에 저장하고 업데이트 요청을 받아서 해당 파일을 업데이트   
- 부팅때에는 Config Server가 최신 정보를 가져옴   
- AWS IoT Core에 접속해서 실시간 설정 변경 정보를 MQTT서버에서 받음   
#### Code Quality   
- 코드 품질에 여러가지 문제가 있음  
- Transit API가 각 역이 여러개의 열차 라인을 가질수 있다는 것을 고려하지 않음   
- 펌웨어 업데이트 프로세스가 없음   
- 많은 파이썬 코드들이 그냥 시스템 콜을 사용해서 시스템 변경을 수행   
- 파이썬 LED 서버가 NodeJS Config 서버와 통신해서 정보를 가지고 오는데, 이것은 아마도 AWS IoT Core가 NodeJS에서 코딩하기 쉽고, 파이썬이 디스플레이 관리를 하기가 쉬웠기 때문일 거라고 예상   
- 탭과 스페이스가 섞여있음 (아마도 코드 에디터 설정이 잘못된 듯)  
- 전체 git history가 micro sd에 저장되어 있음   
- bash history도 저장되어 있음  
- 코드 재사용이 거의 없음   
### Sign Ressurection   
#### Shell 얻기  
- 대부분의 라즈베리파이는 MicroSD가 암호화 되어있지 않기 때문에 루트쉘 얻기가 쉬움   
- 싱글유저모드로 부팅해서 pi 사용자에 대한 암호만 리셋하면 됨   
- 회사의 API는 이미 존재하지 않고, 기기는 인터넷이 연결 안된상태에선 하드코드된 로컬 데이터를 사용하게 되어있음   
#### 서버 재생성 하기   
- API용 도메인을 구입 trainsignapi.com   
- 이제 도메인을 완전히 제어가 가능해졌음  
- 열차 정보는 https://wheresthefuckingtrain.com/ , 날씨 정보는 https://open-meteo.com/ 를 이용   
#### Sign의 제어 얻기   
- 다른 IoT장비들처럼, Sign도 많은 시스템 호출을 사용   
- 그중 하나의 호출이 Sign ID를 쉘커맨드에 직접 붙여서 사용   
- API서버를 직접 제어하고 있으므로, 모든 Sign들을 원격으로 제어가 가능  
- 몇번의 작업끝에 exploit를 작성   
  - Sign기기가 켜졌을때 설정 정보를 가져오고, 이미지 로고에 대한 요청을 함   
  - 이때 Sign ID가 넘어옴  
  - 이 ID를 저장해 둔뒤, 다음번 이미지 로고 요청시 Exploit를 Sign에 보냄  
  - 사용자가 Sign을 리부팅 하게 하면, exploit가 재시작시에 동작됨   
  - exploit가 필요한 코드를 업데이트하고, 우리의 서버와 페어링 하게 만들었음   
- 이제 해당 기기들은 새 API 서버와 잘 동작함   
### 무슨 일이 있었나 ?  
- 너무 많은 할인 판매가 문제였음  
  - $150에 만들어서 $117에 판매가 불가능   
  - $300도 너무 쌈. 처음부터 $600은 받았어야함   
- 스타트업 치고는 너무 많은 광고 담당자와 광고비용을 썼음  
- 수요에 비해서 제품을 많이 만들지도 못했음(수작업)  
  - 그럼에도 불구하고 계속 주문을 받아서 마치 폰지사기처럼 새 주문비용으로 이전에 할인해서 판것들을 만듦   
  - 중국으로 생산을 옮기는 것도 하지 못했음   
- 링크드인을 보면 창업자가 4명이었고, 나중엔 11명으로 늘었다고, 특정 시점엔 15명까지로 늘었음   
  - 파운더당 $60k 만 잡아도, $400 수익이 나는 기기를 600개씩은 팔아야 함   
- 창업자가 공유한 스크린샷에 의하면 2달만에 $250k 매출을 내었다고 하는데   
  - 기계 할인을 너무 많이 해서 얼마나 수익이 났는지 알 수 없음   
- 창업자들은 무슨일이 일어났는지, 왜 제품이 몇개 안 발송되었는지, 돈은 다 어디로 갔는지 명확히 밝히지 않았음   
- 한명의 창업자는 개인적으로는 전혀 돈 받은게 없다고 했음.   
- NYCTrainSign 팀이 적어도 전자쪽 지식이 있는 누군가와 얘기라도 나눴다면 성공했을 것이라고 믿음   
  - 대신 그들의 메인 어드바이저는 대학의 컴퓨터 사이언스 교수였음   
- NYCTrainSign 은 CEO가 여가 시간에 만든 프로젝트를, 나중에 일어날 일을 고려하지 않고 $300~$600에 판매하려고 한 것   
- 결론적으로 **"Good Idea, Good Timing, Bad Team, Bad Product"**  
### What Happens Now   
- 처음에 이걸 시작할때, 난 나만의 Sign을 팔 꿈을 꾸었음   
- ESP32로 만들어서 지금도 사용하고 있음   
- 하지만 생각하면 할수록 난 이걸 만들어서 팔 적합한 사람이 아닌 것 같음   
- 이미 LED Sign은 시장 경쟁도 심함 : Tidbyt 이나 아마존에 수많은 회사들이 있음   
- 그래서 그냥 개인 학습 프로젝트로 남겨두기로   
- NYCTrainSign 에 대한 것은 오픈소스로 공개함   
  - exploit 코드를 포함한 API 서버도 포함   
- 또한 새로운 NYCTrainSign 서버는 계속 호스팅 할 예정(호스팅 비용이 매우 저렴)  
- 뭔가 새로운 기능을 넣을 것은 아니지만, 개선된 펌웨어에 대한 아이디어는 있음   
- Sign을 가지고 있다면 원격으로 관리하는 사이트를 만들어뒀으니 이용해 볼 것   
- "Sign이 없다면 새로 구매하지는 마세요"

## Comments



### Comment 14314

- Author: loblue
- Created: 2023-01-18T15:05:41+09:00
- Points: 1

재밌네요 ㅋㅋ  
근데 이거 만약에 수익성이 있다고 판단해서 사업화하면 법적인 문제는 안되려나요?

### Comment 14260

- Author: kloty
- Created: 2023-01-16T11:24:08+09:00
- Points: 2

타이쿤 게임을 구경하는 느낌이네요  
   
Code Quality > 코드 품질에 여러가지 문제가 "없음"으로 오타가 난 것 같습니다
