Πώς να ελέγξετε φθηνά πρίζες RF από το OpenHAB

Έχετε κάποιες φθηνές υποδοχές ρεύματος που βασίζονται σε RF αλλά ανακάλυψα ότι δεν λειτουργούν έξυπνοι κόμβοι στο σπίτι με αυτούς; Μπορείτε να τα συνδέσετε στο έξυπνο οικιακό σύστημα DIY με μόνο περίπου $ 10 σε μέρη.

Έχετε κάποιες φθηνές υποδοχές ρεύματος που βασίζονται σε RF αλλά ανακάλυψα ότι δεν λειτουργούν έξυπνοι κόμβοι στο σπίτι με αυτούς;  Μπορείτε να τα συνδέσετε στο έξυπνο οικιακό σύστημα DIY με μόνο περίπου $ 10 σε μέρη.
Διαφήμιση

Οι έξυπνες πρίζες ρεύματος είναι ο απλούστερος τρόπος για να αυτοματοποιήσετε το σπίτι σας, αλλά σε περίπου 40 δολάρια το καθένα για υποδοχή Wi-Fi ή ZWave, είναι απίθανο να αγοράσετε περισσότερα από λίγα.

Μπορεί να έχετε ήδη μερικές φθηνές υποδοχές με βάση το RF - το είδος που έρχεται με το δικό τους προσαρμοσμένο τηλεχειριστήριο και έχετε κάποιους επιλογείς καναλιών και αναγνωριστικών στο πίσω μέρος. Δυστυχώς, δεν υπάρχουν έξυπνοι οικιακοί κόμβοι στην αγορά Μάχη των Smart Hubs: Τι υπάρχει εκεί και τι έρχεται; Μάχη των Smart Hubs: Τι υπάρχει εκεί και τι έρχεται; Διαβάστε περισσότερα που δουλεύουν με αυτά. Δεν θα ήταν υπέροχο αν μπορούσατε να συνδέσετε αυτά στο DIY έξυπνο οικιακό σας σύστημα κάπως; Λοιπόν, μπορείτε - αρκετά εύκολα στην πραγματικότητα - με περίπου $ 10 σε μέρη.

Με λίγο περισσότερη δουλειά, μπορείτε επίσης να ενσωματώσετε κάποιο άλλο εξειδικευμένο απομακρυσμένο υλικό που βασίζεται σε RF, όπως αυτή η οθόνη του cinema.

Ο, τι χρειάζεσαι:

  • ESP8266 NodeMCU v12E dev πίνακα (ακριβές μοντέλο δεν έχει σημασία, v1 ή v3 θα πρέπει να είναι ωραία πάρα πολύ). Ο λόγος που χρησιμοποιούμε μια πλακέτα NodeMCU είναι επειδή θέλουμε αργότερα την εύκολη σύνδεση Wi-Fi. Ο σύνδεσμος είναι για ένα πακέτο 2, το οποίο λειτουργεί σε 7 δολάρια το καθένα.
  • Πακέτο 433Mhz πομπό και δέκτη (περίπου $ 3).
  • Οι βιβλιοθήκες RCSwitch και MQTT και ο κώδικας μας - διαθέσιμοι για λήψη από την Github.
  • Ένας εξυπηρετητής MQTT, τοπικός ή απομακρυσμένος.
  • Μερικές RF ελεγχόμενες υποδοχές που λειτουργούν σε ζώνη 433 mHz (θα έπρεπε να πει στο τηλεχειριστήριο). Αγόρασα τη δική μου από τον Maplin ως πακέτο 3 για περίπου £ 20 ($ 25.89).

Εάν πρόκειται για τον προγραμματισμό της κάρτας NodeMCU για πρώτη φορά, θα χρειαστεί να κατεβάσετε τα plugins Arduino για αυτό: ακολουθήστε μαζί με το πρώτο μέρος του εισαγωγικού οδηγού Arduino Killer Γνωρίστε τον Kildeur του Arduino: ESP8266 Γνωρίστε τον Kildeur του Arduino: ESP8266 Τι γίνεται αν σας είπε ότι υπάρχει ένας πίνακας Dev συμβατός με Arduino με ενσωματωμένο Wi-Fi για λιγότερο από $ 10; Λοιπόν, υπάρχει. Διαβάστε περισσότερα για το τσιπ NodeMCU / ESP8266. Θα χρειαστείτε επίσης προγράμματα οδήγησης CH430 . Μπορείτε να βρείτε εδώ υπογεγραμμένους οδηγούς macOS CH430 ή Windows εδώ.

Έχω χρησιμοποιήσει το v1.6.5 του Arduino γιατί τίποτα υψηλότερο παρουσιάζει περισσότερα προβλήματα από αυτά που λύνει. Υποβάθμιση εάν δεν το έχετε ήδη κάνει.

Πριν προχωρήσετε, θα πάρω ένα βασικό επίπεδο γνώσης σχετικά με τον προγραμματισμό Arduino Arduino Προγραμματισμός για αρχάριους: Ο ελεγκτής φωτισμού της κυκλοφορίας Arduino Προγραμματισμός για αρχάριους: Ο ελεγκτής φωτός της κυκλοφορίας Την περασμένη εβδομάδα μάθαμε για τη βασική δομή ενός προγράμματος Arduino και ρίχνοντας μια πιο προσεκτική ματιά στο παράδειγμα «αναβοσβήνει». Ας ελπίσουμε ότι εκμεταλλευτήκατε την ευκαιρία να πειραματιστείτε με κώδικα προσαρμόζοντας τους χρόνους. Αυτή τη φορά, ... Διαβάστε περισσότερα και ότι έχετε τη ρύθμιση του NodeMCU στο διαχειριστή του σκάφους και είστε σε θέση να φορτώσετε σωστά κάποιο κώδικα επίδειξης. Θα πρέπει επίσης να έχετε προσθέσει τις βιβλιοθήκες που περιλαμβάνονται στη λήψη μας στο φάκελό σας Arduino / βιβλιοθήκες .

Αν έχετε υπάρχουσα βιβλιοθήκη του PubSubClient ή του MQTT, δημιουργήστε αντίγραφα ασφαλείας και καταργήστε την - αυτή που έχω συμπεριλάβει στη λήψη είναι η μόνη που θα μπορούσα να λαμβάνω αξιόπιστα μηνύματα στο NodeMCU και προσπάθησα πολύ !

RF Sniffing (Προαιρετικό)

Αυτό το βήμα δεν είναι απαραίτητο εάν θέλετε να ελέγξετε μόνο το DIP-διακόπτη ή τις υποδοχές βύσματος επιλογέα - αυτές υποστηρίζονται εκτός κιβωτίου και θα χρειαστεί ελάχιστη τροποποίηση κώδικα (αυτό είναι ακόμα ενδιαφέρον να το κάνετε πρώτα, όμως, θα καταλάβουμε τι συμβαίνει πίσω από τις σκηνές).

Αν έχετε άλλα τηλεχειριστήρια RF που θέλετε να δοκιμάσετε να προσθέσετε, θα πρέπει πρώτα να "μυρίσετε" τους κωδικούς RF που μεταδίδονται. Για να το κάνετε αυτό, φορτώστε το σκίτσο ReceiveDemo_Advanced από το φάκελο Μενού -> Παραδείγματα -> RCSwitch και αλλάξτε την ακόλουθη γραμμή από το 0

mySwitch.enableReceive(0); // Receiver on interrupt 0 =>that is pin #2 

έως 2.

 mySwitch.enableReceive(2); // Receiver on GPIO 2 / D4. 

Συνδέστε τη μονάδα δέκτη ως εξής. Κοιτάζοντας το μπροστινό μέρος της πλακέτας δέκτη (είναι το μεγαλύτερο από τα δύο, ο πομπός είναι τετράγωνος) - η πλευρά με τα εξαρτήματα σε:

  • Ακριβώς δεξιά είναι το GND. Συνδεθείτε στο GND στην πλακέτα NodeMCU.
  • Ακριβώς αριστερά είναι η VCC. Συνδεθείτε στο VIN στην πλακέτα NodeMCU.
  • Μέσες δύο καρφίτσες είναι το σήμα. Συνδέστε είτε ένα στο D4 στο NodeMCU (συνδέονται μαζί, οπότε δεν έχει σημασία ποιο).

433 καλωδίωση-1

Τώρα μεταφορτώστε το τροποποιημένο ReceiveDemo_Advanced και, όταν ολοκληρωθεί, ανοίξτε τη σειριακή οθόνη και ξεκινήστε να πατάτε τα πλήκτρα στα τηλεχειριστήρια. Αντιγράψτε το δεκαδικό (συμπεριλαμβανομένου του μήκους bit), το μήκος παλμού και το πρωτόκολλο όταν πιέζετε ένα κουμπί.

οθόνη RF sniffing

Μετά από αυτό, βρήκα την οθόνη προβολής που χρησιμοποιούσα

  • SCREEN UP: Λήψη 8694273 / 24bit; Μήκος παλμού: 355 ή 356. Πρωτόκολλο: 1
  • SCREEN DOWN: Λήψη 8694276 / 24bit, μήκος παλμού: 355 ή 356, Πρωτόκολλο: 1

Συνεχίστε για όσα κουμπιά χρειάζεστε.

Δοκιμή του πομπού

Στη συνέχεια, θα προσπαθήσουμε να στέλνουμε κωδικούς χρησιμοποιώντας τον πομπό. Συνδέστε το δομοστοιχείο πομπού (το τετράγωνο) ως εξής. Προσέξτε: η επισήμανση σε αυτές τις καρφίτσες είναι άθλια .

Η καρφίτσα VCC βρίσκεται στη μέση, όχι στην αριστερή πλευρά. Καταστρέψα μια μονάδα στην προσπάθεια να το καταλάβω. Αυτό το πράγμα που λέει "ATAD" είναι στην πραγματικότητα "DATA", γραμμένο προς τα πίσω. Και πάλι, τα δεδομένα πηγαίνουν σε D4, VCC σε VIN, και GND σε GND (αφαιρέστε τη μονάδα δέκτη, δεν το χρειάζεστε πλέον).

433 καλωδίωση-2

Τοποθετήστε τα παραδείγματα -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches και, πάλι, αλλάξτε τον ακροδέκτη δεδομένων:

 mySwitch.enableTransmit(10); 

προς την

 mySwitch.enableTransmit(2); 

Σημειώστε ότι μια ποικιλία παραδειγμάτων περιλαμβάνεται στη βιβλιοθήκη και ποια λειτουργεί για εσάς εξαρτάται από τον ακριβή τύπο του διακόπτη που έχετε. Οι τύποι A (διακόπτες dip) και B (πληκτρολόγια ή ρυθμιστικά) είναι οι πιο συνηθισμένοι - ανατρέξτε στις εικόνες στη σελίδα RCSwitch. Για τον τύπο Β, η ενεργοποίηση και απενεργοποίηση μιας υποδοχής είναι τόσο απλή όσο:

 mySwitch.switchOn(1, 4); mySwitch.switchOff(1, 4); 

όπου 1 είναι το αναγνωριστικό καναλιού (ο κορυφαίος επιλογέας) και 4 είναι το αναγνωριστικό υποδοχής (ο κάτω επιλογέας). Αυτά γράφτηκαν με ρωμαϊκούς αριθμούς στις υποδοχές μου. Επομένως, μπορούν να αντιμετωπιστούν το πολύ 16 μεμονωμένες υποδοχές, αν και πολλαπλές υποδοχές μπορούν να χρησιμοποιήσουν την ίδια διεύθυνση εάν έχετε πολλές συσκευές για να ενεργοποιήσετε ταυτόχρονα.

Ωστόσο, η οθόνη του προβολέα μου ήταν λίγο διαφορετική - χρησιμοποίησε διαφορετικό μήκος παλμού. Έτσι, για να λειτουργούν αυτά, τα ακόλουθα λειτουργούσαν. Σημειώστε ότι μπορείτε επίσης να ορίσετε ένα διαφορετικό πρωτόκολλο, αν το απομακρυσμένο σας χρειάζεται, αλλά βεβαιωθείτε ότι ορίζετε το πρωτόκολλο ΠΡΙΝ το μήκος του παλμού. Το μήκος παλμού αντικαθίσταται κατά την αλλαγή του πρωτοκόλλου.

 // Note that my screen actually requires TWO button presses (not a long press, but two physical presses), so I'm delaying a bit then sending the same signal again void screenUp(){ mySwitch.setPulseLength(358); mySwitch.send(8694273, 24); // (decimal code, number of bits) delay(2000); mySwitch.send(8694273, 24); } void screenDown(){ mySwitch.setPulseLength(358); mySwitch.send(8694276, 24); delay(2000); mySwitch.send(8694276, 24); } 

Δοκιμάστε πρώτα ότι όλοι οι κωδικοί σας λειτουργούν πριν προχωρήσετε στο επόμενο βήμα.

Έλεγχος μέσω MQTT

Ανοίξτε το σκίτσο που κατεβάσατε από το Github με το όνομα mqtt_rcswitch.ino και ξεκινήστε τροποποιώντας το SSID δικτύου και τον κωδικό πρόσβασης για το σπίτι σας. Στη συνέχεια, αλλάξτε το όνομα του καναλιού εάν το επιθυμείτε και ρυθμίστε το διακομιστή MQTT. Εάν δεν έχετε ήδη ένα διακομιστή MQTT που εκτελείται στην εγκατάστασή σας OpenHAB, διαβάστε το μέρος 2 του οδηγού μας για αρχάριους OpenHAB Οδηγός για αρχάριους OpenHAB Μέρος 2: ZWave, MQTT, κανόνες και γραφήματα OpenHAB Οδηγός για αρχάριους Μέρος 2: ZWave, MQTT, κανόνες και χαρτογράφηση Το OpenHAB, το λογισμικό αυτοματισμού ανοιχτού κώδικα, ξεπερνά κατά πολύ τις δυνατότητες άλλων συστημάτων αυτοματισμού στο σπίτι - αλλά δεν είναι εύκολο να εγκατασταθεί. Στην πραγματικότητα, μπορεί να είναι απογοητευτικό. Διαβάστε περισσότερα . Σημειώστε ότι ο κώδικας μου έχει σχεδιαστεί για πρίζες τύπου B (περιστροφικού διακόπτη), αν και θα μπορούσατε εύκολα να το τροποποιήσετε για τους διακόπτες DIP.

Το πιο σημαντικό μέρος του κώδικα είναι η συνάρτηση messageReceived (), η οποία ανταποκρίνεται στις εισερχόμενες εντολές MQTT. Σε αυτήν τη λειτουργία, ελέγχουμε πρώτα τη μεγάλη λέξη-κλειδί - επέλεξα "διακόπτη" και "οθόνη". Στην περίπτωση του "διακόπτη", αναλύουμε στη συνέχεια το κανάλι και την ταυτότητα plug; στη συνέχεια ελέγξτε το σώμα ωφέλιμου φορτίου για την εντολή.

 void messageReceived(String topic, String payload, char * bytes, unsigned int length) { if (topic.indexOf("switch")>=0){ //switch control, parse out the channel and plug id int channel = getValue(topic, '/', 3).toInt(); int plug = getValue(topic, '/', 4).toInt(); if(payload == "on"){ mySwitch.switchOn(channel, plug); } else{ mySwitch.switchOff(channel, plug); } } else if (topic.indexOf("screen")>=0){ //screen control if(payload == "up"){ screenUp(); } else if(payload == "down"){ screenDown(); } } /* add another else if here to listen for more commands (or just modify the one above if you dont want screen) */ } 

Από προεπιλογή, επομένως, λειτουργούν οι ακόλουθες εντολές MQTT:

 σαλόνι / διακόπτης / διακόπτης / X / Y (όπου το X είναι κανάλι και το Y είναι το βύσμα ID με το σώμα μηνυμάτων ενεργοποιημένο ή απενεργοποιημένο) 
 καθιστικό / έλεγχος / οθόνη (με σώμα μηνυμάτων επάνω ή κάτω) 

Χρησιμοποιήστε τη γραμμή εντολών ή ένα πρόγραμμα-πελάτη GQ MQTT για να δοκιμάσετε τις συσκευές σας πριν προσθέσετε στο OpenHAB.

Προσθήκη στο OpenHAB

Ως τελευταίο βήμα, πρέπει απλά να δημιουργήσουμε ορισμένα στοιχεία για αυτούς τους διακόπτες στο OpenHAB. Έχω ορίσει τα παρακάτω στοιχεία για τώρα, αλλά θα πρέπει να είστε σε θέση να καταλάβετε πώς να προσθέσετε περισσότερα:

 / * Οθόνη CinemaScreen "Cinema" (Κινηματογράφος) {mqtt = "> [μεσίτης: καθιστικό / έλεγχος / οθόνη: εντολή: ON: κάτω] ] "} Switch Switch41" Switch41 "(Κινηματογράφος) {mqtt ="> [μεσίτης: σαλόνι / (μεσαία) / διακόπτης / διακόπτης / 4/2: εντολή: ON: on], > [μεσίτης: σαλόνι / διακόπτης / διακόπτης / 4/2: εντολή: OFF: off] "} 

Θα πρέπει τώρα να μπορείτε να ελέγχετε τις συσκευές RF από το OpenHAB! Ένα πράγμα που μου εκπλήσσει ευχάριστα ήταν η σειρά - ένας μόνο κόμβος ήταν σε θέση να καλύψει το μεγαλύτερο μέρος του σπιτιού μου. Μπορείτε φυσικά να προσθέσετε έναν άλλο κόμβο, ακούγοντας το ίδιο κανάλι, το οποίο απλά επαναλαμβάνει τις ίδιες εντολές, εάν χρειάζεστε περαιτέρω κάλυψη.

Ο μόνος περιορισμός που πρέπει να ληφθεί υπόψη είναι ότι οι ίδιες οι υποδοχές δεν μπορούν να αναφέρουν την κατάστασή τους, οπότε αν χρησιμοποιήσετε το αρχικό τηλεχειριστήριο, ο έλεγχος της κατάστασης της υποδοχής ενδέχεται να μην αντικατοπτρίζεται με ακρίβεια στο OpenHAB. Προσέξτε να χρησιμοποιείτε μόνο τη διεπαφή OpenHAB και θα πρέπει να είστε εντάξει.

Ερωτήσεις ή προβλήματα; Ρωτήστε μακριά στα σχόλια και θα κάνω το καλύτερο δυνατό για να βοηθήσω . Αν θέλετε να βελτιώσετε τον κώδικα μου, μπορείτε να υποβάλετε ένα αίτημα έλξης.

In this article