Pythonで簡単なhttp経由のスイッチを作成する

投稿者: | 9月 9, 2024

作成したい物

・ http://IPアドレス/onにアクセス(get)するとファイルの内容が1になる。
・ http://IPアドレス/offにアクセス(get)するとファイルの内容が0になる。
・ http://IPアドレス/onoff_statusにアクセス(get)するとファイルの内容が返ってくる。

コード

ChatGPTに作成してもらいました。ポートは8000になっています。
pipでHTTPServerをインストールしてください。

from http.server import BaseHTTPRequestHandler, HTTPServer, ThreadingHTTPServer
import os

# ファイルパスの定義
file_path = "/home/unagidojyou/switchserver/onoff_status.txt"

class RequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # /on へのGETリクエスト
        if self.path == '/on':
            with open(file_path, 'w') as file:
                file.write('1')
            self.send_response(200)
            self.end_headers()
            self.wfile.write(b"ON state saved")

        # /off へのGETリクエスト
        elif self.path == '/off':
            with open(file_path, 'w') as file:
                file.write('0')
            self.send_response(200)
            self.end_headers()
            self.wfile.write(b"OFF state saved")

        # /onoff_status へのGETリクエスト
        elif self.path == '/onoff_status':
            if os.path.exists(file_path):
                with open(file_path, 'r') as file:
                    state = file.read()
            else:
                state = 'File not found'
            self.send_response(200)
            self.end_headers()
            self.wfile.write(state.encode())
        else:
            self.send_response(404)
            self.end_headers()
            self.wfile.write(b"Not Found")

def run(server_class=ThreadingHTTPServer, handler_class=RequestHandler, port=8000):
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    print(f"Starting httpd on port {port}...")
    httpd.serve_forever()

# サーバーをポート8000で起動
run()

使用例

自分は、Homebridgeにスイッチとして登録しました。
onoff_status.txtを参照するスクリプトを作成してもいいですし、コードを追加してGPIOをいじってもいいと思います。
Linuxで任意のスクリプトをsystemdに登録してサービス化とかでサービス化するのも良いと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)