Lector de contador inteligente

Colocado en
En esta publicación de blog, describo cómo puede hacer fácilmente y por poco dinero este registrador DSMR (DSMR es un acrónimo de "Requisitos del medidor inteligente holandés") poder hacer. Al desarrollar el registrador DSMR, queremos lograr lo siguiente:
  • El hardware debe ser sencillo y económico de fabricar;
  • El firmware del registrador DSMR debe poder actualizarse “Over The Air”;
  • El historial limitado debe almacenarse y conservarse internamente;
  • El registrador DSMR debe ser accesible a través de un terminal externo (telnet);
  • Los datos (históricos) deben poder recuperarse del registrador DSMR a través de FTP para un posible procesamiento externo;
  • El registrador DSMR debe presentar los datos del medidor inteligente a través de un navegador;
  • Los datos deben poder solicitarse a través de una API REST;
  • Los datos leídos deben ser fáciles de procesar más.
En una publicación de blog de seguimiento, mostraré cómo podemos enviar los datos a un corredor MQTT y cómo configurar Home-Assistant para presentar estos datos en Home-Assistant.


Tecnología de medidores inteligentes

El Smart Meter envía datos a través del puerto P1 (RJ12) en forma de telegrama. Cómo lo hace el Smart Meter y cómo se estructura un telegrama se describe en este documento. El capítulo 5 es particularmente interesante porque describe cómo se construye la interfaz física. Esto demuestra, entre otras cosas, que el Smart Meter debe poder suministrar 5 voltios a 250 mA, con una disminución de corriente máxima a corto plazo de 300 mA. El capítulo 6 describe el protocolo y los diversos campos.

Con este documento en la mano y un poco de Google, pronto encontrará más información. No somos los primeros y ciertamente no los únicos que sentimos la necesidad de leer el Smart Meter.
Por ejemplo, Matthijs Kooijman ha escrito una pieza de software verdaderamente sublime para analizar los telegramas del medidor y almacenarlos en variables del tamaño de un bocado. Por supuesto que usaremos esta biblioteca. puedes el aquí descargar.

Suministros

La parte más importante del registrador DSMR es el procesador. Para ello utilizamos un ESP8266 porque, además de ser rápido y dotado de suficiente memoria, también puede comunicarse vía WiFi. Para mantener los costos bajos, asumimos una placa ESP-01 (edición negra) con 1 MB de memoria. Además, aparte de seis resistencias y tres condensadores (el C4 no es realmente necesario pero puedes añadirlo si tienes problemas para conectarte a tu red WiFi), necesitamos un transistor NPN (BC547) y un regulador de tensión (MCP1700-3302E). Para conectar el registrador DSMR al medidor inteligente, necesita un enchufe RJ12 con un trozo de cable. Compré un cable RJ12 en internet (con dos conectores macho RJ12) y lo corté por la mitad.

Si no desea utilizar la PCB del registrador DSMR, también necesita una pieza de placa experimental.
Los costos totales son alrededor de € 20,-

esquema del registrador DSMR

A continuación puede ver el esquema del registrador DSMR:
Registrador DSMR de esquema Registrador DSMR de esquema
En términos generales, el esquema consta de cuatro partes (la quinta, que contiene los 5 voltios y GND PWR_FLAG, es técnicamente requerida por KiCAD pero en realidad no es parte del esquema).

En primer lugar, la conexión entre el Smart Meter y el registrador DSMR. Es más fácil soldar el cable directamente al registrador DSMR, pero también puede usar un conector macho Molex. No puede conectar los conectores Molex "al revés" (eso sería molesto porque luego conecta los 5 voltios y tierra del medidor inteligente a tierra y 5 voltios del registrador DSMR respectivamente, que el ESP-01 definitivamente no sobrevivirá! ). Las conexiones en el registrador DSMR son las mismas que en el enchufe RJ12 (1 está conectado a 1, 2 a 2, etc.).

La segunda parte consiste en el regulador de voltaje que convierte los 5 voltios del Smart Meter a 3v3 para el ESP-01. Según la ficha técnica del ESP-01 normalmente usa 80mA y en picos 200-250mA. El MCP1700 utilizado puede suministrar un máximo de 250mA. Suficiente para esta aplicación.

El ESP-01 en sí tiene solo 8 conexiones. Dos para la fuente de alimentación (Vcc y GND), uno para la comunicación con el Smart Meter (TxD) y tres pines que deben estar en “high” durante el arranque (CH_PD, GPIO0 y GPIO2). Los dos últimos pines (RST y TxD) no se utilizan.

La última parte del circuito, alrededor del transistor BC547, tiene dos funciones. En primer lugar, garantiza que los datos de 5 voltios del medidor inteligente no sobrecarguen la entrada de 3,3 voltios del ESP8266. Por lo tanto, es principalmente un Level-Shifter. Pero también es un inversor que convierte la señal invertida del Smart Meter en una señal no invertida para el ESP8266.

El hardware

Como prueba de concepto, soldé una primera versión del registrador DSMR en una placa experimental.
DSRM - Impresión de experimentos DSRM - Impresión de experimentos
Aquí puedes ver el resultado final conectado al Smart Meter:
DSRM - Experimento PCB completo DSRM - Experimento PCB completo
Cuando resultó que todo funciona según lo planeado, diseñé una placa de circuito impreso con KiCAD.
Registrador DSRM de diseño Registrador DSRM de diseño

Instalar firmware en el ESP-01

Uno de los objetivos de diseño es que el firmware “sobre el aire” (por aire) debería poder colocarse en el registrador DSMR. Eso también fue un éxito, pero siempre habrá que poner firmware en el ESP-01 que ofrece esta funcionalidad por primera vez. Por lo tanto, no puede evitar enviar el firmware por cable al registrador DSMR al menos una vez. Además, durante el desarrollo del software, me pasó varias veces que introduje un error que hizo que la carga de OTA ya no funcionara. Incluso entonces, la única forma es enviar el firmware, sin errores, al registrador DSMR por cable.

Necesitas un programador para programar el ESP-01. Otra solución económica es cargar un programa especial en un Arduino UNO y luego hacer una serie de conexiones entre el Arduino y la placa ESP-01.
La forma más fácil es comprar un “Adaptador ESP-01 a USB ” y hacer una pequeña modificación (ver mi publicación de blog).

El software

En principio, el software es muy simple (ver el ejemplo incluido con la biblioteca DMSR). Sin embargo, si desea más opciones, ¡rápidamente se convierte en todo un proyecto!

El registrador DSMR utiliza las siguientes bibliotecas:
Por lo tanto, estos deben instalarse en su entorno Arduino -IDE.

También usamos el servidor FTP simple de david paiva. Esto se incluye como fuente directamente en el bosquejo DSMRlogger2HTTP (dos pestañas) y, por lo tanto, utiliza comillas (") en lugar de los signos menor y mayor que para la inclusión.
El tratamiento especial fue necesario porque hice cambios menores en la fuente y no quiero que se pierdan en una actualización de la biblioteca.

El boceto consta de un total de ocho pestañas. El programa principal, FTPserver.cpp, FTPserver.h, SPIFFSstuff, TimeStuff, UpdateHTML, WiFiStuff y menuStuff. Puede descargar el software como un archivo ZIP desde GitHub y luego descomprima en su carpeta de proyectos Arduino . Si tiene git instalado en su computadora, también puede clonar el repositorio con el comando:

clon de git https://github.com/mrWheel/DSMRlogger2HTTP.git

Luego creará, en el directorio donde ejecuta el comando (preferiblemente la carpeta de proyectos Arduino ), una carpeta llamada "DSMRlogger2HTTP" que contiene todo el código, incluido un directorio de "datos" para almacenar el sistema de archivos ESP. -01 (esto también contiene el archivo “index.html”).

En pseudocódigo, el programa se ve así:
El programa principal se repite indefinidamente y consta de los siguientes pasos:

Comience a usar el DSMRlogger

Antes de poder utilizar el DSMRlogger, debe cargar no solo el firmware sino también un sistema de archivos con contenido en el DSMRlogger. Por comodidad, supondré que sabe cómo cargar el firmware y me limitaré a explicar cómo obtener el sistema de archivos en el DSMRlogger.
Si no, lee mi otro blog sobre eso. hacer que el ArduinoIDE sea adecuado para el ESP8266.


En el IDE Arduino , haga clic en la siguiente opción de menú:
Carga de datos IDE Arduino Carga de datos IDE Arduino
Todos los archivos que están en el directorio de “datos” de este proyecto ahora se colocan en una parte especial de la memoria del ESP-01.

¡NÓTESE BIEN! ¡La carga del sistema de archivos sale mal si tiene abierto el "Monitor en serie"!

Ahora puedes conectar el DSMRlogger al Smart Meter, pero no conoce los datos de tu red WiFi. Por lo tanto, crea un punto de acceso (AP) en el que debe registrar su computadora. Puede reconocer el AP por el nombre “ESP01‑DSMR‑xx‑”. Cuando se haya conectado al AP, inicie su navegador y vaya a como se indica en el nombre del AP. A continuación, entrará en el menú de configuración WiFi:
configuración wifi configuración wifi
Punto de acceso de configuración WiFi Punto de acceso de configuración WiFi
Haga clic en el botón [Configurar WiFi], después de lo cual aparecerá una página como la que se muestra a la derecha.

En esta página, seleccione la red WiFi que le pertenece e ingrese la contraseña. Luego presione el botón [guardar].

Si todo ha ido bien, verás el siguiente texto:
Confirmación WiFi guardado Confirmación WiFi guardado
El DSMRlogger ahora se reiniciará y se conectará a su red WiFi. Durante el inicio, puede ver desde el LED azul lo que está haciendo el DSMRlogger

1. 3 destellos lentos - inicio inicial
2. 5 parpadeos rápidos - conectado a la red WiFi
3. Después de eso, el LED azul parpadea cada vez que se procesa un nuevo telegrama

Si el LED permanece encendido después de los primeros tres destellos lentos, el DSMRlogger no pudo conectarse a su red WiFi y reiniciará su propio AP. Esto puede deberse a que su red no estuvo disponible temporalmente o fue difícil de alcanzar o porque no ingresó los detalles de su red WiFi correctamente. En ese caso, el DSMRlogger se reinicia automáticamente después de unos minutos e intenta volver a conectarse a su red WiFi. Este proceso se repite hasta que se establece una conexión o hasta que vuelva a ingresar los detalles de su red WiFi como se describe anteriormente.

La interfaz web de DSMRlogger

Cuando el DSMRlogger está conectado a su red WiFi, puede ir a la dirección con su navegador:
http://ESP01-DSMR.local/ 
La siguiente página aparecerá en su navegador. Los datos que ve se actualizan automáticamente.
Interfaz gráfica de usuario de DSMR Interfaz gráfica de usuario de DSMR
Al hacer clic en las pestañas, puede ver diferentes tipos de datos.
Resumen semanal de DSMR Resumen semanal de DSMR

sesión telnet:

Para conectarse al DSMRlogger a través de telnet, ingrese el siguiente comando en una ventana de terminal:
telnet ESP01-DSMR.local
Después de lo cual puede ver en vivo lo que está haciendo el DSMRlogger. Al pulsar verá aparecer un menú con el que puede organizar algunos asuntos domésticos. Cierras la sesión de telnet con la combinación de teclas ctrl+] q (mantén presionado control, presiona “]”, suelta ambos y presiona “q”).
DSMR Telnet DSMR Telnet
¡NÓTESE BIEN! El DSMRlogger solo puede manejar una sesión de telnet activa.

API REST

Si desea utilizar los datos del Medidor Inteligente de otro programa, puede recuperarlos solicitando esta URL:
http://ESP01-DSMR.local/getActual.json
El DSMRlogger luego devuelve una cadena json que se ve así:
>

En una publicación de blog de seguimiento, le mostraré cómo usar estos datos en Home-Assistant.

Actualice el firmware

Llega un momento en el que desea ajustar el firmware del DSMRlogger según sus propios conocimientos y necesidades.
Entonces es molesto tener que caminar hasta el armario del medidor para cada ajuste para desconectar el DSMRlogger, quitar el ESP-01 del registrador y proporcionarle un nuevo firmware con un programador de su elección. Afortunadamente, no tienes que hacerlo. En el IDE Arduino , no solo puede seleccionar los puertos serie a los que está conectado el DSMRlogger. El menú de selección también contiene “Puertos de red”:
Selección de puerto IDE Arduino Selección de puerto IDE Arduino
En mi caso, el puerto de red “ESP01-DSMR en 192.168.12.142” es el puerto de red de mi DSMRlogger. Al seleccionar este puerto y compilar y cargar el nuevo firmware, se enviará de forma inalámbrica al DSMRlogger (¡notará que esto es incluso más rápido que con un cable USB !).

Solo asegúrese de que el firmware que cargue no contenga errores molestos. Me ha pasado varias veces que presento un error que hace que la carga de firmware Over The Air deje de funcionar (por lo general, todo el DSMRlogger deja de funcionar en tal caso), por lo que aún tenía que ir al armario del medidor...

El kit de registrador DSRM

Ya no está disponible
La versión 3 tiene la misma funcionalidad que la versión 1, pero también tiene algunas actualizaciones que facilitan la soldadura.
Opencircuit junto con Willem Aandewiel, ha creado un kit con PCB y todas las piezas necesarias para construir usted mismo este registrador DSMR.

Con este kit puede construir usted mismo el registrador DSRM en una placa de circuito impreso claramente estructurada. ¡Esto no solo ahorra tiempo, sino que también se ve mucho mejor!
Publicado por Sitio web Willem Aandewiel (1955) tiene experiencia en electrónica y técnicas digitales. Sin embargo, la mayor parte de su vida laboral ha trabajado en automatización, donde ha trabajado en casi todas las disciplinas, desde programador hasta líder de proyecto y gerente de proyecto. Willem fue uno de los primeros holandeses con una microcomputadora (KIM-1, 1976) en un momento en que aún no se había inventado la PC. Actualmente se dedica principalmente al diseño y producción de pequeños circuitos electrónicos con microprocesadores. Su 'misión en la vida' es hacer que la gente se entusiasme con la fabricación de sus propios circuitos electrónicos, microcomputadoras y programación.

Comentarios

The Netherlands Verkenner
Aquí mismo problema que escribió Joahn Krabe el 12 de octubre de 2019. La conexión desde el teléfono/PC DSMR (versión 4.5) funciona, pero los datos del medidor inteligente permanecen en secreto, aquí también se proporciona un medidor Kamstrup 382, fuente de alimentación de 5 voltios, sin resultado. ¿Lo que está mal? El medidor funciona con un monitor P1 con el TOON. Gracias por las sugerencias.
Colocado en 
The Netherlands Johan Krabbe
Bart: https://github.com/mrWheel/DSMRlogger2HTTP" rel="nofollow" target="_blank">https://github.com/mrWheel/DSMRlogger2HTTP El archivo KiCad contiene los archivos necesarios para las impresiones, funciona perfectamente
Colocado en 
Belgium Bart De Pauw
Hola Willem, ya busqué también en su sitio, pero no pude encontrar si esto también se puede usar para telegramas DSMR 5.0.2 P1 (en la versión actual). Aparentemente los medidores digitales belgas Fluvius/Eandis son ligeramente diferentes. el DSMR 4 holandés https://www.feebel.be/data/content/file/201804-technische-specificaties-gebruikerspoorten-digitale-meters.pdf" rel="nofollow" target="_blank">https://www.feebel.be/data/content/file/201804-technische-specificaties-gebruikerspoorten-digitale-meters.pdf ¿Quizás sea el momento de lanzar una v5? Siempre dispuesto a ayudar con las pruebas de versiones (soy ingeniero electrónico desde 1992) Por cierto, ¿vi que los kits de bricolaje ya no estaban disponibles? ¿Hay alguna manera de liberar los archivos de la placa de impresión para que podamos hacerlos nosotros mismos? Gracias de antemano por este maravilloso proyecto (y luego esperaré un poco para empezar uno yo mismo, sería inútil después de todo el trabajo que ya le has puesto...)
Colocado en 
1
The Netherlands Wim
La impresión ya no está disponible. ¿Existe otra forma de obtener la impresión? Y una pregunta más, ¿Estás hablando de un ESP-01 pero no te refieres a un ESP-01S? Tiene el doble de memoria flash. Si quiere usar OTA, creo que la necesita. ¿O me equivoco ahora?
Colocado en 
The Netherlands Wim Nijntjes
Pregunta: ¿Por qué no utilizas el pin 2 del medidor? Ahora está conectado a 5 voltios. Se puede conectar fácilmente al GPIO-0/2 (optoacoplador interno) y tiene un apretón de manos. Quizás el FTP funcione entonces.
Colocado en 
Webwinkelkeur Kiyoh Trustpilot Opencircuit