Community이미지github.com

NEEO 드라이버 · meta 엔진

jac459/meta 엔진을 통해 NEEO 리모컨용 드라이버를 생성, 수정, 디버깅합니다. JSON 기반 디바이스 파일(버튼, 라벨, 슬라이더, 스위치, 이미지, 디렉터리, 리스너, 디스커버리, 등록)과 그에 딸린 컴패니언 서비스(Node-RED 플로우, 로컬 REST 브리지)를 다룹니다.

NEEO 드라이버 · meta 엔진란 무엇인가요?

이 스킬은 NEEO 리모컨 생태계에서 사용되는 meta(jac459/meta) 엔진 기반 드라이버를 개발하고 관리하는 데 특화되어 있습니다. 사용자는 JavaScript 대신 순수 JSON으로 디바이스를 기술하며, meta 엔진이 이를 NEEO SDK 드라이버로 자동 변환하여 로컬 NEEO Brain에 등록합니다. 드라이버 파일 구조, 명령 유형, 변수 시스템, 리스너 패턴, 디스커버리 방식 등에 대한 엄격한 규칙을 따르며, 디버깅과 배포 단계도 명확히 정의합니다. TV, AV 리시버, 미디어 플레이어, 조명 등 다양한 기기를 NEEO 리모컨으로 제어하고자 할 때 사용하며, 특히 물리적 상태 변화를 감지하기 위한 이벤트 기반 리스너와 폴링 전략을 강조합니다. 또한, 복잡한 프로토콜(raw TCP, 상태 저장 세션 등)을 처리할 때는 Node-RED + MQTT 또는 로컬 REST 브리지 같은 컴패니언 서비스를 권장하여 드라이버의 복잡도를 낮춥니다. 레퍼런스 문서와 검증 스크립트(JSON 유효성 검사, 드라이버 체크, 가드 시뮬레이션)를 제공하여 안정적인 드라이버를 보장합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/KoBa-beep/ClaudeCode-Skill/tree/HEAD/neeo-meta/neeo-meta-driver

Installed? Explore more 이미지 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

meta로 NEEO 드라이버 만들기

meta(jac459/meta)는 active/ 폴더 안의 JSON 디바이스 파일을 읽어 각 파일을 NEEO SDK 드라이버로 바꾸고 로컬 NEEO Brain에 등록하는 Node.js 엔진입니다. 디바이스를 JSON으로 기술하면 됩니다. JavaScript는 작성하지 않습니다(작은 DYNAMIK 표현식 제외).

언어: 사용자에게는 사용자의 언어로 작성하세요. JSON 키, 엔진 키워드, 버튼 이름, 로그 문자열은 여기에 문서화된 그대로(영어) 유지합니다.

범위: 인수 이전 NEEO SDK, 로컬 Brain, meta만 중요합니다. Control4 자료와 NEEO 클라우드(종료)는 무시합니다.

기본 규칙(절대 생략 금지)

  1. JSON 키나 명령 유형을 절대 임의로 만들지 마세요. 레퍼런스에 기능이 없으면 그렇게 말하고 대안을 제시하세요: 컴패니언 서비스(Node-RED + MQTT 또는 작은 로컬 REST 브리지, references/companion-services.md 참조), cli 명령, 또는 숨겨진 버튼 체인.
  2. 순수 JSON: 주석 없음, 후행 쉼표 없음, 큰따옴표 사용. python3 -m json.tool file.json 과 python3 scripts/check_driver.py file.json 으로 검증하세요.
  3. 명령 유형은 대소문자 구분: http-get, http-rest, http-post, http-get-soap, static, cli, repl, webSocket, socketIO, jsontcp, mqtt, wol, mDNS, android.
  4. version을 올리세요 화면에 보이는 구성 요소가 추가될 때마다. Brain은 구성 요소를 추가만 합니다. 이름을 바꾸거나 삭제하려면 NEEO 앱에서 디바이스를 삭제하고 다시 추가해야 합니다(레시피와 바로 가기도 다시 만들어야 함). 설치된 디바이스에서는 버전을 올려도 충분하지 않을 때가 있습니다. Brain을 확인하세요(references/debugging.md).
  5. 라벨, 스위치, 슬라이더, 이미지, 센서의 이름(키): 글자와 숫자만 사용. 공백이나 기호는 센서 링크를 깨뜨립니다(Brain에서 "sensor": null). 바로 가기로 사용되는 구성 요소는 리모컨이 동기화 시 충돌합니다. 표시되는 label 텍스트는 자유롭게. 버튼 이름에는 공백이 허용되지만 +와 악센트는 피하세요(DISNEY PLUS, 레이블 Disney+).
  6. 라벨에 바인딩된 변수에 ""를 절대 쓰지 마세요: meta v1.2.0에서 라벨이 텍스트에서 ""로 돌아가면 meta가 멈춥니다. " "(또는 읽을 수 있는 대체 텍스트)를 쓰세요. 라벨 변수도 " "로 초기화하는 습관을 들이세요.
  7. 외부 텍스트가 라벨에 도달하기 전에 반드시 정화하세요: " -> ', \ -> /, 제어 문자 -> 공백, $ -> $(전각). 드라이버와 소스 모두에서 하세요.
  8. 리스너는 세션당 한 번 ListenerOn 가드 + 모든 보이는 컨트롤에 연결된 숨겨진 __LISTEN 버튼을 통해 시작됩니다. POWER ON만으로는 절대 충분하지 않으며, mqtt 리스너에서 __CLEANUP을 절대 호출하지 마세요(references/listeners-and-state.md).
  9. 폴링보다 이벤트(webSocket, socketIO, mqtt). 폴링해야 한다면 pooltime >= 3000.
  10. $Result는 항상 문자열, 실패 시 "undefined": 모든 JSON.parse를 보호하세요. 버튼은 스칼라(ok)를 받고, 디렉터리 액션 피더는 ["ok"]를 받습니다.
  11. 변수 이름: 다른 변수 이름의 접두사가 되는 이름을 절대 사용하지 마세요. $Var가 문자에 붙으면 다른 변수로 읽힙니다.
  12. 보안: DYNAMIK와 cli는 meta 호스트에서 코드를 실행합니다. 공유할 드라이버에 비밀을 하드코딩하지 마세요. meta는 root/관리자 권한으로 실행되어서는 안 됩니다.
  13. 되돌릴 수 없는 변경은 동의 필요: 보이는 구성 요소(예: DIGIT 0-9)를 추가하는 것은 디바이스를 재설치하지 않고는 되돌릴 수 없습니다. 먼저 물어보세요.
  14. 결과물 구분: meta 드라이버는 JSON 객체({로 시작, 이름에 -flow 없음, active/에 넣음)입니다. Node-RED 플로우는 JSON 리스트([로 시작, 항상 *-flow.json 이름, Node-RED에 임포트).
  15. template에서 dynamicname과 dynamicid는 필수입니다. dynamicid는 안정적이어야 합니다(DHCP IP 대신 MAC 주소나 하드웨어 ID).

워크플로우

  1. 필요한 정보 수집(한 번에 최대 3개의 집중 질문): 정확한 디바이스 모델; 제어 프로토콜 또는 API(HTTP/REST, WebSocket, raw TCP, MQTT, IR 전용, Android TV...); 고정 IP 여부와 안정적인 ID(MAC); 제어해야 할 것과 표시해야 할 상태; meta 버전과 실행 위치(Pi + pm2, Docker...); MQTT 브로커와 Node-RED 사용 가능 여부. 가능하면 디바이스 공식 API 문서를 찾으세요.
  2. NEEO 타입 선택(references/driver-anatomy.md, 섹션 types and recognized buttons)과 디스커버리 패턴(references/discovery.md): 고정 단일 디바이스, 사용자 입력 IP, mDNS, 또는 허브.
  3. assets/의 스켈레톤에서 시작: skeleton-static.json(고정 주소 단일 디바이스) 또는 skeleton-register-ip.json(사용자가 IP 입력). references/patterns.md의 검증된 패턴을 재사용하세요.
  4. 로직 위치 결정. 간단한 HTTP 또는 WebSocket 디바이스: 드라이버 내에 모든 것. 바이너리 또는 상태 저장 프로토콜(raw TCP, 영구 세션, 페어링, 버스트 상태): 중간에 컴패니언 서비스를 두고 빠른 HTTP 명령과 보존 MQTT 메시지로 상태 전송(references/companion-services.md).
  5. 전달 전 확인:
    • python3 -m json.tool driver.json 다음 python3 scripts/check_driver.py driver.json(이름, 빈 라벨 값, 타입, 버전, 가드, 폴링...);
    • 리스너가 있는 드라이버는 node scripts/simulate_guard.js driver.json(세션 간 __INITIALISE / __CLEANUP 카운트);
    • 까다로운 DYNAMIK 표현식은 실제 치환 규칙으로 Node에서 평가(references/logic-and-commands.md);
    • references/pitfalls.md를 다시 읽으세요.
  6. 다음 순서로 전달: 요약(디바이스, 프로토콜, NEEO 타입, 디스커버리 패턴, 포함/미포함); 명시적 파일명과 함께 완전한 검증된 JSON 파일; 배포 단계(active/에 복사, meta 재시작, NEEO 앱에서 디바이스 추가, 레시피 표시 및 바로 가기 생성); 테스트 계획(시도할 버튼, 예상 결과, 확인할 로그 라인); 실제 디바이스에서 확인하지 않은 가정; 다음 반복. 여러 파일 프로젝트(드라이버 + 플로우 + 서비스)의 경우: 작업 순서, 각 결과물의 버전 표시, 설치된 버전 확인 방법. 실제 디바이스에서 테스트하지 않은 내용을 항상 말하세요.

레퍼런스 맵(작업에 필요한 것만 읽기)

파일읽어야 할 때
references/meta-engine.md아키텍처, 설치, 폴더, 재시작, 로그 레벨, meta가 노출하는 MQTT 토픽, Docker/NAS 호스팅, 알려진 meta v1.2.0 버그
references/driver-anatomy.md최상위 키, NEEO 디바이스 타입과 인식되는 버튼 이름, 변수, $ 치환, DYNAMIK, UI 구성 요소
references/logic-and-commands.mdevalwrite, evaldo, evalnext, 특수 버튼, 모든 명령 유형, queryresult / JSONPath
references/listeners-and-state.md리스너, ListenerOn 가드, MQTT 리스너 동작, 버스트 상태 소스, 인스턴스 재구축
references/discovery.mddiscover, register, template, initcommandset, mDNS, IP 입력, 허브, 페어링
references/directories.md목록, 피더, item* 필드, 액션, 다중 레벨 탐색
references/patterns.md검증된 레시피: 볼륨, 전원, 상태 표시줄, 지속성, 체인, 루프, 대체 경로, 앱 런처, 아트워크 이미지
references/pitfalls.md전달 전 반드시 다시 읽어야 함
references/debugging.mdmeta, Mosquitto, Brain 데이터 읽기, 로그 시그니처, 링크 분리, 샌드박스 테스트
references/companion-services.mdNode-RED 및 MQTT 브리지, 로컬 REST 브리지, Apple TV / pyatv 교훈
references/community-drivers.md모방할 레퍼런스 드라이버, SDK <-> meta 매핑, 소스

레퍼런스에 사용된 증거 태그

[code v1.2.0] meta 소스 코드(브랜치 Release)에서 읽음; [observed] 실제 드라이버나 실제 설치에서 확인; [to verify] 아직 테스트되지 않은 추론. 태그가 없고 동작이 중요한 경우, 추측보다 meta 코드를 확인(git clone --depth 1 --branch Release https://github.com/jac459/meta)하고 어떤 방법을 사용했는지 말하세요.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

관련 스킬