Meteoclimatic

Software => WeeWX => Skin Belchertown => Mensaje iniciado por: dtalens en 16 de Abril del 2021, 08:50:35 am

Título: Conectar web weewx Belchertown skin a través de MQTT
Publicado por: dtalens en 16 de Abril del 2021, 08:50:35 am
Hola,

Al final he conseguido activar la actualización de la página weewx Belchertown a través de MQTT (ya veís que este skin me trae de cabeza...  *-* *-* *-*).
He seguido este tutorial https://potatoforinter.net/715/updated-guide-weewx-belchertown-mqtt-ws/3/ (https://potatoforinter.net/715/updated-guide-weewx-belchertown-mqtt-ws/3/) (en inglés) por si alguien se atreve.

Saludos,
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jantoni en 16 de Abril del 2021, 09:15:18 am
Ya sé que soy reiterativo, pero no encuentro sentido a tener las estaciones presentes en tiempo real.

No me imagino al visitante, mirando absorto como varía la velocidad del viento y la temperatura, arriba y abajo.

Siempre he dicho que es un derroche de recursos. Pero, a lo mejor, un día de estos me convencéis  *+* *+* *+*
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jmviper en 16 de Abril del 2021, 09:19:41 am
Qué derroche de recursos ??

Ni RAM ni CPU se disparan  *+* *+*

Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jmviper en 16 de Abril del 2021, 09:22:53 am
Yo también instalé lo del MQTT para Belchertown pero la pereza no me dejó hacer una especie de tutorial. Al ser en local había que abrir puerto al exterior para verlo en mi web.

Quizás me anime este finde a hacerlo para que otra gente se anime  *-* *-*

Por cierto....lo mejor es deshabilitar los logs del MQTT en weewx o está constantemente escribiendo SD, en mi caso puse los 3 segundos de actualización de la Davis y el log subía rápidamente.
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jantoni en 16 de Abril del 2021, 10:07:16 am
Qué derroche de recursos ??

Ni RAM ni CPU se disparan  *+* *+*

Bueno, en eso discrepamos.

Los recursos no se circunscriben a la RAM y a la CPU.

Imagínate a millones de estaciones a lo largo del mundo, usando MQTT o similares, enviando paquetes de datos (millones x 2-3 segundos) que no ve nadie más que de vez en cuando. Es como estar lanzando pelotas al aire de forma continua, esperando que alguien lo vea un instante.

Pero es una opinión, insisto que, a lo mejor, hasta me convencéis de lo contrario. *-* *-* *-* *-*
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: dtalens en 16 de Abril del 2021, 11:15:53 am
Yo también instalé lo del MQTT para Belchertown pero la pereza no me dejó hacer una especie de tutorial. Al ser en local había que abrir puerto al exterior para verlo en mi web...

Según el tutorial que he enlazado no hace falta abrir más puertos porqué te conectas a través del 443. En realidad si necesitas abrir un puerto pero sólo para tu red interna.

Qué derroche de recursos ??

Ni RAM ni CPU se disparan  *+* *+*

Bueno, en eso discrepamos.

Los recursos no se circunscriben a la RAM y a la CPU.

Imagínate a millones de estaciones a lo largo del mundo, usando MQTT o similares, enviando paquetes de datos (millones x 2-3 segundos) que no ve nadie más que de vez en cuando. Es como estar lanzando pelotas al aire de forma continua, esperando que alguien lo vea un instante.

Pero es una opinión, insisto que, a lo mejor, hasta me convencéis de lo contrario. *-* *-* *-* *-*

No he notado un aumento de recursos en mi server, de hecho, me parece que la web carga más rápido.

Igual me equivoco pero los datos mqtt se "leen" sólo cuando una persona se conecta a la web. La web si estas sin actividad durante un tiempo te desconnecta del mqtt. De todas formas, la mejora es relativa: el intervalo de actualización ha pasado de 2 min (sin mqtt) a un 1 min (ya que ese es el intervalo que guarda datos weewx), lo bueno es que no se recarga la página cada cierto tiempo, simplemente los datos van cambiando.

Yo si que me he quedado mirando la web un rato para ver como cambian las gráficas....  *-* *-* *-* *-*

Otro aspecto poco comentado es que la web accede a todo el topic MQTT "weather/loop" en el cual estan todos los datos que envia la estación. Si alguien se conecta a la consola de la web puede ver cualquier dato incluso la temperatura interna de mi casa.   :o :o :o
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jmviper en 16 de Abril del 2021, 13:22:31 pm

Imagínate a millones de estaciones a lo largo del mundo, usando MQTT o similares, enviando paquetes de datos (millones x 2-3 segundos) que no ve nadie más que de vez en cuando. Es como estar lanzando pelotas al aire de forma continua, esperando que alguien lo vea un instante.


Eso no es correcto... no se están lanzando pelotas al aire de forma continua.

El funcionamiento es: weewx envía datos en local gracias a una extensión (weewx-mqtt) al broker "mosquitto" que actúa como servidor al exterior enviando websockets al cliente que se los solicita (en este caso el navegador en el que vemos belchertown). Como es una conexión cliente-servidor solo se transmiten datos cuando el cliente los solicita.

No tendría ningún sentido enviar esas "pelotas al aire" para minimizar la emisión de datos con mqtt en sitios remotos. El que está constantemente enviando esas "pelotas al aire" es weewx a mosquitto pero es en local y no escribiendo SD ya que la conexión es de paquetes TCP/IP.

Yo también instalé lo del MQTT para Belchertown pero la pereza no me dejó hacer una especie de tutorial. Al ser en local había que abrir puerto al exterior para verlo en mi web...

Según el tutorial que he enlazado no hace falta abrir más puertos porqué te conectas a través del 443. En realidad si necesitas abrir un puerto pero sólo para tu red interna.


Sí, es un buen tutorial ya que te dice cómo configurar el servidor nginx con mosquitto. Con esa configuración puede usarse el mismo puerto de https (443) para enviar los websockets. Sin esa configuración mosquitto y nginx no podrían estar escuchando a la vez en el mismo puerto para la emisión de los websockets al exterior.

Faltaría ver cómo se hace para apache2, intentaré verlo esta tarde y configurarlo ya que yo abrí un puerto distinto para los websockets.

Yo el tutorial que seguí fue el del mismo autor del skin:

https://obrienlabs.net/how-to-setup-your-own-mqtt-broker/

no configurando el tema del SSL final (sinceramente es más trabajo que se esté encriptando/desencriptando cada paquete que hacerlo sin SSL). Esa sección es también con nginx pero hace la configuración principal del SSL en mosquitto .

Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jantoni en 16 de Abril del 2021, 16:52:07 pm
A ver si, al final, me vas a convencer

 *+* *+* *+* *+* *+* *+* *+* *+* *+* *+*
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: dtalens en 16 de Abril del 2021, 18:44:37 pm
Esperad que ahora encuentro algunos "problemillas": el valor de partículas pm2,5 que sale en la página no es correcto. Me parece que el skin coge la media del valor de partículas. Si recargo la página momentáneamente se ve el valor actual pero en seguida vuelve a indicar la media. En la gráfica los valores son los esperados.


Creo que este "issue" está relacionado:
https://github.com/poblabs/weewx-belchertown/issues/648 (https://github.com/poblabs/weewx-belchertown/issues/648)

ACTUALIZACIÓN: el error con las partículas tiene que ver con las unidades. Aquí lo resuelven: https://github.com/poblabs/weewx-belchertown/pull/653/commits/3539d64c40a4307072fa1e1ce360edb126296f89 (https://github.com/poblabs/weewx-belchertown/pull/653/commits/3539d64c40a4307072fa1e1ce360edb126296f89). Básicamente lo que he hecho es sobrescribir el archivo:
Código: [Seleccionar]
/etc/weewx/skins/Belchertown/js/belchertown.js.tmplAclarar que utilizo la versión 1.3b1 del skin en la cual hay bastantes cambios en el archivo "skin.conf"

Al modificar el archivo "belchertown.js.tmpl" no me mostraba correctamente los datos de lluvia acumulada... más problemas con las unidades. Hay que meterse en el archivo "weewx.conf" y indicar el apartado mqtt que coja los datos con las unidades adecuadas.
Código: [Seleccionar]
[[MQTT]]
        server_url = mqtt://user:pass@localhost:1883/
        topic = weather
        #retain = TRUE
        unit_system = METRIC
        binding = archive, loop
        log_success = False
        log_failure = True
        [[[inputs]]]
            [[[[dayRain]]]]
                units = mm
            [[[[rainRate]]]]
                units = mm_per_hour
            [[[[hourRain]]]]
                units = mm
            [[[[rain24]]]]
                units = mm
            [[[[dayRain]]]]
                units = mm


Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jmviper en 16 de Abril del 2021, 20:43:03 pm
A ver si, al final, me vas a convencer

 *+* *+* *+* *+* *+* *+* *+* *+* *+* *+*

No era mi intención  *-* *-*
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: ELX_CARRUS en 23 de Octubre del 2021, 19:10:47 pm
Hola a todos, estoy intentando configurar el MQTT en mi pagina, pero estoy un poco atascado. Llegado al punto 7 que es generar usuario y passw no lo entiendo y no consigo pasar de ahí.
No tengo todos los conocimientos de linux y voy probando.
Tengo instalado weewx con el skin Belchertown en https://meteoelx.com necesito por favor un empujón para salir del atasco.
muchas gracias.
Tengo la instalacion como usuario no-root en raspberrypi 
Saludos.
Bruno


service mosquitto restart
Now to generate some username and password details for /etc/mosquitto/passwd and access limits in /etc/mosquitto/acl!

mosquitto_passwd -c /etc/mosquitto/passwd -c /etc/mosquitto/passwd UserNameHere – You’re best to keep i
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jmviper en 23 de Octubre del 2021, 19:55:03 pm
Hola Bruno

Bufff yo lo conseguí y no sé ni cómo.... mañana le echo un vistazo si tengo tiempo a cómo lo tengo configurado y a ver si logro ayudarte.

Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: ELX_CARRUS en 23 de Octubre del 2021, 21:17:35 pm
gracias jmviper, necesito esa información un poco mas detallada que en los tutoriales para comprenderlo todo bien.
saludos.
Bruno
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jantoni en 24 de Octubre del 2021, 18:49:48 pm
Te doy mi diagnóstico

MQTT ES SOLO PARA MASOQUISTAS

Dicho queda *+* *+* *+* *+* *+*
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jmviper en 25 de Octubre del 2021, 16:41:19 pm
A ver, tras instalar el skin de Belchertown (https://github.com/poblabs/weewx-belchertown) en weewx como extensión y la extensión paho-mqtt (https://github.com/matthewwall/weewx-mqtt) puse en el weewx.conf esta sección en la sección [StdRESTful]

[StdRESTful]
      [[MQTT]]
        server_url = mqtt://username:password@example.com:1883
        topic = weather
        binding = archive, loop
        aggregation = aggregate
        log_success = True
        log_failure = True

Lo más importante es la línea server_url donde se pone el usuario y contraseña y el servidor y puerto en el que mosquitto va a estar escuchando. Por ejemplo yo le puse:

server_url = mqtt://minombre:micontraseña@localhost:1883

de servidor le puse localhost ya que mosquitto va a estar escuchando en la raspi en su puerto 1883 lo que publique weewx. Ese nombre y contraseña son los que generaremos con mosquitto:

sudo mosquitto_passwd -c /etc/mosquitto/passwd minombre

Ahí te preguntará de poner la contraseña dos veces para el usuario que le pongas y que será la que le pongamos a server_url
Una vez generada la contraseña hay que generar un archivo acl de acceso a mosquitto. En su interior:

# Allow anonymous access to the sys
topic read $SYS/#

# Allow anonymous to read weather
topic read weather/#

# weewx readwrite to the loop
user miusuario
topic weather/#

Sólo hay que cambiar la línea de miusuario por el usuario que hayamos creado.

Después en /etc/mosquitto/conf.d creamos un archivo llamado weewx.conf con estas líneas:

persistence false

# mqtt
listener 1883
protocol mqtt

# websockets
listener 9001
protocol websockets

allow_anonymous true
password_file /etc/mosquitto/passwd

acl_file /etc/mosquitto/acl


Con esas líneas le estamos diciendo a mosquitto que escuche en el puerto 1883 lo que le envía weewx y que a su vez lo envíe por protocolo de websockets vía web al skin de Belchertown por el puerto 9001.

Ese puerto y servidor es lo que le pondremos al skin.conf de Belchertown:

# MQTT Websockets defaults
    mqtt_websockets_enabled = 1
    mqtt_websockets_host = 192.168.1.100
    mqtt_websockets_port = 9001
    mqtt_websockets_ssl = 0
    mqtt_websockets_topic = "weather/loop"
    disconnect_live_website_visitor = 300000

Deberemos cambiar el mqtt_websockets_host por la IP local de la raspi que deberá ser, como todo servidor, fija. En mi caso es la 192.168.1.100 así que habrá que cambiarla por la correspondiente.

Decir que todo esto es en local desde un PC conectado a la misma red que la raspi porque desde un navegador de la misma raspi sería poner en esa línea localhost o 127.0.0.1

Si va a ser para nuestro servidor web en local habrá que poner ahí el dominio de nuestra web y abrir ese puerto de websockets a la raspi en el router.

Si la web es externa habría que enviar a un servidor externo o tener mosquitto instalado en él.... ahí ya me pierdo un poco....

Lo más importante al principio es ver si tanto la extensión de weewx está enviando los datos a mosquitto como si este los está recibiendo.
Para ello si tenemos log separado de weewx vemos como lo sube con sudo tail -f /var/log/weewx.log y si no tenemos log con sudo tail -f /var/log/syslog

Para ver si mosquitto lo está recibiendo sudo tail -f /var/log/mosquitto/mosquitto.log

Esto es para ver si está en funcionamiento de puesta en marcha al principio, una vez que vaya bien quitamos logs para que no esté machacando cada pocos segundos la tarjeta microSD. En weewx.conf ponemos en la sección de MQTT:

 log_success = False
 log_failure = False

y reiniciamos weewx.

En /etc/mosquitto/mosquitto.conf cambiamos log_dest file /var/log/mosquitto/mosquitto.log por log_dest none y reiniciamos mosquitto.

Buuuuufffff después del tocho que he puesto....tendré que darle la razón a jantoni…. esto es para masoquistas  *+* *+*
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: ELX_CARRUS en 25 de Octubre del 2021, 20:36:01 pm
Gracias jmviper,  esta muy bien explicado es lo que buscaba. En mi caso yo subo todo mediante ftp al hosting.  Instalar weewx el skin, en una rasp, desde cero, configurar, traducir, actualizar, etc me costó una caja de tila y otra de Valium. Pero me gustaría intentarlo se que no es fácil, pero después de llegar hasta aquí no voy a dejarlo a medias. Utilizo cumulusMX para subir las plantillas a MC y Avamet, me he dado cuenta que también utiliza MQTT, aunque no lo entiendo porque el real-time hace lo mismo.
El finde próximo lo intentaré tengo copia de seguridad y voy a probar.
Tener el apache en marcha y no utilizar el hosting no me lo planteo, necesitaré investigar bien como hacerlo en hosting y con los certificados https. Es un reto, pero con vuestra valiosa ayuda espero conseguirlo.
Muchas gracias
Bruno
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jmviper en 25 de Octubre del 2021, 22:14:05 pm
Hace lo mismo que el realtime pero no es lo mismo. El mqtt va por un protocolo web y no por un archivo, por lo que hace falta una conexión cliente-servidor que en este caso es el navegador (cliente) y el servidor mosquitto para el traspaso de datos. Te ahorras estar creando un archivo de texto cada pocos segundos como es el realtime.
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: ELX_CARRUS en 26 de Octubre del 2021, 21:33:04 pm
hola de nuevo. El realtime es lo mismo pero MQTT  mas ligero, sin tener que machacar el FTP. En mi caso me funciona bien, tengo algunos problemas con el cache del navegador y las fechas, que no he podido solucionar, especialmente en las instantáneas y en los registros máximos del mes, algunas veces también con el tamaño visible de la luna, con el chrome para mac no hay manera, solamente conectando con ventana de incógnito.
No se como evitar el cache a nivel de programacion. he introducido algunos cambios al index.html.tmpl que pongan el cache a 0 pero ni por esas.
Pero eso es lo de menos, el finde lo probare y os cuento.
Muchas gracias y buenas noches.
Bruno
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: dtalens en 28 de Octubre del 2021, 18:27:26 pm
Hola ELX_CARRUS,

Yo conseguí hacer funcionar el MQTT creando un broker online. En mi caso cree un subdominio con el nombre weewx-socket.meteopego.com y la web meteorológica se conecta por el puerto 443, tiene que passar por ahí si quieres que la web este cifrada. Para NGINX enlacé al principio del hilo un tutorial que encontre por internet con APACHE supongo que también se podrá hacer.

Lo que sea,si puedo ayudar, lo comentas por aquí.
Saludos,
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: aalonso161 en 03 de Mayo del 2022, 20:20:00 pm
Buenas tardes amigos,

¿Sabéis algún tutorial un poco más detallado/actualizado para esta casuistica?
Soy primerizo en estos temas y por la explicación siento que hay muchas cosas que se me escapan.

Gracias de antemano, saludos.
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: dtalens en 04 de Mayo del 2022, 00:25:19 am
Hola aalonso161,

Explica un poco más donde te has quedado. Tienes ya funcionando la web con belchertown en local? en internet?

Por cierto, seria recomendable que primero dieses de alta tu estación en meteoclimatic.

Saludos,
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: aalonso161 en 04 de Mayo del 2022, 18:20:45 pm
Hola aalonso161,

Explica un poco más donde te has quedado. Tienes ya funcionando la web con belchertown en local? en internet?

Por cierto, seria recomendable que primero dieses de alta tu estación en meteoclimatic.

Saludos,

Hola Dtalens, gracias por el apoyo.

Estoy haciendo un trabajo para Universidad Politecnica de Madrid de crear una estación meteorológica en Montegancedo, Madrid, a porder ser con Weewx. La subiré a meoteoclimatic nada más la tenga, de momento la estoy programando desde casa.

No estoy utilizando una de las estaciones listadas en Weewx, lo que estoy haciendo es utilizar diferentes sensores, y a través de MQTT con Mosquitto comunicarlo con Weewx.

La razón que pido el tutorial es que mi experiencia en este aspecto es.. vamos a decir muy limitada, y se me está atragantando que weewx lea los topics MQTT que mosquitto le envía. Por ende no tengo nada funcionando todavía.

Entiendo que la cadena microcontrolador -> Mosquitto -> Weewx es la correcta, ¿O es posible hacer que Weewx reciba directamente?

Gracias de antemano, Saludos.
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jmviper en 04 de Mayo del 2022, 19:20:34 pm
La cadena es estación -> weewx -> mosquitto -> página belchertown

Qué lee al microcontrolador ?? Si es un script en Python u otro lenguaje puedes hacer que grabe los datos de los sensores a un archivo de texto que weewx vaya leyendo. Yo lo tengo así para un sensor de temperatura con weewx, pero todo es cuestión de mapear sensores para que weewx vaya gestionándolos (leerlos, grabarlos en su BBDD etc).

Que lea weewx directamente del microcontrolador también podría hacerse con un script Python y poniéndolo como servicio, cosa que se escapa a mis conocimentos, pero poder podría hacerse, de hecho no es muy diferente a como se lee una estación, pero hace falta saber hacerlo por alguien que sepa Python.

Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: aalonso161 en 04 de Mayo del 2022, 20:57:20 pm
La cadena es estación -> weewx -> mosquitto -> página belchertown

Qué lee al microcontrolador ?? Si es un script en Python u otro lenguaje puedes hacer que grabe los datos de los sensores a un archivo de texto que weewx vaya leyendo. Yo lo tengo así para un sensor de temperatura con weewx, pero todo es cuestión de mapear sensores para que weewx vaya gestionándolos (leerlos, grabarlos en su BBDD etc).

Que lea weewx directamente del microcontrolador también podría hacerse con un script Python y poniéndolo como servicio, cosa que se escapa a mis conocimentos, pero poder podría hacerse, de hecho no es muy diferente a como se lee una estación, pero hace falta saber hacerlo por alguien que sepa Python.

Lee directamente valores de los sensores.

¿Como has conseguido que lea de un archivo de texto? Con esto?
https://github.com/weewx/weewx/tree/master/examples/fileparse

Buen consejo el del servicio, la verdad sin un tutorial también se escapa a mis conocimientos.

Gracias de nuevo, saludos.
Título: Re:Conectar web weewx Belchertown skin a través de MQTT
Publicado por: jmviper en 05 de Mayo del 2022, 07:49:48 am
Citar
¿Como has conseguido que lea de un archivo de texto? Con esto?
https://github.com/weewx/weewx/tree/master/examples/fileparse

No exactamente, pero casi igual:

https://github.com/weewx/weewx/wiki/add-sensor

Pone la info de un sensor o sensores en un archivo de texto que weewx va leyendo. Se suele llamar pond sensor  (sensor de estanque) para un segundo sensor, y el que puse es leído por el GPIO de una Orange Pi en la que está weewx leyendo a su vez la Davis.

https://meteoarchena.es/opi/

Aparece como Pond Temperature

Esa extensión de weewx que has puesto hace prácticamente lo mismo. Leer los valores de los sensores de un archivo de texto.

Poder se puede, que arduino envíe los datos vía MQTT a weewx, pero haría falta encontrar una extensión que lo haga o escribir el driver en python y ponerlo como servicio. Todo es posible sabiéndolo hacer en programación.

Para hacer lo del archivo de texto habrá que hacer que arduino suba los el archivo de texto con los valores a la raspi en la que funcione weewx. Si se puede hacer una llamada get via http a la raspi desde el arduino un script PHP podría coger los datos en el query de la URL y escribirlos al archivo de texto que leyese weewx.
Más o menos es lo que tenía en mente y más o menos es lo que hace este driver que he encontrado:

https://github.com/DanV410/weewx-sdr-arduino/

Si sabes Python podrás hacer lo que quieres porque weewx está escrito en Python y sus extensiones/servicios también.