이전 블로그에서 사무실에 있는 콜드 브루 커피 통의 무게를 사용하여 Slack 알림을 보내 우리가 부족하고 콜드 브루 커피 통 리필이 필요할 때 알려주는 방법을 자세히 설명했습니다.
2부로 구성된 시리즈의 두 번째 시간에는 저울을 구축한 방법을 보여 드리겠습니다. 주로 많은 시간과 돈을 투자하지 않고 무언가를 원했는데 이미 우리의 요구를 충족시키는 것이 없었습니다.
Elasticsearch 통 설정 요구 사항
우선 프로젝트의 요구 사항을 분석해야 했습니다.
- 저렴(<$100)
- 최소한의 관리 및 수유
- 원격 관리
- 손쉬운 통 레벨 보고
- 통에서 콜드브루를 추출할 때마다 확인(스트레치 목표)
- 가장 중요한 것은 최소한의 시간 투자가 필요하다는 점입니다.*
*저는 하루 일과가 있고 술통 저울을 만드는 일은 제 직업 설명에 없습니다.
초기 연구
첫 번째 과제는 통에서 데이터를 수집하는 방법뿐만 아니라 수집할 데이터를 파악하는 것이었습니다.
일부 오픈 소스 프로젝트는 통 모니터링을 제공하며 약간의 연구 후 측정을 위한 두 가지 주요 방법은 다음과 같습니다.
- 무게
- 유량계 사용
이미 사용 가능한 대부분은 유량계를 사용합니다. 통이 유량으로 "비어 있는지" 여부를 결정하는 것은 조금 더 까다롭습니다. 통이 교체된 시기를 결정하기 위해 일종의 사용자 개입이 필요합니다. 또한 실제 커피 라인에 장치를 설치해야 하므로 잠재적인 문제가 있습니다.
그래서 빌릴 예가 부족함에도 불구하고 우리는 저울로 시작하여 무게를 사용하여 술통 높이를 결정하도록 요청했습니다.
통 저울
실제 규모 하드웨어의 경우 Raspberry Pi와 같은 소형 컴퓨터에 연결할 수 있는 기성품 솔루션을 찾았습니다. 수많은 WIFI 및 Bluetooth 저울이 있지만 대부분은 연속적으로 읽히지 않았습니다. 또는 배터리 전원을 사용했습니다. 또는 인터페이스해야 하는 큰 번거로움. 술통 전용 저울이 몇 개 있긴 하지만 너무 비쌌습니다.
다시 한번 DIY를 해야 했습니다.
저는 Raspberry Pi로 구축한 경험이 있기 때문에 스케일을 구축할 하드웨어가 필요했습니다. Amazon에서 정확히 이 사용 사례를 위해 HX711 증폭기가 있는 50kg 로드 셀 세트를 찾았습니다.
HX711을 사용하여 Arduino 스케일을 구축하기 위한 참조가 많이 있지만 Pi에 사용할 수 있는 참조는 훨씬 적습니다. 운 좋게도 Instructables의 튜토리얼과 사용자 tatobari의 Github 리포지토리에 적합한 몇 가지 python HX711 유틸리티가 포함된 것을 찾았습니다.
전체 아키텍처
우선 전체 시스템이 어떻게 생겼는지에 대한 간단한 도식을 만들어야 했습니다.
하드웨어 빌드
첫 번째 과제는 150파운드 통의 무게 아래에서 구부러지지 않을 만큼 충분히 튼튼한 통 아래에 놓을 수 있을 만큼 충분히 얇은 저울을 찾는 것이었습니다.
스케일을 보강하기 위해 여러 디자인과 방법을 시도했지만 불안정하거나 너무 많은 두께를 추가하여 궁극적으로 탑 튜브에 압력을 가했습니다.
최종 빌드에는 오래된 그릴 화격자, 화격자를 강화하기 위해 철물점에서 가져온 작은 강철 c 채널 조각, 덕트 테이프 및 집타이가 포함되었습니다.
완벽하지는 않지만 궁극적으로 우리의 모든 디자인 요구 사항을 충족했습니다. (좀 더 견고한 솔루션을 염두에 두고 있는 사람이 있습니까?)
배선
4개의 GPIO 핀을 통해 HX711 보드를 Raspberry pi에 연결하고 Wheatstone 브리지의 4개 와이어를 통해 HX711 보드에 스케일을 연결해야 했습니다(Instructables 참조).
kegerator는 공간이 매우 제한적이며 통을 싣고 내릴 때 매우 거칠어질 수 있으므로 HX711과 라즈베리 파이를 통과 함께 배치하는 것은 좋은 결정이 아닌 것 같습니다. 대신 표준 케이블(좋은 오래된 cat 5 또는 6)을 사용하여 실제 저울에서 HX711까지 더 길게 연결할 수 있도록 Raspberry Pi와 HX711을 케게레이터 외부 바로 옆에 배치했습니다. 한쪽 끝에는 저울 옆에 RJ45 커넥터를, 다른 쪽 끝에는 HX711을 추가합니다. 이제 기존 이더넷 케이블을 사용하여 둘을 연결할 수 있습니다.
HX711과 라즈베리파이 사이는 바로 옆에 있기 때문에 표준 점퍼선을 사용했습니다.
소프트웨어
Raspberry Pi를 사용한다는 것은 소프트웨어를 위해 Linux에서 실행되는 모든 것을 사용할 수 있다는 것을 의미합니다.
첫 번째 조각은 GPIO를 통해 HX711 증폭기와 인터페이스하는 코드입니다.
대부분의 HX711 프로젝트가 Arduino용이지만 Python으로 작성된 것과 같이 Raspberry Pi용 HX711 코드가 포함된 GitHub 저장소를 충분히 찾을 수 있습니다.
HX711 예제 코드를 사용하여 Elasticsearch로 보낼 수 있는 파일에 주기적인 무게 판독값을 간단히 기록하는 작은 Python 유틸리티를 작성했습니다. 구성 파일에서 작동하고 몇 가지 테스트 모드를 포함하도록 확장했지만 그 외에는 상당히 간단한 코드입니다.
Elasticsearch로 데이터 전송
다음으로 Elasticsearch로 데이터를 전송해야 했습니다.
Filebeat를 사용하여 가중치 파일을 읽은 다음 Elasticsearch로 데이터를 전송했습니다. Python 스크립트에서 Elasticsearch에 직접 쓸 수 있습니다. 또는 Logstash를 사용하여 파일을 읽습니다. 또는 스크립트를 직접 호출하여 즉석에서 판독값을 얻을 수 있습니다. Filebeat는 매우 가벼우며 최소한의 작업만 필요합니다.
Filebeat를 사용할 때의 유일한 작은 합병증은 Elastic이 기본적으로 Raspberry Pi/ARM용 바이너리를 제공하지 않는다는 것입니다. 구축해야 했습니다.
운 좋게도 Elastic 사이트의 지침은 매우 명확합니다. 사용하려는 Filebeat 버전과 일치하는 올바른 Go 버전을 선택하는 한 빌드는 매우 간단합니다. (일반적으로 개발자 가이드에 명시되어 있지만 해당 페이지의 오른쪽에서 올바른 Beat 버전을 선택했는지 확인하세요.)
모든 구성 요소가 작동하면 마지막 단계는 스케일 리더 스크립트와 Filebeat를 시스템 서비스로 구성하고 부팅 시 시작하도록 하는 것이었습니다.
데이터 인덱싱
Elasticsearch에서 인덱싱된 가중치 데이터를 가져와야 했습니다. Filebeat를 사용하여 수집 파이프라인을 사용하여 Elasticsearch 측의 데이터를 구문 분석하기로 결정했습니다. 다시 한 번, Logstash는 옵션이지만 목표는 Raspberry Pi에서 절대 최소 부하를 생성하여 로컬 대시보드로 사용하고 나중에 더 많은 센서(예:온도)로 잠재적으로 확장할 수 있도록 하는 것이었습니다.
몇 초마다 단순 중량 판독기는 "2018-06-22T20:57:02+0000 – 134.0"과 같은 로그 라인을 내보냅니다. 이것은 단지 타임스탬프 뒤에 "-"와 가중치 판독이 있기 때문에 구문 분석이 매우 간단하므로 수집 파이프라인도 똑같이 간단합니다.
{
"description" : "Parse the readings from the keg scale",
"processors" : [
{
"grok": {
"field": "message",
"patterns": ["^%{TIMESTAMP_ISO8601:readtime}\\s+-\\s+%{BASE10NUM:weight}$"]
}
},
{
"convert": {
"field" : "weight",
"type": "float"
}
},
{
"date" : {
"field" : "readtime",
"formats" : ["ISO8601"]
}
}
],
"on_failure" : [
{
"set" : {
"field" : "ingest_error",
"value" : "{{ on_failure_processor_type }} - Error processing message - {{ _ingest.on_failure_message }} : {{ message }}"
}
}
]
}
그 결과 Filebeat에 포함된 다양한 메타데이터(나중에 여러 통으로 확장할 경우 사용할 수 있음)와 함께 부동 소수점 "가중치" 및 타임스탬프가 있는 문서가 몇 초마다 생성됩니다.
Elasticsearch 클러스터
ObjectRocket을 사용하면 이 부분을 매우 쉽게 수행할 수 있습니다. 기본 클러스터를 가동하고, 몇 개의 ACL을 열고, 몇 명의 사용자를 설정한 다음, 데이터 전달을 시작할 수 있기 때문입니다. 그 외에 유일한 실제 요구 사항은 Kibana가 포함된 기능적인 Elasticsearch 클러스터입니다.
마무리
모든 것이 설정되고 제자리에 있으면 플러그를 꽂기만 하면 됩니다.
짜잔! 그냥 실행됩니다.
초기 결과를 직접 확인할 수 있습니다.
우리는 우리에게 보여줄 간단한 게이지로 끝났습니다.
- 통에 남은 콜드브루의 비율
- Timelion 추세선
- 가장 최근 리필 날짜
시스템에는 Canvas 및 Vega와 같은 멋진 새 프로젝트와 함께 더 많은 추가 기능을 위한 공간이 있지만 지금은 작업을 완료합니다.