준비물
Hass.io
헤이홈, 고퀄스위치(본인 기준 1구,3구,4구)
CC2531+Zigbee2MQTT
안녕하세요. 랜이입니다.
기존에 고퀄스위치를 ST(스마트싱스)에 연결하여 HA-ST 콤포넌트로 이용하였는데요
아무래도 ST 클라우드서버를 거치다보니 딜레이가 생깁니다.
그래서 라즈베리파이에 CC2531을 장착하여 HA에 직결 시켰습니다.
직결하고나니 아주 즉각적으로 반응합니다.
1. 고퀄 스위치 페어링하기
- zigbee2mqtt 에서 pairing모드 켜기
- 고퀄 스위치 제일 마지막버튼 2~5초이상 눌렀다가 때기.(불빛이 반짝거립니다)
- zigbee2mqtt 의 log를 확인하여 기기가 추가되었는지 확인.
2. zigbee2mqtt 에서 고퀄스위치 설정
저는 이렇게 설정하였습니다.
*파일 수정 전에 zigbee2mqtt를 중지하여야 합니다.*
devices.yaml
'0x00158d0001987f60':
friendly_name: 'goqual_bedroom_toilet'
qos: 1
retain: true
database.db
{"id":41,"type":"Router","ieeeAddr":"0x00158d0001987f60","nwkAddr":27653,"manufId":4404,"manufName":"","powerSource":"Mains (single phase)","modelId":"gq.switch_4gang","epList":[1,2,3,4],"status":"offline",~~~~~~~
여기서는 modeId가 중요합니다.
ieeeAddr 인 "0x00158d0001987f60" 로 검색하면 2개가 나와야합니다.
만약 2개가 아니면 zigbee2mqtt를 재시작한 후 중지하고 다시 확인해보세요.
devices.js
검색 : const devices =
내용추가
// Goqual
{
zigbeeModel: ['gq.switch_1gang'],
model: 'GQSWITCH_1',
vendor: 'Goqual',
description: 'Goqual Switch',
supports: 'on/off',
fromZigbee: [fz.state, fz.ignore_onoff_change],
toZigbee: [tz.on_off],
},
{
zigbeeModel: ['gq.switch_2gang'],
model: 'GQSWITCH_2',
vendor: 'Goqual',
description: 'Goqual Switch',
supports: 'on/off',
fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
toZigbee: [tz.on_off],
ep: (device) => {
return {'top': 1, 'bottom': 2};
},
configure: (ieeeAddr, shepherd, coordinator, callback) => {
const ep1 = shepherd.find(ieeeAddr, 1);
execute(ep1, [(cb) => ep1.bind('genOnOff', coordinator, cb)], () => {
const ep2 = shepherd.find(ieeeAddr, 2);
execute(ep2, [(cb) => ep2.bind('genOnOff', coordinator, cb)], callback);
});
},
},
{
zigbeeModel: ['gq.switch_3gang'],
model: 'GQSWITCH_3',
vendor: 'Goqual',
description: 'Goqual Switch',
supports: 'on/off',
fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
toZigbee: [tz.on_off],
ep: (device) => {
return {'top': 1, 'center': 2, 'bottom': 3};
},
configure: (ieeeAddr, shepherd, coordinator, callback) => {
const ep1 = shepherd.find(ieeeAddr, 1);
execute(ep1, [(cb) => ep1.bind('genOnOff', coordinator, cb)], () => {
const ep2 = shepherd.find(ieeeAddr, 2);
execute(ep2, [(cb) => ep2.bind('genOnOff', coordinator, cb)], () => {
const ep3 = shepherd.find(ieeeAddr, 3);
execute(ep3, [(cb) => ep3.bind('genOnOff', coordinator, cb)], callback);
});
});
},
},
{
zigbeeModel: ['gq.switch_4gang'],
model: 'GQSWITCH_4',
vendor: 'Goqual',
description: 'Goqual Switch',
supports: 'on/off',
fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
toZigbee: [tz.on_off],
ep: (device) => {
return {'top_left': 1, 'bottom_left': 2, 'top_right': 3, 'bottom_right': 4};
},
configure: (ieeeAddr, shepherd, coordinator, callback) => {
const ep1 = shepherd.find(ieeeAddr, 1);
execute(ep1, [(cb) => ep1.bind('genOnOff', coordinator, cb)], () => {
const ep2 = shepherd.find(ieeeAddr, 2);
execute(ep2, [(cb) => ep2.bind('genOnOff', coordinator, cb)], () => {
const ep3 = shepherd.find(ieeeAddr, 3);
execute(ep3, [(cb) => ep3.bind('genOnOff', coordinator, cb)], () => {
const ep4 = shepherd.find(ieeeAddr, 4);
execute(ep4, [(cb) => ep4.bind('genOnOff', coordinator, cb)], callback);
});
});
});
},
},
{
zigbeeModel: ['gq.switch_5gang'],
model: 'GQSWITCH_5',
vendor: 'Goqual',
description: 'Goqual Switch',
supports: 'on/off',
fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
toZigbee: [tz.on_off],
ep: (device) => {
return {'top_left': 1, 'center_left': 2, 'bottom_left': 3, 'top_right': 4, 'bottom_right': 5};
},
configure: (ieeeAddr, shepherd, coordinator, callback) => {
const ep1 = shepherd.find(ieeeAddr, 1);
execute(ep1, [(cb) => ep1.bind('genOnOff', coordinator, cb)], () => {
const ep2 = shepherd.find(ieeeAddr, 2);
execute(ep2, [(cb) => ep2.bind('genOnOff', coordinator, cb)], () => {
const ep3 = shepherd.find(ieeeAddr, 3);
execute(ep3, [(cb) => ep3.bind('genOnOff', coordinator, cb)], () => {
const ep4 = shepherd.find(ieeeAddr, 4);
execute(ep4, [(cb) => ep4.bind('genOnOff', coordinator, cb)], () => {
const ep5 = shepherd.find(ieeeAddr, 5);
execute(ep5, [(cb) => ep5.bind('genOnOff', coordinator, cb)], callback);
});
});
});
});
},
},
{
zigbeeModel: ['gq.switch_6gang'],
model: 'GQSWITCH_6',
vendor: 'Goqual',
description: 'Goqual Switch',
supports: 'on/off',
fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
toZigbee: [tz.on_off],
ep: (device) => {
return {'top_left': 1, 'center_left': 2, 'bottom_left': 3, 'top_right': 4, 'center_right': 5, 'bottom_right': 6};
},
configure: (ieeeAddr, shepherd, coordinator, callback) => {
const ep1 = shepherd.find(ieeeAddr, 1);
execute(ep1, [(cb) => ep1.bind('genOnOff', coordinator, cb)], () => {
const ep2 = shepherd.find(ieeeAddr, 2);
execute(ep2, [(cb) => ep2.bind('genOnOff', coordinator, cb)], () => {
const ep3 = shepherd.find(ieeeAddr, 3);
execute(ep3, [(cb) => ep3.bind('genOnOff', coordinator, cb)], () => {
const ep4 = shepherd.find(ieeeAddr, 4);
execute(ep4, [(cb) => ep4.bind('genOnOff', coordinator, cb)], () => {
const ep5 = shepherd.find(ieeeAddr, 5);
execute(ep5, [(cb) => ep5.bind('genOnOff', coordinator, cb)], () => {
const ep6 = shepherd.find(ieeeAddr, 6);
execute(ep6, [(cb) => ep6.bind('genOnOff', coordinator, cb)], callback);
});
});
});
});
});
},
},
3. zigbee2mqtt 재시작
재시작한 후 고퀄스위치를 수동으로 작동해보세요.
Log가 정상적으로 올라오면 성공입니다.
4. zigbee2mqtt - HA 연동
mapping 이라고 합니다.
lib/extension/homeassistant.js 해당 경로의 파일을 찾아야합니다.
검색 : const mapping =
내용추가
'GQSWITCH_1': [configurations.switch],
'GQSWITCH_2': [switchWithPostfix('top'),switchWithPostfix('bottom')],
'GQSWITCH_3': [switchWithPostfix('top'),switchWithPostfix('center'),switchWithPostfix('bottom')],
'GQSWITCH_4': [switchWithPostfix('top_left'),switchWithPostfix('bottom_left'),switchWithPostfix('top_right'),switchWithPostfix('bottom_right')],
'GQSWITCH_5': [switchWithPostfix('top_left'),switchWithPostfix('center_left'),switchWithPostfix('bottom_left'),switchWithPostfix('top_right'),switchWithPostfix('bottom_right')],
'GQSWITCH_6': [switchWithPostfix('top_left'),switchWithPostfix('center_left'),switchWithPostfix('bottom_left'),switchWithPostfix('top_right'),switchWithPostfix('center_right'),switchWithPostfix('bottom_right')],
1~5구 까지는 위의 내용으로 문제없고 6구 스위치는 하나 더 수정해야합니다.
/lib/util/utils.js 파일에서 bottom_ 로 검색하고 center_left, center_right를 추가
5. zigbee2mqtt 재시작
완료입니다. 이제 HA에 정상적으로 스위치가 등록됨을 볼수있습니다.
'IT Info > IoT' 카테고리의 다른 글
[HA] Custom Lovelace. Glance 형 상태정보 카드 (0) | 2019.05.27 |
---|---|
[HA] Custom Lovelace 날씨 및 실내공기상태 카드 (0) | 2019.05.27 |
[HA] Zigbee2MQTT 샤오미 슈퍼모션센서 적용하기 (2) | 2019.05.27 |
Hass.io 를 이용하여 HomeAssistant 설치하기 (0) | 2019.04.09 |
Hassbian을 이용하여 HomeAssistant 설치하기 (0) | 2019.04.08 |