Skip to content

DOC: Protocolo de comunicação Sink <> endDevices #4

@nobertomaciel

Description

@nobertomaciel

Protocolo de comunicação Sink vs endDevices

A rede de sensores é composta por um Sink (Raspberry PI), um endDevice[1] Master (nodeMcu - ESP8266) conectado diretamente ao Sink pela porta serial (USB Serial) e um número N qualquer de endDevices[N] (nodeMcu - ESP8266) com sensores diversos que se comunicam via Mesh/TCP com o node Master e configuráveis pelo Sink e com comando por voz através do Echo Dot. O protocolo de comunicação entre Sink e a Alexa Skill é abordado na issue #x.

Diagrama do fluxo de comunicação

Notação de comunicação JSON:

  • restart : boolean (reinicia o node) - new
  • id_node : uint32_t (id do node na primeira mensagem enviada pela serial, ex: 4208790561);
  • nodeList : uint32_t array[ N ] (lista de id's dos nodes da rede enviada pela serial);
  • device : uint32_t (id do device remetente, ex: 4208790561);
  • node_master : uint32_t (id do device master, ex: 4208793911);
  • nodeDestiny : uint32_t (id do device de destino, ex: 4208793911) *;
  • nodeTime : unsigned long (tempo de funcionamento do device, ex: 1652900897);
  • timestamp : unsigned long (horário de envio da mensagem ou para ajuste, ex: 1652900897);
  • latitude : float (-12.19742203);
  • longitude : float (-38.96674728);
  • t_send : int (período de envio das mensagens em segundos);
  • send : boolean (true/false indicando se a mensagem deve ser enviada para a rede Mesh pelo nodeMaster);
  • unsetSensors : boolean (true/false reseta os dados dos sensores e o set de pinagens geral);
  • pinDef : boolean array[18] (array true/false para definição da pinagem);
  • pinData : float array[18] (array com os dados dos sensores do device remetente. Issue DOC: Identificação dos pinos nodeMcu (array pinDef) #5);
  • dht11PinDef : int (índice do array pinDef equivalente ao pino do device da mensagem. Issue DOC: Identificação dos pinos nodeMcu (array pinDef) #5);
  • temperature : float (retorna dados dos sensores BMP180, BMP280 ou DHT11);
  • pressure : float (retorna dados dos sensores BMP180 ou BMP280);
  • humidity : float (retorna dados dos sensores BMP180, BMP280 ou DHT11);
  • dht11_error : String;
  • flame : boolean (dados do sensor de chamas);
  • uv : float (dados do sensor ultravioleta, issue Sensor UV enviando para pinData e para JSON "uv" através do uvMeasure #7);
  • type : uint8_t (tipo de mensagem a ser repassada: broadcast=3, nodes list=2, to node master=1, instant msg=4, default 3);
  • uvMeasure : int (tipo de medida a ser retornada pelo sensor: 1=envia os dados pela key "uv"; 0=envia pelo pinData[i=0], default 0, issue Sensor UV enviando para pinData e para JSON "uv" através do uvMeasure #7);
  • dht11PinDef : int (define o pino ao qual o sensor está plugado, int é o índice do elemento no array pinDef DOC: Identificação dos pinos nodeMcu (array pinDef) #5, default 3);
  • dht11Measure : int (tipo de medida a ser retornada pelo sensor em pinData[i=3]: 1=temperatura, 2=umidade, 4=temperatura+umidade default 4);
  • bmp280PinDef : int (define o pino ao qual o sensor está plugado, int é o índice do elemento no array pinDef DOC: Identificação dos pinos nodeMcu (array pinDef) #5, default 6);
  • bmp280Measure : int (tipo de medida a ser retornada pelo sensor em pinData[i=6]: 1=temperatura, 2=pressão, 3=altitude, 4=temperatura+pressão, default 0);
  • bmp280_error : String;
  • bmp180PinDef: int, default 6 (define o pino ao qual o sensor está plugado, int é o índice do elemento no array pinDef DOC: Identificação dos pinos nodeMcu (array pinDef) #5);
  • bmp180Measure : int (tipo de medida a ser retornada pelo sensor em pinData[i=6]: 1=temperatura, 2=pressão, 3=altitude, 4=temperatura+pressão, 5=altitude ao nível do mar, default 4);
  • bmp180_error : String;
  • flamePinDef : int, default 15 (define o pino ao qual o sensor está plugado, int é o índice do elemento no array pinDef DOC: Identificação dos pinos nodeMcu (array pinDef) #5);
  1. nodeMaster > Sink (USB Serial - mensagem inicial):
  • {"id_node": nodeOrigin[this], "nodeList" : array[nodes_id[Mesh]]}
  1. Sink > nodeMaster (USB Serial - resposta da mensagem inicial que será repassada para a rede Mesh por Broadcast):
  • {"device": sink[this], "node_master" : id_node[define master], "send" : true, "type" : 3}
  1. Sink > endDevice N para ajustar tempo e definir pino dos sensores (DHT11):
  • {"device": sink[this], "nodeDestiny" : id_node[N], "send" : true, "type" : 2, "t_send" : 30, "pinDef" [0,0,0,true,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}
  • A mensagem é enviada do Sink pela USB Serial para o nodeMaster reenviar por singleMessage() ao nodeDestiny.
  1. A resposta do nodeDestiny > nodeMaster (Mesh) > Sink (USB Serial):
  • {"device": id_node[this], "node_master" : id_node[master], "nodeDestiny" : id_node[master], "type" : 2, "pinData" [0,0,0,float temperature,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions