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

Φώτα του Ραμαζανιού - Οικιακός αυτοματισμός IOT: 6 βήματα
Φώτα του Ραμαζανιού - Οικιακός αυτοματισμός IOT: 6 βήματα

Βίντεο: Φώτα του Ραμαζανιού - Οικιακός αυτοματισμός IOT: 6 βήματα

Βίντεο: Φώτα του Ραμαζανιού - Οικιακός αυτοματισμός IOT: 6 βήματα
Βίντεο: ❄️Ramazana Özel 💯Dondurucu Hazırlığım 🌟 Çok Pratik Dondur 👉🏻Pişir 2024, Ιούλιος
Anonim
Φώτα του Ραμαζανιού | Αυτοματισμός σπιτιού IOT
Φώτα του Ραμαζανιού | Αυτοματισμός σπιτιού IOT

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

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

Βήμα 1: Θεωρία

Βασικά, είναι πιο εύκολο και πιο εφαρμόσιμο να αυτοματοποιήσετε τον φωτισμό με βάση την ένταση του ηλιακού φωτός, για παράδειγμα. Ωστόσο, θα ήθελα αυτό να έχει το πνεύμα του ιερού μήνα, δηλαδή, τα φώτα θα ανάβουν όσο επιτρέπεται στους ανθρώπους να τρώνε κατά τη διάρκεια του μήνα νηστείας. Συγκεκριμένα, τα φώτα ανάβουν από το Maghrib Adhan μέχρι το Fajr Adhan κάθε μέρα χωρίς καμία ανθρώπινη αλληλεπίδραση.

Βήμα 2: Σχεδιασμός

Παρακάτω θα αναφέρω τις απαιτήσεις/δυνατότητες αυτού του έργου:

  • Το σύστημα θα πρέπει να μπορεί να επεξεργάζεται αυτόματα κατά την εκκίνηση.
  • Το σύστημα θα πρέπει να είναι σε θέση να εκτελεί περιοδικά τον αλγόριθμο απόφασης (ON/OFF).
  • Το σύστημα θα πρέπει να μπορεί να καλεί API σε καθημερινή βάση.
  • Το σύστημα θα πρέπει να είναι σε θέση να ανακτήσει από μη προγραμματισμένη επανεκκίνηση.
  • Το σύστημα θα πρέπει να εκτελέσει τον αλγόριθμο απόφασης (ON/OFF) μόλις λάβει δεδομένα άμεσα.
  • Το σύστημα θα πρέπει να παρέχει έναν διακόπτη για την ενεργοποίηση της λειτουργίας αυτόματου πιλότου (Αυτόματη λειτουργία).
  • Το σύστημα πρέπει να παρέχει διακόπτη για χειροκίνητη ενεργοποίηση/απενεργοποίηση των φώτων.
  • Η ενεργοποίηση του χειροκίνητου διακόπτη πρέπει να θέσει τη χειροκίνητη λειτουργία σε OFF.
  • Όταν η Αυτόματη λειτουργία είναι ενεργοποιημένη, το αποτέλεσμα του αλγορίθμου απόφασης θα πρέπει να αντικατοπτρίζεται στο χειροκίνητο διακόπτη ON/OFF.

Βήμα 3: Τεχνικές λεπτομέρειες: το API

Τεχνικές λεπτομέρειες: το API
Τεχνικές λεπτομέρειες: το API

Για να καταστεί η θεωρία εφαρμόσιμη, απαιτείται να γνωρίζουμε την ώρα του Adhan σε καθημερινή βάση από τη μεταβλητή της και να την ενεργούμε για να ανάβουμε/σβήνουμε τα φώτα/διακοσμητικά.

Για το σκοπό αυτό, αποφάσισα να χρησιμοποιήσω ένα API βάσει τοποθεσίας για την εξυπηρέτηση των δεδομένων (ώρα για Adhan)

muslimsalat.com/api/#location

  • Αυτό το API παρέχει μια ποικιλία επιλογών και παραμέτρων διαμόρφωσης που περιγράφονται στον παραπάνω σύνδεσμο τεκμηρίωσης.
  • Συνιστάται να χρησιμοποιείτε το δικό σας κλειδί API το οποίο είναι δωρεάν κατά την εγγραφή.
  • Στο σχεδιασμό μου, με ενδιαφέρει ένα καθημερινό χρονοδιάγραμμα.
  • Ο χρόνος επιστροφής είναι σε μορφή 12 ωρών (ΠΜ/ΜΜ).
  • Όσον αφορά την τοποθεσία, θα ήθελα αν αυτό το API μπορούσε να παρέχει ακριβέστερες επιλογές για τοποθεσίες όπως το σύστημα συντεταγμένων γεωγραφικών συντεταγμένων (Γεωγραφικό πλάτος και Γεωγραφικό μήκος). Για αυτόν τον τρόπο, αυτό το API μπορεί να παρέχεται με όνομα πόλης για παράδειγμα και αυτό είναι αρκετά αρκετό στις περισσότερες περιπτώσεις. Δυστυχώς, τα αποτελέσματα της συγκεκριμένης πόλης μου ήταν αρκετά προκατειλημμένα σε πολλαπλές δοκιμές και υπήρχαν μερικά λεπτά διαφοράς κατά τη σύγκριση του χρόνου Adhan μεταξύ των αποτελεσμάτων API και του πραγματικού χρόνου Adhan στην πόλη μου. Από την άλλη πλευρά, τα αποτελέσματα ταίριαζαν απόλυτα όταν παρείχα μια κοντινή πόλη στα βόρεια και τηρούσα!
  • Το url API που χρησιμοποιώ είναι: https://muslimsalat.com/.json? Key =

Βήμα 4: Τεχνικές λεπτομέρειες: Υλικό

Τεχνικές λεπτομέρειες: Υλικό
Τεχνικές λεπτομέρειες: Υλικό

Για λόγους απλότητας, αφήνω το υλικό εκτός της διαδικασίας συγχρονισμού με το API και τον υπολογισμό του χρόνου με την ανάθεση αυτών των λειτουργιών στο Σύστημα οικιακού αυτοματισμού. Αυτό θα μου δώσει περισσότερο έλεγχο εάν θέλω να τροποποιήσω την πηγή API και τον αλγόριθμο υπολογισμού.

Τούτου λεχθέντος, χρησιμοποίησα ένα ESP8266 (NodeMCU) για σύνδεση στο τοπικό δίκτυο μέσω WIFI και μια μονάδα ρελέ ως ενεργοποιητή. Το NodeMCU θα χρησιμοποιήσει το πρωτόκολλο MQTT και θα ακούσει ένα συγκεκριμένο θέμα για να λάβει εντολές για ενεργοποίηση/απενεργοποίηση του ρελέ. Τόσο απλό!

Βήμα 5: Τεχνικές λεπτομέρειες: Σύνδεση των κουκίδων | Οικιακός αυτοματισμός

Τεχνικές λεπτομέρειες: Σύνδεση των κουκίδων | Οικιακός αυτοματισμός
Τεχνικές λεπτομέρειες: Σύνδεση των κουκίδων | Οικιακός αυτοματισμός
Τεχνικές λεπτομέρειες: Σύνδεση των κουκίδων | Οικιακός αυτοματισμός
Τεχνικές λεπτομέρειες: Σύνδεση των κουκίδων | Οικιακός αυτοματισμός
Τεχνικές λεπτομέρειες: Σύνδεση των κουκίδων | Οικιακός αυτοματισμός
Τεχνικές λεπτομέρειες: Σύνδεση των κουκίδων | Οικιακός αυτοματισμός

Το My RaspberryPi διαθέτει μια περίπτωση που δεν μπορεί να χειριστεί όλα όσα χρειάζομαι για αυτό το έργο. Έχει επίσης εγκατεστημένο διακομιστή MQTT για τη δημοσίευση των μηνυμάτων μας.

Αρχικά, σκέφτηκα ότι μπορώ να ανακτήσω τα δεδομένα API σε καθημερινές βάσεις στις 9 το πρωί και να εξαγάγω και τους χρόνους Fajr και Mahgrib Adhan και να συνεχίσω να συγκρίνω την τρέχουσα ώρα με αυτές τις μεταβλητές, δηλαδή:

κάθε 30 δευτερόλεπτα:

αν: Mahgrib <ΤΩΡΑ <Fajr true | ανάψτε τα φώτα | δημοσιεύστε ένα μήνυμα ON στο καθορισμένο θέμα MQTT αλλιώς: απενεργοποιήστε

Για σύγκριση ώρας, μετατρέπω τις ώρες που παρέχονται από το API από hh: mm (ΠΜ/ΜΜ) σε μορφή πλήρους ημερομηνίας, ορίζοντας το τμήμα ημερομηνίας σε αμελητέα ημερομηνία στο ιστορικό, π.χ. (1/1/1970) αφού συγκρίνουμε την ώρα μόνο στην τρέχουσα ώρα (το τμήμα ημερομηνίας μετατρέπεται επίσης).

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

Για να δώσουμε ένα παράδειγμα, ας έχουμε τον Magrib Adhan στις 7:30 μ.μ. και το Fajr στις 4:10 π.μ. Όταν το σύστημα εκκινήσει θα στείλει ένα νέο αίτημα για την ανάκτηση των δεδομένων που αναφέρθηκαν νωρίτερα. Εάν η ώρα τώρα είναι 1:45 π.μ., αναμένουμε ότι ο αλγόριθμός μας θα επιστρέψει αληθινός, αλλά στην πραγματικότητα δεν θα είναι επειδή η 1:45 π.μ. Αυτό συμβαίνει επειδή ενώνουμε την ημερομηνία μεταξύ όλων των μεταβλητών. Παρακάτω είναι η τελική έκδοση του αλγορίθμου (μέχρι στιγμής):

κάθε 30 δευτερόλεπτα:

εάν ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // χειρισμός εκτάσεων ημερών endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // χειρισμός ημερών που καλύπτουν currentTime}} // παρακάτω είναι το προηγούμενο μπλοκ κωδικών εάν: Mahgrib <ΤΩΡΑ <Fajr true | ανάψτε τα φώτα | δημοσιεύστε ένα μήνυμα ON στο καθορισμένο θέμα MQTT αλλού: false | σβήνω

Η πλήρης ροή της διαδικασίας σημειώνεται στην παραπάνω εικόνα.

Όσον αφορά το περιβάλλον χρήστη, πρόσθεσα 2 διακόπτες στη διεπαφή χρήστη/διεπαφή:

  1. Διακόπτης για να ενεργοποιήσετε αυτήν τη διαδικασία Αυτόματα ή Χειροκίνητα.
  2. Διακόπτης χειροκίνητης ενεργοποίησης/απενεργοποίησης των φώτων.

Βήμα 6: Ολοκλήρωση

Ο χρόνος κυλάει για να μην τον ξαναθυμηθούμε. Κάνοντας τέτοια απλά έργα 1 ημέρας σας επιτρέπει να πάρετε μια ανάσα σε αυτή τη γρήγορη λωρίδα και να σας βοηθήσει να αναβιώσετε τις απαλές σας δεξιότητες με την πάροδο του χρόνου.

Προσπάθησα τόσο πολύ σε αυτό το έργο να το κρατήσω απλό και επαναχρησιμοποιήσιμο σε όλο τον κόσμο.

Vηφίστε ευγενικά για αυτό το διδακτικό, αν νομίζετε ότι αυτό το έργο αξίζει.

Χαρούμενο Ραμαζάνι!

Συνιστάται: