プラグイン部

<?php
/**
 * Plugin Name: Aqua Fan Esp32 Loggeer
 * Description: ESP32からのMACアドレスをMySQLに保存するプラグイン。
 * Version: 1.0
 * Author: Toshio Seki
 */
// データベーステーブルを作成する関数
function create_mac_address_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . ‘aqua_fan_esp32_things’; // 修正
    // テーブルが存在しない場合は作成
    if ($wpdb->get_var(“SHOW TABLES LIKE ‘$table_name'”) != $table_name) {
        $charset_collate = $wpdb->get_charset_collate();
        $sql = “CREATE TABLE $table_name (
            id mediumint(9) NOT NULL AUTO_INCREMENT,
            user_login varchar(60) NOT NULL,
            mac_address varchar(17) NOT NULL,
            esp32_name varchar(255) NULL,
            time_division int(11) NULL,
            auto_manual_mode tinyint(1) NULL,
            power_on_off_devision int(11) NULL,
            auto_temperature_setting float NULL,
            manual_temperature_percent int(11) NULL,
            cool_heat_mode tinyint(1) NULL,
            last_modified   timestamp NULL,
            create_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id),
            UNIQUE KEY (mac_address)
        ) $charset_collate;”;
        require_once(ABSPATH . ‘wp-admin/includes/upgrade.php’);
        dbDelta($sql);
        // エラーが発生した場合は表示
        if ($wpdb->last_error) {
            wp_die(‘Database error: ‘ . $wpdb->last_error);
        }
    }
}
register_activation_hook(__FILE__, ‘create_mac_address_table’);
// ESP32からのリクエストを処理するエンドポイント
function handle_esp32_request() {
    if ($_SERVER[‘REQUEST_METHOD’] === ‘POST’) {
        $user_login = $_POST[‘user_login’];
        $password = $_POST[‘password’];
        $esp32_name = $_POST[‘esp32_name’];
        // ユーザー認証
        $user = wp_authenticate($user_login, $password);
        if (is_wp_error($user)) {
            wp_die(‘Authentication failed: ‘ . $user->get_error_message());
            return;
        }
        // MACアドレスを取得
        $mac_address = $_SERVER[‘HTTP_X_MAC_ADDRESS’] ?? ”;
        if (empty($mac_address) || empty($esp32_name)) {
            wp_die(‘MAC address and ESP32 name are required’);
            return;
        }
        // データベースに保存
        global $wpdb;
        $table_name = $wpdb->prefix . ‘aqua_fan_esp32_things’;
        $insert_result = $wpdb->insert($table_name, array(
            ‘user_login’ => $user_login,
            ‘mac_address’ => $mac_address,
            ‘esp32_name’ => $esp32_name,
        ));
        if ($insert_result === false) {
            wp_die(‘Database insert error: ‘ . $wpdb->last_error);
        }
        wp_send_json_success(‘MAC address and ESP32 name saved’);
    }
}
add_action(‘rest_api_init’, function () {
    register_rest_route(‘esp32/v1’, ‘/log_mac’, array(
        ‘methods’ => ‘POST’,
        ‘callback’ => ‘handle_esp32_request’,
    ));
});
タイトルとURLをコピーしました