Autor Tema: Script python para envío de datos de ecowitt a home assistant + meteoclimatic  (Leído 7193 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Valles_occidental

  • Newbie
  • *
  • Mensajes: 6
  • Estación: ESCAT0800000008213A
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #15 en: 26 de Enero de 2025, 18:49:06 »
Vale, por si no vuelve a entrar, lo publico.
De todas formas en el README le he citado.

pongo aquí el link pero abro tema nuevo por si hay dudas de su uso o lo que sea.

https://github.com/hectorzin/ha-ecowitt-meteoclimatic

ahora abro tema

Desconectado tonicb

  • Newbie
  • *
  • Mensajes: 14
  • Estación: Rubí - Andromeda: ESCAT0800000008191B
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #16 en: 02 de Febrero de 2025, 16:54:37 »
Que te parece si basándome en tu código intento crear un complemento para HA?
Serviría para todos los HA OS, no para docker, claro.

Llego tarde, pero si claro, me parece una idea genial!

Desconectado tonicb

  • Newbie
  • *
  • Mensajes: 14
  • Estación: Rubí - Andromeda: ESCAT0800000008191B
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #17 en: 02 de Febrero de 2025, 16:58:43 »
Más tarde lo probaré, ahora algo ha pasado en mi red que no llego a al server: Connection to api.m11c.net timed out.

Desconectado huelvayork

  • Newbie
  • *
  • Mensajes: 2
  • Estación: ESAND2100000021130D
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #18 en: 05 de Febrero de 2025, 19:26:24 »
Hola.

Ayer instalé mi estación y me encontré con esta necesidad.  Pensé en hacer un script o en modificar el addon de ecowitt de home-assistant para poder configurar que "rebote" la información hacia meteoclimatic. No se me ocurrió buscar en el foro ::)

Mi home-assistant corre en docker y está detrás de un servidor nginx que hace de proxy inverso. Al final, la solución que he implementado ha sido configurar el propio nginx para que las peticiones que llegan desde la estación, las reenvíe tanto al home-assitant, como meteoclimatic.

Por si le sirve a alguien, este es el fragmento de configuración de nginx que lo hace:

 location /api/webhook/f6083xxxxxxxxxxxxxxxxxxxx {
     mirror /mirror;
     proxy_pass http://ip_homeassistant:8123;
 }

 location = /mirror {
     internal;
     proxy_pass http://api.m11c.net/v2/ew/ESANxxxxxxxxxx30D/xxxxxxxx-xxxxxxx-xxxxxxxxx-xxxxxxxxxxxxxx;
 }

Desconectado spyfly

  • Full Member
  • ***
  • Mensajes: 352
  • Estación: Ponferrada (ESCYL2400000024411A)
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #19 en: 06 de Febrero de 2025, 00:34:17 »
ah bueno! pues también es buena solución la verdad!

Ecowitt: WH65 + WH2650 + GW3000 + WN32P (WH32P) en 868Mhz
Conexión con Home Assistant y CumulusMX
Sensores adicionales: WH40 + WH57 + WH46D en 868Mhz
Pluviómetro manual homologado CoCoRaHS
https://www.ecowitt.net/home/index?id=258141
https://www.ecowitt.net/home/index?id=219359

Desconectado Xusqui

  • Newbie
  • *
  • Mensajes: 2
    • Meteorología y Seeing Astronómico
  • Estación: ESAND2900000029640B
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:

Código: [Seleccionar]
<?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_FILEjson_encode($data) . "\n"FILE_APPEND);

// ------------------------
// ENVÍO A HOME ASSISTANT
// ------------------------
try {
    
$ch curl_init($HOME_ASSISTANT_WEBHOOK);
    
curl_setopt($chCURLOPT_POSTtrue);
    
curl_setopt($chCURLOPT_POSTFIELDS$data);
    
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    
curl_exec($ch);
    
$http_status curl_getinfo($chCURLINFO_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($chCURLOPT_POSTtrue);
    
curl_setopt($chCURLOPT_POSTFIELDS$data);
    
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    
curl_exec($ch);
    
$http_status curl_getinfo($chCURLINFO_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!!! :D
Web autoalojada de meteorología

Ecowitt WS2091

Integración con Home Assistant