---
# System prepended metadata

title: UI Sensor register 和 MQTT

---

UI Sensor register 和 MQTT
===

為了在之後加入MQTT等通訊方式，Sensor採用註冊的方式。

系統架構如下:

![](https://i.imgur.com/pJRbOro.png)

---

## 註冊方法:

* 感測器表註冊以下內容:
    1. 感測器名稱(sensor_name)
    2. 感測器初始化方法(initial)
    3. 感測器取值方法(get_value)
    4. 感測器結束方法(deinitializes)

將以下內容透過dictionary儲存傳出。

ex:

```python=
# Register table
def register_table(self):
    sensor_message = {}
    sensor_message["sensor_name"] = self.sensor_name
    sensor_message["initial"] = self.initialize
    sensor_message["get_value"] = self.get_value
    sensor_message["deinitializes"] = self.deinitialize
    return sensor_message
```

範例: [Temperature sensor 程式](https://github.com/sss22213/UI-by-browser/blob/master/sensor/temperature.py)

將Sensor註冊表撰寫完之後，依據django MTV架構，系統將透過view進行網頁的回呼。
view中透過以下方式註冊Sensor。

```python=
# Sensor register
sensor_table = sensor_register.sensor_register()
sensor_table.register_by_table(temp.register_table())
sensor_table.initial_all_sensor()
```

範例: [View](https://github.com/sss22213/UI-by-browser/blob/master/apps/views.py)

---

## 取值方法:

可直接透過註冊名稱向註冊表取得取值方法:

```python=
def read_temperature(request):
    response_data = {}
    response_data["temperature"] = sensor_table.sensor_table['Temperature']["get_value"]()
    return HttpResponse(json.dumps(response_data), content_type="application/json")
```

---

## MQTT設定

1. 透過SQL取得MQTT broker資訊(實驗中，目前未將登入帳密功能加入)。
Table: apps_mqtt_config
![](https://i.imgur.com/wkDIYen.png)

2. 透過SQL取得MQTT 將會發布感測器的資訊。
Table: apps_sensor_config
![](https://i.imgur.com/z6fgG0q.png)
* 欄位1 sensor: 表示感測器名稱(與感測器註冊名稱是一樣的)
* 欄位2: mqtt_status: 表示是否發布(1: 發布，0: 不發布)


## MQTT啟動

mqtt啟動在view檔案之中，啟動完成後會自動發佈。

```python=
# Initialize mqtt
mc = mqtt.mqtt_center()
# Dependence by register table
mc.add_register_table(sensor_table.sensor_table)
mc.run()
```

範例: [View](https://github.com/sss22213/UI-by-browser/blob/master/apps/views.py)