рд╣рдо ds18b20 рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде Zigbee рд░рд┐рд▓реЗ Sonoff BASICZBR3 рдХреЗ рд▓рд┐рдП Z-Stack 3.0 рдкрд░ TI cc2530 рдХреЗ рд▓рд┐рдП рдлрд░реНрдорд╡реЗрдпрд░ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ



рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реА рднрд╛рд╖рд╛ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬреНрдЮрд╛рди рд╣реИ, Zigbee рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирддрд╛ рд╣реИ, cc2530 рдЪрд┐рдк, рдЗрд╕реЗ рдЪрдордХрд╛рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ, рдФрд░ zigbee2mqtt рдЬреИрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рднреА рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдУ рдпрд╛ https://myzigbee.ru рдФрд░ https://www.zigbee2mqtt.io/ рдкрд░ рдкрдврд╝реЗрдВ ред
рд▓реЗрдЦ рдХреЛ рдкрд╣рд▓реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдзреАрд░реЗ-рдзреАрд░реЗ рддреНрд╡рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдирд╣реАрдВ рд░реБрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдкреНрдд рд▓реЗрдЦ рдХреЛрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рддрд░реНрдХ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдмрд╕ рдлрд░реНрдорд╡реЗрдпрд░ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝реЗрдВред

рддреИрдпрд╛рд░ рдлрд░реНрдорд╡реЗрдпрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб

рдХреЛрдб рдФрд░ рд╡рд┐рдХрд╛рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрджрд░реНрд╢ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред "рдореИрдВ рдПрдХ рдЬрд╛рджреВрдЧрд░ рдирд╣реАрдВ рд╣реВрдВ, рдореИрдВ рд╕рд┐рд░реНрдл рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВред"

рдЙрджреНрджреЗрд╢реНрдп


рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдпрд╣ рд╕рдордЭрдирд╛ рд╣реИ рдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЬреЗрдб-рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рдлрд░реНрдорд╡реЗрдпрд░ рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рддреИрдпрд╛рд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ ( рд╕реЛрдирдСрдл BASICZBR3 рд░рд┐рд▓реЗ рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ ) рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп ds18b20 рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╢реБрд░реБрдЖрддреА Zigbee рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ Z-Stack рдкрд░ TI cc2530 рдЪрд┐рдк рдХреЗ рд▓рд┐рдП рдлрд░реНрдорд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

1. рддреИрдпрд╛рд░реА


рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬреЗрдб-рд╕реНрдЯреИрдХ 3.0.2 рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рдлрд░реНрдорд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд╕рдбреАрдХреЗ рд╣реИред
рдЖрдкрдХреЛ 8051 рдХреЗ рд▓рд┐рдП рдЖрдИрдПрдЖрд░ рдПрдВрдмреЗрдбреЗрдб рд╡рд░реНрдХрдмреЗрдВрдЪ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдорд╛рд╣реМрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯреАрдЖрдИ cc2530 рдЪрд┐рдкреНрд╕ рдХреЗ рд╕рдВрдХрд▓рди рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдХреА рдирд┐: рд╢реБрд▓реНрдХ рдЕрд╡рдзрд┐ 1 рдорд╣реАрдиреЗ рд╣реИ (рд▓реЗрдХрд┐рди рд╕рд╛рдзрдХ рдПрдХ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдвреЗрдЧрд╛)ред

рд╡рд┐рдХрд╛рд╕ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореИрдВ CCDebugger рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ - рдпрд╣ рди рдХреЗрд╡рд▓ cc2531 / cc2530 рдЪрд┐рдкреНрд╕ рдХреЛ рдлреНрд▓реИрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ IAR рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреАрдмрдЧрд┐рдВрдЧ рднреА рдХрд░рддрд╛ рд╣реИред



рдкреНрд░рдпреЛрдЧреЛрдВ, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдбреЗрдмреЛрд░реНрдб рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд cc2530 рдореЙрдбреНрдпреВрд▓ рдкрд░ рдХрд░рддрд╛ рд╣реВрдВ:



2. рдПрдХ рдирдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдирд╛


рд╣рдо GenericApp рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдореВрд▓ рдЬреЗрдб-рд╕реНрдЯреИрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣ Z-Stack 3.0.2 \ Projects \ zstack \ HomeAutomation \ GenericApp рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
рд╣рдо рдЗрд╕реЗ рдкрд╛рд╕ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, DIYRuZRT (рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ) рдХреЗ рд▓рд┐рдПред

CC2530DB рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ:

  • GenericApp.ewd - C-SPY рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕
  • GenericApp.ewp - рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓
  • GenericApp.eww - рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░

DIYRuZRT.eww рдФрд░ DIYRuZRT.ewp рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред

рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ (рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рд╕рд╣рд┐рдд) рдХреЗ рдЕрдВрджрд░, рд╣рдо рд╕рднреА рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЬреЗрдиреЗрд░рд┐рдХрдПрдк рд╕реЗ рдмрджрд▓рдХрд░ DIYRuZRT рднреА рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм IAR рдореЗрдВ DIYRuZRT.ewp рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВред рд╣рдо рд░рд╛рдЙрдЯрд░рдИрдмреА рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред



RouterEB рдлрд╝реЛрд▓реНрдбрд░ CC2530DB рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ DIYRuZRT.d51 рдлрд╝рд╛рдЗрд▓ EXE рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА - рдпрд╣ рдлрд╝рд╛рдЗрд▓ IAR рд╕реЗ рдЪрдордХрддреА рдФрд░ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдореЗрдВ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рд╕реНрдорд╛рд░реНрдЯрдЖрд░рдПрдл рдлреНрд▓реИрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреНрд▓реИрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЙрдЯрдкреБрдЯ рдЯреИрдм рдкрд░ рд▓рд┐рдВрдХ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓реЗрдВ:



рдЙрд╕рдХреЗ рдмрд╛рдж, DIYRuZRT.hex рдлрд░реНрдорд╡реЗрдпрд░ рдлрд╝рд╛рдЗрд▓ EXE рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдЬреЛ рдЕрдиреНрдп рдЯреВрд▓ рдФрд░ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдЪрдордХрддреА рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ ред
рд▓реЗрдХрд┐рди рдЗрд╕ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбрд┐рд╡рд╛рдЗрд╕ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЦреИрд░, рд╣рдо рд╕рдордЭреЗрдВрдЧреЗред

3. рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдПрдХ рд╕рд╛


Zigbee рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рд╣реИрдВ:

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

рдЬрд╝рд┐рдЧрдмреА рдХреНрд▓рд╕реНрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░, рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕, рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ рдорд╛рдирдХреАрдХреГрдд рд╣реИрдВред рд▓реЗрдХрд┐рди рдирд┐рд░реНрдорд╛рддрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдгреЛрдВ рдФрд░ рдЯреАрдореЛрдВ рдХреЗ рд╕рд╛рде, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреБрдЫ рджрдпрдиреАрдп рдирд┐рд░реНрдорд╛рддрд╛ рдорд╛рдирдХреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдирдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рдЖрдкрдХреЛ рдЙрдирдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред рдЬреЗрдб-рд╕реНрдЯреИрдХ

рд╢рдмреНрджрд╛рд╡рд▓реА рдХреА рдЕрдкрдиреА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рднреА рд╣реИрдВ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • OSAL (рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рд▓реЗрдпрд░) - рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдмреНрд╕реНрдЯреНрд░рдХреНрд╢рди рд▓реЗрд╡рд▓ред рдпрд╣рд╛рдВ рд╡реЗ рдХрд╛рд░реНрдпреЛрдВ (рдХрд╛рд░реНрдпреЛрдВ), рд╕рдВрджреЗрд╢ (рд╕рдВрджреЗрд╢), рдШрдЯрдирд╛рдУрдВ (рдШрдЯрдирд╛рдУрдВ), рдЯрд╛рдЗрдорд░ (рдЯрд╛рдЗрдорд░) рдФрд░ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
  • рдПрдЪрдПрдПрд▓ (рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдПрдмреНрд╕реНрдЯреНрд░реЗрдХреНрд╢рди рд▓реЗрдпрд░) - рдЙрдкрдХрд░рдг рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рдХрд╛ рд╕реНрддрд░ред рдпрд╣рд╛рдВ рд╡реЗ рдмрдЯрди (рдЪрд╛рдмрд┐рдпрд╛рдБ), рдПрд▓рдИрдбреА (рдПрд▓рдИрдбреА), рдЗрдВрдЯрд░рдкреНрдЯ (рдЗрдВрдЯрд░рдкреНрдЯ) рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдФрд░ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреА рд╣реИред рдкрд░рд┐рдЪрд╛рд▓рди рд╕реНрддрд░ рдЖрд╡реЗрджрди рддрддреНрд╡реЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдлрд░реНрдорд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕рдм рдЖрдкрдХреЛ рдиреАрдЪреЗ рдФрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред

4. рдЖрдзрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ?


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:

  • OSAL_DIYRuZRT.c тАФ
  • zcl_DIYRuZRT.h тАФ
  • zcl_DIYRuZRT.c тАФ
  • zcl_DIYRuZRT_data.c тАФ ,

OSAL_DIYRuZRT.c - рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рдХреЛрдВ (рдХрд╛рд░реНрдп) рдХрд╛ рд╡рд┐рд╡рд░рдг pTaskEventHandlerFn рдХрд╛рд░реНрдп рд╣реИ  редrr рдкреЙрдкреБрд▓реЗрдЯреЗрдб рд╣реИ рдФрд░ osalInitTasks initialization function рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рдЗрди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдХрд╛рд░реНрдп рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреА рд╕реВрдЪреА pTaskEventHandlerFn рдХрд╛рд░реНрдп A r r рдлрд╝рдВрдХреНрд╢рди рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдмрд╛рдж рд╣реИред рдХреБрдЫ рдХрд╛рд░реНрдп рд╕рдВрдЧрдд рд╕рдВрдХрд▓рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЬреБрдбрд╝реЗ / рдХрд╛рдЯреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдЖрдк рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рддреАрдХреЛрдВ рд╕рдВрдХрд▓рдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕рдВрдХрд▓рди рдирд┐рд░реНрджреЗрд╢ рджреЗрдЦ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



const pTaskEventHandlerFn tasksArr[] = {
  macEventLoop,
  nwk_event_loop,
#if !defined (DISABLE_GREENPOWER_BASIC_PROXY) && (ZG_BUILD_RTR_TYPE)
  gp_event_loop,
#endif  
  Hal_ProcessEvent,
#if defined( MT_TASK )
  MT_ProcessEvent,
#endif
  APS_event_loop,
#if defined ( ZIGBEE_FRAGMENTATION )
  APSF_ProcessEvent,
#endif
  ZDApp_event_loop,
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
  ZDNwkMgr_event_loop,
#endif
  //Added to include TouchLink functionality
  #if defined ( INTER_PAN )
    StubAPS_ProcessEvent,
  #endif
  // Added to include TouchLink initiator functionality
  #if defined ( BDB_TL_INITIATOR )
    touchLinkInitiator_event_loop,
  #endif
  // Added to include TouchLink target functionality
  #if defined ( BDB_TL_TARGET )
    touchLinkTarget_event_loop,
  #endif
  zcl_event_loop,
  bdb_event_loop,
  zclDIYRuZRT_event_loop
};

osalInitTasks рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯ-рдЕрдк рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред

рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреНрд░рдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХрд╛ рдЕрдкрдирд╛ рдирдВрдмрд░ рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рдореЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рдЖрджреЗрд╢ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ tasksArr рд╕рд░рдгреА , рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

void osalInitTasks( void )
{
  uint8 taskID = 0;

  tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
  osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));

  macTaskInit( taskID++ );
  nwk_init( taskID++ );
#if !defined (DISABLE_GREENPOWER_BASIC_PROXY) && (ZG_BUILD_RTR_TYPE)
  gp_Init( taskID++ );
#endif
  Hal_Init( taskID++ );
#if defined( MT_TASK )
  MT_TaskInit( taskID++ );
#endif
  APS_Init( taskID++ );
#if defined ( ZIGBEE_FRAGMENTATION )
  APSF_Init( taskID++ );
#endif
  ZDApp_Init( taskID++ );
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
  ZDNwkMgr_Init( taskID++ );
#endif
  // Added to include TouchLink functionality
#if defined ( INTER_PAN )
  StubAPS_Init( taskID++ );
#endif
// Added to include TouchLink initiator functionality
#if defined( BDB_TL_INITIATOR )
  touchLinkInitiator_Init( taskID++ );
#endif
// Added to include TouchLink target functionality
#if defined ( BDB_TL_TARGET )
  touchLinkTarget_Init( taskID++ );
#endif
  zcl_Init( taskID++ );
  bdb_Init( taskID++ );
  zclDIYRuZRT_Init( taskID );
}

рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдиреЗ рдлрдВрдХреНрд╢рди рд╣реИрдВрдбрд▓рд░ zclDIYRuZRT_event_loop рдФрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдлрдВрдХреНрд╢рди zclDIYRuZRT_Init рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ ред рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреА рдореЗрдВ рдЕрдВрддрд┐рдо рд╕реНрдерд╛рди рдкрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
рдпреЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рджреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╣реИрдВред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди zcl_DIYRuZRT.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ ред

zclDIYRuZRT_Init - рдХрд╛рд░реНрдп рдкрдВрдЬреАрдХрд░рдг рд╕рдорд╛рд░реЛрд╣ред
DIYRuZRT_ENDPOINT - рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛ред

рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрдВрдЬреАрдХрд░рдг рдЪрд░рдг рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдП рдЧрдП рд╣реИрдВ:

  • bdb_RegisterSimpleDescriptor тАФ . SimpleDescriptionFormat_t zclDIYRuZRT_SimpleDesc тАФ , , , . OSAL_DIYRuZRT_data.c
  • zclGeneral_RegisterCmdCallbacks тАФ zclGeneral_AppCallbacks_t zclDIYRuZRT_CmdCallbacks тАФ , .
  • zcl_registerAttrList тАФ zclAttrRec_t zclDIYRuZRT_Attrs тАФ , .
  • zcl_registerForMsg - рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд░рд╕реАрдж рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред
  • RegisterForKeys - рд╣рдо рдмрдЯрди рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддреЗ рд╣реИрдВред

/*********************************************************************
 * SIMPLE DESCRIPTOR
 */
// This is the Cluster ID List and should be filled with Application
// specific cluster IDs.
const cId_t zclDIYRuZRT_InClusterList[] =
{
  ZCL_CLUSTER_ID_GEN_BASIC,
  ZCL_CLUSTER_ID_GEN_IDENTIFY,
  
  // DIYRuZRT_TODO: Add application specific Input Clusters Here. 
  //       See zcl.h for Cluster ID definitions
  
};
#define ZCLDIYRuZRT_MAX_INCLUSTERS   (sizeof(zclDIYRuZRT_InClusterList) / sizeof(zclDIYRuZRT_InClusterList[0]))


const cId_t zclDIYRuZRT_OutClusterList[] =
{
  ZCL_CLUSTER_ID_GEN_BASIC,
  
  // DIYRuZRT_TODO: Add application specific Output Clusters Here. 
  //       See zcl.h for Cluster ID definitions
};
#define ZCLDIYRuZRT_MAX_OUTCLUSTERS  (sizeof(zclDIYRuZRT_OutClusterList) / sizeof(zclDIYRuZRT_OutClusterList[0]))


SimpleDescriptionFormat_t zclDIYRuZRT_SimpleDesc =
{
  DIYRuZRT_ENDPOINT,                  //  int Endpoint;
  ZCL_HA_PROFILE_ID,                     //  uint16 AppProfId;
  // DIYRuZRT_TODO: Replace ZCL_HA_DEVICEID_ON_OFF_LIGHT with application specific device ID
  ZCL_HA_DEVICEID_ON_OFF_LIGHT,          //  uint16 AppDeviceId; 
  DIYRuZRT_DEVICE_VERSION,            //  int   AppDevVer:4;
  DIYRuZRT_FLAGS,                     //  int   AppFlags:4;
  ZCLDIYRuZRT_MAX_INCLUSTERS,         //  byte  AppNumInClusters;
  (cId_t *)zclDIYRuZRT_InClusterList, //  byte *pAppInClusterList;
  ZCLDIYRuZRT_MAX_OUTCLUSTERS,        //  byte  AppNumInClusters;
  (cId_t *)zclDIYRuZRT_OutClusterList //  byte *pAppInClusterList;
};


zclDIYRuZRT_event_loop - рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд┐рд╕реНрдЯрдо рдИрд╡реЗрдВрдЯ рдХреЛ рд▓реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  • ZCL_INCOMING_MSG - рдЙрдкрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдЖрджреЗрд╢ zclDIYRuZRT_ProcessIncomingMicg рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
  • KEY_CHANGE - рдмрдЯрди рдХреНрд▓рд┐рдХ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ zclDIYRuZRT_HandleKeys рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред
  • ZDO_STATE_CHANGE - рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдерд┐рддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдИрд╡реЗрдВрдЯред

  if ( events & SYS_EVENT_MSG )
  {
    while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( zclDIYRuZRT_TaskID )) )
    {
      switch ( MSGpkt->hdr.event )
      {
        case ZCL_INCOMING_MSG:
          // Incoming ZCL Foundation command/response messages
          zclDIYRuZRT_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt );
          break;

        case KEY_CHANGE:
          zclDIYRuZRT_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
          break;

        case ZDO_STATE_CHANGE:
          zclDIYRuZRT_NwkState = (devStates_t)(MSGpkt->hdr.status);

          // now on the network
          if ( (zclDIYRuZRT_NwkState == DEV_ZB_COORD) ||
               (zclDIYRuZRT_NwkState == DEV_ROUTER)   ||
               (zclDIYRuZRT_NwkState == DEV_END_DEVICE) )
          {
            giGenAppScreenMode = GENERIC_MAINMODE;
            zclDIYRuZRT_LcdDisplayUpdate();
          }
          break;

        default:
          break;
      }

      // Release the memory
      osal_msg_deallocate( (uint8 *)MSGpkt );
    }

рдЕрдЧрд▓рд╛ рд╡рд┐рд╢реЗрд╖ рдЗрд╡реЗрдВрдЯ DIYRuZRT_EVT_1 рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИ , рдЬреЛ рдПрд▓рдИрдбреА HAL_LED_2 рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реА рдШрдЯрдирд╛ рдХреЗ рд╕рд╛рде 500 рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ LED HAL_LED_2 рдХреЗ рдлрд╝реНрд▓реИрд╢рд┐рдВрдЧ рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ ред

  if ( events & DIYRuZRT_EVT_1 )
  {
    // toggle LED 2 state, start another timer for 500ms
    HalLedSet ( HAL_LED_2, HAL_LED_MODE_TOGGLE );
    osal_start_timerEx( zclDIYRuZRT_TaskID, DIYRuZRT_EVT_1, 500 );
    
    return ( events ^ DIYRuZRT_EVT_1 );
  }

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдлрд░реНрдорд╡реЗрдпрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ HAL_KEY_SW_1 рдИрд╡реЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЯрд╛рдЗрдорд░ рдФрд░ DIYRuZRT_EVT_1 рдИрд╡реЗрдВрдЯ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдФрд░ рдпрджрд┐ рдЖрдк рдПрд╕ 2 рдмрдЯрди рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкрд▓рдХ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧреА (рдореЗрд░реА рдПрд▓рдИрдбреА рдЪрд╛рд▓реВ рд░рд╣рддреА рд╣реИ)ред рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рджрдмрд╛рдиреЗ рдкрд░ рдлреНрд▓реИрд╢ рд╣реЛрдиреЗ рд▓рдЧреЗрдЧрд╛ред

5. рдПрдЪрдПрдПрд▓: рдПрд▓рдИрдбреА рдФрд░ рдмрдЯрди


"рд░реБрдХреЛ, рдЬреЛ рдПрд▓рдИрдбреА рдФрд░ рдмрдЯрди?", рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, Z-stack рдореЗрдВ рд╕рднреА рдЙрджрд╛рд╣рд░рдг SmartRF05 EB рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рдмрдЧ рдмреЛрд░реНрдб рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИрдВ:



рдореЗрд░реЗ рдкрд╛рд╕ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдбрд┐рдмрдЧ рдмреЛрд░реНрдб рдФрд░ рдПрдХ рдЪрд┐рдк рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИред

рдмреЛрд░реНрдб рдкрд░ 2 рдмрдЯрди (+ рд░реАрд╕реЗрдЯ) рдФрд░ 3 рдПрд▓рдИрдбреА (+ рдкрд╛рд╡рд░ рдЗрдВрдбрд┐рдХреЗрдЯрд░) рд╣реИрдВред рдпрд╣рд╛рдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ (рдбреА 2) рдЪрдордХрддрд╛ рд╣реИ рдЬрдм рдлрд░реНрдорд╡реЗрдпрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд┐рди, рдбрд╛рдпреЛрдб рдФрд░ рдмрдЯрди рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

  • рдбреА 1 - рдкреА 10
  • рдбреА 2 - рдкреА 11
  • рдбреА 3 - рдкреА 14
  • S2 - P20
  • рдПрд╕ 1 - рдкреА 01

рддреЛ, рдПрдЪрдПрдПрд▓ рдПрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдПрдмреНрд╕реНрдЯреНрд░рдХреНрд╢рди рд▓реЗрдпрд░ рд╣реИ , рдЬреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЕрдореВрд░реНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореИрдХреНрд░реЛрдЬрд╝ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдПрдмреНрд╕реНрдЯреНрд░рдХреНрд╢рди рдЬреИрд╕реЗ рдмрдЯрди 1 рдпрд╛ рдПрд▓рдИрдбреА 2 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ , рдФрд░ рдПрдмреНрд░реАрд╢рди рдФрд░ рдЙрдкрдХрд░рдг рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ HAL_LED_2 рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рд╕рдордЭрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкрд┐рди рдкрд░ рдирд┐рд▓рдВрдмрд┐рдд рд╣реИред

рдЦреЛрдЬ рдХрд░рдиреЗ рд╕реЗ, рд╣рдореЗрдВ hal_led.h рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИ , рдЬрд╣рд╛рдБ рдЗрди рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ HalLedSet рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬрд╣рд╛рдБ рдПрд▓рдИрдбреА рдирдВрдмрд░ рдФрд░ рдореЛрдб рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЕрдВрджрд░, рд╣рд╛рд▓реНрдбрдСрдирдСрдл рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрд▓рдИрдбреА рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдпрд╛ рддреЛ HAL_TURN_ON_LED2 рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИHAL_TURN_OFF_LED2 ред

HAL_TURN_ON_LED2 рдФрд░ HAL_TURN_OFF_LED2 рдореИрдХреНрд░реЛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ hal_board_cfg.h ред рдореИрдХреНрд░реЛрдЬрд╝ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрджрд▓рддреЗ рд╣реИрдВред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ:

#define HAL_TURN_OFF_LED2()       st( LED2_SBIT = LED2_POLARITY (0); )
#define HAL_TURN_ON_LED2()        st( LED2_SBIT = LED2_POLARITY (1); )

рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ LED2_SBIT рдФрд░ LED2_POLARITY рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рд╣реИрдВ :

  /* 2 - Red */
  #define LED2_BV           BV(1)
  #define LED2_SBIT         P1_1
  #define LED2_DDR          P1DIR
  #define LED2_POLARITY     ACTIVE_HIGH

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ LED 2 рдкрд┐рди P1_1 рдкрд░ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕реНрддрд░ рдЙрдЪреНрдЪ рд╣реИред рд▓реЗрдХрд┐рди, рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдмрдЯрди рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдПрд▓рдИрдбреА рдХреЛ рдмрд╛рд╣рд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╕рд╛рде рдпрд╣ рдЪрд╛рд▓реВ рд░рд╣рддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ hal_board_cfg.h рд╣рдо рдмрджрд▓рддреЗ рд╣реИрдВ:

#define LED2_POLARITY     ACTIVE_HIGH

рдкрд░

#define LED2_POLARITY     ACTIVE_LOW

рддрдм рдЬрдм рдЖрдк S2 рдмрдЯрди рджрдмрд╛рддреЗ рд╣реИрдВ рддреЛ рдПрд▓рдИрдбреА рдирд┐рдХрд▓ рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ:

  • рд╣рдорд╛рд░реЗ рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ hal_board_cfg.h рдлрд╝рд╛рдЗрд▓ (Z-Stack 3.0.2 \ Components \ hal \ рд▓рдХреНрд╖реНрдп \ CC2530EB \ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ) рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд╛рдо рджреЗрдВ hal_board_cfg_vYRuZRT.h
  • рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреА рд╣рдорд╛рд░реА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкрд╣рд▓реЗ рд╣реА рдмрдирд╛ рджреЗрдВ (рддрд╛рдХрд┐ рд╕рд╛рдЭрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЫреЛрдбрд╝рдХрд░)ред рд╣рдорд╛рд░реЗ рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ preinclude.h рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдФрд░ рд╡рд╣рд╛рдБ рд▓рд╛рдЗрди рд▓рд┐рдЦреЗрдВ:

#include "hal_board_cfg_DIYRuZRT.h"

  • рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╣реИ - рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ:

$PROJ_DIR$\..\Source\preinclude.h



рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд╣рд▓_рдмреЛрд░реНрдб_cfg_DIYRuZRT.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдФрд░ рд╕рд╛рдЭрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ preinclude.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдХрд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ ред

рдореИрдВрдиреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЙрд╕реА preinclude.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛:

#define SECURE 1
#define TC_LINKKEY_JOIN
#define NV_INIT
#define NV_RESTORE
#define xZTOOL_P1
#define xMT_TASK
#define xMT_APP_FUNC
#define xMT_SYS_FUNC
#define xMT_ZDO_FUNC
#define xMT_ZDO_MGMT
#define xMT_APP_CNF_FUNC
#define LEGACY_LCD_DEBUG
#define LCD_SUPPORTED DEBUG
#define MULTICAST_ENABLED FALSE
#define ZCL_READ
#define ZCL_WRITE
#define ZCL_BASIC
#define ZCL_IDENTIFY
#define ZCL_SCENES
#define ZCL_GROUPS

рдЙрд╕реА рдлрд╛рдЗрд▓ рдореЗрдВ hal_board_cfg_DIYRuZRT.h рд╣рдореЗрдВ S1 рдмрдЯрди рдФрд░ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рд╕реЗрдВрдЯрд░ рдкреНрд░реЗрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг рдорд┐рд▓рддрд╛ рд╣реИ:

/* S1 */
#define PUSH1_BV          BV(1)
#define PUSH1_SBIT        P0_1

/* Joystick Center Press */
#define PUSH2_BV          BV(0)
#define PUSH2_SBIT        P2_0
#define PUSH2_POLARITY    ACTIVE_HIGH

рдпрд╣ рдмреЛрд░реНрдб рдкрд░ рдмрдЯрди рдХреЗ рдкрд┐рди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред

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

/* ----------- Board Initialization ---------- */
#if defined (HAL_BOARD_CC2530EB_REV17) && !defined (HAL_PA_LNA) && \
    !defined (HAL_PA_LNA_CC2590) && !defined (HAL_PA_LNA_SE2431L) && \
    !defined (HAL_PA_LNA_CC2592)

#define HAL_BOARD_INIT()                                         \
{                                                                \
  uint16 i;                                                      \
                                                                 \
  SLEEPCMD &= ~OSC_PD;                       /* turn on 16MHz RC and 32MHz XOSC */                \
  while (!(SLEEPSTA & XOSC_STB));            /* wait for 32MHz XOSC stable */                     \
  asm("NOP");                                /* chip bug workaround */                            \
  for (i=0; i<504; i++) asm("NOP");          /* Require 63us delay for all revs */                \
  CLKCONCMD = (CLKCONCMD_32MHZ | OSC_32KHZ); /* Select 32MHz XOSC and the source for 32K clock */ \
  while (CLKCONSTA != (CLKCONCMD_32MHZ | OSC_32KHZ)); /* Wait for the change to be effective */   \
  SLEEPCMD |= OSC_PD;                        /* turn off 16MHz RC */                              \
                                                                 \
  /* Turn on cache prefetch mode */                              \
  PREFETCH_ENABLE();                                             \
                                                                 \
  HAL_TURN_OFF_LED1();                                           \
  LED1_DDR |= LED1_BV;                                           \
  HAL_TURN_OFF_LED2();                                           \
  LED2_DDR |= LED2_BV;                                           \
  HAL_TURN_OFF_LED3();                                           \
  LED3_DDR |= LED3_BV;                                           \
  HAL_TURN_OFF_LED4();                                           \
  LED4_SET_DIR();                                                \
                                                                 \
  /* configure tristates */                                      \
  P0INP |= PUSH2_BV;                                             \
}

рдпрд╣ рдЗрд╕ рдореИрдХреНрд░реЛ рдореЗрдВ рд╣реИ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдореЛрдб рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп LED2_DDR рдФрд░ рдЕрдиреНрдп рдХреЛ P1DIR рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдЗрд╕ рдкреЛрд░реНрдЯ P1 , рдЪрд╛рд░реНрдЬ рдСрдкрд░реЗрд╢рди рдореЛрдб рдкрд┐рди (рдЗрдирдкреБрдЯ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ) рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ ред рддрджрдиреБрд╕рд╛рд░, LED2_BV рд╕рдВрдЧрдд рдкрд┐рди рдХреЗ 1 рдкреНрд░рддрд┐ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 1 рдмрд┐рдЯ, рдЬреЛ P1_1 рдкрд┐рди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ ) рдкрд░ рд╕реЗрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИ:



рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЛрдб рдХреЛ

"cc253x рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб" рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣реАрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдмрдЯрди рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдмрдЯрди рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ - hal_key.c ред рдпрд╣ рдмрдЯрди рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ HalKeyInit , HalKeyConfig, HalKeyRead , HalKeyPoll ред рдпреЗ рдХрд╛рд░реНрдп рдмрдЯрди рдФрд░ рд░реАрдбрд┐рдВрдЧ рд╡реИрд▓реНрдпреВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдмрдЯрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рддреНрдпреЗрдХ 100ms рдЯрд╛рдЗрдорд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкрд┐рди P2_0 рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдПрдХ рдХреНрд▓рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП, рдПрд▓рдИрдбреА рдмреНрд▓рд┐рдВрдХ рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

6. рд╣рдо рдЕрдкрдиреЗ рд▓рд┐рдП рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ


рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓реЗрдВ zcl_DIYRuZRT.h :

  • 1 рдкрд░ DIYRuZRT_ENDPOINT

рдлрд╝рд╛рдЗрд▓ рдореЗрдВ OSAL_DIYRuZRT_data.c :

  • 1 рдкрд░ DIYRuZRT_DEVICE_VERSION
  • zclDIYRuZRT_ManufacturerName {6, 'D', 'I', 'Y', 'R', 'u', 'Z'} рдкрд░
  • zclDIYRuZRT_ModelId рдкрд░ {9, 'D', 'I', 'Y', 'R', 'u', 'Z', '_', 'R', 'T'}
  • zclDIYRuZRT_DateCode {8, '2', '0', '2', '0', '0', '4', '0', '5'} рдкрд░

рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдХрд┐рд╕реА рднреА рдЪреИрдирд▓ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП (рдХреЗрд╡рд▓ 11 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЯреВрд▓реНрд╕ \ f8wConfig.cfg рдлрд╝рд╛рдЗрд▓ рдореЗрдВ DEFAULT_CHANLIST рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ), рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдорд╛рди рдХреЛ рдмрджрд▓рдХрд░ preinclude.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред рд╣рдо рд╕рдВрдХрд▓рди рдирд┐рд░реНрджреЗрд╢ DISABLE_GREENPOWER_BASIC_PROXY рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП GREENPOWER рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рди рдмрдиреЗред рдПрд▓рд╕реАрдбреА рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдорд░реНрдерди рднреА рдмрдВрдж рдХрд░реЗрдВред




//#define LCD_SUPPORTED DEBUG
#define DISABLE_GREENPOWER_BASIC_PROXY
#define DEFAULT_CHANLIST 0x07FFF800  // ALL Channels

рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб zclDIYRuZRT_Init рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ ред

bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING |
                         BDB_COMMISSIONING_MODE_FINDING_BINDING);

рдЙрд╕рдХреЗ рдмрд╛рдж, рдмрд┐рд▓реНрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдЪрд┐рдк рдореЗрдВ рднрд░реЗрдВ рдФрд░ рд╕рдордиреНрд╡рдпрдХ рдкрд░ рдмрд╛рдБрдзрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдореИрдВ ioBroker.zigbee рдореЗрдВ Zigbee рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рд╣реИ рдХрд┐ рдирдпрд╛ рдХрдиреЗрдХреНрдЯреЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:



рдорд╣рд╛рди, рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рд╛!

7. рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ


рдЕрдм рдЪрд▓реЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:

  • рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдЯрди рдкрд░ рдПрдХ рд▓рдВрдмреЗ рдкреНрд░реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред
  • рдпрджрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдерд╛, рддреЛ рдПрдХ рд▓рдВрдмрд╛ рдкреНрд░реЗрд╕ рдЗрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рд▓рдШреБ рдкреНрд░реЗрд╕ - рдПрд▓рдИрдбреА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИред
  • рдЬрдм рдмрд┐рдЬрд▓реА рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рдж рдбрд┐рд╡рд╛рдЗрд╕ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрд▓рдИрдбреА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдмрдЯрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ DIYRuZRT_HalKeyInit рдлрд╝рдВрдХреНрд╢рди рдХреЛ hal_key.c рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдХреЗ рд╕рдорд╛рди рдмрдирд╛рдпрд╛ , рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдмрдЯрди рдХреЗ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдПред

//    ()
void DIYRuZRT_HalKeyInit( void )
{
  /*      0 */
  halKeySavedKeys = 0;

  PUSH1_SEL &= ~(PUSH1_BV); /*    - GPIO */
  PUSH1_DIR &= ~(PUSH1_BV); /*    -  */
  
  PUSH1_ICTL &= ~(PUSH1_ICTLBIT); /*      */
  PUSH1_IEN &= ~(PUSH1_IENBIT);   /*     */
  
  PUSH2_SEL &= ~(PUSH2_BV); /* Set pin function to GPIO */
  PUSH2_DIR &= ~(PUSH2_BV); /* Set pin direction to Input */
  
  PUSH2_ICTL &= ~(PUSH2_ICTLBIT); /* don't generate interrupt */
  PUSH2_IEN &= ~(PUSH2_IENBIT);   /* Clear interrupt enable bit */
}

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдореИрдХреНрд░реЛ HAL_BOARD_INIT рдлрд╝рд╛рдЗрд▓ hal_board_cfg_DIYRuZRT.h рдореЗрдВ рдЬреБрдбрд╝ рдЧрдИ ред рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ hal_board_cfg_DIYRuZRT.h рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд hal_key рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ :

#define HAL_KEY FALSE

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

osal_start_reload_timer( zclDIYRuZRT_TaskID, HAL_KEY_EVENT, 100);

рдФрд░ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдореЗрдВ, рд╣рдо DIYRuZRT_HalKeyPoll рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ HAL_KEY_EVENT рдШрдЯрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрдВрдЧреЗ :

//  
void DIYRuZRT_HalKeyPoll (void)
{
  uint8 keys = 0;

  //   1 ?
  if (HAL_PUSH_BUTTON1())
  {
    keys |= HAL_KEY_SW_1;
  }
  
  //   2 ?
  if (HAL_PUSH_BUTTON2())
  {
    keys |= HAL_KEY_SW_2;
  }
  
  if (keys == halKeySavedKeys)
  {
    //  -  
    return;
  }
  //        . 
  halKeySavedKeys = keys;

  //     
  OnBoard_SendKeys(keys, HAL_KEY_STATE_NORMAL);
}

HalKeySavedKeys рдЪрд░ рдореЗрдВ рдмрдЯрдиреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рд╣рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХреНрд╖рдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ - рдмрдЯрди рдХреЛ рджрдмрд╛рдиреЗ рдФрд░ рдЬрд╛рд░реА рдХрд░рдирд╛ред

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

//   
static void zclDIYRuZRT_HandleKeys( byte shift, byte keys )
{
  if ( keys & HAL_KEY_SW_1 )
  {
    //       - 5 
    osal_start_timerEx(zclDIYRuZRT_TaskID, DIYRuZRT_EVT_LONG, 5000);
    //  
    updateRelay(RELAY_STATE == 0);
  }
  else
  {
    //     
    osal_stop_timerEx(zclDIYRuZRT_TaskID, DIYRuZRT_EVT_LONG);
  }
}

рдЕрдм рдПрдХ рд▓рдВрдмреА-рдкреНрд░реЗрд╕ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ bdbAttributes.bdbNodeIsOnANetwork рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ

  //  DIYRuZRT_EVT_LONG
  if ( events & DIYRuZRT_EVT_LONG )
  {
    //    
    //      ?
    if ( bdbAttributes.bdbNodeIsOnANetwork )
    {
      //  
      zclDIYRuZRT_LeaveNetwork();
    }
    else 
    {
      //    
      bdb_StartCommissioning(
        BDB_COMMISSIONING_MODE_NWK_FORMATION | 
        BDB_COMMISSIONING_MODE_NWK_STEERING | 
        BDB_COMMISSIONING_MODE_FINDING_BINDING | 
        BDB_COMMISSIONING_MODE_INITIATOR_TL
      );
      //  ,   
      osal_start_timerEx(zclDIYRuZRT_TaskID, DIYRuZRT_EVT_BLINK, 500);
    }
    
    return ( events ^ DIYRuZRT_EVT_LONG );
  }

рд╣рдо рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдПрд▓рдИрдбреА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рд╣рдо рдПрдирд╡реА-рдореЗрдореЛрд░реА рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВрдЧреЗред рдЬрдм рдбрд┐рд╡рд╛рдЗрд╕ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдореЗрдореЛрд░реА рд╕реЗ рдореВрд▓реНрдп рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рдкрдврд╝реЗрдВрдЧреЗред

  //  NVM   RELAY STATE
  if ( SUCCESS == osal_nv_item_init( NV_DIYRuZRT_RELAY_STATE_ID, 1, &RELAY_STATE ) ) {
    //   RELAY STATE  
    osal_nv_read( NV_DIYRuZRT_RELAY_STATE_ID, 0, 1, &RELAY_STATE );
  }
  //   
  applyRelay();

//   
void updateRelay ( bool value )
{
  if (value) {
    RELAY_STATE = 1;
  } else {
    RELAY_STATE = 0;
  }
  //   
  osal_nv_write(NV_DIYRuZRT_RELAY_STATE_ID, 0, 1, &RELAY_STATE);
  //   
  applyRelay();
}
  
//   
void applyRelay ( void )
{
  //  
  if (RELAY_STATE == 0) {
    //    1
    HalLedSet ( HAL_LED_1, HAL_LED_MODE_OFF );
  } else {
    //    1
    HalLedSet ( HAL_LED_1, HAL_LED_MODE_ON );
  }
}

8. рдЕрдм рд╣рдо рдЬрд╝рдЧреАрдмреА рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ


рдЕрдм рддрдХ рд╣рдордиреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЛ рд╕реБрд▓рдЭрд╛ рд▓рд┐рдпрд╛ рд╣реИ - рдмрдЯрди рдХреЗ рд╕рд╛рде рд╣рдо рдПрд▓рдИрдбреА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рд╣рдо Zigbee рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

рд░рд┐рд▓реЗ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЬреЗрдиреЛрдСрдлрд╝ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ ред рд╣рдо рдЬреЗрдирдСрдл рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдЧрдмреА рдХреНрд▓рд╕реНрдЯрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрдврд╝рддреЗ рд╣реИрдВ :





рдпрд╣ рдСрдирдСрдл рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рдСрди, рдСрдл, рдЯреЙрдЧрд▓ рдХрдорд╛рдВрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рд░реНрджреЗрд╢ рдХреЛ preinclude.h рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ :

#define ZCL_ON_OFF

рд╣рдорд╛рд░реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╡рд░реНрдгрди рдореЗрдВ zclDIYRuZRT_Attrs рдореЗрдВ рд╣рдо рдирдИ рдХреНрд▓рд╕реНрдЯрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

  // ***  On/Off  ***
  {
    ZCL_CLUSTER_ID_GEN_ON_OFF,
    { // 
      ATTRID_ON_OFF,
      ZCL_DATATYPE_BOOLEAN,
      ACCESS_CONTROL_READ,
      (void *)&RELAY_STATE
    }
  },
  {
    ZCL_CLUSTER_ID_GEN_ON_OFF,
    {  //  On/Off 
      ATTRID_CLUSTER_REVISION,
      ZCL_DATATYPE_UINT16,
      ACCESS_CONTROL_READ | ACCESS_CLIENT,
      (void *)&zclDIYRuZRT_clusterRevision_all
    }
  },

рд╣рдо рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рд╕рдорд░реНрдерд┐рдд рдЗрдирдХрдорд┐рдВрдЧ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреНрд▓рд╕реНрдЯрд░ zclDIYRuZRT_InClusterList рдХреА рд╕реВрдЪреА рдореЗрдВ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ ред

рдирд┐рдпрдВрддреНрд░рдг рдЖрджреЗрд╢реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, zclDIYRuZRT_CmdCallbacks рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ ред

/*********************************************************************
 *    ZCL 
 */
static zclGeneral_AppCallbacks_t zclDIYRuZRT_CmdCallbacks =
{
  zclDIYRuZRT_BasicResetCB,               // Basic Cluster Reset command
  NULL,                                   // Identify Trigger Effect command
  zclDIYRuZRT_OnOffCB,                    // On/Off cluster commands
  NULL,                                   // On/Off cluster enhanced command Off with Effect
  NULL,                                   // On/Off cluster enhanced command On with Recall Global Scene
  NULL,                                   // On/Off cluster enhanced command On with Timed Off
#ifdef ZCL_LEVEL_CTRL
  NULL,                                   // Level Control Move to Level command
  NULL,                                   // Level Control Move command
  NULL,                                   // Level Control Step command
  NULL,                                   // Level Control Stop command
#endif

рдФрд░ рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
//    OnOff
static void zclDIYRuZRT_OnOffCB(uint8 cmd)
{
  //  ,   
  //    
  afIncomingMSGPacket_t *pPtr = zcl_getRawAFMsg();
  zclDIYRuZRT_DstAddr.addr.shortAddr = pPtr->srcAddr.addr.shortAddr;
  
  // 
  if (cmd == COMMAND_ON) {
    updateRelay(TRUE);
  }
  // 
  else if (cmd == COMMAND_OFF) {
    updateRelay(FALSE);
  }
  // 
  else if (cmd == COMMAND_TOGGLE) {
    updateRelay(RELAY_STATE == 0);
  }
}

рдорд╣рд╛рди, рдЕрдм рд░рд┐рд▓реЗ рдХреЛ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред





рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдЕрдм рд╣рдореЗрдВ рд╕рдордиреНрд╡рдпрдХ рдХреЛ рдПрд▓рдИрдбреА рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдмрдЯрди рдХреЗ рд╕рд╛рде рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВред

рдлрд┐рд░ рд╕реЗ, рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВ:

#define ZCL_REPORTING_DEVICE

рдЕрдм рдПрдХ рдлрдВрдХреНрд╢рди zclDIYRuZRT_ReportOnOff рдмрдирд╛рдПрдВ рдЬреЛ рд╕реНрдЯреЗрдЯрд╕ рдореИрд╕реЗрдЬ рднреЗрдЬрддрд╛ рд╣реИред рдЬрдм рдПрд▓рдИрдбреА рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рд╣рдо рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред

//    
void zclDIYRuZRT_ReportOnOff(void) {
  const uint8 NUM_ATTRIBUTES = 1;

  zclReportCmd_t *pReportCmd;

  pReportCmd = osal_mem_alloc(sizeof(zclReportCmd_t) +
                              (NUM_ATTRIBUTES * sizeof(zclReport_t)));
  if (pReportCmd != NULL) {
    pReportCmd->numAttr = NUM_ATTRIBUTES;

    pReportCmd->attrList[0].attrID = ATTRID_ON_OFF;
    pReportCmd->attrList[0].dataType = ZCL_DATATYPE_BOOLEAN;
    pReportCmd->attrList[0].attrData = (void *)(&RELAY_STATE);

    zclDIYRuZRT_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
    zclDIYRuZRT_DstAddr.addr.shortAddr = 0;
    zclDIYRuZRT_DstAddr.endPoint = 1;

    zcl_SendReportCmd(DIYRuZRT_ENDPOINT, &zclDIYRuZRT_DstAddr,
                      ZCL_CLUSTER_ID_GEN_ON_OFF, pReportCmd,
                      ZCL_FRAME_CLIENT_SERVER_DIR, false, SeqNum++);
  }

  osal_mem_free(pReportCmd);
}

рдЕрдм рд▓реЙрдЧ рдореЗрдВ рд╣рдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдПрд▓рдИрдбреА рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред

9. ds18b20 рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ


рд╕реЗрдВрд╕рд░ рдХрд┐рд╕реА рднреА рдореБрдлреНрдд рдкрд┐рди рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, P2_1 рд╕реЗрдЯ рдХрд░реЗрдВ )ред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реЗрдВрд╕рд░ рдкреЛрд▓рд┐рдВрдЧ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред рд╣рдо рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ - рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдорддрджрд╛рди рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдиреЗрдЯрд╡рд░реНрдХ рд╕рдордиреНрд╡рдпрдХ рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред

рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП ZCL рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрдврд╝реЗрдВред рд╣рдореЗрдВ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░
рддрд╛рдкрдорд╛рди рдорд╛рдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред



рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ 3 рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ 100 рд╕реЗ рдЧреБрдгрд╛ рддрд╛рдкрдорд╛рди рдорд╛рди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рд╣рдо GenOnOff рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ ред рд╕рдордиреНрд╡рдпрдХ рдХреЛ DIYRuZRT_REPORTING_EVT рдИрд╡реЗрдВрдЯ рдкрд░ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ , рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рд╣рдо рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗzclDIYRuZRT_ReportTemp , рдЬреЛ рд╕реЗрдВрд╕рд░ рдХрд╛ рддрд╛рдкрдорд╛рди рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛ред

//   
void zclDIYRuZRT_ReportTemp( void )
{
  //  
  zclDIYRuZRT_MeasuredValue = readTemperature();
  
  const uint8 NUM_ATTRIBUTES = 1;

  zclReportCmd_t *pReportCmd;

  pReportCmd = osal_mem_alloc(sizeof(zclReportCmd_t) +
                              (NUM_ATTRIBUTES * sizeof(zclReport_t)));
  if (pReportCmd != NULL) {
    pReportCmd->numAttr = NUM_ATTRIBUTES;

    pReportCmd->attrList[0].attrID = ATTRID_MS_TEMPERATURE_MEASURED_VALUE;
    pReportCmd->attrList[0].dataType = ZCL_DATATYPE_INT16;
    pReportCmd->attrList[0].attrData = (void *)(&zclDIYRuZRT_MeasuredValue);

    zclDIYRuZRT_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
    zclDIYRuZRT_DstAddr.addr.shortAddr = 0;
    zclDIYRuZRT_DstAddr.endPoint = 1;

    zcl_SendReportCmd(DIYRuZRT_ENDPOINT, &zclDIYRuZRT_DstAddr,
                      ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT, pReportCmd,
                      ZCL_FRAME_CLIENT_SERVER_DIR, false, SeqNum++);
  }

  osal_mem_free(pReportCmd);
}

10. рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдлрд░реНрдорд╡реЗрдпрд░ рдбрд╛рд▓реЛ


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



рдкрд┐рди P0_7 рдкрд░ Redo LED 1 ред рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рд╕реНрддрд░ ACTIVE_HIGH рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рд╣рдо рдкрд┐рди P1_3 рдкрд░ S1 рдмрдЯрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ , рдФрд░ рдЬрд╛рдирдХрд╛рд░реА P1_0 рдкрд░ 2 рдПрд▓рдИрдбреА ред рд╣рдо рдкреА 2 рдкреА 2 рдкрд░ рддрд╛рдкрдорд╛рди рд╕реЗрдВрд╕рд░ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ ред рд╣рдо рдпреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди hal_board_cfg_DIYRuZRT.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ ред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢ HAL_SONOFF рдмрдирд╛рдПрдВрдЧреЗ ред рдпрджрд┐ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реЛрдирдСрдл BASICZBR3 рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдбрд┐рдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдПред

#ifdef HAL_SONOFF
  /* 1 - P0_7  */
  #define LED1_BV           BV(7)
  #define LED1_SBIT         P0_7
  #define LED1_DDR          P0DIR
  #define LED1_POLARITY     ACTIVE_HIGH

  /* 2 - P1_0  */
  #define LED2_BV           BV(0)
  #define LED2_SBIT         P1_0
  #define LED2_DDR          P1DIR
  #define LED2_POLARITY     ACTIVE_LOW
#else
  /* 1 - P1_0  */
  #define LED1_BV           BV(0)
  #define LED1_SBIT         P1_0
  #define LED1_DDR          P1DIR
  #define LED1_POLARITY     ACTIVE_LOW

  /* 2 - P1_1  */
  #define LED2_BV           BV(1)
  #define LED2_SBIT         P1_1
  #define LED2_DDR          P1DIR
  #define LED2_POLARITY     ACTIVE_LOW
#endif

рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдкрдбрд╝рд╛ - "рдШрдбрд╝реА" рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐, рдХреНрдпреЛрдВрдХрд┐ Sonoff BASICZBR3 рдмреЛрд░реНрдб рдореЗрдВ рдпрд╣ рдорд┐рд▓рд╛рдк рдирд╣реАрдВ рд╣реИ:

//#define HAL_CLOCK_CRYSTAL
  #define OSC32K_CRYSTAL_INSTALLED FALSE

рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд┐рдирд╛, рдлрд░реНрдорд╡реЗрдпрд░ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдпрд╛ рдмрд▓реНрдХрд┐, рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ)ред

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдлрд░реНрдорд╡реЗрдпрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд░реНрдорд╡реЗрдпрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВред
рдзреНрдпрд╛рди!!! рдХрд┐рд╕реА рднреА рдХрдиреЗрдХреНрд╢рди рдФрд░ рдлрд░реНрдорд╡реЗрдпрд░ рд╕реЗ рдкрд╣рд▓реЗ рдПрд╕реА рдкрд╛рд╡рд░ рд╕реЗ Sonoff BASICZBR3 рд░рд┐рд▓реЗ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ!

рд╣рдо Soneb BASICZBR3 рд╡рд╛рдпрд░рд┐рдВрдЧ рдХреЛ CCDebugger рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЪрд┐рдк рдХреЛ рдорд┐рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдлреНрд▓реИрд╢ рдХрд░рддреЗ рд╣реИрдВред



11. рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ zigbee2mqtt рдФрд░ ioBroker.Zigbee рдореЗрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рдпрджреНрдпрдкрд┐ рд╣рдо рдЬрд┐рд╕ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЬреБрдбрд╝реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рдХрдорд╛рдВрдб рднреЗрдЬрдХрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЪрд┐рддреНрд░реЛрдВ рдФрд░ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред IoBroker.Zigbee

рдореЗрдВ рдПрдХ рдирдпрд╛ рдЙрдкрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдЖрдкрдХреЛ 2 рдЪрд░рдг рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:

  1. zigbee-herdsman-converters. , zigbee2mqtt.
  2. ioBroker.Zigbee

рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдкрд╣рд▓реЗ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреАрдЖрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдо рд╕реНрдерд╛рдкрд┐рдд ioBroker (рдпрд╛ zigbee2mqtt) рдореЗрдВ zigbee-herdsman- рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рд╕реНрдерд╛рди рдкрд╛рддреЗ рд╣реИрдВ ред рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░ рд╣рдо devices.js рдлрд╝рд╛рдЗрд▓ https://github.com/Koenkk/zigbee-herdsman-converters/blob/master/devices.js рдкрд╛рддреЗ рд╣реИрдВред

рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рдбрд┐рд╡рд╛рдЗрд╕реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ jioBroker.zigbee рдФрд░ zigbee2mqtt рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рд╣рдо рдЗрд╕реЗ DIYRuZ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдПрдХ рдЦрдВрдб (2300 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмрд╛рдж) рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдмреНрд▓реЙрдХ рдореЗрдВ рдирдП рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВ:

    {
        zigbeeModel: ['DIYRuZ_RT'],
        model: 'DIYRuZ_RT',
        vendor: 'DIYRuZ',
        description: '',
        supports: 'on/off, temperature',
        fromZigbee: [fz.on_off, fz.temperature],
        toZigbee: [tz.on_off],
    },

FromZigbee рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ , рд╣рдо рдЙрди рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рджреЛ рдкрдж рдорд╛рдирдХреАрдХреГрдд рд╣реИрдВред Fz.on_off рдХрдирд╡рд░реНрдЯрд░ рд╕рдВрджреЗрд╢ рдХреЛ рдЪрд╛рд▓реВ / рдмрдВрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ fz ред рддрд╛рдкрдорд╛рди рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрди рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХрд╛ рдХреЛрдб (рдлрд╝рд╛рдЗрд▓ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ / fromZigbee.js рдореЗрдВ рд╕реНрдерд┐рдд) рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддрд╛рдкрдорд╛рди рдХреЛ 100 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

   on_off: {
        cluster: 'genOnOff',
        type: ['attributeReport', 'readResponse'],
        convert: (model, msg, publish, options, meta) => {
            if (msg.data.hasOwnProperty('onOff')) {
                const property = getProperty('state', msg, model);
                return {[property]: msg.data['onOff'] === 1 ? 'ON' : 'OFF'};
            }
        },
    },

 temperature: {
        cluster: 'msTemperatureMeasurement',
        type: ['attributeReport', 'readResponse'],
        convert: (model, msg, publish, options, meta) => {
            const temperature = parseFloat(msg.data['measuredValue']) / 100.0;
            return {temperature: calibrateAndPrecisionRoundOptions(temperature, options, 'temperature')};
        },
    },

InZigbee рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ, рд╣рдо рдЙрди рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдХрдорд╛рдВрдб рдХреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд░рд┐рд▓реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ tz.on_off рдХрдирд╡рд░реНрдЯрд░ рд╣реИ ред

рд╕рдм рдХреБрдЫ "рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕" рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рдЬреЛ zigbee2mqtt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ ioBroker рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг ioBroker.zigbee \ lib \ devices.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ

    {
        vendor: 'DIYRuZ',
        models: ['DIYRuZ_RT'],
        icon: 'img/DIYRuZ.png',
        states: [
            states.state,
            states.temperature,
        ],
    },

рдпрд╣рд╛рдВ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рдореЙрдбрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдФрд░ рд░рд╛рдЬреНрдпреЛрдВ рдХреА рд╕реВрдЪреАред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рднреА рдорд╛рдирдХ рд╣реИрдВ: рд░рд╛рдЬреНрдп рд░рд┐рд▓реЗ рдХрд╛ рд░рд╛рдЬреНрдп рд╣реИ, рдХреЗ рд▓рд┐рдП рддрд╛рдкрдорд╛рди рддрд╛рдкрдорд╛рди рдореВрд▓реНрдпреЛрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред



12. рдЖрдЧреЗ рдХреНрдпрд╛?


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ Z-Stack 3.0 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрд╛ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХреЛ рдмреЗрд╣рддрд░ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдП рдЧрдП рд╣реИрдВ:

  • рдореИрдВ рд░рд┐рд▓реЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рд╕реЗ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрд╛ред рдЕрдиреНрдп рд░рд╛рдЙрдЯрд░ рдбрд┐рд╡рд╛рдЗрд╕реЗрд╕ perm_join рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирдП рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЦреБрдж рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ рдирдП рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд╕рдордиреНрд╡рдпрдХ рдХреЗ рдкрд╛рд╕ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдПрдХ рд░рд╛рдЙрдЯрд░ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдореИрдк рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "perm_join" рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рд╡рд╛рдЗрд╕ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
  • рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд╣реА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрд╣ рд╕реНрдерд┐рддрд┐ рд╕реВрдЪрдирд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬрдм рдЖрдк рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП configReport рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред
  • рдЗрдВрдЯрд░рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░реЗрдВ рдФрд░ рдЗрдВрдЯрд░рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорддрджрд╛рди рдмрдЯрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред

рдЦреИрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╛рд╡рд░ рдореЛрдб рдФрд░ рдмреИрдЯрд░рд┐рдпреЛрдВ рдкрд░ "рд╕реЛ" рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЖрдкрдХреЛ Zigbee рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдЯ рдореЗрдВ рдЗрд╕ рдФрд░ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ ред

рдореИрдВ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдЯ рдФрд░ рдЬрд┐рдЧреНрдмреА рд╕рдореБрджрд╛рдп рдореЗрдВ рдЕрдкрдиреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдФрд░ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:


рд╕рдВрджрд░реНрдн


рдореБрдЦреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬреЗрдб-рд╕реНрдЯреИрдХ 3.0.2 рдПрд╕рдбреАрдХреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣рд╛рдБ рд▓рд┐рдВрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рджреВрдВрдЧрд╛:


All Articles