Taula de continguts:

El vostre monitor de factures energètiques: 4 passos
El vostre monitor de factures energètiques: 4 passos

Vídeo: El vostre monitor de factures energètiques: 4 passos

Vídeo: El vostre monitor de factures energètiques: 4 passos
Vídeo: Disparate Pieces | Critical Role: THE MIGHTY NEIN | Episode 4 2024, Juliol
Anonim
El vostre monitor de factures energètiques
El vostre monitor de factures energètiques

SOBRE AQUEST PROJECTE

Si realment voleu fer la vostra llar més intel·ligent, probablement voldreu començar a partir de les factures mensuals (és a dir, energia, gas, etc.). Com diuen alguns, Good for Planet, The Wallet i The Bottom Line. El maquinari de codi obert és la nostra manera d’arribar a la sostenibilitat a l’entorn domèstic. Aquesta idea ens va portar a construir una solució senzilla i segura, fàcil d’integrar amb qualsevol programari domòtic, ja que exposa dades sobre MQTT (en el nostre cas, us mostrarem com integrar-les a Home Assistant).

Visió general

Per mesurar el consum d’energia elèctrica, vam optar per fer servir el comptador d’energia Finder, ja que està dissenyat per a ús amb carril DIN i s’adapta perfectament a l’armari principal de casa nostra. El més interessant d’aquest producte és que té una interfície Modbus RS485, un protocol de comunicació estàndard industrial que facilita parlar amb un Arduino. De fet, Arduino ha llançat un escut oficial, el MKR485 i dues biblioteques per descodificar el protocol. Com a placa principal, vam triar l’Arduino MKR WiFi 1010, ja que comparteix el factor de forma MKR i té connectivitat WiFi.

SetupWarning! Consulteu la normativa del vostre país sobre com fer front al sistema elèctric de la vostra casa i tingueu molta cura perquè pot ser mortal. Si no sabeu, truqueu a un electricista. El primer pas és instal·lar el comptador al vostre armari elèctric. Per assegurar-vos que esteu treballant en un entorn segur, apagueu l’alimentació del terminal elèctric davant del vostre sistema i comproveu amb el multímetre que no hi hagi cap voltatge entre els terminals. A continuació, col·loqueu el comptador d’energia a l’interior de l’armari i connecteu els cables actius i neutres des de l’interruptor principal a l’entrada del comptador. La sortida s’ha de connectar a la resta del sistema.

Connexions de tensió principal. Els cables anteriors són d’entrada, els cables més enllà són sortides.

Pas 1: parts necessàries

Parts necessàries
Parts necessàries

Pas 2: necessitats de programari

Necessitats de programari
Necessitats de programari

Programari

Inicieu l'ordinador i obriu el vostre IDE. Podeu utilitzar Arduino IDE o Arduino Create Editor. El codi compleix les següents sol·licituds: comunicació Modbus, gestió WiFi Protocol MQTT Modbus és protocol de codi obert per a sensors i màquines industrials. Per fer que Arduino parli de Modbus, utilitzarem la biblioteca Arduino Modbus. Aquesta biblioteca inclou tots els controladors i fa que connectar qualsevol dispositiu Modbus sigui molt ràpid. Com que llegirem registres, seguint el full de dades del comptador, podem trobar tota la informació que necessitem, com ara codis de funció, adreça del registre i mida del registre en paraules. Però per fer-ho més clar, expliquem com funciona Modbus: els missatges Modbus segueixen una estructura senzilla: 01 03 04 00 16 00 02 25 C7 0x01es l’adreça del dispositiu 0x03 és el codi de funció que indica al dispositiu si volem llegir o escriure dades *, en aquest cas, llegiu els registres de retenció 0x04 per a Byte Count00 16 - Enviem 4 bytes d’adreça de registre (00 16) que indica al dispositiu el que volem llegir 00 02- i la mida del registre (00 02) en paraules (cada paraula té una longitud de 2 bytes) Els darrers 4 bytes són codi CRC. Aquest codi es genera a partir d'una funció matemàtica sobre els bytes anteriors, cosa que garanteix que el missatge s'hagi rebut correctament.

Integració de Home Assistant: afegir el comptador a Home Assistant és bastant senzill. Suposant que teniu un broker MQTT configurat (aquí teniu la guia), tot el que heu de fer és afegir noves definicions al fitxer configuration.yaml. sensor: - platform: mqtt name: "Main Voltage" state_topic: "energy / main / voltage" unit_of_measurement: "V" Aquí heu de posar el nom de la mesura, el tema MQTT a llegir i la unitat de mesura de la quantitat. Deseu el fitxer, comproveu la configuració i torneu a carregar Home Assistant, ara les mesures apareixeran a la pàgina principal.

Tauler de consum de l'Assistent per a la llar que mostra les lectures actuals

Home Assistant s'encarregarà de crear gràfics i automatitzar els processos activats per les vostres lectures. Aquest tutorial ha finalitzat, ara depèn de vosaltres afegir funcions i personalitzar-lo per als vostres propis propòsits.

Pas 3: Muntatge

Muntar
Muntar
Muntar
Muntar

Fet? És hora d’enroscar la connexió RS485! Utilitzarem un cable de parell trenat amb la terra, que normalment s’utilitza per a les línies de telèfon. Amb aquest cable, podeu transmetre a una distància llarga (1,2 km). Tot i això, només fem servir un cable prou llarg per sortir de l’armari i col·locar l’Arduino en un lloc accessible.

Connexió RS485 Finder

La interfície RS485 nomena els seus terminals A, B i COM. Un estàndard de facto comú és l’ús de TX + / RX + o D + com a alternativa per a B (alt per a MARK és a dir inactiu), TX- / RX- o D- com a alternativa per A (baix per a MARK és a dir inactiu). L'escut MKR també admet Full Duplex, veureu altres dos terminals, Y i Z. Aquí anirem cargolant l'altre extrem del cable, ja que sabem a la fitxa tècnica que la comunicació semi-duplex només es produeix als terminals Y i Z. El terminal COM ha d’estar connectat a ISOGND. Com que fem servir una connexió semi-dúplex i com que el cablejat és peer-to-peer, hem de configurar els commutadors del blindatge MKR485 perquè coincideixin amb la nostra configuració: configurem HALF (2 a off) i la terminació a YZ (3 a ACTIVAT); el primer no té importància. La terminació és una resistència que connecta els dos terminals de dades, per atenuar les interferències.

Això és tot. Ara podeu tancar l'armari i centrar-vos en el costat del programari.

Pas 4: Codi

Codi
Codi

#incloure

#include #include #include // your credentials wifi const char ssid = "**********"; const char pass = "**********";

WiFiClient net; Client MQTTClient; tarifa llarga sense signar = 60000; // taxa d’actualització per defecte en ms unsigned long lastMillis = 0;

// funció de connexió void connect () {Serial.print ("comprovació de wifi …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); retard (1000); } Serial.print ("\ nconnexió …"); while (! client.connect ("nom_aparell", "nom_usuari", "usuari_pw")) {// CANVIA PER COMPLIR LA SEVA CONFIGURACIÓ Serial.print ("."); retard (1000); } Serial.println ("\ nconnectat!"); client.subscribe ("energia / principal / refrescar"); // tema per establir la taxa d’actualització de forma remota} // mqtt rebre la funció de devolució de trucada void messageReceived (Cadena i tema, Cadena i càrrega útil) {Serial.println ("entrant:" + tema + "-" + càrrega útil); if (topic == "energy / main / refreshrate") {// taxa de control de velocitat de refresc = payload.toInt () * 1000; Serial.println ("tarifa nova" + cadena (taxa)); }}

configuració nul·la () {Serial.begin (115200); WiFi.begin (ssid, pass); mentre que (! sèrie); client.begin ("broker_ip", net); // CANVIA PER COMPLIR LA SEVA CONFIGURACIÓ client.onMessage (messageReceived); // Inicieu el client Modbus RTU si (! ModbusRTUClient.begin (9600)) {Serial.println ("No s'ha pogut iniciar el client Modbus RTU!"); mentre que (1); }}

bucle buit () {client.loop (); if (! client.connected ()) {// comprova la connexió de xarxa connect (); } // publicar un missatge després d'haver passat l'actualització (rutina sense bloqueig) si (millis () - lastMillis> taxa) {lastMillis = millis (); // fer totes les trucades de lectura flotant volt = readVoltage (); retard (100); float amp = readCurrent (); retard (100); doble watt = readPower (); retard (100); float hz = readFreq (); retard (100); doble wh = readEnergy (); // publicar resultats en temes relacionats client.publish ("energia / principal / tensió", cadena (volt, 3)); client.publish ("energy / main / current", String (amplificador, 3)); client.publish ("energy / main / power", String (watt, 3)); client.publish ("energia / principal / freqüència", cadena (hz, 3)); client.publish ("energia / principal / energia", cadena (wh, 3)); Serial.print (String (volt, 3) + "V" + String (amp, 3) + "A" + String (watt, 3) + "W"); Serial.println (String (hz, 3) + "Hz" + String (wh, 3) + "kWh"); retard (100); }}

/ * Funcions per llegir registres del Finder Energy Meter * * Consulteu el manual del protocol modbus per entendre el codi * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf * / float readVoltage () {float volt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// feu la trucada al registre Serial.print ("no s'ha pogut llegir la tensió!"); Serial.println (ModbusRTUClient.lastError ()); // gestor d'errors} else {uint16_t word1 = ModbusRTUClient.read (); // llegir dades del buffer uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | paraula2; // bit math volt = millivolt / 1000.0; } volta volta; } float readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("no s'ha pogut llegir el corrent!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | paraula2; ampere = miliamp / 1000.0; } tornar ampere; }

doble lectura de potència () {doble watt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("no s'ha pogut llegir l'alimentació"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; if (paraula1 >> 7 == 0) {milliwatt = paraula1

Recomanat: