簡體   English   中英

如何處理自定義coap選項(非標准)

[英]How to handle custom coap options (non-standard)

我正在為Shelly系列設備開發openHAB2綁定。 http界面運行良好,但是我無法注冊獲取COAP事件。

有人對Californium框架有經驗嗎? Shelly使用非標准的Coap選項(基於其CoIoT規范: https ://shelly-api-docs.shelly.cloud/images/CoIoT%20for%20Shelly%20devices%20(rev%201.0)%20.pdf)。

我正在使用Java Californium框架。

當我注冊觀察者時,不執行回調。 如果我發送命令,我會在日志中看到ACK,但是它們報告了一個未知選項3332,Shelly在其文檔中對此進行了描述。 我沒有找到將自定義選項注冊/注入到Californium框架的方法,以便觀察者可以讀取它們。 任何幫助表示贊賞。

    CoapClient           client;
    CoapObserveRelation  relation;

    public void start() {
        client = new CoapClient("coap://192.168.1.1:5683/cit/d");
        client.get(new CoapHandler() {
            @Override
            public void onLoad(CoapResponse response) {
                String content = response.getResponseText();
                logger.debug("RESPONSE 3: " + content);
            }

            @Override
            public void onError() {
                logger.warn("FAILED");
            }
        });

        relation = client.observe(
                new CoapHandler() {
                    @Override
                    public void onLoad(CoapResponse response) {
                        String content = response.getResponseText();
                        logger.debug("NOTIFICATION: " + content);
                    }

                    @Override
                    public void onError() {
                        logger.warn("OBSERVING FAILED (press enter to exit)");
                    }
                });

我在調試日志中看到的是:

Aug 19, 2019 4:15:39 PM org.eclipse.californium.core.network.Matcher receiveResponse
INFORMATION: Ignoring unmatchable piggy-backed response from /192.168.6.81:5683: ACK-2.05   MID= 5718, Token=, OptionSet={"Unknown (3332)":0x534853572d3231233535394635352331}, "{"blk":[{"I":0,"D":"Rela".. 420 bytes
  • 顯然設備正在響應(ip:port,uri)
  • 數據包被解碼
  • 數據總體上看起來不錯(如規范中所述)
  • 但顯示“ OptionSet = {“未知(3332)” ...“

我不知道如何在Californium中注冊自定義選項。 這些數據包似乎被忽略了,因此應用程序不會獲得任何數據。

任何想法?

如果您同時提供客戶端和服務器的日志以及請求和響應,那就太好了。 但是,我看到ACK響應中不包含令牌(應與請求中的令牌相同),顯然這就是Californium無法將其與相應請求匹配的原因。

for應與自定義選項一起很好地工作。

解決響應數學問題后,嘗試聯系他們。 假設是這樣的:

response.getOptions().getOthers()

該“未知...”消息只是因為Californium消息格式化程序不知道如何正確記錄它。 無論如何,您應該能夠從選項中獲得它。

將一個MessageInterceptor添加到CoapEndpoint 那將調用interceptor.receiveResponse(response); Matcher忽略該Response 您可能會在此處引發異常以停止標准處理。 如果要實現自己的請求/響應匹配,還可以將傳出的請求記錄在interceptor.sendRequest(Request request);

但是,通過其余的處理過程,您可以自行完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM