Saludos, amigos y vecinos...
He llegado a este hilo buscando lo que este script de Python hacía. He probado la integración directamente en Home Assistant, pero como lo tengo en docker, no puedo usarla, de modo que como ya tengo un servidor web montado en mi NAS Synology, no necesitaba el servidor flask del script de Python, así que he convertido el script a php (Más bien lo ha hecho ChatGPT).
Puedo confirmar que los datos los envía correctamente a Home Assistant y ahora estoy esperando a ver si los valida el servidor de Meteoclimatic.
El script php es este:
<?php
// CONFIGURACIÓN
$TOKEN_SEGURO = "token_para_ecowitt"; // CAMBIA ESTO
$HOME_ASSISTANT_WEBHOOK = "http://192.168.1.100:8123/api/webhook/long_live_token_de_HA";
$METEOCLIMATIC_API = "http://api.m11c.net/v2/ew/{station_code}/{api_key}";
$STATION_CODE = "ESAND29XXXXXXXXXXXX";
$API_KEY = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
$LOG_FILE = "weather_data.log";
$DEBUG_FILE = "debug.log";
date_default_timezone_set("Europe/Madrid");
// FUNCIÓN PARA ESCRIBIR EN DEBUG
function write_debug($file, $msg) {
$time = date("Y-m-d H:i:s");
file_put_contents($file, "[$time] $msg\n", FILE_APPEND);
}
// ------------------------
// COMPROBAR TOKEN EN LA URL
// ------------------------
if (!isset($_GET["token"]) || $_GET["token"] !== $TOKEN_SEGURO) {
write_debug($DEBUG_FILE, "Acceso denegado: token inválido o ausente.");
http_response_code(403);
echo "Forbidden";
exit;
}
// El token no debe enviarse a otros servicios
unset($_GET["token"]);
// ------------------------
// RECEPCIÓN DE DATOS ECOwitt
// ------------------------
$data = $_POST;
if (empty($data)) {
$data = $_GET; // por si algo viene en GET
}
file_put_contents($LOG_FILE, json_encode($data) . "\n", FILE_APPEND);
// ------------------------
// ENVÍO A HOME ASSISTANT
// ------------------------
try {
$ch = curl_init($HOME_ASSISTANT_WEBHOOK);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
write_debug($DEBUG_FILE, "Enviado a HA. Estado: $http_status");
} catch (Exception $e) {
write_debug($DEBUG_FILE, "Error enviando a HA: " . $e->getMessage());
}
// ------------------------
// ENVÍO A METEOCLIMATIC
// ------------------------
try {
$url = str_replace(
["{station_code}", "{api_key}"],
[$STATION_CODE, $API_KEY],
$METEOCLIMATIC_API
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
write_debug($DEBUG_FILE, "Enviado a Meteoclimatic. Estado: $http_status");
} catch (Exception $e) {
write_debug($DEBUG_FILE, "Error enviando a Meteoclimatic: " . $e->getMessage());
}
// ------------------------
// RESPUESTA A ECOWITT
// ------------------------
http_response_code(200);
echo "OK";
Luego queda configurar ecowitt para que envíe los datos a la ip de tu servidor, en mi caso: 192.168.1.100 y el path a la ruta donde hayas puesto el archivo, en mi caso /weather/api_data.php?token=token_para_ecowitt (El mismo token que pusiste en la configuración del script php)
Ajolá funcione!!!
