Насчет организации сети:
Самым полезным в плане функционала будет сделать мастер-устройство которое будет опрашивать поочередно все адреса в сети и решать какую информацию куда передавать. Для этого оно должно поддерживать некие "скрипты", которые пользователь может создавать или изменять по ходу работы. Такая система уже больше похожа на компьютер, но и результат получаем тот же - гибкость и универсальность. Минус но одновременно и плюс - отсутствие глухо-слепых устройств.
Другой путь это то о чем вы говорили - каждое устройство передает в сеть широковещательный пакет где указывает НЕ адрес получателя а СВОЙ адрес. Без указания своего типа. К примеру термометр передает в сеть "я - номер 3, вот температура". Эту посылку слушают все. Дисплей тоже слышит, смотрит свою внутреннюю функциональную таблицу и видит что данные из этого адреса нужно выводить на вторую строку с таким-то префиксом и постфиксом.
В этом случае все устройства изначально создаются "чистыми", но каждое должно иметь свои "скрипты", как и в случае с мастер-устройством.
Пример: поставили дисплей, поставили два термометра. Берем специальное устройство - "настройщик" и передаем дисплею набор команд что от кого получать и что с этим делать. При этом формат этих управляющих скриптов может быть каким-то совсем упрощенным. Типа байт команды программирования, байт адреса устройства от которого нужно получать данные+байт команды+два байта данных.
Говорим дисплею такое - "это настройка+адрес первого термометра+выводи на дисплей+позиция куда выводить (в двух байтах данных)".
Дисплей запоминает это дело и после получения соответствующего пакета делает соответствующее действие. Так же выводим второй термометр на вторую строку.
В любом случае что-то подобное придется делать, потому что без настройки каждого девайса получится непонятно что, как в случае когда на один дисплей нужно вывести время + 1 температуру а на второй - 2 и 3 температуру. То есть самоорганизация тут, увы, не прокатит.
Если добавить чуточку фантазии и достаточно развить скриптовый язык то можно делать более сложную автоматизацию. К примеру есть часы, есть дисплей, есть диммер.
Часы программировать не нужно.
Программируем диммер говоря ему - "это настройка+адрес дисплея+управляй освещением".
Программируем дисплей говоря ему - "это настройка+адрес часов+выводи на дисплей+позиция куда выводить (в двух байтах данных)".
"это настройка+адрес диммера+передай при совпадении переменной 1+два байта кода времени+два байта данных".
Происходит следующее - часы передают инфу дисплею. Он его выводит, храня значение во внутренней переменной 1. Потом смотрит что у него еще в скриптах есть команда "передай при совпадении переменной 1". Оценивает равно ли значение переменной (текущее время) и значение в скрипте. Если стукнуло 10 часов вечера то дисплей исполняет скрипт и передает на адрес диммера значение яркости освещения которую нужно установить.
Тут следует заметить что кажущаяся сложность и громоздкость скриптового языка компенсируется его абсолютной гибкостью в зависимости от устройства. Грубо говоря общими будут только форматы посылок и некоторые коды типа "программирование". Все остальное можно добавлять-убирать в зависимости от устройства. То есть у дисплея может быть команда "передай при совпадении" а у термометра может ее попросту не быть для экономии ресурсов контроллера. Так же общим будет само ядро обработки скриптов. На языке высокого уровня эта задача решается достаточно просто и элегантно.
Еще что в голову пришло - нужно будет подумать насчет устройства-транслятора кодов пультов в формат сети. Иначе получится кака.
Не судите строго если чушь написал. Просто системное проектирование - мое хобби...