Πίνακας περιεχομένων:

Παρακολούθηση λογαριασμού ενέργειας: 4 βήματα
Παρακολούθηση λογαριασμού ενέργειας: 4 βήματα

Βίντεο: Παρακολούθηση λογαριασμού ενέργειας: 4 βήματα

Βίντεο: Παρακολούθηση λογαριασμού ενέργειας: 4 βήματα
Βίντεο: ΠΗΡΑ ενα κουτι ΠΡΟΦΥΛΑΚΤΙΚΑ…. 2024, Ιούλιος
Anonim
Η οθόνη παρακολούθησης λογαριασμών ενέργειας
Η οθόνη παρακολούθησης λογαριασμών ενέργειας

ΓΙΑ ΑΥΤΟ ΤΟ ΕΡΓΟ

Εάν θέλετε πραγματικά να κάνετε το σπίτι σας πιο έξυπνο, πιθανότατα θα θέλετε να ξεκινήσετε από τους μηνιαίους λογαριασμούς σας (δηλαδή ενέργεια, φυσικό αέριο, κλπ …). Όπως λένε μερικοί, Good for Planet, The Wallet και The Bottom Line. Το υλικό ανοιχτού κώδικα είναι ο τρόπος μας για να επιτύχουμε βιωσιμότητα στο οικιακό περιβάλλον! Αυτή η ιδέα μας έφερε να δημιουργήσουμε μια απλή και ασφαλή λύση, εύκολη στην ενσωμάτωση με οποιοδήποτε λογισμικό οικιακού αυτοματισμού, καθώς εκθέτει δεδομένα μέσω MQTT (στην περίπτωσή μας θα σας δείξουμε πώς να τα ενσωματώσετε στο Home Assistant).

ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ

Για να μετρήσουμε την κατανάλωση ηλεκτρικής ενέργειας, επιλέξαμε να χρησιμοποιήσουμε το Finder Energy Meter, αφού έχει σχεδιαστεί για χρήση σε σιδηροτροχιά DIN και ταιριάζει απόλυτα στο κεντρικό ντουλάπι του σπιτιού μας. Το ωραίο με αυτό το προϊόν είναι ότι διαθέτει διεπαφή RS485 Modbus, ένα βιομηχανικό πρότυπο πρωτόκολλο επικοινωνίας που καθιστά την επικοινωνία με ένα Arduino πολύ εύκολη. Στην πραγματικότητα, το Arduino έχει κυκλοφορήσει μια επίσημη ασπίδα, το MKR485 και δύο βιβλιοθήκες για την αποκωδικοποίηση του πρωτοκόλλου. Ως κεντρική πλακέτα, επιλέξαμε το Arduino MKR WiFi 1010, καθώς μοιράζεται τον παράγοντα φόρμας MKR και διαθέτει δυνατότητα σύνδεσης WiFi.

SetupWarning! Ελέγξτε τους κανονισμούς της χώρας σας σχετικά με την αντιμετώπιση του ηλεκτρικού συστήματος του σπιτιού σας και να είστε εξαιρετικά προσεκτικοί γιατί μπορεί να είναι θανατηφόρος! Εάν δεν γνωρίζετε τεχνογνωσία, καλέστε έναν ηλεκτρολόγο. Το πρώτο βήμα είναι να εγκαταστήσετε τον μετρητή στο ηλεκτρικό ντουλάπι σας. Για να διασφαλίσετε ότι εργάζεστε σε ασφαλές περιβάλλον, απενεργοποιήστε την τροφοδοσία από τον ηλεκτρικό ακροδέκτη μπροστά από το σύστημά σας και ελέγξτε ξανά με το πολύμετρο ότι δεν υπάρχει τάση μεταξύ των ακροδεκτών. Στη συνέχεια, τοποθετήστε τον μετρητή ενέργειας μέσα στο ντουλάπι σας και συνδέστε ζωντανά και ουδέτερα καλώδια από τον κύριο διακόπτη στην είσοδο του μετρητή, θυμηθείτε να χρησιμοποιήσετε τη σύμβαση χρωμάτων (μπλε για ουδέτερο και καφέ/μαύρο/γκρι για ζωντανά στην ΕΕ). Η έξοδος πρέπει να συνδεθεί με το υπόλοιπο σύστημα.

Συνδέσεις κύριας τάσης. Τα καλώδια παραπάνω είναι είσοδοι, τα καλώδια πέρα από αυτά είναι έξοδοι.

Βήμα 1: Απαιτούνται εξαρτήματα

Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά

Βήμα 2: Απαιτήσεις λογισμικού

Ανάγκες λογισμικού
Ανάγκες λογισμικού

Λογισμικό

Εκκινήστε τον υπολογιστή σας και ανοίξτε το IDE σας. Μπορείτε να χρησιμοποιήσετε το Arduino IDE ή το Arduino Create Editor. Ο κώδικας ικανοποιεί τα ακόλουθα αιτήματα: Επικοινωνία Modbus, διαχείριση WiFi Πρωτόκολλο MQTT Το Modbus είναι και πρωτόκολλο ανοιχτού κώδικα για βιομηχανικούς αισθητήρες και μηχανές. Για να κάνουμε το Arduino να μιλήσει για Modbus, θα χρησιμοποιήσουμε τη βιβλιοθήκη Arduino Modbus. Αυτή η βιβλιοθήκη συσκευάζει όλους τους χειριστές και κάνει τη σύνδεση κάθε συσκευής Modbus πολύ γρήγορη. Δεδομένου ότι πρόκειται να διαβάσουμε καταχωρητές, ακολουθώντας το φύλλο δεδομένων του μετρητή, μπορούμε να βρούμε όλες τις πληροφορίες που χρειαζόμαστε, όπως κωδικούς συνάρτησης, διεύθυνση καταχωρητή και μέγεθος καταχωρητή σε λέξεις. Αλλά για να γίνει σαφέστερο, ας εξηγήσουμε πώς λειτουργεί το Modbus: Τα μηνύματα Modbus ακολουθούν μια απλή δομή: 01 03 04 00 16 00 02 25 C7 0x01είναι η διεύθυνση συσκευής 0x03 είναι ο κώδικας λειτουργίας που λέει στη συσκευή εάν θέλουμε να διαβάζουμε ή να γράφουμε δεδομένα *, σε αυτή την περίπτωση, διαβάστε τους καταχωρητές 0x04 για Byte Count00 16 - Στέλνουμε 4 byte διεύθυνση καταχωρητή (00 16) που λέει στη συσκευή τι θέλουμε να διαβάσουμε 00 02- και μετά το μέγεθος του καταχωρητή (00 02) με λέξεις (κάθε λέξη έχει μήκος 2 byte) Τα τελευταία 4 byte είναι κωδικός CRC. Αυτός ο κώδικας παράγεται από μια μαθηματική συνάρτηση σε σχέση με τα προηγούμενα byte, αυτό διασφαλίζει ότι το μήνυμα έχει ληφθεί σωστά.

Η προσθήκη του μετρητή στο Home Assistant είναι αρκετά απλή. Υποθέτοντας ότι έχετε διαμορφώσει έναν μεσίτη MQTT (Εδώ είναι ο οδηγός), το μόνο που χρειάζεται να κάνετε είναι να προσθέσετε νέους ορισμούς στο αρχείο configuration.yaml. αισθητήρας: - πλατφόρμα: όνομα mqtt: "Main Voltage" state_topic: "energy/main/voltage" unit_of_measurement: "V" Εδώ πρέπει να βάλετε το όνομα της μέτρησης, το θέμα MQTT για ανάγνωση και τη μονάδα μέτρησης της ποσότητας. Αποθηκεύστε το αρχείο, ελέγξτε τη διαμόρφωση και φορτώστε ξανά το Home Assistant, τώρα οι μετρήσεις θα εμφανιστούν στην κύρια σελίδα.

Πίνακας κατανάλωσης Home Assistant που δείχνει τις τρέχουσες ενδείξεις

Το Home Assistant θα φροντίσει για τη δημιουργία γραφημάτων και θα αυτοματοποιήσει διαδικασίες που ενεργοποιούνται από τις αναγνώσεις σας. Αυτό το σεμινάριο ολοκληρώθηκε, τώρα εναπόκειται σε εσάς να προσθέσετε δυνατότητες και να το προσαρμόσετε για τους δικούς σας σκοπούς!

Βήμα 3: Συναρμολόγηση

Συγκεντρώνουν
Συγκεντρώνουν
Συγκεντρώνουν
Συγκεντρώνουν

Εγινε? Isρθε η ώρα να βιδώσετε τη σύνδεση RS485! Θα χρησιμοποιήσουμε στριμμένο καλώδιο ενός ζεύγους με τη γείωση, που συνήθως χρησιμοποιείται για τηλεφωνικές γραμμές. Με αυτό το καλώδιο, μπορείτε να μεταδώσετε σε μεγάλη απόσταση (1,2 χιλιόμετρα). Ωστόσο, χρησιμοποιούμε απλώς ένα καλώδιο αρκετά για να βγούμε από το ντουλάπι και να τοποθετήσουμε το Arduino σε ένα προσβάσιμο σημείο.

Finder RS485 σύνδεση

Η διεπαφή RS485 ονομάζει τους ακροδέκτες της Α, Β και COM. Ένα κοινό de-facto πρότυπο είναι η χρήση των TX+/RX+ ή D+ ως εναλλακτική λύση για το B (υψηλό για MARK δηλαδή αδρανές), TX-/RX- ή D- ως εναλλακτική λύση για A (χαμηλή για MARK δηλ. Αδρανές) Η ασπίδα MKR υποστηρίζει επίσης Full Duplex, θα δείτε δύο άλλους ακροδέκτες, το Y και το Z. Εδώ θα βιδώσουμε το άλλο άκρο του καλωδίου, αφού γνωρίζουμε από το φύλλο δεδομένων ότι η επικοινωνία μισής διπλής όψης συμβαίνει μόνο στους ακροδέκτες Y και Z. Το τερματικό COM πρέπει να συνδεθεί με ISOGND. Δεδομένου ότι χρησιμοποιούμε μια σύνδεση διπλής όψης και επειδή η καλωδίωση είναι peer-to-peer, πρέπει να ρυθμίσουμε τους διακόπτες στην ασπίδα MKR485 για να ταιριάζει με τη ρύθμισή μας: ρυθμίζουμε HALF (2 σε απενεργοποίηση) και τερματισμό σε YZ (3 έως ΕΠΙ); το πρώτο δεν έχει σημασία. Ο τερματισμός είναι μια αντίσταση που συνδέει τα δύο τερματικά δεδομένων, για παρεμβολές απόσβεσης.

Αυτό είναι. Τώρα μπορείτε να κλείσετε το ερμάριο και να εστιάσετε στην πλευρά του λογισμικού!

Βήμα 4: Κωδικός

Κώδικας
Κώδικας

#περιλαμβάνω

#include #include #include // τα διαπιστευτήριά σας wifi const char ssid = "**********"; const char pass = "**********";

WiFiClient net? Πελάτης MQTTClient. ανυπόγραφη μεγάλη τιμή = 60000; // προεπιλεγμένος ρυθμός ανανέωσης σε ms χωρίς υπογραφή long lastMillis = 0;

// σύνδεση λειτουργίας void connect () {Serial.print ("checking wifi…"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); καθυστέρηση (1000)? } Serial.print ("\ nσύνδεση…"); while (! client.connect ("όνομα_συσκευής", "όνομα_χρήστη", "user_pw")) {// ΑΛΛΑΓΗ ΓΙΑ ΤΗΝ ΤΑΙΡΙΑΣΗ ΤΗΣ ΡΥΘΜΙΣΗΣ ΣΑΣ Serial.print ("."); καθυστέρηση (1000)? } Serial.println ("\ nσύνδεση!"); client.subscribe ("energy/main/refreshrate"); // θέμα για ρύθμιση του ρυθμού ανανέωσης από απόσταση} // mqtt λήψη λειτουργίας επανάκλησης void messageReceived (String & topic, String & payload) {Serial.println ("εισερχόμενα:" + topic + " -" + payload); if (topic == "energy/main/refreshrate") {// ρυθμός ανανέωσης ρυθμιστής = payload.toInt ()*1000; Serial.println ("νέα τιμή"+String (ποσοστό)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); ενώ (! Σειριακό)? client.begin ("broker_ip", net); // ΑΛΛΑΓΗ ΓΙΑ ΤΗΝ ΤΑΙΡΙΑΣΗ ΤΗΣ ΡΥΘΜΙΣΗΣ ΣΑΣ client.onMessage (messageReceived); // ξεκινήστε τον πελάτη Modbus RTU εάν (! ModbusRTUClient.begin (9600)) {Serial.println ("Αποτυχία εκκίνησης Modbus RTU Client!"); ενώ (1)? }}

void loop () {client.loop (); εάν (! client.connected ()) {// ελέγξτε τη σύνδεση δικτύου (); } // δημοσιεύστε ένα μήνυμα μετά την παρέλευση της ανανέωσης (ρουτίνα χωρίς αποκλεισμούς) εάν (millis () - lastMillis> ποσοστό) {lastMillis = millis (); // κάνει όλες τις κλήσεις ανάγνωσης float volt = readVoltage (); καθυστέρηση (100)? float amp = readCurrent (); καθυστέρηση (100)? διπλό watt = readPower (); καθυστέρηση (100)? float hz = readFreq (); καθυστέρηση (100)? διπλό wh = readEnergy (); // δημοσιεύει αποτελέσματα κάτω από σχετικά θέματα client.publish ("ενέργεια/κύρια/τάση", συμβολοσειρά (βολτ, 3)); client.publish ("energy/main/current", String (amp, 3)); client.publish ("energy/main/power", String (watt, 3)); client.publish ("ενέργεια/κύρια/συχνότητα", String (hz, 3)); client.publish ("ενέργεια/κύρια/ενέργεια", String (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"); καθυστέρηση (100)? }}

/ * Λειτουργίες ανάγνωσης καταχωρητών Finder Energy Meter * * Ελέγξτε το εγχειρίδιο πρωτοκόλλου modbus για να κατανοήσετε τον κώδικα * https://gfinder.findernet.com/public/attachments/7E/EL/PRT_Modbus_7E_64_68_78_86EN.pdf */float readVoltage () {float volt = 0.; εάν (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// πραγματοποιήστε την κλήση στο μητρώο Serial.print ("απέτυχε η ανάγνωση τάσης!"); Serial.println (ModbusRTUClient.lastError ()); // χειριστής σφαλμάτων} else {uint16_t word1 = ModbusRTUClient.read (); // ανάγνωση δεδομένων από το buffer uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | word2; // bit μαθηματικά volt = millivolt/1000.0; } βολτ επιστροφής. } float readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("απέτυχε η ανάγνωση του ρεύματος!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | word2; αμπέρ = milliamp/1000.0; } επιστροφή αμπέρ? }

double readPower () {double watt = 0.; εάν (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("απέτυχε η ανάγνωση ισχύος!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; εάν (word1 >> 7 == 0) {milliwatt = word1

Συνιστάται: