Taula de continguts:
Vídeo: El vostre monitor de factures energètiques: 4 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:12
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
Pas 2: 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
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
#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:
Steam Punk del vostre SAI per obtenir hores de funcionament del vostre router Wi-Fi: 4 passos (amb imatges)
Steam Punk del vostre SAI per obtenir hores de funcionament del vostre router Wi-Fi: hi ha alguna cosa fonamentalment desagradable que el vostre SAI converti la potència de la bateria de 12V CC en 220V CA perquè els transformadors que funcionen amb el vostre enrutador i la fibra ONT puguin convertir-lo de nou en 12 V CC! També esteu contra els [normalment
Controleu el disseny del vostre model de tren amb el vostre TECLAT !: 12 passos
Controleu la disposició del vostre model de tren amb el vostre TECLAT!: En una de les meves instruccions anteriors, us vaig mostrar com podeu controlar el vostre model de tren amb el comandament del vostre televisor. També podeu consultar una versió actualitzada aquí. En aquest instructiu, us mostraré com controlar un disseny de model de tren amb un teclat
Controleu el disseny del vostre model de tren amb el vostre telèfon mòbil: 11 passos (amb imatges)
Controleu la disposició del vostre model de tren amb el vostre telèfon mòbil!: Controlar un disseny de model de tren amb controladors d’accelerador i de sortida de cable pot ser un bon començament per a principiants, però suposa un problema de no portabilitat. A més, els controladors sense fils que arriben al mercat només poden controlar alguns locom
Controleu el vostre avió RC amb l’acleròmetre del vostre telèfon: 15 passos (amb imatges)
Controleu el vostre avió RC amb l’acleròmetre del vostre telèfon: alguna vegada heu volgut controlar el vostre avió RC mitjançant la inclinació d’un objecte? Sempre he tingut la idea a la part posterior del cap, però mai l’he seguit fins aquesta setmana passada. Els meus primers pensaments eren utilitzar un acceleròmetre de triple eix, però ja he
Factures: 10 passos
Factures: les factures són una part important de qualsevol treball professional que es fa per a una persona o empresa. La factura indica exactament quina feina es va fer i què es va cobrar per aquesta feina, de manera que no hi ha confusió. Sóc instal·lador de terres, així que vaig a dissenyar