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

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

Desconectado tonicb

  • Newbie
  • *
  • Mensajes: 7
  • Estación: Rubí - Andromeda: ESCAT0800000008191B
Buenas,

Soy nuevo en todo esto, hace poco me compré una Ecowitt Wittboy, la tengo integrada en Homeassistant y quería enviar también los datos a esta plataforma.

Mirando los protocolos veo que localmente solo deja crear un servidor, por lo que gracias a chatgpt y después de varias pruebas he creado un script de python muy simple que lo que hace es recibir los datos directamente de la estación por el protocolo ecowitt y después estos los redirige a mi servidor de homeassistant y también a meteoclimatic, de forma que es como si tuviera configurados dos DIY servers en la estación.

Decir que la idea es tener un server linux para esto, yo tengo todo virtualizado en proxmox, pero una simple raspberry serviría.

Archivo: ecowitt.py:
Código: [Seleccionar]
from flask import Flask, request
import requests
import json
import os
from datetime import datetime

# Configuración inicial
HOME_ASSISTANT_WEBHOOK = "http://server_ha:8123/api/webhook/XXXXXXXXXXXXX"  # Cambia esto si usas otro webhook.
METEOCLIMATIC_API = "http://api.m11c.net/v2/ew/{station_code}/{api_key}"  # Ruta base de Meteoclimatic
STATION_CODE = "ESXXXXXXXXXXXXXX"  # Sustituye por tu código de estación de Meteoclimatic
API_KEY = "XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX"  # Sustituye por tu API key de Meteoclimatic
LOG_FILE = "weather_data.log"  # Archivo para almacenar datos localmente
DEBUG_FILE = "debug.log"  # Archivo para guardar información de debug

# Inicializar servidor Flask
app = Flask(__name__)

@app.route('/api/data', methods=['POST'])
def receive_data():
    try:
        # Recibir datos enviados por la estación Ecowitt
        data = request.form.to_dict() if request.form else request.args.to_dict()
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

        # Guardar datos en un archivo local (opcional)
#        with open(LOG_FILE, "a") as log:
#            log.write(json.dumps(data) + "\n")

        # Debug: Escribir datos recibidos
#        with open(DEBUG_FILE, "a") as debug:
#            debug.write(f"[{current_time}] Datos recibidos: {json.dumps(data)}\n")

        # Enviar datos a Home Assistant como la propia estación
        try:
            ha_response = requests.post(HOME_ASSISTANT_WEBHOOK, data=data)
            ha_status = ha_response.status_code
            with open(DEBUG_FILE, "a") as debug:
                debug.write(f"[{current_time}]: Enviado a Home Assistant. Estado: {ha_status}\n")
        except Exception as e:
            with open(DEBUG_FILE, "a") as debug:
                debug.write(f"[{current_time}]: Error enviando a Home Assistant: {e}\n")
            ha_status = "Error"

        # Enviar datos a Meteoclimatic como la propia estación
        try:
            meteoclimatic_url = METEOCLIMATIC_API.format(station_code=STATION_CODE, api_key=API_KEY)
            mc_response = requests.post(meteoclimatic_url, data=data)
            mc_status = mc_response.status_code
            with open(DEBUG_FILE, "a") as debug:
                debug.write(f"[{current_time}]: Enviado a Meteoclimatic. Estado: {mc_status}\n")
        except Exception as e:
            with open(DEBUG_FILE, "a") as debug:
                debug.write(f"[{current_time}]: Error enviando a Meteoclimatic: {e}\n")
            mc_status = "Error"

        # Respuesta al cliente (estación Ecowitt)
        return "OK", 200

    except Exception as e:
        with open(DEBUG_FILE, "a") as debug:
            current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            debug.write(f"[{current_time}] Error procesando datos: {e}\n")
        return "Error interno del servidor", 500

if __name__ == "__main__":
    # Ejecutar el servidor Flask
    port = 80  # Cambia si deseas usar otro puerto
    app.run(host="0.0.0.0", port=port)

En los protocolos de Ecowitt hay que configurarlos que apunten a la IP donde ejecutes este script, con path=/api/data, puerto 80 (lo puedes cambiar) y intervalo de 60 segundos.

« Última modificación: 06 de Diciembre de 2024, 22:48:08 por tonicb »

Desconectado jantoni

  • Administrator
  • Hero Member
  • ******
  • Mensajes: 5.986
  • Estación: ESMAD2800000028522A
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #1 en: 07 de Diciembre de 2024, 00:06:31 »
Buen aporte.

Pero digo yo.....si usas una Raspberry Pi......¿no será más fácil montar un Weewx?

Paso 1.....programas la consola para enviar datos a Home Assistant

Paso 2.... instalas Weewx en la Raspberry PI

Paso 3.....instalas el driver GW1000 (ahora creo que le han cambiado el nombre) en Weewx

Paso 4.....Weewx mediante el driver GW1000 interroga cada pocos segundos a la GW2000 (ya que dices que tienes la Wittboy)

Y ya puedes enviar a Meteoclimatic y a todos los servicios meteorológicos que se te ocurran.....a partir de ahora eres totalmente libre y, sobre todo, tú controlas los datos y no dependes de "la nube"

Es una sugerencia. Y además te puedes ahorrar futuros dolores de cabeza.

Davis Vantage Vue (sin datalogger) + Orange Pi PC + Weewx

GW2000 + WS90 con Weewx (https://www.ecowitt.net/home/index?id=199315)
WH2650 con WH65 con Home Assistant y Weewx (https://www.ecowitt.net/home/index?id=40387)
GW1000 con WH32 y Home Assistant (https://www.ecowitt.net/home/index?id=17080)
Sensores adicionales: WH31 (3) + WH41

Dada la gran cantidad de privados recibidos, he restringido la posibilidad de recibir privados. Por favor, las consultas en el foro.

Desconectado jantoni

  • Administrator
  • Hero Member
  • ******
  • Mensajes: 5.986
  • Estación: ESMAD2800000028522A
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #2 en: 07 de Diciembre de 2024, 00:10:39 »
Le pongo una chincheta.

Podría ser Home Assistant u otro servicio meteorológico que admita el protocolo Ecowitt.

Las posibilidades son enormes.

Además, también se podría ejecutar el script en un NAS QNAP o Synology, o en el propio ordenador que ejecuta Home Assistant.

Aunque sigo recomendando la solución que te he planteado. *+* *+* *+* *+* *+*

Davis Vantage Vue (sin datalogger) + Orange Pi PC + Weewx

GW2000 + WS90 con Weewx (https://www.ecowitt.net/home/index?id=199315)
WH2650 con WH65 con Home Assistant y Weewx (https://www.ecowitt.net/home/index?id=40387)
GW1000 con WH32 y Home Assistant (https://www.ecowitt.net/home/index?id=17080)
Sensores adicionales: WH31 (3) + WH41

Dada la gran cantidad de privados recibidos, he restringido la posibilidad de recibir privados. Por favor, las consultas en el foro.

Desconectado tonicb

  • Newbie
  • *
  • Mensajes: 7
  • Estación: Rubí - Andromeda: ESCAT0800000008191B
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #3 en: 07 de Diciembre de 2024, 01:17:09 »
Gracias!

Weewx era otra opción, pero quería algo lo más simple posible, que solo haga de receptor local y repetidor.

Desconectado jantoni

  • Administrator
  • Hero Member
  • ******
  • Mensajes: 5.986
  • Estación: ESMAD2800000028522A
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #4 en: 07 de Diciembre de 2024, 14:15:20 »
Como sugerencia, te diría de poner el Webhook como una variable.

Davis Vantage Vue (sin datalogger) + Orange Pi PC + Weewx

GW2000 + WS90 con Weewx (https://www.ecowitt.net/home/index?id=199315)
WH2650 con WH65 con Home Assistant y Weewx (https://www.ecowitt.net/home/index?id=40387)
GW1000 con WH32 y Home Assistant (https://www.ecowitt.net/home/index?id=17080)
Sensores adicionales: WH31 (3) + WH41

Dada la gran cantidad de privados recibidos, he restringido la posibilidad de recibir privados. Por favor, las consultas en el foro.

Desconectado HectorziN

  • Newbie
  • *
  • Mensajes: 4
  • Estación: ESCAT0800000008213A
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.

Desconectado spyfly

  • Full Member
  • ***
  • Mensajes: 281
  • Estación: Ponferrada (ESCYL2400000024411A)
Pues a mi me parece estupendo!! Sería un complemento que funcionaría asi, no?

Estación ecowitt envía al nuevo complemento de hectorzin y ese complemento envía a 2 sitios: meteoclimatic y integración oficial de ecowitt

¿no?

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

Desconectado HectorziN

  • Newbie
  • *
  • Mensajes: 4
  • Estación: ESCAT0800000008213A
Sí, sería un custom component, que ejecutaría el script de tonicb.

de hecho en local he hecho pruebas y funciona, creando el complemento y copíandomelo a mano a la carpeta custom_components.
La idea es publicarlo en github y que se pueda añadir la url del complemento directamente en Home Assistant para poder cargarlo y configurarlo


Desconectado jantoni

  • Administrator
  • Hero Member
  • ******
  • Mensajes: 5.986
  • Estación: ESMAD2800000028522A
Muy bien, pero creo que es conveniente abrir otro hilo

Lo podéis abrir en Otro Software Meteorologico
« Última modificación: 23 de Enero de 2025, 18:55:01 por jantoni »

Davis Vantage Vue (sin datalogger) + Orange Pi PC + Weewx

GW2000 + WS90 con Weewx (https://www.ecowitt.net/home/index?id=199315)
WH2650 con WH65 con Home Assistant y Weewx (https://www.ecowitt.net/home/index?id=40387)
GW1000 con WH32 y Home Assistant (https://www.ecowitt.net/home/index?id=17080)
Sensores adicionales: WH31 (3) + WH41

Dada la gran cantidad de privados recibidos, he restringido la posibilidad de recibir privados. Por favor, las consultas en el foro.

Desconectado jantoni

  • Administrator
  • Hero Member
  • ******
  • Mensajes: 5.986
  • Estación: ESMAD2800000028522A
Pero antes te recomiendo el terminar de configurar la estación para enviar datos a Meteoclimatic.

Edito.....la tenías en hora local......con el,protocolo Ecowitt debes usar UtC

Ya te lo he modificado....en la próxima actualización espero que se reflejen tus datos
« Última modificación: 23 de Enero de 2025, 19:00:02 por jantoni »

Davis Vantage Vue (sin datalogger) + Orange Pi PC + Weewx

GW2000 + WS90 con Weewx (https://www.ecowitt.net/home/index?id=199315)
WH2650 con WH65 con Home Assistant y Weewx (https://www.ecowitt.net/home/index?id=40387)
GW1000 con WH32 y Home Assistant (https://www.ecowitt.net/home/index?id=17080)
Sensores adicionales: WH31 (3) + WH41

Dada la gran cantidad de privados recibidos, he restringido la posibilidad de recibir privados. Por favor, las consultas en el foro.

Desconectado HectorziN

  • Newbie
  • *
  • Mensajes: 4
  • Estación: ESCAT0800000008213A
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #10 en: 23 de Enero de 2025, 21:48:42 »
Muy bien, pero creo que es conveniente abrir otro hilo

Lo podéis abrir en Otro Software Meteorologico
Lo he dicho en este hilo porque digamos que estoy esperando el visto bueno del creador del script, y supongo que tendrá avisos en este hilo para poder responder a los mensajes.
Una vez montado si da su aprovación, abro un hilo con ello si te parece.

Gracias!

Desconectado spyfly

  • Full Member
  • ***
  • Mensajes: 281
  • Estación: Ponferrada (ESCYL2400000024411A)
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #11 en: 23 de Enero de 2025, 21:50:25 »
 apla3 a ver si da el OK el creador entonces! :-)

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

Desconectado jantoni

  • Administrator
  • Hero Member
  • ******
  • Mensajes: 5.986
  • Estación: ESMAD2800000028522A
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #12 en: 23 de Enero de 2025, 21:51:30 »
Me parece más que bien *+*

Esperemos que lea el mensaje. No estoy muy seguro que funcionen las notificaciones

Desde luego a mí no me llega ninguna.

Davis Vantage Vue (sin datalogger) + Orange Pi PC + Weewx

GW2000 + WS90 con Weewx (https://www.ecowitt.net/home/index?id=199315)
WH2650 con WH65 con Home Assistant y Weewx (https://www.ecowitt.net/home/index?id=40387)
GW1000 con WH32 y Home Assistant (https://www.ecowitt.net/home/index?id=17080)
Sensores adicionales: WH31 (3) + WH41

Dada la gran cantidad de privados recibidos, he restringido la posibilidad de recibir privados. Por favor, las consultas en el foro.

Desconectado HectorziN

  • Newbie
  • *
  • Mensajes: 4
  • Estación: ESCAT0800000008213A
Re:Script python para envío de datos de ecowitt a home assistant + meteoclimatic
« Respuesta #13 en: 23 de Enero de 2025, 23:22:09 »
Me parece más que bien *+*

Esperemos que lea el mensaje. No estoy muy seguro que funcionen las notificaciones

Desde luego a mí no me llega ninguna.

a mi tampoco me llegan, he probado un PM a ver si eso si que hace que le llegue notificación, si no, difícil que se entere
a ver el código lo tiene ahí público, no creo que le moleste