---
# System prepended metadata

title: EmPOWER App
tags: [EmPOWER]

---

---
tags: EmPOWER
---
# EmPOWER App

EmPOWER 的錯誤訊息會 print 在執行 `empower_runtime.py` 的那個 terminal

基本上，一個 EmPOWER APP 需要三個東西
* 一個資料夾
* 一個 `__init__.py` 放在上面的資料夾
* 一個 `.py` 的主程式，也是放在上面的資料夾
```
empower/apps/program/⎯┬⎯⎯ __init__.py
                      │
                      └⎯⎯ program.py
```

## 資料夾

為了避免混淆，這個資料夾的名稱請和主程式一樣即可。

### `__init__.py`

這個 `.py` 裡面，需要告知主程式需要的參數，例如 every, sta 等等。
該結構可以參考 `empower/apps/` 裡的任意 application

### 主程式

主程式會由兩個部分構成：
- `launch()`
  可以看成程式的進入點 (entry point) ，也可以在這裡做一些初始化的工作，最後要回傳自己的 python class
- python class
　　application 的主體， python class 裡通常會有的是 `__init__()` 和 `loop()`。
  - `__init__()`
    就是做 initialization ，比方說初始化 lvap list。
  - `loop()`
    裡面的內容會週期性地被執行，因此可以在這個 function 裡做週期性的資料收集、association management 等等。
  - `handle_lvap_join()`, `handle_lvap_leave()`
    可以在有 lvap 加入或離開時進行一些處理，像是對 lvap list 的維護。

詳細可以參考 `empower/apps` 裡面的任意 application


## Workers

當需要某些資訊如 AP-STA 之間的 RSSI ，或是 channel 的資訊時，可以利用`empower/workers/` 中的 `wifichannelqualitymap` 及 `wifichannelstats` 。
注意當需要啟動 workers 時需要以 root 身分登入。


## Reference

https://github.com/clicknf/clicknf.github.io/wiki/Python-WiFi-API-documentation\

https://gitraap.i3a.info/bgomez/empower-runtime/-/blob/master/empower/apps/wifiloadbalancing/wifiloadbalancing.py