Apple HomeKit의 장치를 실행하기 위해 typescript로 홈bridge를 쓰기 위한 장치

이른바 애플 홈키트
여기 있다 소개한 바와 같이 애플이 제공하는 스마트 창을 제공하는 플랫폼.다른 회사의 제품(google,alexa)과 달리 로컬 네트워크에서 실행되기 때문에 인터넷에 연결할 수 없는 환경에서도 실행됩니다.그 기관은 로컬 네트워크에 아이패드나 애플TV 등 데이터 센터가 있어 허브를 통해 통신한다.인터넷에 접속할 수 있어도 중심 기기가 작동하지 않으면 애플홈킷을 사용하는 스마트폰은 생명선이 끊어진 상태여서 스마트폰이 전혀 작동하지 않는다는 것이다.
HomeBridge 소개
애플 홈키트를 지원하는 장치는 매우 적다.가장 큰 이유는 애플의 인정 제도다.애플은 애플의 친환경 시스템을 기반으로 한 인증 제도MFi를 가지고 있어 이곳에 적응하지 못하면 애플을 홈키트와 제품에 대대적으로 적용할 수 없다.여기에 애플엄격한 심사이 있어 비용이 들고, 고주파 업데이트가 있어 필자 같은 취미로 스마트폰을 즐기는 사람들에게 큰 장애가 된다.
이에 따라 HomeBridge라 불리는 MFi를 거치지 않더라도 적절한 ID를 사용하면 애플 홈키트 산하에 기기를 등록할 수 있다.자세한 건 인터넷에서 찾아보면 많은 정보를 얻을 수 있을 거예요.홈bridge를 왜 시작하는지 장치에 대한 글이 많지만 장치의 운동을 인코딩하는 글이 발견되지 않았기 때문에 이 기사에서 간단한 실현을 보여 주고 싶습니다.
HomeBridge API
기본적으로 여기 있다 API를 사용합니다.
구체적인 예: "Apple HomeKit로 방의 온도와 습도를 회복할 수 있는 장치를 설치합니다."
Apple HomeKit를 사용하여 온도와 습도를 되돌릴 수 있는 장치를 만듭니다.I2C를 통해raspberry pizeroBME280에 연결된 온도와 습도를 값으로 하는 웹 서비스를 시작하고 애플의 홈 앱에서 이 웹 서비스를 읽고 아이폰에 표시한다.다음은 실제 코드입니다.
  • AppleHomuKit의 예제 장치
  • BME280 값을 반환하는 웹 서비스
  • 전체 이미지
  • 설비의 종류(텔레비전, 운동 센서 등)를 선택한다.지원되는 내용은 여기.에 쓰여 있습니다.
  • Plaatform pluggin 또는 Access sory pluggin 을 선택합니다.

  • 참조거푸집를 인코딩합니다.
  • 장치 유형 선택
    이번에는 온도와 습도의 값을 나타낸다.따라서 선택온도 센서습도 센서.
    plateform pluggin 또는 Access sory pluggin 선택
    Accessry plugon을 하나의 디바이스로 고려할 수 있습니다.Plaatform pluggin은 여러 Accessory pluggin이 포함된 플러그인입니다.Phillips Hue처럼 Gateway에서 하나의 pluggin으로 조명과 인감 센서 등 여러 장치를 관리하려면 Plaatform pluggin을 선택하십시오.이번에는 여러 장치가 아닌 BME 280에 연결된 raspberry pizero에서 센서 값을 꺼내 Accessory로 사용했다.
    참조 템플릿 인코딩
    config 파일
    다음은 config 파일입니다.동작과 관련된 부분은 온도는temperature의host를 보고, 습도는huidity의host를 본다.다른 것은 적당한 메타데이터가 필요하다.
         "accessories":[
                {
                    "accessory": "Bme280SensorAccessory",
                    "name": "Bme280SensorAccessory",
                    "temperature":{
                        "name":"temperature",
                        "host":"http://192.168.1.140:8088/bme280/temp"
                    },
                    "humidity":{
                        "name":"humidity", 
                        "host":"http://192.168.1.140:8088/bme280/humid"
                    },
                    "manufacturer": "Bosch",
                    "model": "BME280",
                    "serialnumber": "00000001"
                }
         ]
    
    메타데이터
    새accessory의 제조사, 시퀀스 번호, 모델을 제공합니다.다음은 홈 응용 프로그램에 해당하는 곳입니다.

    AccessoryInformation의 setCharacteristic를 사용하여 config 파일에서 얻은 값을 전달합니다.
    this.informationService = new hap.Service.AccessoryInformation()
        .setCharacteristic(hap.Characteristic.Manufacturer, config.manufacturer)
        .setCharacteristic(hap.Characteristic.SerialNumber, config.serialnumber)
        .setCharacteristic(hap.Characteristic.Model, config.model);
    
    accessory에서 제공하는 서비스에 대한 기술
    accessory가 제공하는 서비스를 정의하고 getCharterstic에 전달할 때handler입니다.여기에 온도와 습도의 서비스를 정의하고 다양한 온도와 습도의 되돌아오는 방법을 제공한다.
    // create a new Temperature Sensor service
    this.temperatureService = new hap.Service.TemperatureSensor(this.tempname);
    this.HumidityService = new hap.Service.HumiditySensor(this.humidname);
    
    // create handlers for required characteristics
    this.temperatureService.getCharacteristic(api.hap.Characteristic.CurrentTemperature)
      .on('get', this.handleCurrentTemperatureGet.bind(this));
    this.HumidityService.getCharacteristic(api.hap.Characteristic.CurrentRelativeHumidity)
      .on('get', this.handleCurrentHumidityGet.bind(this));
    
    온도의handler는 다음과 같다.콜백 함수를 통해 온도를 그 콜백에 불러옵니다.콜백 함수에 null을 건네주지만, null을 통과하면 성공하고, Error를 통과하면 실패합니다.(이 예에서catch가 있어도 로그만 나오고 적절한 오류 처리가 없습니다.)  
    이 콜백의 처리는 axios GET가 config에서 제공하는temphost URL입니다. 그response의 JSON에서value 키의 값을 가져옵니다.
        handleCurrentTemperatureGet(callback: CharacteristicGetCallback) {
          this.log.debug('Triggered GET CurrentTemperature');
          let currentValue: number = 0;
          // set this to a valid value for CurrentTemperature
          axiosGet(this.temphost)
          .then(data => {
            this.log.debug(data);
            currentValue = data.value;
            callback(null, currentValue);
          })
          .catch(err => {
            this.log.error(err);
          });
    
        }
    
    다음에 typescript를 컴파일하고 홈bridge의 적당한 곳에 설정하면 작업을 시작합니다.그 근처 검색엔진에는 다양한 정보가 있으니 찾아보세요.
    이 기사를 계기로 홈브리지 기기를 직접 제작해 집안의 다양한 것들을 자동화하고 즐기면 좋겠다!!

    좋은 웹페이지 즐겨찾기