Select Page
用 wpa_cli 控制你的 WIFI (無線網路)

用 wpa_cli 控制你的 WIFI (無線網路)

wpa_cli 是一個用於與 wpa_supplicant 交互的命令行界面工具,當然也支持在 command line 下直接使用命令控制 WIFI,可以用來管理無線網絡接口的設定和運行狀態。這個工具非常強大,支持多種操作,如掃描無線網絡、連接到網絡、變更設定等,而我都用python 透過 wpa_cli 來控制 WIFI。

首先掃描無線網路

打開終端,並且記得要用 root 權限來執行 wpa_cli

sudo wpa_cli -i wlan1 scan
sleep 5  # 給予一些時間來完成掃描
sudo wpa_cli -i wlan1 scan_results

回應如下圖

加一個網路配置

利用 ssid 和 paswword 來連線到一個已知的無線網路上,可以將下面的指令編寫成 wpa_cli_add_network.sh ,並且執行她,也可以直接使用,執行後取得的 network id 通常是一個 int 的數字,把她記起來,之後就可以透過這個 network id 來連接網路,和斷開網路

# 添加新的網絡配置
network_id=$(wpa_cli -i wlan1 add_network | awk '{print $NF}')

# 設置SSID和密碼
wpa_cli -i wlan1 set_network $network_id ssid '"你的SSID"'
wpa_cli -i wlan1 set_network $network_id psk '"你的密碼"'

# 啟用該網絡
wpa_cli -i wlan1 enable_network $network_id

# 保存配置
wpa_cli -i wlan1 save_config

連接網路以及斷開網路

# 重新連線
wpa_cli -i wlan1 reconnect

#斷開連線
wpa_cli -i wlan1 disconnect

刪除網路配置

wpa_cli -i wlan1 remove_network $network_id

檢查連線是否存在

wpa_cli -i wlan1 status

得到的輸出通常如下

其中,檢查是否有連線成功,可以看 wpa_state 是否為 COMPLETED

檢查已經存在的網路設定

sudo wpa_cli -i wlan1 list_networks

輸出如下

可以用 flags CURRENT 來檢查現在是連線到那一個 network ,也可以取得 network id ,並且用他來連線

開發 ChatGPT 的兩種方法

開發 ChatGPT 的兩種方法

ChatGPT 一開始出來的時候還沒有開放 API 的時候,就有很多人用 Session key 的方法去使用他的服務,到現在雖然說用官方的 OpenAPI 已經很強大了,但缺點是 ChatGPT 永遠比較新,像是剛出來 ChatGPT 4 的時候,就沒有 API 可以用,都要等好幾個月,這時候只能使用 Session key 的方法去存取服務,這個方法可以採用 revChatGPT

revChatGPT 的三種安裝方法

原始碼下載:

https://github.com/acheong08/ChatGPT

Pip 安裝

https://pypi.org/project/revChatGPT/

只要打下面的指令就可以安裝

python -m pip install --upgrade revChatGPT

revChatGPT 的使用方法

免費使用要用 V1 ,免費版本會有些限制,目前的限制如下

  • Proxy server: 5 requests / 10 seconds
  • OpenAI: 50 requests / hour for each account

採用登入方法,要去 config.json 中填入你的帳號和密碼

{
  "email": "email",
  "password": "your password"
}

採用 Session Key 的方法,要去你的瀏覽器中,找到你的 Key 並且回填,但這種方法,一旦你登出後就要重新來過,只有自己一個人使用的時候可以用,比較不推薦,使用方法,先點下面的連結

https://chat.openai.com/api/auth/session

找到 accessToken 後面的文字,複製後取代 <access_token> 即可

{
  "access_token": "<access_token>"
}

設定完成後可以建立一個 Python 檔案,測試一下

from revChatGPT.V1 import Chatbot
chatbot = Chatbot(config={
  "access_token": "<your access_token>"
})
print("Chatbot: ")
prev_text = ""
for data in chatbot.ask(
    "請給我10個拯救地球的好主意",
):
    message = data["message"][len(prev_text) :]
    print(message, end="", flush=True)
    prev_text = data["message"]
print()

OpenAI 官方 Python API

這邊網路教學很多,而且常常在改,我就放一個教學,可以直接去看一下

在Raspberry 使用 Python Vlc or CVlc 播放影音

如果想要用 Raspberry 樹梅派打造自己擁有的播放器,首選就是用VLC,可以全功能的做各種高難度的自訂控制,真的有找不到的功能,就自己再添加一下就可以了。

首先要先安裝 VLC

sudo apt install -y vlc

接下來安裝 Python VLC

python -m pip install python-vlc

封裝一個 VLC.py

import os, time

# 設置VLC庫路徑,需在import vlc之前
os.environ['PYTHON_VLC_MODULE_PATH'] = "./vlc-3.0.6"

import vlc


class Player:
    '''
        args:設置 options
    '''
    def __init__(self, *args):
        if args:
            instance = vlc.Instance(*args)
            self.media = instance.media_player_new()
        else:
            self.media = vlc.MediaPlayer()

    # 設置待播放的url地址或本地文件路徑,每次調用都會重新加載資源
    def set_uri(self, uri):
        self.media.set_mrl(uri)

    # 播放 成功返回0,失敗返回-1
    def play(self, path=None):
        if path:
            self.set_uri(path)
            return self.media.play()
        else:
            return self.media.play()

    # 暫停
    def pause(self):
        self.media.pause()

    # 恢復
    def resume(self):
        self.media.set_pause(0)

    # 停止
    def stop(self):
        self.media.stop()

    # 釋放資源
    def release(self):
        return self.media.release()

    # 是否正在播放
    def is_playing(self):
        return self.media.is_playing()

    # 已播放時間,返回毫秒值
    def get_time(self):
        return self.media.get_time()

    # 拖動指定的毫秒值處播放。成功返回0,失敗返回-1 (需要注意,只有當前多媒體格式或流媒體協議支持才會生效)
    def set_time(self, ms):
        return self.media.get_time()

    # 音視頻總長度,返回毫秒值
    def get_length(self):
        return self.media.get_length()

    # 獲取當前音量(0~100)
    def get_volume(self):
        return self.media.audio_get_volume()

    # 設置音量(0~100)
    def set_volume(self, volume):
        return self.media.audio_set_volume(volume)

    # 返回當前狀態:正在播放;暫停中;其他
    def get_state(self):
        state = self.media.get_state()
        if state == vlc.State.Playing:
            return 1
        elif state == vlc.State.Paused:
            return 0
        else:
            return -1

    # 當前播放進度情況。返回0.0~1.0之間的浮點數
    def get_position(self):
        return self.media.get_position()

    # 拖動當前進度,傳入0.0~1.0之間的浮點數(需要注意,只有當前多媒體格式或流媒體協議支持才會生效)
    def set_position(self, float_val):
        return self.media.set_position(float_val)

    # 獲取當前文件播放速率
    def get_rate(self):
        return self.media.get_rate()

    # 設置播放速率(如:1.2,表示加速1.2倍播放)
    def set_rate(self, rate):
        return self.media.set_rate(rate)

    # 設置寬高比率(如"16:9","4:3")
    def set_ratio(self, ratio):
        self.media.video_set_scale(0)  # 必須設置為0,否則無法修改屏幕寬高
        self.media.video_set_aspect_ratio(ratio)

    # 註冊監聽器
    def add_callback(self, event_type, callback):
        self.media.event_manager().event_attach(event_type, callback)

    # 移除監聽器
    def remove_callback(self, event_type, callback):
        self.media.event_manager().event_detach(event_type, callback)

使用VLC.py

def my_call_back(event):
    print("call:", player.get_time())


if "__main__" == __name__:
    player = Player()
    player.add_callback(vlc.EventType.MediaPlayerTimeChanged, my_call_back)
    player.play("test.mp3")

    # 防止当前进程退出
    while True:
        pass
def my_call_back(event):
    print("call:", player.get_time())

官方文檔

https://www.olivieraubert.net/vlc/python-ctypes/doc/

參考資料

https://zhuanlan.zhihu.com/p/69906080

Cov-19 疫情下的幼兒園,家長接送策略,導入AI的無接觸自動唱名系統

Cov-19 疫情下的幼兒園,家長接送策略,導入AI的無接觸自動唱名系統

翰科教育,夏恩國際幼兒園,開幕

最近接到一個很有意義的任務,一個大型幼兒園提出,最近Cov-19的疫情下,都不准家長進入幼兒園,也想要減少家長來接送小孩時候的接觸,不知道有沒有甚麼好的科技手段可以解決在Cov-19的疫情下,讓家長不用說話也不用接觸,並且來接小孩的時候,幼兒園就可以知道,是那位小朋友要出去?

分析問題如下:

  • Cov-19的疫情下,不希望過多的接觸
  • 最好可以家長免下車,幼兒園就可以知道那位小朋友的家長來接送了
  • 成本要低,並且不要為了解決一個家長接送的問題,搞得幼兒園需要處理很多事情,讓流程反而複雜化了

解方如下:

  • 利用家長卡(RFID)可以不用接觸,就可以得知是那位孩童的家長到了
  • 利用AI語音合成,當家長卡靠卡的時候,利用Microsoft的語音合成服務,提供自然且流暢的語音,提醒幼兒園那位小朋友的家長來了

家長接送樁,相關硬體準備如下:

廣播主機,家長接送區的靠卡行動樁,以及家長卡,蜂鳴器(喇叭)、NFC讀卡機

家長接送樁,相關軟體規畫如下:

  • Google 合成語音
  • Microsoft 合成語音
  • 訊飛 合成語音
  • Web Server 接收指令
  • Web Client 發送指令
  • 資料庫 家長與學生的資料庫

家長接送樁,作法如下:

  1. 建立家長與學童的資料庫,建立其對應關係
  2. 將學童的呼叫語音,透由AI程式預先合成自然且流暢的語音,並且放於廣播主機中
  3. 撰寫家長接送樁的RFID(NFC)的讀卡程式,並且透過內部網路,發送讀取到的卡片資訊傳送到廣播主機上頭
  4. 廣播主機對應資訊,並且透過音響廣播到教室區

採用家長接送樁主機的好處:

  • 全程不用下車,也不用接觸物品,人員,靠卡就可以呼叫小朋友出來
  • 節省人力,無論是刮風下雨、大熱天、颱風天等等,都可以讓家長接送樁,來幫忙家長服務
  • 可靠性佳,不用怕認錯人,也不用怕小朋友被壞人接走
  • 成本低,一套設備下來,包含備援,準備兩組設備也不到一個人的月薪

夏恩英語FB

夏恩幼兒園 林口翰科旗艦校 最具世界競爭高度的國際級幼兒園

翰科教育林口國際幼兒園

妳也可以用小米手環呼叫小朋友

怎麼把門禁卡變手環