oM2M-Zigbee-IPE / Zigbee-IPE

0 stars 0 forks source link

KETIMobius IPE 방식과 우리팀이 구상한 IPE 방식의 차이점 #1

Open daydream-er opened 1 year ago

daydream-er commented 1 year ago
this.get_device_battery = function() {
    setInterval(function(){
        for (const [key, value] of Object.entries(resourceConfig)){
            for (let i = 0; i < value.length ; i++) {
                if (value[i].deconzResource.battery == true) {
                    let device_battery =  deconz.sensorbatt(GATEWAY_ADDRESS, value[i].deconzId);
                    if (Last_battery_level.get(value[i].oneM2MResource.deviceResourceName) != device_battery) {
                        Last_battery_level.set(value[i].oneM2MResource.deviceResourceName, device_battery);
                        let device_batt_path = "/" + CSE_NAME + "/" + IPE_RESOURCE_NAME + "/"+ value[i].oneM2MResource.deviceResourceName + "/battery";
                        let device_batt_resp = KETIMobius.put_fcnt(device_batt_path, key, "battery", device_battery); 
                        console.log(device_batt_resp);
                    }
                }
            }
        }
    },ipeConfig.zigbeeGateway.sensingInterval);
}
  1. 원래 우리 생각은 om2m으로 get을 요창하면 om2m에서 deconz로 get을 하고 다시 response 받는 방식: (user) -> om2m -> deconz -> zigbee
  2. deconz에서 get을 통해 요청한 값을 Mobius에 put함. 따라서 KETIMobius 방식: (user) -> deconz -> zigbee, (user)-> KETIMobius
daydream-er commented 1 year ago

우리 방식으로 하려고 하면, model에서 deconz로 곧바로 get방식으로 가면 된다.

하지만 om2m으로 특정 contentInstance에 get 보내는 별도의 코드가 필요하다. 즉, 시나리오용 코드를 따로 개발해야 한다.

daydream-er commented 1 year ago

model과 deconz 사이의 http 통신을 구현해야 한다.

SampleModel.java와 Lamp.java를 참고해서 구현하고자 한다.

구현 목표

  1. zigbee device의 종류에 제한을 두지 않는다. -> 추상클래스나 interface를 구현하고 이를 상속/구현하는 방식으로 진행 [확장 가능성]
  2. zigbee device의 개수에 제한을 두지 않는다. -> 종류에 관한 상수값과 동일 종류 내의 인덱스가 필요하다. [상수값만 추가 구현 필요]

결론


// 구현 목표 1번을 구현할지는 상의해봐야 겠지만.. 어쨌든 Device명.java 부분만 봐봐. state가 많을 수 있으니까 이런식으로 구현하려고

SampleModel.java

// Device is abstract class
private static Map<String, Map<String, Device> Devices = new HashMap<String, Map<String, Device>();

public static void setDeviceState(final String id, final String kind String key, String value) {
        checkDeviceValue(id, kind);
        if (kind == LAMPS)
        {
                Devices.get(LAMPS).get(id).setState(value);
                notifyObservers(LAMPS, id, value);                
        }
        .... // 이런 느낌? 
Device명.java

public Device명(String DeviceId, HashMap<string, string> state){
        this.lampId =  DeviceId;
        Set<String> keySet = state.keySet();
        for (String key : keySet) {
                this.state.put(key, state.get(key));
        }
    }

내가 통신에 대해서 생각을 못했네..

어떻게 하지..

mobius ipe.js 

// 아래의 코드를 참고해서 위 SampleModel.java와 Device명.java를 생각했는데...
// 통신이 필요함... 
// SampleRouter.java에 있는 ResponsePrimitive response = new ResponsePrimitive(request); 이거 그냥 쓰면 됨?
let device_battery =  deconz.sensorbatt(GATEWAY_ADDRESS, value[i].deconzId); 
Last_battery_level.set(value[i].oneM2MResource.deviceResourceName, device_battery);
LEEDONGH00N commented 1 year ago

지금 봄 굿굿