ModBus o ChatServer?

Hola alguien sabe si es mejor ModBus que usar un ChatServer en Arduino, necesito enviar valores de muchos sensores a una app Android y Windows, pero por chat server se me mexclan los paquetes, es mejor Modbus?

Cuando hablo de ModBus me estoy refiriendo a esto: https://www.espai.es/blog/2016/11/protocolo-modbus/

Con ModBus, bien estructurado los nodos (id) con sus registros, y con el maestro en la App de Android/Windows será la mejor opción. ¿Por qué? ModBus es un protocolo orientado a registro, fue diseñado para poder leer registros (entradas, salidas, sensores conectados, etc.) de un PLC a distintos dispositivos que es básicamente lo que quieres hacer.

Un chatserver solo sirve para mandar texto y el contenido del texto será cualquier cosas.

No utilizo PLC, solo tengo mi casa domotica con Arduino y tengo una App en android y una para Windows, por ahora estoy usando ChatServer y solo mando los valores por TCP, pero si un sensor me esta mandando muchos paquetes osea muchos datos las demas lecturas no se hacen bien si mandas todo al mismo tiempo, por eso pense en modBus, pero no encuentro un buen tutorial.

Hay otras opciones para considerar antes que MODBUS, ejemplo MQTT. yo no lo haría con Modbus pero es mi postura.

Estoy buscando lo mejor para poder trabajar sin problemas, yo lo que estoy haciendo ahora es mandar todos los valores de arduino COmo ChatServer, pero ahora que agregue el estado de la cortina al subir o bajar la cortina me envia millones de paquetes y se me mexcla todo en la lectura es un quilombo. por eso busco algo mas profesional quiero enviar todo por paquetes por separado y leer sin problemas... como puedo hacerlo...?

Te envia millones de paquetes porque no usas el flanco como te indiqué.

No no es eso, es que la cortina tarda 23 segundos en bajar o subir, entonces el estado_cortina++ o – , cuenta entre 0 y 23000 int, entonces cada valor que cambia me manda el dato … pero ahora estoy usando millis para que cada 1 segundo me incremente o descuente… algo asi…

if (value13 == LOW && value12 == HIGH && estado_cortina > 0) 
{ 
  if (millis_before + 1000 < millis()) //loop for waiting 5 seconds between messages
  {
    estado_cortina--;
    millis_before = millis(); //reset timer
  } 
}
if (value12 == LOW && value13 == HIGH && estado_cortina < 25) 
{ 
  if (millis_before + 1000 < millis()) //loop for waiting 5 seconds between messages
  {
    estado_cortina++;
    millis_before = millis(); //reset timer
  } 
}

No comprendo tu enfoque del problema.

Tienes 3 estados, SUBIR, STOP BAJAR y STOP de nuevo, o sea 3 estados, no mas.

No tienes 23000 ni uno cada 1 segundo. Tu deberías informar el estado.. SUBIR o subiendo STOP cuando se completa, luego BAJAR o bajando y STOP otra vez al completarlo

son 2 estados, 1 cuando el motor esta activo subir, y otro cuando esta activo bajar, los 2 estan conectados a un rele 220 vac por separados , estos 2 reles me mandan una señal a una entrana input_pullup , entonces cuando subir esta activo hago estado_cortina++, y cuando bajar esta activo hago estado_cortina--, pero el recorrido de la cortina es de 23000, me da eso en el int estado_cortina.

Son 3 estados. SUBIR, BAJAR, PARADO. Ya te lo expliqué. No esta toda la vida subiendo ni toda la vida bajando entonces donde esta el 3er estado, PARAR?

Por otro lado una cosa son los estado que te informan que esta haciendo a tu sistema domótico y otra cosa es saber cuantas vueltas dar. Para informar solo informas SUBE, BAJA, PARADO y tu sistema domótico estará mas que satisfecho. Para controlar saber cuantas vuetlas y que posición tiene es otra cuestion. Ahora también podrias agregar que quieres moverlo a la posicion X.

Yo te doy mi punto de vista de como lo haría y ahi separo lo que envio por el sistema sin SATURAR la comunicación y la orden de donde quiero que detenga la cortina.