MQTT利用webhook监听设备上下线

322 阅读1分钟

1. 登录EMQX Dashboard

2. 点击集成->桥接模式->创建

image.png

3. 选择webhook,下一步

image.png

4. 配置桥接模式,填写名称/URL/请求体(请求体可以不填)

image.png

image.png

5. 创建上面桥接模式的规则添加动作

image.png

image.png

image.png

6. 创建上面桥接模式的规则添加事件,拉到最下面创建(这里不需要解释了吧)

image.png

7. 接下来就是写一个post接口对应我们第四步的URL作为回调就ok了。

1. 枚举

@Getter
@AllArgsConstructor
public enum MqttEvent {

    /**
     * 在线为true
     */
    CONNECTED("client.connected", Boolean.TRUE),
    
    /**
     * 离线为false
     */
    DISCONNECTED("client.disconnected", Boolean.FALSE),

    ;
    private final String event;

    private final Boolean data;

    public static Boolean getData(String event) {
        for (MqttEvent value : MqttEvent.values()) {
            if (Objects.equals(value.getEvent(), event)) {
                return value.getData();
            }
        }
        return false;
    }
}

2.实体

@Data
public class ApiDeviceOnlineStateDTO implements Serializable {
    private static final long serialVersionUID = -2617214908654902132L;

    @ApiModelProperty("客户端标识")
    private String clientId;

    /**
     * @see MqttEvent
     */
    @ApiModelProperty("事件")
    private String event;
}

3. controller

@Api(tags = "API-webhook通知相关接口")
@RestController
@RequestMapping("/notify")
public interface ApiWebhookNotifyFace {


    /**
     * 设备状态回调通知
     *
     * @param dto 参数
     */
    @ApiOperation("设备状态回调通知")
    @PostMapping("/device_online_state")
    void deviceOnlineState(@RequestBody ApiDeviceOnlineStateDTO dto);

}

4. 实现

@Slf4j
@Service
@RequiredArgsConstructor
public class ApiWebhookNotifyApp implements ApiWebhookNotifyFace {

    /**
     * 设备状态回调通知
     *
     * @param dto 参数
     */
    @Override
    public void deviceOnlineState(ApiDeviceOnlineStateDTO dto) {
        log.info("设备状态回调通知参数:{}", dto);
//      true-在线;false-离线;
        boolean event = MqttEvent.getData(dto.getEvent());
//      TODO 你的实现  
    }
}