рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рд╕рд╛рде рдкрд╛рдпрдерди рд▓реЛрдХрдкреНрд░рд┐рдп рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рдЕрдкрдиреЗ рд╕реНрдорд╛рд░реНрдЯ рдЧреНрд░реАрдирд╣рд╛рдЙрд╕ рдореЗрдВ рдЕрдкрдиреЗ DS18B20 рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЛ рдЗрд╕ рд╕реЗрдВрд╕рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИрдВред рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЯреАрд╕реАрдкреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рджреЛ рдШрдВрдЯреЗ рдХреЗ рдиреГрддреНрдп рдХреЗ рд╕рд╛рде рдПрдХ рддрдорд╛рд╢рдмреАрди рдиреЗ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╛рд░рд╛рдЬ рдХрд░ рджрд┐рдпрд╛ред рддреЛ рдпрд╣рд╛рдБ, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рднрд╛рдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╢реБрд░реВ рд╕реЗ рдЕрдВрдд рддрдХ рдкреВрд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕реЗрдВрд╕рд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд▓реЗрдЦ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реЗрдВрд╕рд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЯреИрдореНрдмреЛрд░рд┐рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ :) рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЪрд▓реЛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдореИрдВ рдЖрдкрд╕реЗ рд╣реИрдмрд░рдХреЛрдЯ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реВрдВред

рдПрдХ рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рд╢рд░реНрдорд┐рдВрджрдЧреА


рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ рд╕реЗрдВрд╕рд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ DS18B20 рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкреВрд░реНрдг рд▓реЗрдЦ, рд╣рдо рдЙрдирдХреА рдирдХрд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЖрдк рдпрд╣рд╛рдВ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдореЗрдВ рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓реЗрдЦ рдореЗрдВ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ рд╣реА рдХрд░реЗрдВрдЧреЗред рдПрдХ рдорд╣рд╛рди рдкрд╛рдпрдерди рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВред

import os tfile=open("/sys/bus/w1/devices/28-000000d7970b/w1_slave") ttext=tfile.read() tfile.close() temp=ttext.split("\n")[1].split(" ")[9] temperature=float(temp[2:])/1000 print temperature 

рдЕрдкрдиреЗ рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдкрдорд╛рди рддрд╛рдкрдорд╛рди рдЪрд░ (рдЬреЛ рд╕реЛрдЪрд╛ рд╣реЛрдЧрд╛) рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЖрдЧреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд╕рд╛рде рд╕рдордЭреМрддрд╛


рдареАрдХ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ narodmon.ru рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рддрдХ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╕реЗрд╡рд╛ рдПрдкреАрдЖрдИ рд╣рдореЗрдВ рдЯреАрд╕реАрдкреА рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреА рд╣реИред рддреЛ рдЪрд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд╛рда рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 #MAC[#NAME][#LAT][#LNG][#ELE]\n #mac1#value1[#time1][#name1]\n ... #macN#valueN[#timeN][#nameN]\n ## 

рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдореИрдХ, рд╕реЗрдВрд╕рд░ рдХрд╛ рдирд╛рдо рдФрд░ рдЗрд╕рдХреЗ рдореВрд▓реНрдпред рдмрд╛рдХреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣рдореЗрдВ рдЬрд╛рд▓реА, рдореИрдХ рдФрд░ рд▓рд╛рдЗрди рдлреАрдб рдХреИрд░реЗрдХреНрдЯрд░ \ n рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рджреВрд╕рд░реА рдФрд░ рдмрд╛рдж рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рд╣рдо рдлрд┐рд░ рд╕реЗ рдЧреНрд░рд┐рдб, рд╕реЗрдВрд╕рд░ рдирд╛рдо, рдлрд┐рд░ рд╕реЗ рдЧреНрд░рд┐рдб рдФрд░ рд╕реЗрдВрд╕рд░ рд░реАрдбрд┐рдВрдЧ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдкрдВрдХреНрддрд┐рдмрджреНрдз рд╡рд░реНрдг \ n рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЖрдкрдХреЛ рдкреИрдХреЗрдЬ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЧреНрд░рд┐рдб рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд░рд╛рд░реВрдк рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд░рд╣рддрд╛ рд╣реИ:

 #MAC\n #mac1#value1\n #macN#valueN\n ## 

рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдирд╛


рд╣рдо рдкрд╛рдпрдерди 2 рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦреЗрдВрдЧреЗред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ред рд╣рдо рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рддрд╛рдкрдорд╛рди рдЪрд░ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдкреИрдХреЗрдЬ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреАрдкреБрд▓ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВред рд╣рдо рд╣рд░ 10 рдорд┐рдирдЯ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдВрдЧреЗ (рд░реАрдбрд┐рдВрдЧ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЕрдиреБрдордд рдЕрдВрддрд░рд╛рд▓ 5 рдорд┐рдирдЯ рд╣реИ) рдХреНрд░реЛрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред

рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрддрд╛ рд╣реИ (рдирд┐рдЧрд░рд╛рдиреА рд╕реНрдерд▓ рдкрд░ рдЙрджрд╛рд╣рд░рдг):

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ
 #!/usr/bin/env python2 # -*- coding: utf-8 -*- # by Roman Vishnevsky aka.x0x01 @ gmail.com import socket # MAC  .   ! DEVICE_MAC = '0123456789012' #  ,    01 (02)  mac  SENSOR_ID_1 = DEVICE_MAC + '01' SENSOR_ID_2 = DEVICE_MAC + '02' #  ,  float/integer sensor_value_1 = 20 sensor_value_2 = -20.25 #   sock = socket.socket() #   try: #    sock.connect(('narodmon.ru', 8283)) #       sock.send("#{}\n#{}#{}\n##".format(DEVICE_MAC, SENSOR_ID_1, sensor_value_1)) #       # sock.send("#{}\n#{}#{}\n#{}#{}\n##".format(DEVICE_MAC, SENSOR_ID_1, sensor_value_1, SENSOR_ID_2, sensor_value_2)) #   data = sock.recv(1024) sock.close() print data except socket.error, e: print('ERROR! Exception {}'.format(e)) 


рд╣рдо рд╕рд░реНрд╡рд░ narodmon.ru:8283 рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд▓рддреА рд╣реИ:

рддреИрдпрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдХреЛрдб
 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import socket import os import fnmatch # MAC  .   ! DEVICE_MAC = 'FF:FF:FF:FF:FF:FF' #  SENSOR_ID_1 = 'T1' SENSOR_ID_2 = 'T2' #   temperature = [] IDs = [] for filename in os.listdir("/sys/bus/w1/devices"): if fnmatch.fnmatch(filename, '28-031652ddbdff'): with open("/sys/bus/w1/devices/" + filename + "/w1_slave") as fileobj: lines = fileobj.readlines() if lines[0].find("YES"): pok = lines[1].find('=') temperature.append(float(lines[1][pok+1:pok+7])/1000) IDs.append(filename) else: logger.error("Error reading sensor with ID: %s" % (filename)) temperature2 = [] for filename in os.listdir("/sys/bus/w1/devices"): if fnmatch.fnmatch(filename, '28-011563e8d2ff'): with open("/sys/bus/w1/devices/" + filename + "/w1_slave") as fileobj: lines = fileobj.readlines() if lines[0].find("YES"): pok = lines[1].find('=') temperature2.append(float(lines[1][pok+1:pok+7])/1000) IDs.append(filename) else: logger.error("Error reading sensor with ID: %s" % (filename)) sock = socket.socket() # try: sock.connect(('narodmon.ru', 8283)) # ,        sock.send("#{}\n#{}#{}\n#{}#{}\n##".format(DEVICE_MAC, SENSOR_ID_1, str(temperature)[1:-1], SENSOR_ID_2, str(temperature2)[1:-1])) #  data=sock.recv(1024) sock.close() print data except socket.error, e: print('ERROR! Exception {}'.format(e)) print str(temperature)[1:-1] print str(temperature2)[1:-1] 


рдпрд╣ рдХреИрд╕реЗ рджреЛ рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕реЗрдВрд╕рд░ рдХреЛ рдЯреА рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╕рд░реНрд╡рд░ рд╕реНрд╡рдпрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░ рд╣реИред

рдЕрдм рд╣рдореЗрдВ рд╕реЗрдВрд╕рд░ рдХреЛ рдХреНрд░реЛрди рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ: crontab -e рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:

 */10 * * * * sudo python /home/pi/narod.py 

рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЪрд▓рдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЕрдм рд╣рдо рдпрд╣рд╛рдВ narodmon.ru/ip рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рд╣реБрдЖ рдерд╛ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ, рддреЛ рдореЗрдиреВ рдореЗрдВ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ "рдбрд┐рд╡рд╛рдЗрд╕ рдЬреЛрдбрд╝реЗрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдореИрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдЕрдм рд╣рдо рд╕реНрд╡рд╛рдж (рдирд╛рдо, рдкреНрд░рдХрд╛рд░, рд╕реНрдерд╛рди рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЧрд╡рд╛рд╣реА рдкреНрд░рд╕рд╛рд░рдг рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдПрдХ рджрд┐рди рдмрд╛рдж рдЖрдк рд╕реЗрдВрд╕рд░ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╣ рд╕рдм рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рд╕реЗрдВрд╕рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╢реБрднрдХрд╛рдордирд╛рдПрдВ рджреЗрддрд╛ рд╣реВрдВред рдЗрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рд╕ рд╕реНрдерд╛рди рдкрд░ рдЖрдк рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рддрд╛рдкрдорд╛рди рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рджреЗрдЦрдирд╛ рдШрд░ рд╕реЗ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдлрд┐рд░ рдорд┐рд▓реЗрдВрдЧреЗ :)

Source: https://habr.com/ru/post/hi401313/


All Articles