Meus 2 cents,
Essa questao de versao de hardware/firmware eh um problema bem real: na plataforma que desenvolvi temos campos especificos para identificar estes itens (inclusive configuracoes personalizadas) onde o comportamento do sistema pode mudar conforme a versao (o mesmo a estrutura do JSON).
Outro problema comum eh o payload - que dependendo do broker (intermediario) as vezes vinha com detalhes diferentes (para o mesmo equipamento).
Ou ainda, que dependendo do tipo de conectividade (p.ex. LoraWan) o payload tinha tamanho maximo e tinha de fazer um certo malabarismo para comprimir os dados da telemetria dos sensores para caber (nada de JSON verbosos).
Ou ainda ter de lidar com a classe do dispositivo para saber se a comunicacao poderia ser bi-direcional, criar um fluxo de controle para saber se um comando/configuracao enviado tinha sido recebido e acatado pelo dispositivo e por ai vai.
Enfim - trabalhar com embarcados eh lindo na teoria (p.ex. arduino, esp32) mas quando chega na pratica de equipamentos com pouca memoria, pouco processamento, pouco armazenamento e conectividade limitada vira um contorcionismo e eh o famoso: "como faz para colocar um elefente num fusca ?" - e o cliente quer resposta (te vira).
Saude e Sucesso !