рд╣рдо Redmond G200S рдХреЗрддрд▓реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ HomeAssistant рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рд░реЗрдбрдХрдВрдб рд╕реНрдХрд╛рдЗрдХреЗрдЯрд▓ рдХреЗрддрд▓реА рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдЧреАрдХрдЯрд╛рдЗрдо рдкрд░ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд▓реЗрдЦ рдЖ рдЪреБрдХрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╣рд╛рдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЖрд░рдХреЗ-рдПрдо 171 рдПрд╕ рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЬреА 200 рдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдореЙрдбрд▓ рдореЗрдВ, рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд▓реЗрдЦрдХ рдХрд╛ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╛рдд рдХреЗ рдкреНрд░рдХрд╛рд╢ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд░рдВрдЧ рдХреЗ рд╡рд░реНрддрдорд╛рди рддрд╛рдкрдорд╛рди рдкреНрд░рджрд░реНрд╢рди рджрд┐рдЦрд╛рдИ рджрд┐рдП рд╣реИрдВред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЕрдЬрдЧрд░ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдВрдЧрд╛ (рдпрджрд┐ рдХреЛрдИ рдЪрд╛рдпрджрд╛рдиреА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ / рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ HomeAssistant рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд╛рдпрджрд╛рдиреА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд▓рд┐рдВрдХ рд╣реИ (рдпрд╣ рдСрдирд▓рд╛рдЗрди рдкрд╛рдареНрдпрдХреНрд░рдо рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж рдЕрдЬрдЧрд░ рдореЗрдВ рд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ)ред

рд╣рд░ рдХреЛрдИ рдЬреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реИ, рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛рдПрдВ рдФрд░ рдХрд╛рд░реНрдп


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

рдЙрдкрдХрд░рдг


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

рдЪреВрдБрдХрд┐ HomeAssistant рдХреЛ рдЕрдЬрдЧрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕ рдкрд░ рдЖрдЧреЗ рдХреЗ рд╕рднреА рдХрдорд╛рдВрдб рд▓рд┐рдЦреЗрдВрдЧреЗред рдЕрдЬрдЧрд░ рдореЗрдВ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЧреИрдЯрдЯреВрд▓ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, pexpect рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧреА, рдЬреЛ рдЖрдкрдХреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рд░ рдХреЛ рд╕реНрдкреЙрди рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рдЖрдЙрдЯрдкреБрдЯ (рдкреНрд░рд╕рд┐рджреНрдз рддреБрд▓рд╛) рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

рдЕрднреНрдпрд╛рд╕


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

  1. рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╡рд┐рдпреЛрдЧ

    рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

    child = pexpect.spawn("gatttool -I -t random -b " + mac, ignore_sighup=False) child.expect(r'\[LE\]>', timeout=3) child.sendline("connect") child.expect(r'Connection successful.*\[LE\]>', timeout=3) 

    рдпрд╣рд╛рдБ рдореИрдХ рдЪрд╛рдпрджрд╛рдиреА рдХрд╛ рдЦрд╕рдЦрд╕ тАЛтАЛрд╣реИред

    рд╣рдо рдХрдиреЗрдХреНрд╢рди рддреЛрдбрд╝рддреЗ рд╣реИрдВ:

     child.sendline("exit") 
  2. рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ

    рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдХреЗрддрд▓реА рд╕реЗ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдЪрд╛рдпрджрд╛рдиреА рдХрдорд╛рдВрдб рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрдВ "рд╕рдлрд▓" рдкрд╛рда рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

     child.sendline("char-write-cmd 0x000c 0100") child.expect(r'\[LE\]>') 
  3. рдкреНрд░рд╛рдзрд┐рдХрд░рдг

     child.sendline("char-write-req 0x000e 55" + iter + "ff" + key + "aa") child.expect("value: ") child.expect("\r\n") connectedStr = child.before[0:].decode("utf-8") answer = connectedStr.split()[3] # parse: 00 - no 01 - yes child.expect(r'\[LE\]>') 

    рдЗрд╕рдХреЗ рдмрд╛рдж, iter 0 рд╕реЗ 64 (рджрд╢рдорд▓рд╡ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ 0 рд╕реЗ 100 рддрдХ) рдХрд╛ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╖рдЯреН рдЪрд░ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЖрджреЗрд╢ рдХреЗ рдмрд╛рдж (рджреЛрдиреЛрдВ рд╕рдлрд▓ рдФрд░ рдЕрд╕рдлрд▓), рдЗрд╕ рдЪрд░ рдХреЛ 1 рд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рдЬрдм рдпрд╣ 64 рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ 0 рдкрд░ рд░реАрд╕реЗрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдХреБрдВрдЬреА - рд╣реЗрдХреНрд╕ 8 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреБрдВрдЬреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: ffffffffffffffff)ред

    рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
    рдореВрд▓реНрдп: 55 00 рдПрдлрдПрдл 01 рдЖ
    рдЪреМрдереЗ рдмрд╛рдЗрдЯ (01) рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЗрддрд▓реА рдиреЗ рдЖрдкрдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд┐рдпрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЙрддреНрддрд░ 00 рд╣реЛрдЧрд╛ред
  4. рдХреБрдЫ рд╕реНрдЯреНрд░реАрдЯ рдореИрдЬрд┐рдХ
    рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж, рдПрдХ "рдЬрд╛рджреВ" рдЕрдиреБрд░реЛрдз рд╣рдореЗрд╢рд╛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╕рд╛рд░ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИ рдХрд┐ рдЬреБрдбрд╝реЗ рд╣реБрдП рд░рд╛рдЬреНрдп рдХреЛ "рдкрдХрдбрд╝" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрдерд┐рдд рддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдирд╣реАрдВ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдпреЛрдЧ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рднреАрддрд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛рдлреА рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ, рд▓рдЧрднрдЧ рдПрдХ рджрд░реНрдЬрди рд╕реЗрдХрдВрдб рддрдХред рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐, рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред

     child.sendline("char-write-req 0x000e 55" + iter + "01aa") child.expect("value: ") child.expect("\r\n") child.expect(r'\[LE\]>') 

    рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
    рдорд╛рди: 55 01 01 02 1d рдЖ

    рдореЗрд░реЗ рд╕рднреА рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдЙрддреНрддрд░ рд╣рдореЗрд╢рд╛ рдпрд╣реА рд░рд╣рд╛ рд╣реИред

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

     child.sendline("char-write-req 0x000e 55" + iter + "6e" + timeNow + tmz + "0000aa") child.expect("value: ") child.expect("\r\n") child.expect(r'\[LE\]>') 

    рдпрд╣рд╛рдБ tmz рд░рд┐рд╡рд░реНрд╕ рд╣реЗрдХреНрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдордп рдХреНрд╖реЗрддреНрд░ +3 рд╕реЗрдХрдВрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ, рдлрд┐рд░ рд╣реЗрдХреНрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдФрд░ рд╣реЗрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (3 * 60 * 60) = 2a30, рдЬреЛрдбрд╝реЗ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ 302a рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВ)ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдордп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд▓рд╛ tmz рдмрд╛рдЗрдЯ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣рд╛рдВ рдЯрд╛рдЗрдордЕрди рд░рд┐рд╡рд░реНрд╕ рд╣реЗрдХреНрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдпреВрдирд┐рдХреНрд╕ рд╕рдордп рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рдорд╛рди рд╣реИ: рд╣рдореЗрдВ рд╕реЗрдХрдВрдб рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдЪрдИрдПрдХреНрд╕ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ, рдЗрд╕реЗ рдЬреЛрдбрд╝реЗ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВред

    рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
    рдореВрд▓реНрдп: 55 02 6e 00 рдЖ
    рдореЗрд░реЗ рд╕рднреА рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдЙрддреНрддрд░ рд╣рдореЗрд╢рд╛ рдпрд╣реА рд░рд╣рд╛ рд╣реИред
  6. рдЖрдВрдХрдбрд╝реЗ
    рдХреЗрддрд▓реА рдореЗрдВ рдЦрдкрдд рдмрд┐рдЬрд▓реА рдХрд╛ рдореАрдЯрд░, рдХреБрд▓ рдкрд░рд┐рдЪрд╛рд▓рди рд╕рдордп рдФрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдЖрдЗрдЯрдо рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

     child.sendline("char-write-req 0x000e 55" + iter + "4700aa") child.expect("value: ") child.expect("\r\n") statusStr = child.before[0:].decode("utf-8") Watts = hexToDec(str(statusStr.split()[11] + statusStr.split()[10] + statusStr.split()[9])) alltime = round(self._Watts/2200, 1) child.expect(r'\[LE\]>') child.sendline("char-write-req 0x000e 55" + iter + "5000aa") child.expect("value: ") child.expect("\r\n") statusStr = child.before[0:].decode("utf-8") times = hexToDec(str(statusStr.split()[7] + statusStr.split()[6])) child.expect(r'\[LE\]>') 

    рд╡рддреНрд╕ - рдЦрдкрдд рдКрд░реНрдЬрд╛ рдХреЛ Wh * h, рдСрд▓рдЯрд╛рдЗрдо - рдХреЗрддрд▓реА рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рдордп, рд╕рдордп - рдХреЗрддрд▓реА рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред hexToDec - рджрд╢рдорд▓рд╡ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рд░реЛрд╣ред
  7. рдСрдкрд░реЗрд╢рди рдХреЗ рд╡рд░реНрддрдорд╛рди рдореЛрдб рдХреЛ рдкрдврд╝реЗрдВ

     child.sendline("char-write-req 0x000e 55" + iter + "06aa") child.expect("value: ") child.expect("\r\n") statusStr = child.before[0:].decode("utf-8") answer = statusStr.split() status = str(answer[11]) temp = hexToDec(str(answer[8])) mode = str(answer[3]) 

    рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
    рдореВрд▓реНрдп: 55 04 06 00 00 00 01 2a 1e 00 00 00 00 00 00 00 00 00 aa
    рдЪреМрдерд╛ рдмрд╛рдЗрдЯ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб (рдореЛрдб) рд╣реИ: 00 - рдЙрдмрд▓рддреЗ, 01 - рддрд╛рдкрдорд╛рди рдкрд░ рддрд╛рдк, 03 - рд░рд╛рдд рдХрд╛ рдкреНрд░рдХрд╛рд╢ред рдЫрдареА рдмрд╛рдЗрдЯ рд╣реЗрдХреНрд╕ рддрд╛рдкрдорд╛рди рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реАрдЯрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдЧрд░реНрдореА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЙрдмрд▓рддреЗ рдореЛрдб рдореЗрдВ рдпрд╣ 00 рд╣реИред рдиреМрд╡рд╛рдВ рдмрд╛рдЗрдЯ рд╡рд░реНрддрдорд╛рди рдкрд╛рдиреА рдХрд╛ рддрд╛рдкрдорд╛рди (2 рдП = 42 рд╕реЗрд▓реНрд╕рд┐рдпрд╕) рд╣реИред рдмрд╛рд░рд╣рд╡реАрдВ рдмрд╛рдЗрдЯ рдЪрд╛рдпрджрд╛рдиреА рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ: 00 - рдСрдл, 02 - рдСрдиред рд╕рддреНрд░рд╣ рдмрд╛рдЗрдЯ рд╡рд╛рдВрдЫрд┐рдд рддрд╛рдкрдорд╛рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдХреЗрддрд▓реА рдХреА рдЕрд╡рдзрд┐ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рд╣реЗрдХреНрд╕ рдореЗрдВ 80 рд╣реИ (рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдЗрдХрд╛рдЗрдпрд╛рдВ рд╣реИрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдХрдВрдб рдирд╣реАрдВ)ред
  8. рдСрдкрд░реЗрд╢рди рдХреА рд╡рд░реНрддрдорд╛рди рдореЛрдб рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВ

     child.sendline("char-write-req 0x000e 55" + iter + "05" + mode + "00" + temp + "00000000000000000000" + howMuchBoil + "0000aa") child.expect("value: ") child.expect("\r\n") statusStr = child.before[0:].decode("utf-8") answer = statusStr.split()[3] child.expect(r'\[LE\]>') 

    рдкреИрд░рд╛рдореАрдЯрд░ рдореЛрдб: 00 - рдЙрдмрд▓рддреЗ, 01 - рддрд╛рдкрдорд╛рди рдкрд░ рд╣реАрдЯрд┐рдВрдЧ, 03 - рд░рд╛рдд рдХрд╛ рдкреНрд░рдХрд╛рд╢ред рдЕрд╕реНрдерд╛рдпреА рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЗрдХреНрд╕ рддрд╛рдкрдорд╛рди рд╣реИ рдЬрд┐рд╕реЗ "рд╣реАрдЯрд┐рдВрдЧ" рдореЛрдб рдореЗрдВ рдЧрд░реНрдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЙрдмрд▓рддреЗ рдореЛрдб рдореЗрдВ рдпрд╣ 00 рд╣реИред рд╡рд╛рдВрдЫрд┐рдд рддрд╛рдкрдорд╛рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рд╣реЙрд╡рдЪреЙрдмрд┐рд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗрддрд▓реА рдХреА рдЕрд╡рдзрд┐ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЗрдХреНрд╕ рдореЗрдВ 80 рд╣реИ (рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдпреЗ рдХреБрдЫ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдЗрдХрд╛рдЗрдпрд╛рдВ рд╣реИрдВред , рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдХрдВрдб рдирд╣реАрдВ)ред

    рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
    рдореВрд▓реНрдп: 55 05 05 01 рдЖ
    рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЪреМрдереА рдмрд╛рдЗрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рд╕рдлрд▓рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ: 01 - рд╕рдлрд▓, 00 - рд╕рдлрд▓ рдирд╣реАрдВред
  9. рдСрдкрд░реЗрд╢рди рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореЛрдб рдЪрд▓рд╛рдПрдВ

     child.sendline("char-write-req 0x000e 55" + iter + "03aa") child.expect("value: ") child.expect("\r\n") statusStr = self.child.before[0:].decode("utf-8") answer = statusStr.split()[3] child.expect(r'\[LE\]>') 

    рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
    рдореВрд▓реНрдп: 55 06 03 01 рдЖ
    рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЪреМрдереА рдмрд╛рдЗрдЯ рд╕рдорд╛рд╡реЗрд╢рди рдХреА рд╕рдлрд▓рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ: 01 - рд╕рдлрд▓, 00 - рд╕рдлрд▓ рдирд╣реАрдВред
  10. рдСрдкрд░реЗрд╢рди рдХреЗ рд╡рд░реНрддрдорд╛рди рдореЛрдб рдХреЛ рд░реЛрдХреЗрдВ

     child.sendline("char-write-req 0x000e 55" + iter + "04aa") child.expect("value: ") child.expect("\r\n") statusStr = self.child.before[0:].decode("utf-8") answer = statusStr.split()[3] child.expect(r'\[LE\]>') 

    рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
    рдореВрд▓реНрдп: 55 07 04 01 рдЖ
    рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЪреМрдереА рдмрд╛рдЗрдЯ рд╢рдЯрдбрд╛рдЙрди рдХреА рд╕рдлрд▓рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ: 01 - рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ, 00 - рдЕрд╕рдлрд▓ред
  11. рдирд┐рд╖реНрдХреНрд░рд┐рдп рд░рдВрдЧ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рддрд╛рдкрдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ

     child.sendline("char-write-req 0x000e 55" + iter + "37c8c8" + onoff + "aa") # 00 - off, 01 - on child.expect("value: ") child.expect("\r\n") child.expect(r'\[LE\]>') 

    рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдирдСрдлрд╝ рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рддреЛ 01 рд╣реИ, рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 00 рд╣реИред

    рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
    рдореВрд▓реНрдп: 55 08 37 00 рдЖ
    рдореЗрд░реЗ рд╕рднреА рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдЙрддреНрддрд░ рд╣рдореЗрд╢рд╛ рдпрд╣реА рд░рд╣рд╛ рд╣реИред
  12. рдСрдкрд░реЗрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рд░рдВрдЧ рдкреИрд▓реЗрдЯ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВ
    рдПрд▓рдИрдбреА рдХреЗ рддрд╛рдкрдорд╛рди рдФрд░ рддрд╛рдкрдорд╛рди рдХреЗ рдмреАрдЪ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд╛ рдПрдХ рдкреИрд▓реЗрдЯ рд╡рд░реНрддрдорд╛рди рддрд╛рдкрдорд╛рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЛрдб рдФрд░ рд╣реАрдЯрд┐рдВрдЧ рдФрд░ рдЙрдмрд▓рддреЗ рдореЛрдб рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд░рд╛рдд рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЛрдб рдореЗрдВ рд░рдВрдЧ рдкреИрд▓реЗрдЯ рднреАред

     child.sendline("char-write-req 0x000e 55" + iter + "32" + boilOrLight + scale_from + rand + rgb1 + scale_mid + rand + rgb_mid + scale_to + rand + rgb2 + "aa") child.expect("value: ") child.expect("\r\n") child.expect(r'\[LE\]>') 

    BoilOrLight рдкреИрд░рд╛рдореАрдЯрд░ 00 рд╣реИ рдпрджрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рддрд╛рдкрдорд╛рди рдХреЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЛрдб рдпрд╛ 01 рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдо рдирд╛рдЗрдЯ рдореЛрдб рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред Scale_from рдкреИрд░рд╛рдореАрдЯрд░ рд░рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд░реЗрдВрдЬ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд╛рдЗрдЯрд▓рд╛рдЗрдЯ рдореЛрдб рдореЗрдВ 00 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рддрд╛рдкрдорд╛рди рдкреНрд░рджрд░реНрд╢рди рдореЛрдб рдореЗрдВ 28 (рджрд╢рдорд▓рд╡ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ 28 40 рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд╛рдкрдорд╛рди рд╕реЗ рд╣реИ рдХрд┐ рдПрдХ рдЪрд┐рдХрдиреА рд░рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред Scale_mid рдкреИрд░рд╛рдореАрдЯрд░ рд░реЗрдВрдЬ рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реИ рдФрд░ рдирд╛рдЗрдЯрд▓рд╛рдЗрдЯ рдореЛрдб рдореЗрдВ 32 рдФрд░ рд╡рд░реНрддрдорд╛рди рддрд╛рдкрдорд╛рди рдкреНрд░рджрд░реНрд╢рди рдореЛрдб рдореЗрдВ 46 рд╣реИред Scale_to рдкреИрд░рд╛рдореАрдЯрд░ рд░рдВрдЧ рд╕реАрдорд╛ рдХреЗ рдЕрдВрдд рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рдореЛрдб рдореЗрдВ 64 рд╣реИред Rgb1 рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрд▓реЗрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рд╣реЗрдХреНрд╕ рд░рдВрдЧ рд╣реИред Rgb_mid рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрд▓реЗрдЯ рдХреЗ рдордзреНрдп рдХрд╛ рд╣реЗрдХреНрд╕ рд░рдВрдЧ рд╣реИ (рдореИрдВ рдЗрд╕реЗ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдЫреЛрд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдордзреНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдк рдХрд┐рд╕реА рднреА рд░рдВрдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХреЗрд╡рд▓ рд░рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рддреАрд╡реНрд░рддрд╛ рдФрд░ рдЪрд┐рдХрдирд╛рдИ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛)ред Rgb2 рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрд▓реЗрдЯ рдХреЗ рдЕрдВрдд рдХрд╛ рд╣реЗрдХреНрд╕ рд░рдВрдЧ рд╣реИред рд░реИрдВрдб рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛, рд╢рд╛рдпрдж рдХрд┐рд╕реА рддрд░рд╣ рд░рдВрдЧ рдХреА рдЪрдордХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг: e5, cc)ред

    рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
    рдореВрд▓реНрдп: 55 09 32 00 рдЖ
    рдореЗрд░реЗ рд╕рднреА рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдЙрддреНрддрд░ рд╣рдореЗрд╢рд╛ рдпрд╣реА рд░рд╣рд╛ рд╣реИред
  13. рдСрдкрд░реЗрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХрд╛ рд░рдВрдЧ рдкреИрд▓реЗрдЯ рдкрдврд╝реЗрдВ

     child.sendline("char-write-req 0x000e 55" + iter + "33" + boilOrLight + "aa") child.expect("value: ") child.expect("\r\n") statusStr = self.child.before[0:].decode("utf-8") child.expect(r'\[LE\]>') 

    BoilOrLight рдкреИрд░рд╛рдореАрдЯрд░ 00 рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдпрджрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рддрд╛рдкрдорд╛рди рдХреЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЛрдб рдпрд╛ 01 рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ - рдЕрдЧрд░ рд╣рдо рд░рд╛рдд рдХрд╛ рдореЛрдб рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

    рдЙрддреНрддрд░ рдЙрджрд╛рд╣рд░рдг:
    рдореВрд▓реНрдп: 55 10 33 01 00 7 рдПрдл 00 00 рдПрдлрдПрдл 32 7 рдПрдл 00 рдПрдлрдПрдл 00 64 7 рдПрдл рдПрдл 00 00 рдПрдП
    рдпрд╣рд╛рдБ, рдЫрдареА, рдЧреНрдпрд╛рд░рд╣рд╡реАрдВ рдФрд░ рд╕реЛрд▓рд╣рд╡реАрдВ рдмрд╛рдЗрдЯреНрд╕ (7f) рдЖрдЗрдЯрдо 12 рд╕реЗ рд░реИрдВрдб рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдкрд╛рдБрдЪрд╡рд╛рдБ рдмрд╛рдЗрдЯ рд╕реНрдХреЗрд▓_рдлреНрд░реЙрдо рд╣реИ, рджрд╕рд╡рд╛рдВ рдмрд╛рдЗрдЯ рд╕реНрдХреЗрд▓_рдорд┐рдб рд╣реИ, рдкрдВрджреНрд░рд╣рд╡рд╛рдБ рдмрд╛рдЗрдЯ рд╕реНрдХреЗрд▓-рдУрдЯреЛ рд╣реИред рд╕рд╛рддрд╡реАрдВ + рдЖрдард╡реАрдВ + рдиреМрд╡реАрдВ рдмрд╛рдЗрдЯреНрд╕ rgb_from рд╣реИрдВред рдмрд╛рд░рд╣рд╡реАрдВ + рддреЗрд░рд╣рд╡реАрдВ + рдЪреМрджрд╣рд╡реАрдВ рдмрд╛рдЗрдЯреНрд╕ rgb_mid рд╣реИрдВред рд╕рддреНрд░рд╣рд╡реАрдВ + рдЕрдард╛рд░рд╣рд╡реАрдВ + рдЙрдиреНрдиреАрд╕рд╡реАрдВ рдмрд╛рдЗрдЯреНрд╕ - rgb_toред

рдирд┐рд╖реНрдХрд░реНрд╖


рдпрджрд┐ рдЧреИрдЯрдЯреВрд▓ рдЪрд╛рдпрджрд╛рдиреА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ (рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдЕрдЬреНрдЮрд╛рдд рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдВ), рддреЛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд╛рдпрджрд╛рдиреА рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

 sudo hciconfig device reset sudo timeout 1 hcitool lescan 


рдбрд┐рд╡рд╛рдЗрд╕ - рдЖрдкрдХреЗ рдмреНрд▓реВрдЯреВрде рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЖрдИрдбреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, hci0)ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдХреЗрддрд▓реА рдХрд╛ рдЦрд╕рдЦрд╕ тАЛтАЛрдкрд╛рдпрд╛ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж:

 sudo hcitool lewladd mac sudo hcitool lerladd mac 


рдореИрдХ - рдЕрдкрдиреЗ рдЪрд╛рдпрджрд╛рдиреА рдХрд╛ рдореИрдХ рдкрддрд╛

UPD6 : рдХреЗрдЯрд▓реА рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╕реБрдзрд╛рд░:
1. рдордВрдЪ рд╕реЗ рдПрдХреАрдХрд░рдг рдореЛрдб рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛
2. рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ 3 рддрддреНрд╡ рд╣реЛрдВрдЧреЗ: рдПрдХ рд╡реЙрдЯрд░ рд╣реАрдЯрд░ (рд╡рд░реНрддрдорд╛рди рддрд╛рдкрдорд╛рди, рд▓рдХреНрд╖реНрдп рддрд╛рдкрдорд╛рди, рдЙрдмрд▓рддреЗ рдФрд░ рд╣реАрдЯрд┐рдВрдЧ), рдПрдХ рд╕реЗрдВрд╕рд░ (рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рдордп, рдКрд░реНрдЬрд╛ рдЦрд░реНрдЪ, рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдШрдВрдЯреЗ, рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛) рдФрд░ рдкреНрд░рдХрд╛рд╢ (рдПрдХ рдирд╛рдЗрдЯ рд▓реИрдВрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдкрдирд╛ рд░рдВрдЧ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ) рдмреИрдХрд▓рд╛рдЗрдЯ)
3. рдореЙрдбреНрдпреВрд▓ рдЕрдм GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред
4. рдореЙрдбреНрдпреВрд▓ рдПрдЪрдПрд╕реАрдПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
5. рд╡рд┐рдиреНрдпрд╛рд╕ рдЙрджрд╛рд╣рд░рдг:
 r4s_kettler: device: 'hci0' mac: 'FF:FF:FF:FF:FF:FF' password: 'ffffffffffffffff' 


рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
рдЫрд╡рд┐
рдЫрд╡рд┐
рдЫрд╡рд┐
рдЫрд╡рд┐


UPD7 : рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣рдЯрд╛ рджреА рдЧрдИ

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


All Articles