Перезапустите и восстановите конфигурацию запуска для датчика ZigBee через Tornado/Python.

У меня есть вопрос. У меня есть проект, система домашней автоматизации (домашняя автоматизация), в которой я должен отправлять некоторые команды через интерфейс на некоторые датчики, датчики температуры, датчики мощности, контактные датчики и т. д.

Я уже сделал часть, в которой я могу отправить команду включения / выключения / переключения на датчик 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 использует обратный порядок байтов, одна из последовательностей 0600 в вашем коде является идентификатором кластера.

Кластер Basic (0x0000) поддерживает одну команду 0x00, которая сбрасывает устройство до заводских настроек по умолчанию. Будьте осторожны с этой командой, так как это может привести к выходу устройства из сети и возврату к сетевым настройкам по умолчанию.

Я не знаю о кластере ZCL (ZigBee Cluster Library) и команде, которую можно использовать для перезапуска/перезагрузки устройства. Датчики ZigBee рассчитаны на многолетнюю работу без перезапуска.

Чтобы узнать больше о кластерах и командах ZCL, вы можете загрузить библиотеку кластеров ZigBee из Альянс ZigBee.

Почему вашему устройству необходимо перезапустить датчик?

person tomlogic    schedule 23.10.2012
comment
потому что я хочу сделать домашний интерфейс, и я хочу, чтобы пользователь мог перезапустить датчик или сбросить настройки запуска... - 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