2015-04-15 1 views
0

У меня есть проект, который я выложил так:Python - проверка исправности по проектированию программы

User 
Interface 
Interface Handler 
Main 
Network Handler 
Networks 
Elements Handler 
Elements 

Интерфейс является графический интерфейс, главное, очевидно, сети являются обертками для элементов и определения их взаимодействия , элементы - наименьшие компоненты. Это домашняя система безопасности/автоматизации, элементы - это такие вещи, как датчики ZWave, телефоны Android, огни, телевизор и т. Д., Сети обертывают их в логические группы, такие как ZWave или Lights или Station (телефоны Android, используемые с веб-камерой IP, их через Soundwire и т. д.).

Вот проблема - углубляясь в проект, это становится беспорядком. Я использовал идею о том, что уровни ниже не могут знать о уровнях выше, но выше могут знать около 1 уровня ниже (кроме интерфейса, который ничего не знает о чем-либо) и может только взаимодействовать с уровнем выше него и делает это через pubsub только с абстрактными сообщениями, которые может представлять интерес. Идя вниз, я просто использую вызовы метода объекта, изменения атрибутов объекта и т. Д. Я правильно подошел? Как только я начну реализовывать сложные взаимодействия, например, когда сработает датчик и активирован сигнал тревоги, происходит множество событий: все включаются, мониторы переключаются на запись обнаружения движения, отправляется электронное сообщение со снимками и т. Д. Эти взаимодействия запутываются, и я решил тесно связать вещи. Когда я пытаюсь свободно спарить, я в конечном итоге создаю новые языки, чтобы все говорило на одном языке.

Одна из основных проблем заключается в том, что у меня есть совершенно разные элементы. ZWave говорит через OpenZWave, станции андроида говорят через Zoneminder и/или звуковую дорожку, свет говорит через http и т. Д. Я правильно подошел? Есть ли лучший общий шаблон проектирования, который я должен моделировать? Благодарю.

+0

Я думаю, что это сообщение лучше подходит для [Обзор кода] (http: //codereview.stackexchange. ком /); поскольку он слишком широк для этого сайта. –

ответ

0

Возможно, вы захотите выбрать протокол обмена сообщениями, такой как MQTT, что все элементы могут говорить. Таким образом, каждый элемент может подписаться на разговор MQTT и действовать надлежащим образом, когда публикуются сообщения, которые относятся к ним.

Например, каждое устройство может сообщать о своем статусе, когда оно изменяется в статусе/# теме (status/living_room/window_1 - OK). Затем другие части вашей системы могут подписаться на тему статуса и соответственно реагировать, когда что-то изменится, например status/living_room/window_1 - ALARM или что-то в этом роде.

У вас также может быть тема для устройств для выдачи команд другим устройствам, которые не говорят на одном языке. Например, команда/# тема, в которой пользовательский ввод с веб-страницы для отключения света может опубликовать команду/living_room/light1 - OFF, а модуль Zwave, который управляет светом, может прослушивать сообщение и действовать в нем.

Глядя на журнал сообщений MQTT - отличный способ увидеть, что именно происходит в вашей системе, потому что это разговор между устройствами, когда они сообщают о статусе и взаимодействуют друг с другом.

MQTT очень хорошо поддерживается практически на каждой платформе. Есть клиенты для Python, Arduino, PHP, JavaScript, Node.js, C/C++, Java и т. Д.

Смежные вопросы