Рестартирайте и възстановете стартовата конфигурация за ZigBee сензор чрез Tornado / Python

Имам въпрос. Имам проект, domotic (домашна автоматизация) система, в която трябва да изпратя някои команди чрез интерфейс към някои сензори, температурни сензори, сензори за мощност, сензори за контакт и т.н.

Вече направих частта, в която мога да изпратя командата за включване/изключване/превключване към ZigBee сензор. Следвах това ръководство и тази команда е описана на страница 196.

Имам тази част в python в моя проект, за да задам правилния пакет за изпращане към сензора:

if command not in ['ON', 'OFF', 'TOGGLE']:
        raise tornado.web.HTTPError(404, "Unknown command: " + str(command))

    op_group = "70"
    op_code = "50"
    # *9999999999999999;70;50;;100260EB008060008000000D8#
    #                   70 50  100231AC00000000000008060008000101A9
    packet_meta = "*%s;%s;%s;%s;02%s%s600080000%s#"  # D8 i s the CRC who compute that?
    pkt_len = hextransform(16, 2)

    # Hexify the network ID
    netid = hextransform(int(nid), 16)
    # Hexify the sensor ID
    # TODO: - split sensor_id in ZTC sensor_id and endpoint!
    #       - ZTC sens ID is 2 bytes 
    #       - ZTC endpoint is 1 byte
#        sens_id = hextransform(int(sid) >> 8, 4)
#        end_point = hextransform(int(sid) & 0x0000FF, 2)


#        print("\nsens_id: '" + sens_id + "'\n")
#        print("\nendpoint: '" + end_point + "'\n")

    # TODO: - split sensor_id in ZTC sensor_id and clusterid!
    #       - ZTC sens ID is 2 bytes 
    #       - ZTC clusterid is 2 bytes
    sens_id = hextransform(int(sid) >> 16, 4)#elisa
    sens_id_little = invert2bytes(sens_id,0)
    cluster_id = hextransform(int(sid) & 0x00FFFF, 4)#elisa
    end_point = "08" #elisa

    if command == 'ON':
        cmd_data = "01"
    elif command == 'OFF':
        cmd_data = "00"
    elif command == 'TOGGLE':
        cmd_data = "02"

    packet = packet_meta % (netid, op_group, op_code, pkt_len, sens_id, end_point, cmd_data)
    packet = packet.upper()
    print("\t\t " + packet + "\n")

    ################ ELISA #########################################
    cmd_meta = "02%s000000000000080600080000%s" #elisa
    mycommand = cmd_meta % (sens_id_little, cmd_data) #elisa
    len_mycommand = len(mycommand)/2
    op_group_hex=0x70
    op_code_hex=0x50
    mynet_type ="ztc"

    cmdjson = packet2json(op_group_hex,op_code_hex, mycommand)
    #
    #
    #TODO : -write command into db  
    ts = datetime.datetime.now().isoformat()
    self.lock_tables("write", ['confcommands'])
self.db.execute("INSERT INTO confcommands (network_id, ntype, timestamp, command) \
                              VALUES (%s,%s,%s,%s)", nid, mynet_type, ts, cmdjson)
    self.unlock_tables();

Сега, следвайки ръководството, бих добавил командата за рестартиране, за рестартиране на сензора. И след това също добавете командата за възстановяване при стартиране на конфигурацията.

Така че не знам къде са тези команди в ръководството. Има няколко от тях. След това не виждам ясна стойност за командата рестартиране или възстановяване на конфигурацията при стартиране. Ако за включване/изключване/превключване има три стойности (00, 01, 02), в този случай ръководството не казва каква е стойността, която да се присвои на променливата cmd_data за създаване на правилния пакет за изпращане към сензора.

Надявам се, че можете да ми помогнете, защото вече не знам къде да търся това. Благодаря ти много.


person sharkbait    schedule 22.10.2012    source източник


Отговори (2)


Не познавам техно ZigBee, но според вашата документация можете да опитате да изпратите APS съобщенията, наречени APSME-RESET.Request и APSME-REST.Confirm за нулиране на форма на плоча или NLME-Reset.Request и NLME-Reset.Confirm за нулиране на мрежовия мениджър

person lucasg    schedule 22.10.2012

Изглежда, че този код използва клъстера ZigBee OnOff (0x0006), тъй като командите съвпадат с това, което прави вашият код. Тъй като ZigBee е little endian, една от последователностите 0600 във вашия код е ID на клъстера.

Основният клъстер (0x0000) поддържа една команда, 0x00, която нулира устройството до фабричните настройки по подразбиране. Бъдете внимателни с тази команда, тъй като може да доведе до напускане на устройството от мрежата и връщане към мрежовите настройки по подразбиране.

Не знам за ZCL (ZigBee Cluster Library) клъстер и команда, които можете да използвате за рестартиране/рестартиране на устройство. ZigBee сензорите са проектирани да работят години наред, без да се налага да рестартират.

За да научите повече за ZCL клъстерите и командите, можете да изтеглите ZigBee Cluster Library от ZigBee Alliance.

Защо вашето устройство трябва да рестартира сензора?

person tomlogic    schedule 23.10.2012
comment
защото искам да направя domotic интерфейс и искам потребителят да може да рестартира сензора или да нулира конфигурацията за стартиране... - person sharkbait; 24.10.2012
comment
Добре, @tomlogic Разбрах, че ZigBee сензорите са проектирани да нямат рестартиране ;) Премахвам тази команда от системата. Благодаря ви за информацията! - person sharkbait; 24.10.2012
comment
@sharkbait: от любопитство, откъде вземаш сензорите си? Винаги ми е интересно да науча за нови търговски ZigBee сензорни устройства. - person tomlogic; 24.10.2012
comment
Това са сензори, които са разработени и направени в частна организация в Италия, в моя университет - person sharkbait; 25.10.2012