<?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’,
));
});
