Სარჩევი:

MQTT და Wifi ელექტრონული ფოსტის დროშა დროშა: 7 ნაბიჯი (სურათებით)
MQTT და Wifi ელექტრონული ფოსტის დროშა დროშა: 7 ნაბიჯი (სურათებით)

ვიდეო: MQTT და Wifi ელექტრონული ფოსტის დროშა დროშა: 7 ნაბიჯი (სურათებით)

ვიდეო: MQTT და Wifi ელექტრონული ფოსტის დროშა დროშა: 7 ნაბიჯი (სურათებით)
ვიდეო: სახლის ასისტენტი. გაკვეთილი 9.4 დამატება - Xiaomi Gateway 3, zigbee2mqtt ინტეგრაცია 2024, ნოემბერი
Anonim
MQTT და Wifi ელექტრონული ფოსტის დროშა
MQTT და Wifi ელექტრონული ფოსტის დროშა

შენიშვნა: განახლებულია ახალი firmware, სქემატური და რჩევები პროგრამისტისთვის

რამდენიმე წლის განმავლობაში მე დავიწყე ჩემი სახლის ავტომატიზაციის პროექტი. ეს დაიწყო სერვერზე კონტროლირებადი 433 MHz გადამცემით, რომელიც აშენდა Arduino– ით, რათა შეცვალოს ბევრი იაფი PT2262 დისტანციური გადამრთველი. მოგვიანებით დავამატე Arduino– ზე დაფუძნებული მიმღები ჩემი ამინდის სადგურისთვის, დავამაგრე ჩემი EV დამტენის საკონტროლო კონტაქტი და სხვა. საქმეები უფრო და უფრო ირევა (და გართულდა!). ასე რომ, რამდენიმე თვის წინ მე გადავწყვიტე ყველაფრის სტანდარტიზაცია MQTT- ზე, შეტყობინებებისათვის, Node-RED ავტომატიზაციისთვის (ორივე ერთ Raspberry Pi B+-ზე მუშაობს) და MariaDb ხეზე (მუშაობს ჩემს Synology NAS– ზე). მოგვიანებით გადავიყვანე MQTT ბროკერი (Mosquitto) და Node-RED NAS– შიც.

ეს ინსტრუქცია აღწერს სულელურ-სახალისო პროექტს, რომელიც ასახავს ჩემს ქუჩაზე დამონტაჟებულ საფოსტო ყუთს ამ სახლის ინფრასტრუქტურაში. იდეა ის არის, რომ თუ ვინმე გახსნის ღობეზე დამონტაჟებულ საფოსტო ყუთს შესასვლელი კარიდან დაახლოებით 10 მეტრში, ის სიგნალს მაძლევს ჩემს ტელეფონზე და შესაძლოა სხვა მოწყობილობებზე.

ნაბიჯი 1: მონახაზი, წინაპირობები და ნაწილები

მონახაზი

მაღალ დონეზე, საფოსტო ყუთმა უნდა გახსნას, გაუგზავნოს უნიკალური MQTT შეტყობინება ბროკერს, რათა ამ თემის გამომწერები ინფორმირებული იყვნენ. Node-RED ასევე იწერს და აკეთებს გარკვეულ ავტომატიზაციას, ამ შემთხვევაში ელ.ფოსტის ან/და შეტყობინების გაგზავნას ჩემს ტელეფონში.

საფოსტო ყუთი უნდა მუშაობდეს ბატარეებზე და იმუშაოს მინიმუმ ერთი წლის განმავლობაში და ეს უნდა გაკეთდეს ჩემი WiFi ქსელის გამოყენებით. რადგან მიკროკონტროლერის გამოღვიძება და WiFi ქსელთან დაკავშირება შეიძლება რამდენიმე წამი დასჭირდეს, მე ვერ გამოვიყენებ აქტივაციის გადამრთველს ენერგიის შესაწყვეტად. ამის ნაცვლად, პროცესორს უნდა მიეცეს უფლება დაასრულოს თავისი საქმე საფოსტო ყუთის სახურავის დახურვის შემდეგ.

წინაპირობები

მე ვფიქრობ, რომ თქვენ გაქვთ მოკრძალებული შედუღების უნარი, ცოტათი იმუშავეთ Arduino IDE– სთან და დააინსტალირეთ ESP8266 დაფები დაფების მენეჯერის გამოყენებით. თქვენ ასევე უნდა გქონდეთ 3.3 ვოლტიანი USB სერიული ადაპტერი მიკროკონტროლერის დასაპროგრამებლად.

მე ასევე ვივარაუდებ, რომ თქვენ გაქვთ MQTT ბროკერი და Node-RED სერვერი. თუ არა, ინტერნეტში ბევრი ინსტრუქციაა, მაგრამ მე გირჩევთ დაივიწყოთ ზარმაცი მარშრუტი და გამოიყენოთ პიტერ სკარგილის შესანიშნავი ინსტალაციის სკრიპტი, თუ გსურთ მისი გაშვება ნებისმიერ Pi ან Ubuntu– ზე, ან გამოიყენოთ Andreas Spiess– ის სურათი Pi Zero W (ბმულები ამ ვიდეოს აღწერილობაში), რომელიც დაზოგავს რამდენიმე საათის განმავლობაში ინსტალაციის სკრიპტების ყურებას. გარდა ამისა, თქვენ შეგიძლიათ აიძულოთ firmware პირდაპირ გაგზავნოს წერილი, მაგრამ ამით თქვენ დაკარგავთ უამრავ მოქნილობას.

ნაწილები

  • 1 დახურული, 3 AA ბატარეის ყუთი
  • 2 AA ბატარეა
  • 1 ESP8266 მოდული. ამ პროექტისთვის მე გამოვიყენე ESP-01
  • 1 მიკრო გადამრთველი
  • 1 47K რეზისტორი
  • 1 4M7 რეზისტორი
  • 1 2.2uF კონდენსატორი
  • 1 თხელი პლასტმასის მილი. კალამი გამოვიყენე
  • 1 სქელი, გრძელი ასანთი ან ლოლიპოპის ჯოხი. ის ადვილად უნდა მოერგოს და გადაადგილდეს პლასტმასის მილში

ნაბიჯი 2: აპარატურა: ყუთი, გადამრთველი და გაყვანილობა

აპარატურა: ყუთი, გადამრთველი და გაყვანილობა
აპარატურა: ყუთი, გადამრთველი და გაყვანილობა
აპარატურა: ყუთი, გადამრთველი და გაყვანილობა
აპარატურა: ყუთი, გადამრთველი და გაყვანილობა
აპარატურა: ყუთი, გადამრთველი და გაყვანილობა
აპარატურა: ყუთი, გადამრთველი და გაყვანილობა

დავიწყე ძველი ბატარეის ყუთით, საშობაო გაფორმებიდან. ის განკუთვნილი იყო სამი AA ზომის ბატარეისთვის. რადგან ESP8266 მშვენივრად იმუშავებს 3 ვოლტზე, მე შემიძლია გამოვიყენო ორი ბატარეა და გამოვიყენო მესამე პოზიცია მიკროკონტროლერისთვის. ყურადღება მიაქციეთ, როგორ ჰქონდა ყუთს პატარა დამატებითი განყოფილება, რომლის გამოყენებაც აქტივაციის გადამრთველისთვის შემეძლო. მე გამოვიყენე ძალიან გავრცელებული ტიპის გადამრთველი, რომელიც ნაჩვენებია სურათებში, მაგრამ ამოვიღე ზამბარა, რომელიც მიმაგრებულია ჩართვის ან გამორთვის მდგომარეობაში. მე შევაერთე ორი თხელი მავთული NC კონტაქტებს და ყუთში ჩავწებ სუპერ წებოს პატარა წვეთით.

შემდეგი, მე გავაღე ხვრელი ზედა საფარში, რომელიც შეესაბამება პლასტმასის მილს, რომელიც აღებულია ბურთის კალამიდან. ხვრელი ზუსტად ემთხვევა გადამრთველს და მიჰყვება სქელი ასანთის ჯოხისგან დამზადებულ დგუშს.

დაბოლოს, მე კიდევ ორი მავთული შევაერთე ბატარეის კონტაქტებს და ოთხივე მავთული დავაყენე მესამე ბატარეის პოზიციაზე, სადაც მიკროკონტროლი უნდა ყოფილიყო.

ნაბიჯი 3: აპარატურა: ESP-01

აპარატურა: ESP-01
აპარატურა: ESP-01
აპარატურა: ESP-01
აპარატურა: ESP-01
აპარატურა: ESP-01
აპარატურა: ESP-01

WiFi მოთხოვნის გათვალისწინებით, მთელი პროექტი ყვირის ESP8266. ეს პატარა WiFi კონტროლერი გახდა მოაზროვნე საზოგადოების საყვარელი სამუშაო ცხენი, როგორც მოდული, რომლის შეძენაც 2.50 ევროს ფარგლებშია და აერთიანებს სრულ WiFi და TCP/IP სტეკებს, საკმარისზე მეტი შესაძლებლობებით, რომ დაიტოვოთ საკუთარი პროგრამების გასაშვებად. Arduino IDE (ან Atom PlatformIO მოდულით) სრულად უჭერს მხარს ESP8266.

მე ჩვეულებრივ ESP-12F– ს ვიღებდი, მაგრამ მე მქონდა პატარა ESP-01 დაფა, რომელიც იდეალური იყო სამუშაოსთვის და მშვენივრად ჯდება ბატარეის ყუთში. ერთადერთი პრობლემა ის არის, რომ საკმაოდ რთულია ESP-01- ში firmware- ის ჩაქრობა. დაწვრილებით ამის შესახებ შემდეგ ეტაპზე. არსებობს ერთი მოდიფიკაცია: თქვენ უნდა ამოიღოთ წითელი დენის დაფა დაფიდან, რადგან ის გამუდმებით ამაგრებს 3mA- ს. LED- ის ამოღებით, მოდული იყენებს მხოლოდ რამდენიმე ათეულ uA ღრმა ძილის რეჟიმში, რაც გახდის მას ერთ წელზე მეტხანს ორ ხარისხის AA ბატარეაზე.

აღმოჩნდა, რომ მე შემიძლია გამოვიყენო ორი ზოლი 4 პინიანი ქალის სათაურებით და შევაერთო რამდენიმე დამატებით კომპონენტზე თავისუფალი ფორმით, რათა ამოვიღო ESP-01 firmware- ის განახლებისთვის, სანამ ის კვლავ ჯდება ბატარეის მესამე ნაწილში.

ძალიან მნიშვნელოვანია ESP– ის სწორად მიერთება. ზემოაღნიშნული მოტყუების ფურცლის გამოყენებით, გააფორმეთ იგი შემდეგნაირად.

  1. ბატარეა პლუს Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) და 47K რეზისტორი.
  2. ბატარეა მინუს GND (A1) - მდე და გადართვის ერთი მავთული.
  3. გადართვის სხვა მავთული 100nF კონდენსატორზე და 4M7 რეზისტორზე.
  4. რეზისტორების და კონდენსატორის ღია ბოლოები RST (C2) - მდე.
  5. TXD (A2) შეიძლება დარჩეს დაუკავშირებელი.

შესწორება: მე უნდა შევცვალო ESP-01, რადგან დავუშვი სულელური შეცდომა და გავანადგურე. აღმოჩნდა, რომ ჩემდა გასაკვირად ახალი ESP-01 არ გადატვირთულა ორიგინალური 100nF კონდენსატორით. ალბათ ოდნავ განსხვავებული დიზაინი აქვს. შევცვალე 2.2 uF ერთით და ახლა ისევ მუშაობს

დასრულების შემდეგ, ყველაფერი შეიძლება დამონტაჟდეს ყუთში, მაგრამ გააჩერეთ, პირველ რიგში ჩვენ გვჭირდება მოდულის დაპროგრამება.

ნაბიჯი 4: პროგრამირება ESP-01

ESP-01 პროგრამირება
ESP-01 პროგრამირება
ESP-01 პროგრამირება
ESP-01 პროგრამირება
ESP-01 პროგრამირება
ESP-01 პროგრამირება

თქვენი ESP-01 ფირმის პროგრამული უზრუნველყოფის გასააქტიურებლად, შეგიძლიათ ააწყოთ პატარა აპარატი ან იყიდოთ (თითქმის) სრული პროგრამისტი დაახლოებით 1 ევროდ.

პროგრამირების აპარატურა

ააშენეთ პატარა აპარატი ისევ ორი ქალი სათაურით ESP-01– ისთვის. ასევე, თქვენ გჭირდებათ USB სერიული მოდული, რომელსაც შეუძლია უზრუნველყოს 3.3 ვოლტი. გაითვალისწინეთ, რომ ESP8266 ჩიპი არ არის 5 ვოლტიანი გამაგრებული, ასე რომ აქ შეცდომამ შეიძლება მოკლას თქვენი მოდული. ყოველ შემთხვევაში, ისევ თაღლითური ფურცლის გამოყენებით, გააფორმეთ თქვენი გაყალბება შემდეგნაირად:

  1. 3.3V USBSerial მოდულიდან Vcc, CH_PD, RST და GPIO2.
  2. USB სერიული მოდულის GND GND და GPIO0.
  3. USBSerial მოდულის TXD to RXD.
  4. USBSerial მოდულის RDX to TXD.

წინასწარ აშენებული პროგრამისტი

რაც არ უნდა სახალისო იყოს საკუთარი ნივთების შექმნა, ზარმაცი მიდგომაა მიიღოთ ESP-01 სერიული ინტერფეისი თქვენი საყვარელი აუქციონის საიტიდან, იხილეთ სურათი ზემოთ. ეს არის ბევრად უფრო ადვილი, უფრო კომპაქტური და უფრო საიმედო ვიდრე გაყალბება. თუმცა, ზოგიერთი მათგანი არ არის პროგრამისტი, არამედ სერიული ინტერფეისი. თქვენ უნდა შეაერთოთ მავთულის ხიდი GND (pin A1) და GPIO0 (pin C1) ინტერფეისის უკანა მხარეს, იხილეთ მეორე სურათი. გაითვალისწინეთ, რომ ESP-01 უნდა იყოს ჩართული ანტენასთან USB დანამატისკენ და არა პირიქით!

შენიშვნა: ისინი ასევე არსებობენ გადამრთველთან ერთად, იხილეთ მესამე სურათი, ძალიან ლამაზი.

ჩატვირთეთ firmware

დავუშვათ Arduino IDE 1.8.3 ან უფრო ახალი, აირჩიეთ Tools> Board და შეარჩიეთ დაფა, რომელიც გაქვთ. ESP-01– ისთვის, როგორც მე გამოვიყენე, აირჩიეთ „Generic ESP8266 მოდული“და დააყენეთ შემდეგი პარამეტრები (ეს უნდა იყოს ყველა ნაგულისხმევი):

  1. Flash რეჟიმი: DIO
  2. Flash სიხშირე: 40 MHz
  3. პროცესორის სიხშირე: 80 MHz
  4. ფლეშის ზომა: 512KB (64KB SPIFFS) შენიშვნა: თუ თქვენ იყენებთ შავ ESP-01 დაფას, აირჩიეთ 1MB (64KB SPIFFS)
  5. გამართვის პორტი: გამორთულია
  6. გამართვის დონე: არცერთი
  7. გადატვირთვის მეთოდი: კკ
  8. ატვირთვის სიჩქარე 115200
  9. პორტი: აირჩიეთ პორტი, რომელიც დაკავშირებულია თქვენს USB სერიულ ინტერფეისთან. ჩემი Ubuntu კომპიუტერისთვის ეს იყო /dev /ttyUSB0

შეაერთეთ გაყალბება/პროგრამისტი, ჩატვირთეთ ესკიზი, რომელსაც ნახავთ აქ https://gitlab.com/jeroenmeijer/Mailbox.git. მიაწოდეთ თქვენი WiFi და MQTT ბროკერის რწმუნებათა სიგელები და თქვენი IP კონფიგურაცია config.h და აირჩიეთ ატვირთვა.

ნაბიჯი 5: შეიკრიბეთ ეს ყველაფერი

აწყობა ეს ყველაფერი
აწყობა ეს ყველაფერი

მე გავაღე პლასტმასის მილის ხვრელი ჩემი საფოსტო ყუთის შიდა სახურავზე, რაც შეიძლება მჭიდროდ სახსართან, შემდეგ კი ცხელი წებოთი დავამუშავე ბატარეის ყუთი ამ სახურავის ქვედა მხარეს. შემდეგ მე სქელი ასანთი გამოვიყენე დგუშის სახით. მე ვიყენებ სნაიპს ასანთის სიგრძის დასაჭრელად ისე, რომ გადამრთველი გაიხსნას, თუ გარე სახურავი დაიხურება. მე შევამოწმე კავშირი სახურავის გახსნით mosquitto_sub– ის გაშვებისას MQTT შეტყობინებების მონიტორინგისთვის (შეცვალეთ mqttbroker, მომხმარებელი და პაროლი თქვენი MQTT კონფიგურაციით):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u მომხმარებელი -P პაროლი

გარე სახურავის გახსნიდან დაახლოებით ექვსი წამის შემდეგ გამოქვეყნდება შემდეგი MQTT შეტყობინება. დრო გამოიყენება მიკროკონტროლის გაღვიძებისა და WiFi და ბროკერის კავშირის დასამყარებლად.

stat/mailbox/trigger {"vcc": 3050, "flap": true, "prev": 0, "RSSI": 29, "version": "005"}

ამ დროის განმავლობაში, მიკროკონტროლერმა გამოიყენა დაახლოებით 70mA. როდესაც ეს კეთდება, ის ღრმა ძილში ჩადის და ჩემს შემთხვევაში ის 20uA- ზე ნაკლებს იყენებდა. "flap" ყოველთვის მართალია, "vcc" აცხადებს ბატარეის ძაბვას mV- ში და "prev" უნდა იყოს 0. თუ ეს არის 1 ან 2, ეს ნიშნავს, რომ საფოსტო ყუთმა ვერ შეძლო შეტყობინების გაგზავნა ადრე, არც იმიტომ, რომ მას არ შეეძლო დაკავშირება WiFi, ან იმიტომ, რომ ვერ დაუკავშირდა MQTT ბროკერს. "RSSI" არის WiFi სიგნალის სიძლიერე. ორივე ძალიან მოსახერხებელია პრობლემების დასადგენად.

კარგი იდეაა ბატარეის ძაბვის მონიტორინგი რამდენიმე დღის განმავლობაში, რათა დარწმუნდეთ, რომ მოწყობილობა მუშაობს ისე, როგორც განზრახული აქვს და რაიმე მიზეზით არ ამცირებს ბატარეას.

Firmware– ს ასევე შეუძლია განახლება თავად ჰაერში (OTA), მაგრამ ეს ცოტათი სცილდება ამ ინსტრუქციის ფარგლებს. დაინტერესებულთათვის OTA კონფიგურაცია ასევე config.h- შია.

ნაბიჯი 6: გამოიყენეთ Node-RED MQTT შეტყობინებაზე მოქმედებისთვის

Node-RED– ის გამოყენება MQTT შეტყობინებაზე მოქმედებისთვის
Node-RED– ის გამოყენება MQTT შეტყობინებაზე მოქმედებისთვის

საბოლოოდ, მე შევქმენი მარტივი ნაკადი Node-RED– ში. პირველი კვანძი იწერს საფოსტო ყუთის თემას (stat/postbox/trigger). როდესაც შეტყობინება მიიღება, მეორე კვანძი აფორმებს ელ.წერილს *). საბოლოო კვანძი აგზავნის მას ჩემს gmail მისამართზე, gmail- ის გამოყენებით როგორც SMTP სერვერი. შემდეგ ჩემი ტელეფონი გამაფრთხილებს ახალი წერილების შესახებ.

მე დავამატე Node-RED ნაკადი gitlab ნაწყვეტზე, ასე რომ თქვენ შეგიძლიათ შემოიტანოთ იგი თქვენს Node-RED ნაკადებში.

რა თქმა უნდა, შეგიძლიათ დაამატოთ კიდევ რამდენიმე კვანძი, მაგალითად, საფოსტო ყუთში მოვლენების MariaDb ან SqlLite შესასვლელად, ან შექმნათ დამატებითი სიგნალიზაცია, როდესაც ბატარეის ძაბვა 2.7 ვოლტზე დაბლა მოდის.

გილოცავთ ფოსტაზე ნადირობას!

*) იხილეთ შემდეგი გვერდი, მე ვიყენებ PushBullet- ს ელ.ფოსტის ნაცვლად.

ნაბიჯი 7: შემდგომი ფიქრები

ყოველთვის არის ასეთი განცდა, რომ რაღაცეების უკეთ გაკეთება შეიძლებოდა.

გადართვა

მე მირჩევნია გამოვიყენო (სუპერ) მაგნიტი და ლერწმის კონტაქტი, გარკვეულწილად მოუხერხებელი დგუშის მიდგომის ნაცვლად. ორი მიზეზი იყო. ერთი ის არის, რომ მე არავითარ შემთხვევაში არ შემეძლო ამ სამუშაოს შესრულება კონტაქტის დახურვისას ყუთის გახსნისას და მისი ყოველთვის დახურვა ნიშნავს იმას, რომ მცირე დინება ყოველთვის მიედინება. რეტროსპექტში, 1uA– ზე ნაკლები, რომელიც გადის 4M7 რეზისტორში, არ იქნებოდა დიდი საქმე ბატარეის ხანგრძლივობის თვალსაზრისით. მეორე უფრო პრაქტიკული იყო. მე შევქმენი ეს პროექტი შაბათს და დავწერე პროგრამული უზრუნველყოფა, ავაშენე ეს ყველაფერი კვირას იმის გარშემო, რაც ირგვლივ იყო. მე უბრალოდ არ მქონდა ლერწმის კონტაქტი უსარგებლო ყუთში.

შენიშვნა: როგორც diy_bloke– მა კომენტარი გააკეთა, ლერწმის კონტაქტებს აქვთ წებოვნების ტენდენცია დიდი ხნის განმავლობაში მაგნიტიზირებული, ასე რომ შესაძლოა დგუში საერთოდ არ იყო ისეთი ცუდი იდეა. Ვნახავთ. *)

შეტყობინება დაცლის შესახებ

საფოსტო ყუთი აგზავნის შეტყობინებას მისი დაცლისასაც. ეს არ არის დიდი საქმე, მაგრამ როდესაც სახლში უფრო მეტი ადამიანი იღებს გაფრთხილებას, შეიძლება აღმოჩნდეს მარყუჟში, რომელიც ამოწმებს საფოსტო ყუთს და უგულებელყოფს მის მთელ მიზანს! ამის გადასაჭრელად რამდენიმე გზა არსებობს, როგორიცაა შემოწმება, არის თუ არა შიდა სახურავი ამოღებული და თუ ასეა, არ გააგზავნოთ შეტყობინება. ან სახურავის გადამრთველის გამოყენების ნაცვლად, დააინსტალირეთ დეტექტორი საფოსტო ყუთის ბოლოში. ან გადატვირთვის მცირე ღილაკს, რომელიც უნდა დააჭიროთ მის დაცლისას. თუმცა, ყველაფერი გაართულებს და ალბათ გააუარესებს საიმედოობას.

შეტყობინება

ელ.ფოსტის გაგზავნა საკმაოდ ეფექტური, მაგრამ უხეში საშუალებაა გაფრთხილების გასააქტიურებლად. ტელეფონის აპლიკაცია უფრო ელეგანტური იქნება, მაგრამ მე ვერ ვიპოვე Android MQTT დაფის პროგრამა, რომლის კონფიგურაციაც შესაძლებელია ოპერაციული სისტემის გაფრთხილების გააქტიურებისას, როდესაც მიიღება გარკვეული შეტყობინება. თუ ირგვლივ არის ერთი, გთხოვთ დაამატოთ კომენტარებში. **)

*) ერთ წელზე მეტი ხნის ექსპლუატაციის შემდეგ, გამოდის, რომ მე ვიყენებდი ლოლიპოპის ჯოხს, ძირითადად მყარ ნაგლინი ქაღალდს, აქვს ტენდენცია შემცირდეს გადამრთველის ზამბარის მუდმივი წნევის ქვეშ. პრობლემების მოგვარების შემდეგ შევცვალე ის ხის ჯოხით.

**) მე ახლა ვიყენებ PushBullet– ს ბიძგი შეტყობინებებისათვის, ცალკე MQTT დაფისგან. API– ს მცირე Node-RED დაბალი ინტერფეისები შეგიძლიათ იხილოთ აქ. დარწმუნდით, რომ მიაწოდეთ წვდომის ნიშანი კვანძში "მომზადება pushbullet" და თქვენი ელ.ფოსტის მისამართი შემდგომი მიზნებისთვის კვანძში "ხელახლა ცდა".

გირჩევთ: