IoTTalk - FarmDashBoard 安裝/設定/操作手冊     -- by tsaiwn@cs.nctu.edu.tw 交大資工 蔡文能      
 ...   關於 IoTtalk 使用者詳細使用手冊:   ( IoT = Internet of Things 物聯網--物物相連的互連網 )
       http://liny.cs.nctu.edu.tw/#IoTtalk   (林一平教授網頁)

      點入後在 Document 下方, 有中文版和英文版(English version);     or     點這看更多手冊
這是 FarmDashBoard 安裝/設定/操作手冊 ...
FarmDashBoard 現在需要取得授權才可以下載 Source code,
請 Email 給交大 "林勻蔚博士"<jyneda@gmail.com> 詢問如何取得授權
如果你使用FarmDashboard發現Bug或有建議請Email給"顏泰翔博士"<ksoyam95@gmail.com>

* IoTtalk 簡介:
IoTtalk 系統交通大學林一平博士帶領研發團隊開發的智慧物聯網應用開發平台, 提供業者一個整合、開放、低成本、高效率, 且能串聯不同規格標準的物聯網應用(例如智慧家庭、智慧校園、智慧農場)平台林一平教授曾任科技部次長,交大副校長林一平教授興趣多元,喜好藝術繪畫寫作遨遊於科技與人文間自得其樂,參看林一平教授的臉書(fB),以及林一平教授的Digitimes專欄文章。(點這看林一平教授寫的『大橋驟雨』以及關於歌川廣重的『大橋安宅驟雨』;還有,看看林教授該書中提到晚年住在亞爾Arles的梵谷模仿大橋驟雨的『雨中橋』油畫)
    目前這 IoTTalk 系統平台已經成功用於智慧校園智慧農業, 例如用於種植薑黃(5分鐘影片) (參看 今週刊報導(2019.01.23)農譯科技公司 AgritalkTech.com/ 以及分家出去的 AI_農業 Agritalk.com.tw/)(現已合併回來)
oooooooo

    FarmDashBoard     FarmDashBoard     FarmDashBoard

Introduction
    Sensor收到資料後透過有 IDF 的 DA (左方) 送進IoTtalk Server。
由ODF的DA將資料拉下(pull)來寫入mysql 或 sqlite 資料庫。
當資料寫入mysql後,dashboard會定期去mysql取資料顯示在Dashboard上。
經由 dashboard 的 Management 做設定管理場域(Field)和感測器(Sensor),
dashboard知道要去詢問mysql內的哪些DB以顯示資料,
圖右邊的 DA 依據設定知道要去讀取(pull)哪些ODF以將資料存入mysql或 sqlite。
    FarmDashboard 包括右邊的 DA 和 Dashboard web server(用 Python + Flask)。
該 DA 在 IoTtalk server 上的 DM (Device Model) 是 DataServer,
其向 IoTtalk server 註冊的 d_name (設備名稱) 是 <field_name>_DataServer;
就是 場域名稱_DataServer, 例如 Orchid_DataServergreenhouse_DataServer
因此 ODF 的 DA 跑起來在 IoTtalk 上通常會註冊很多個 d_name,各自對應不同場域(Field),
    在 IoTtalk server 的 Project 做 DM 綁定 d_name 時請注意各場域(Field)的d_name不同。
    至於 IDF 的 DA 可能在任何一部電腦,也可能在 ESP8266 等 MCU,
甚至也可能就在 IoTtalk server 上執行的程式。
 
ToC (Table of Contents)
Dashboard 安裝好之後常做的六件事
可以選用 MySQL 或 SQLite -- 修改 config.py
System environment for FarmDashboard
  o 如果在 Windows 或 Mac 可以先裝 Virtual Box 虛擬機再把 Ubuntu 安裝在 虛擬機
在 Ubuntu 16.04 上先安裝必要工具
關於 MySql 與其安全設定 + ...
在 MySql 建立 (create) new user for dashboard
    與 mysql 有關的一些常用 Linux 命令
    常用的 SQL commands
準備用 git 抓取並安裝 Farm DashBoard( install dashboard )
初次執行 FarmDashboard 要先新增dashboard 資料至mysql
關於 IDF ...
o 如何在 IoTtalk server 增加/修改 Device Model 物聯網設備類別 ? (new Window)
關於 ODF ...
關於多語系(i18n)使用說明
關於建立虛擬隔離環境給 FarmDashboard 用 (Q & A)
關於 Flask-SQLAlchemy (ORM Library) (開新窗)
  Dashboard 的 Sensor/Field/User 設定與連接包含六個步驟:
(1)在Dashboard首頁上 點 Management 做sensor/Field的設定。
    (a)我們已經事先建立了很多 Sensor, 必要時可以新增/修改 sensor 屬性。
      注意每個 sensor 有一個 DF_name,不可以亂取名字,這要與 IoTtalk 上
       的 Device Model(DM) DataServer (注意大小寫) 的 ODF 名稱相同。
      注意, DF_name 名稱要與 IoTtalk 伺服器上 DataServer (Device Model) 的 ODF 對應!
      注意, DF_name 名稱要與 IoTtalk 伺服器上 DataServer (Device Model) 的 ODF 對應!
      注意, DF_name 名稱要與 IoTtalk 伺服器上 DataServer (Device Model) 的 ODF 對應!
  oo 德國哲學家尼采(Friedrich Nietzsche)1886年說過「重要的事情要說三遍」!
  ** 注意如果有新增 sensor 則必須重新啟動 Dashboard 的 server 才會生效 !
      這是因為新增一個 sensor 會在 db/models.py 內新增一個 class,
      所以需要重跑 dashboard 的 server 和 DataServer 的 DA:
bash startup.sh
    (b)然後點 Field 進入場域(Field)管理頁面,
      可以新增場域(Field),
      注意場域 Field 的名稱請使用全英文字母,且不可以包含特殊符號如 . $ # & @ 等等。
      可以設定各個場域有哪些 sensor 資料要傳入資料庫讓 dashboard 顯示。

(2)在IoTtalk Server上用 Device Feature Management(DFM) 新增必要的 ODF (已經有的就不用新增)
    因需要一個 Device Model 叫 DataServer, 注意 DataServer 大小寫(DM 名稱大小寫不同!!)
      且該 DataServer 要有 與 (1)Dashboard 上的對應的 ODF 屬性。
      要做以下(3)建立 DataServer 這 Device Model 之前, 最好先確認須要的 ODF name 都有了,
    必要時, 在 Device Feature Management 建立對應的 ODF name (如已經有就不必新增);
(3)在 IoTtalk Server,建立 DataServer 這 Device Model (DM)
      在IoTtalk Server上切換 DFM 到 DMM (Device Model Management),
      新增或修改 Device Model DataServer, 包含對應到(1)全部 ODF 名稱;
      注意,如果 DataServer 已經在某 project 使用中就沒辦法修改, 要先停止使用 !
** 如果上述(2)(3)有問題請參考這裡的說明和影片
(4)在IoTtalk Server上建立 Project 把 左方 DM 的 IDF 連到右方 DataServer 的 ODF
(5)綁定(關聯) project 內各 DA,
      包括左方提供資料的 DA 和右方收資料的 DA (DM 是DataServer)

(6)在 Dashboard上 點 Management, 點 User 設定各 User 可以看到哪些場域(Field)資料 !
      以及該 user 登入時預設顯示的場域 (active field)。
      這樣登入 Dashboard 每個 User 可看到不同資料 !

** 如果上述(2)(3)有問題請參考這裡的說明和影片

 
TOP

FarmDashboard 可以使用 mysql 或 sqlite,
要使用 sqlite 或 mysql 可以修改 FarmDashboard 根目錄的 config.py
vim config.py
大約在 LINE 10 ~ LINE 13 處, copy 註解掉的去用即可

# DB_CONFIG = '<database>[+<orm_lib>]://[<user>[:<password>]]<host>[:<port>]/[db_name][?charset=utf8]'
# ex: DB_CONFIG = 'mysql+pymysql://user:pass@localhost:3306/dashboard?charset=utf8'
# ex: DB_CONFIG = 'sqlite+pysqlite:///db.sqlite3'
DB_CONFIG = ''

#注意用 mysql 時 user:pass 就是你在MySQL的帳號:密碼 請不要用引號夾住!!!

如果使用 MySql 需要安裝並設定 mysql,
如果使用 SQLite 則 SQLite 已經內建在 Python3 內!
SQLite is a self-contained, file-based SQL database.
SQLite comes bundled with Python and can be used in any of
your Python applications without having to install any additional software.
See How To Use the sqlite3 Module in Python 3

System environment for FarmDashboard

! ! 建議用 VM 安裝 dashboard+mysql
**如果用 Windows 或 Mac 想在自己機器跑Linux, 可以抓 VirtualBox 先裝虛擬機,
    然後在虛擬機上安裝 ubuntu 16.04 版本
o 直接到官方網站抓 VirtualBox 6.x for Windows 或 Mac OS X
    https://www.virtualbox.org/wiki/Downloads
o 也要下載 ubuntu 16.04 的 64bit server 版 .iso 檔案:
      ubuntu-16.04.7-server-amd64.iso 2020-08-10 18:24 880M
    https://releases.ubuntu.com/16.04/
o Ubuntu 台灣官方網站:
    https://www.ubuntu-tw.org/modules/tinyd0/


關於 Linux 系統, 建議用ubuntu 16.04 版本, 其它版本不確定相容。
可輸入指令 cat /etc/os-release 查看系統資訊
$ cat /etc/os-release
ubuntu server
...  

o 通常剛安裝好 Ubuntu server 該做一些設定讓系統比較安全...
(Initial Server Setup with Ubuntu 16.04) ..
    See https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04


o 在 VirtualBox 虛擬機上安裝 Ubuntu (建議先把 Ubuntu 16.04 的 .iso 檔案抓回來你電腦)
 1.)Open VirtualBox and select New . A new window will come out.
 2.)Choose your guest OS and architecture (選 64 bit,  select Ubuntu)
 3.)Set your Base Memory (RAM) 建議至少 2GB
 4.)Click next until it show the vm storage size. 建議設定 10GB 應該就夠用!
    Put how much space you need depending on your hardisk and finish the wizard 
    by clicking the create button.
 5.)On VirtualBox main window, select START and pick your MEDIA SOURCE. 
    For example, select the .iso on your desktop.
 6.)Finish the installation as normal install.
 7.)Remove your installation .iso from the virtual optical disk drive before restarting the VM.
可以參考這:
    https://www.kjnotes.com/linux/102
    或 點這參看 林一平教授實驗室的教學影片

o Ubuntu 參考安裝教學:
      http://ailog.tw/lifelog/2019/08/09/ubuntu-16-04-lts-install/


*在 Ubuntu 16.04 上先安裝必要工具 ...
o 安裝 pip3
sudo apt update
sudo apt -y install python3-pip
o 安裝 mysql-server(check install status)
sudo apt install mysql-server
password setting:輸入自訂密碼(8位以上) (e.g userpassword)
o 安裝 pymysql 
sudo pip3 install PyMySQL
o 安裝 git
sudo apt install git-core
o 安裝 vim
sudo apt install vim
o 安裝 tmux
sudo apt install tmux
Ubuntu 16.04 用 apt install 安裝 Python 是 3.5 版;
但是有時我們需要至少 python 3.6 版 或 3.7 版 ...
Install Python 3.7 on Ubuntu 16.04, from source
apt update
apt install -y wget
apt install gcc    # compiler
apt install make   # make utility
apt install zlib1g-dev   # zlib
cd /opt
wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz  
tar -xvf Python-3.7.9.tgz
cd Python-3.7.9
./configure
make
make install
which python3
which python



TOP  ToC

關於 MySql 與其安全設定 (如果使用 sqlite 則這部份不用看:-)
 How To Install MySQL on Ubuntu 16.04

mysql security setting (mysql 安全設定)
   Ubuntu 安裝完Mysql的時候預設是沒有root密碼以及相關設定的,
這時候就需要先用mysql_secure_installation這個指令來對MySQL進行初始化設定。
mysql_secure_installation
若問密碼, 按 ENTER 鍵即可
然後,原則上全部回答 y 就對了:-)
如果啟動 mysql 有啥 PID 錯誤, 就 : 
sudo rm -rf /usr/local/var/mysql/*.err
sudo service mysql restart
操作參考: 請點這去 digitalocean 看 首先登入 mysql(以root使用者登入)
mysql -u root -p
檢查資料庫的 characterset status
status 
  編碼應該要如上圖:四個都是utf8 Server characterset不是utf8的處理流程: 先按Ctrl+D登出MySQL 修改 /etc/mysql/mysql.conf.d/mysqld.cnf
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
 <註>倘若您的Ubuntu版本為14.04,請修改 /etc/mysql/my.cnf
sudo vim /etc/mysql/my.cnf
o 關於到底改 my.cnf 還是 mysqld.cnf點以下這參考文件 https://blog.programster.org/ubuntu-16-04-default-mysql-5-7-configuration 在 vim 該 .cnf 檔案後按 i 進入insert mode 加入設定:複製下列程式碼,於 mysqld.cnf 或 my.cnf 內貼上
[mysqld]
init_connect = 'SET collation_connection = utf8_bin'
init_connect = 'SET NAMES utf8'
character-set-server = utf8
collation-server = utf8_bin
按ESC退出insert mode 存檔並結束修改 :wq 然後重啟mysql以更新設定, 接著登入 mysql(以root使用者登入), 打 status 再次查看 characterset status
sudo service mysql restart
mysql -u root -p
status
  在 MySql 建立 (create) new user for dashboard # 登進mysql新增 MySQL 內的 user,允許連線 IP,與資料庫( db_name ),以及權限 : CREATE USER 'user_name'@'%' IDENTIFIED BY 'user_password'; # 設定new user的user_name(e.g dashboard),允許連線的IP( % 代表允許任一IP連線)和user_password 注意, password 千萬不要含有 @ 阿不然有大麻煩 !!! 這裡的 user_name 是指 mysql 內的 user, 與 Linux user name 無關, 也不必要叫做 dashboard, 但這是要用來放在 FarmDashboard 的 config.py 內設定 DB_CONFIG = ' ... ' 用的,大約在 config.py 的 LINE 10 ~ LINE 13處。 # 看看已經有哪些 user SELECT * FROM mysql.user; # 給予使用者權限 privileges for new user GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'%'; flush privileges; 說明: ALL PRIVILEGES: allow the user to read, edit, execute and perform all tasks across all the databases and tables. *.*:The asterisks in this command refer to the database and table that they can access. (* represents that all databases and tables are available) @'%': allow the user from any IP flush privileges; #:刷新權限以更新權限設定 詳細 mysql 的 user 與 權限 (Permissions)請參考這:   https://www.strongdm.com/blog/mysql-create-user-manage-access-privileges-how-to 建立給dashboard使用的database,設定db_name (e.g dashboard) create database db_name; 注意 db_name 不要亂取 ! 就用 dashboard 例如: create database dashboard;
與 mysql 有關的一些常用 Linux 命令 # Start the MySQL service normally. sudo service mysql start # 或 sudo systemctl start mysql #If you are receiving the following error message: MySQL services are masked # Do the below commands sudo systemctl unmask mysql.service sudo service mysql start # Stop MySQL sudo service mysql stop # To restart MySQL service sudo systemctl restart mysql # 或這樣 sudo service mysql restart # To verify if the MySQL service is started or not sudo systemctl status mysql # 或這樣 sudo service mysql status # To check the MySQL version mysql --version # To enable MySQL to start automatically on every reboot sudo systemctl enable mysql # Turn off MySQL. sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown # reset mysql root password sudo mysqladmin -u root password # Set MySQL root user password and policy, RUN mysql_secure_installation script sudo mysql_secure_installation # (原則上都回答 y 就是了:-) # Start MySQL manually, without permission checks or networking. #(通常是因忘了密碼用來進入 mysql 內修改 root 或 user 的密碼用, 正常不建議!) sudo mysqld_safe --skip-grant-tables --skip-networking & # 執行上句子後, 可以不用輸入密碼直接連入 mysql mysql -u root ###### ###### 如果前述 start MySQL 有錯誤, 可以做以下兩步驟後重來: # Make MySQL service directory. sudo mkdir /var/run/mysqld # Give MySQL user permission to write to the service directory. sudo chown -R mysql:mysql /var/run/mysqld
常用的 SQL commands: # Log in without a password. mysql -uroot mysql
*** Note that MySQL command is not case sensitive.
    But also note that database name/table name/column name ARE Case sensitive.
 create database [database_name];
 show databases
 use  [database_name];
 show tables
 SELECT * FROM [table_name];
 drop table [table_name];
 drop database [database_name];
***mysql Commands summary # Update the password for the root user after you login into mysql. UPDATE mysql.user SET authentication_string=PASSWORD('ENTER_YOUR_PASSWORD_HERE'), plugin='mysql_native_password' WHERE User='root'; flush privileges; # 登出 mysql exit; # 重新啟動 mysql sudo service mysql restart ## 其實不必進入 mysql 那麼麻煩, 直接以下這樣重設 mysql root 密碼比較簡單: sudo mysqladmin -u root password MySQL Tutorials... MySQL Tutorial @ W3Schools.com MySQL Reference Manual MySQL 官方網站 SQLAlchemy 1.4 Documentation (ORM) [python] sqlalchemy 閱讀筆記 SQLAlchemy筆記(ORM 物件與關聯教學) Flask-SQLAlchemy 資料庫操作-ORM篇(二)

TOP  ToC
準備用 git 抓取並安裝 Farm DashBoard( install dashboard )
 然後 connect dashboard to mysql 
# get FarmDashboard by using git clone   (需要先Email林博士詢問取得授權)
git clone https://gitlab.com/IoTtalk/FarmDashboard.git
# 進入 FarmDashboard 主目錄
cd FarmDashboard
# 建立一個 Python 虛擬隔離環境 venv
python -m venv venv
# 啟動該 venv 虛擬隔離環境 
venv/bin/activate    # Windows 要這樣: venv\Scripts\activate 
# 安裝 requirements.txt 內套件 by using pip3(安裝所需Python Packages)
pip3 install -r requirements.txt

requirements.txt內容如下:
flask==1.1.2
# https://flask-wtf.readthedocs.io/en/latest/
flask-wtf==0.14.3
# Flask i18n extension
# https://flask-babel.tkte.ch/
Flask-Babel==2.0.0

# SQL ORM tool kit
# https://docs.sqlalchemy.org/en/13/
sqlalchemy==1.3.19
# Pure Python MySQL Client
# https://pymysql.readthedocs.io/en/latest/
pymysql==0.10.1

# Simple HTTP library
# https://docs.python-requests.org/en/latest/
requests==2.24.0
# Extensions to the standard datetime module
# https://dateutil.readthedocs.io/en/stable/
python-dateutil==2.8.1
# Local timezone module
# https://github.com/regebro/tzlocal
tzlocal==2.1
alembic==1.0.5
# 修改 config.py 以便連結使用剛剛的 mysql
vim config.py
# 修改 DB_CONFIG 如下: (大約 LINE 10 ~ LINE 13) DB_CONFIG = 'mysql+pymysql://user_name:user_password@localhost:3306/db_name?charset=utf8' # 有兩列註解分別用 mysql 和 sqlite # 複製註解去改即可 # 填入在mysql步驟中新增的user_name,user_password和db_name # 注意 user_name:passwd 直接打你的帳號:密碼即可,不要有引號,密碼不要有@:'"等以免混淆 !! # 繼續在 config.py 修改 IoTtalk Server 的 IP 或給 domainname # 大約在 LINE 21 的 CSM_HOST = '8.8.8.8' # 填入已安裝iottalk_server的VM IP #(e.g CSM_HOST= '140.113.199.213') # 例如改為: CSM_HOST = "demo.iottalk.tw" # 你的 IoTtalk Server # 注意不要有 http:// 或 https:// o 繼續在 config.py (很前面)修改 Dashboard 的 port, (以前在 app.py 最後面)
vim config.py
# 在 vim 內可打 :2 跳到 LINE 2 # 如果沒有修改,Dashboard server 就是用預設port 5000 # 這裡假設要改用 port=7788,你可用其他的port,只要不衝到即可。 # 大約在第二行 (第一行 host = '0' # 是 Server IP, '0' 不用改) port = 7788 # 預設寫 port = None 代表用 port 5000 # 注意目前 5001 用來重啟 dashboard 和 DA 用 ! 所以不要寫 port = 5001 喔。 o 修改 在子目錄 db 內的db_init.json 看情況修改,可以修改dashboard 預設的帳號以及密碼。(預設 admin/123456789) # 修改 /etc/mysql/mysql.conf.d/mysqld.cnf sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf <註>倘若您的Ubuntu版本為14.04,請至/etc/mysql/my.cnf修改 # 因為 舊版 Ubuntu 的 MySQL 設定檔全寫在一個檔案: sudo vim /etc/mysql/my.cnf 註解大約 LINE 41 ~ LINE 45 的: bind 127.0.0.1 因為127.0.0.1 意指 Localhost,也就是本機 用戶端,倘若 bind 127.0.0.1,就永遠都找不到AD,故須將其註解掉。 SESSION_COOKIE_SECURE = False # True TOP
 ToC
o 初次執行 FarmDashboard 要先新增dashboard 資料至mysql (資料庫初始化)
python3 -m db.db init
因為只會新加入資料,並不會抹除舊的資料,所以執行一次以上會發生錯誤 ! (在MAC上面使用時可能會遇到加密錯誤的錯誤訊息,這時需要安裝套件 cryptography) # 啟動 dashboard Server 和它需要的 DA:
bash startup.sh
# 檢查 (check) dashboard installation status 至此 Dashboard 已啟動完成,可用指令 tmux a 查看運行狀況 (按ctrl+b 1 查看 dashboard 主程式與 DA 運行狀況)。
tmux a
# press Ctrl+B 1或Ctrl+B 2切換tmux查看dashboard連接狀況 # 開啟 Dashboard 網頁檢查: (注意這裡假設你 config.py 內用 port = 7788 ) 開啟瀏覽器:輸入網址dashboard VM IP:7788查看dashboard (若不是 7788 要改你用的) (e.g http://140.113.199.223:7788/ ) 看到以上畫面,代表dashboard安裝設定完成 這時如果登入 (Sign in); 若你沒改 FarmDashboard 子目錄 db 內的db_init.json 則用 admin 密碼 123456789 會看到如下沒資料的畫面:
這是因為還要到其連接的 IoTtalk server 上做: (a)建立 Device Model(DM) DataServer (b)建立 project, 拉入需要的 DM (c)各 DM 的 IDF 連線到對應的 DM 之 ODF (d)綁定(bind)各 DM 與其正確的 DA

執行 bash startup.sh 除了啟動 Dashboard 的 server,
也會把 ODF 的 DA 跑起來, DA 當然會先去跟 IoTtalk Server 註冊 !
會為每個場域(Field)註冊一個 d_name (設備名稱), 類似 fieldName_DataServer
且該 DA 會依據設定試著去 IoTtalk server 綁定的 DataServer 之 ODF 抓(pull)資料;
所以必須在 IoTtalk Server 上建立一個 project 把 IDF 和 ODF 連起來!
並且把 project 內 Device Model(DM) DataServer (可能不只一個)綁定正確的 d_name;
你可以在 IoTtalk Server 上先查看 IDF 資料是否已經推送(push)到 IoTtalk Server ?!
如果在IoTtalk Server IP:9999/list_all(e.g: http://140.113.199.213:9999/list_all)
上可以看到資料,則代表資料已經到IoTtalk Server上的IDF module。

o sensors(IDF/ODF) 

必要時, 在iottalk server的GUI上新增對應IDF與ODF
(e.g http://140.113.199.213:7788/dfm)
# 如果需要的 IDF name 和 ODF name 都已經有了, 就不必新增了 !
# 如果對 DFM/DMM 不熟悉請參看IoTtalk使用手冊的(七):
   https://iottalk.vip/000/#AddDM
  (包括文字說明和兩個參考影片。)


IDF 資料要有 DA 從 Sensor 取得資料送去 IoTtalk Server
當然, DA 也可能是你自己電腦上寫的爬蟲程式去氣象局抓資料,送去 IoTtalk server 的 IDF。
也可能是在 IoTtalk server 上跑的程式去 Arduino Yun 或廣達的 Sensor Box 取得資料。
## 關於抓氣象資料的爬蟲程式,可以參看以下這
   交通部中央氣象局V8版網頁爬蟲
   https://github.com/IoTtalk/Crawler_CWB_V8
## 關於該爬蟲程式範例解說,可參看以下影片:
   
# 此處以 TSMC 的蘭花屋 OrchidHouse 為例子..
# 修改iottalk server上 從 Sensors 取得資料的 DAI.py  (在 da/Map 下)
(e.g vim iottalk_server_1.0/da/Map/FetchData/FetchData_OrchidHouse/DAI.py)
3.1 modify Server IP, # around Line 5 
 # 將server url改成 你的 IoTtalk server IP (e.g http://140.113.199.213:9999)
# 例如:
ServerIP = '38.iottalk.tsmc.com'

3.2 modify DA 的 unique ID (address), 
# 例如:
Reg_addr = 'TSMC_OrchidHouse_001'

3.3 新增 sensors 的 IDF_name, around LINE 9
# 例如:
DAN.profile['df_list']=['CO2-I', 'Humidity-I', 'PM2.5-I','Temperature-I']

3.4  corresponding UUID into idList[ ]
# 例如:
idList = [
'705cd51992dc1faf544441c7dbb6e8bf',
 ... 

3.5  add variable to store the result of fetchdata.py  (在 idList = [ ... ] 後 往下找)
# 例如:
co2 = (float(table.node[idList[2]][0]))

3.6  add DAN.push(…) to send data with HTTP (在 while Loop 內 try: 後)
# 例如:
DAN.push('CO2-I', 24.772946,  121.011238, 'OrchidHouse_CO2', co2, \
   str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
TOP
 ToC

o ODF -- 在iottalk server的GUI上新增對應DM DataServer 勾選需要的 ODF, 必要時須新增 DF_name o ODF --- (使用dashboard的GUI新增ODF) 在這新增的 ODF 的 DF_name 要與 IoTtalk 上 DataServer DM 的 ODF 對應! 開啟瀏覽器:輸入網址dashboard VM IP:7788查看dashboard !! 這裡是假設你有修改 config.py 把很前面的 port=None 改為 port=7788 !! 若沒改要把這裡的 7788 改為 5000 (因 Flask 預設用 port 5000 (e.g http://140.113.199.223:7788/) 以管理者身分登入(e.g admin) 點擊左方列表內的系統管理按鈕(System Management) 必要時新增 sensors 4.1 點擊Sensor查看Sensors列表 4.2 點擊add按鈕進入Sensor Management介面 4.3 輸入對應的sensor內容 (e.g) name df_name alias unit icon color humidity1 Humidity-O1 入口濕度 % ion-waterdrop bg-aqua 4.4 點擊create建立新sensor 4.5 如果有新增 Sensor,必須把 FarmDashboard 重跑:
bash startup.sh
建立 場域 (create fields) 5.1 click Field to look through Fields list 5.2 press the add button to enter Field Management interface 5.3 fill in corresponding field contents (e.g) name alias floor1 蘭花屋一樓 5.4 press the + button besides sensors to add corresponding sensors to the field 5.5 press the create button to add field to the dashboard 在iottalk server 新增project (e.g 點 首頁 project 會開新窗 http://140.113.199.213:7788/connection) 6.1 根據project選擇對應IDF和ODF 6.2 將IDF與ODF連線(注意:一個project內不能出現超過30個join否則會出現internal server error) 6.3 綁定(關聯)各 Device Model 對應 device_name open dashboard (e.g http://140.113.199.223:7788/) to see the result (check the result with iottalk server IP/list_all) (e.g http://140.113.199.213:9999/list_all) 可參考video進行操作:


 
TOP ToC
多語系(i18n)使用說明 ..  (from FarmDashboard README.md)

文字準備
## python

# use gettext('') to the needing change words.
from flask_babel import gettext
msg = gettext('Babel is good.')

# or if you want to use constant strings somewhere in 
# your application and define them outside of a request, 
# you can use a lazy strings lazy_gettext('').
from flask_babel import lazy_gettext
msg = lazy_gettext('Babel is good.')


## Javascript
# use {{ _('') }} to the needing change words. for example:
{{ _('System Management') }}
### 使用語言包 (Babel) ## 首次使用 #1 - 將所有 python 及 html 所用到的字串擷取出來: pybabel extract -F app/babel.cfg -o messages.pot . #2 - 建立字典檔 (儲放於 app/translations 下): pybabel init -i messages.pot -d app/translations/ -l #3 - 翻譯文字,修改前一步產生的 po 檔,翻譯對應語系的文字,檔案路徑為: app/translations//LC_MESSAGES/messages.po #4 - 編譯字典 po 檔成 mo 檔,供 babel 使用: pybabel compile -f -d app/translations ## 更新字典檔 (與首次使用相同,差別在於第二步的 update 用 update 取代 init) #1 - 將所有 python 及 html 所用到的字串頡取出來: pybabel extract -F app/babel.cfg -o messages.pot . #2 - 更新字典檔: pybabel update -i messages.pot -d app/translations/ -l #3 - 翻譯文字,修改前一步產生的 po 檔,翻譯對應語系的文字,檔案路徑為: app/translations//LC_MESSAGES/messages.po #4 - 編譯字典 po 檔成 mo 檔,供 babel 使用: pybabel compile -f -d app/translations
TOP ToC
Q&A   Q&A    Q&A



Q1:如果執行tmux a查看dashboard狀況時,出現如上圖中的錯誤訊息時,該如何處理?
A1:處理流程如下: (因為 startup.sh 程式碼寫成使用子目錄 venv 內的虛擬隔離環境)

建立虛擬隔離環境 venv 給 Dashboard 用來跑 Python
1.1. 跳出tmux: press Ctrl+B D
1.2. 在 FarmDashboard 根目錄下建立虛擬隔離環境 venv
python3 -m venv venv
1.3. 激活虛擬環境: 
source venv/bin/activate
重新安裝requirements.txt 內的套件
因為進入venv後等同於進入一個新環境,故須重新安裝相關檔案。
pip install -r requirements.txt
重啟dashboard以更新DA狀態
bash startup.sh
check dashboard status
tmux a

press Ctrl+B 1或2切換tmux查看dashboard連接狀況
開啟瀏覽器,輸入網址: dashboard VM IP:7788 查看dasboard

倘若還是無法正常連線,請重啟VM試試
6.1. 重開機
sudo reboot
6.2. 重複步驟3~5




Q2:如果執行tmux a查看dashboard狀況時,出現如上圖中的錯誤訊息時,該如何處理?
A2:這是因為iottalk server沒有對應的DM,所產生的錯誤訊息。
處理流程如下:

開啟瀏覽器,輸入網址: IoTtalk server IP:9999進入IoTtalk Homepage
點擊Device Feature Management進入DF、DM管理介面
點擊左上Device Feature按鈕,切換至Device Model Window
點擊add new DM後,勾選要加入的ODF
點擊save按鈕存檔
輸入device model name(e.g DataServer)
如果是修改該 DM DataServer 則存檔時會問你要不要 Replace 
萬一沒辦法 Replace 表示有 project 在使用 DataServer 這 DM,要先停用才能更新!

References
o 關於 DFM (Device Feature Management)設備功能的管理


o 關於 Devie Model Management 設備模型(類別)的管理
o Build your own IoT Dashboard ( using FarmDashboard) IoTtalk Dashboard 結合影像應用於遠端環境監控系統(1) Part 2 IoTtalk Dashboard 結合影像應用於遠端環境監控系統(2)
TOP  ToC

FarmDashBoard 現在需要取得授權才可以下載 Source code,
請 Email 給交大 "林勻蔚博士"<jyneda@gmail.com> 詢問如何取得授權。
如果你使用FarmDashboard發現Bug或有建議請Email給"顏泰翔博士"<ksoyam95@gmail.com>

You are the -th visitors.       、,:;。「︓」『』?!  * ★ ※ ──  👉 ※ ★ ? 😇 I'll be back!』 《 Bite me! 》! 
* 想學 Python + Flask 請點這     Jinja2 Jinja2 Doc     *點這看我寫的超簡單 HTML 網頁教學(可搜尋 HTML + tsaiwn 找到)   *也有要錢的瀏覽器 (沈修平博士)
* 點這看如何選擇 VPS ?     (建議用 DigitalOcean 或 Hostwinds.com 流量小可以先用免費的 AWS EC2)     C++11 vs. 14   14 vs. 17     OppO R17 vs. R17Pro

* PuTTY officeal site to Download PuTTY
* PieTTY project official site   Download Pietty0400b14.zip

* 取妻當取李子柒? 不說話的網紅年賺多少館長也很她ㄟ!唱歌好聽的阿冷以及台灣任何網紅還要紅的李子柒李子柒何許人 i 網紅 阿冷演講 沙漠骆驼
   李子柒、辦公室小野谷阿莫...谷阿莫這群人、蔡阿嘎小玉、以及黃氏兄弟讓大家相信努力就可賺到Youtube的錢。 排名點閱排名也是排名   第一名   黃氏兄弟
  *  關於林一平教授可以參看林教授個人網站林教授Digitimes專欄林教授的書『大橋驟雨』 (林一平fB臉書大戰宅神)
      創意真的偷就有了!   👉 沒有是非的時代誰造成的 ( 要有善良的心, 請思考我們與惡的距離 !)