domotica con udp

Buenas soy nuevo por aquí, de arduino se lo que leo por internet y poco mas de copiar y pegar.

ahora me metido en un proyecto personal algo difícil y nose hacerlo sinceramente porque me salen muchos problemas. El proyecto es crear una instalación domótica desde cero utilizando arduinos mega en la periferia para poner a on/off las salidas declaradas que serán relés ssr y conectar sensores de temperatura de habitaciones(dht22) y pulsadores o sensores on/off para que esa información se la envié por udp al que tendrá toda la lógica de actuación que sera un Loxone server.

adjunto el codigo que tengo hasta ahora mismo hecho para un arduino que ira uno por cada habitación.

el problema que se me viene para hacer una buena estructura en el y que se sea entendible en el futuro es:

-al enviar los estados de las entradas declaras en arudino por udp al servidor Loxone que hará de cerebro de toda la instalación, nose como decirle al enviar cadenas de udp a que ip tiene que enviarlas ya que los ejemplos de udp que he visto es que al recibir un paquete guarda en ipremote esa ip y como en la misma instalacion tendre unas 25 ips como especificarla.

  • como enviar esa informacion para no saturar al Loxone ya que aproximadamente habra unos 20 arduinos enviando informacion al Loxone y viceversa

  • al recibir al arduino los comandos de como tienen que estar las salidas declaradas en el arduino nose como hacer una mascara que compare el mensaje recibido por udp y que haga tal cosa al respecto segun la trama que reciba ej: ip177_pin23_on → pues que la tarjeta terminada en 177 el pin 23 se ponga a “ON” ccuando reciba eso.

Espero que me puedan hecar una mano ya que dentro de poco empezaremos con la obra y ando agobido ya que pense que consegira avanzar mas.

Un saludo a toda la comunidad y espero poder trabajar mano a mano con estudes.

CASA_ARDUINO.ino.ino (14.6 KB)

Para comenzar hablas como si todos tuvieramos Loxone, podrias haber puesto alguna información de como espera el servidor recibir los datos.

Por ahora es poco clara la explicación para el que no conoce Loxone como mi caso, de lo contrario tal vez deberías consultar al soporte téncnico de la empresa.

Buenas surbyte en primer lugar gracias por leerme.

El tema en cuanto a Loxone es como un servidor un poco comercial especifico para domotizar. no he querido darle mucho detalle ya que no tiene nada de arduino y no quería soltar el rollo. al final lo que puedo hacer con el es mensajes de todo tipo por tcp/ip y crear una interfaz mas intuitiva y fácil para mi al mismo tiempo que creo una logica para que actue segun lo que se le meta. por eso lo utilizare como cerebro de todo y en la periferia para abaratar los arduino.

el caso es que yo con él lo que hare es la lógica de todo el comportamiento de la casa y sera el que reciba paquetes udp de todos los arduinos (calculo que sera unas 20 placas mega)los interpretara segun la logica que le meta y enviara paquetes udp al respectivo arduino para que realice una accion de on/off.

yo en el Loxone la configuracion udp que puedo hacer es que cuando reciba un numero de tipo entero lo meta en una variable interna para hacer por ejemplo regulacion de calefacion y si recibe un texto que reconozca (el que yo quiera) hacer una accion ya que ira asociado a una variable interna boleana o de byte segun yo quiera.

mi problema es con arduino que solo le voy utilizar para que cuando cambien de estado cualquier entrada caleada a él este estado se envie por udp si se a puesto a on o off, y si el loxone dice por medio de paquetes udp que cuales quiera de las salidas cableadas al respectivo arduino cambie de estado este reconozca el texto enviado desde el Loxone y cambie de estado la salida correspondiente.

el programa que he adjuntado segun esta estructurado mi intencio es:

1 lee el estado de las entradas declaradas como INPUT y lo pasa a variable statu
2 lee el estado de las salidas declaradas como OUTPUT y lo pasa a variable statu

verifica que existe conexion con el servidor Loxone, si hay conexion:

3 envia por cada entrada digital y analogica un paquete con texto ej: "pin3=on" o "pin3=off"
si es analogico envia el valor directamente.

4 recibe paquetes de cambio de estado de salidas arduino si hubiese cambios y los ejecutas

5 si no hay conexion ejecuta una logica sencilla interna de si una entrada cambia que cambie en estado de la salida que yo quiera. Esto ultimo lo utilizo como segunda opción por si se caen las comunicaciones que por lo menos pueda encender o apagar luces localmente del salon o una habitacion desde el arduino o subir y bajar persianas.

esto es un poco la idea general si necesitais que especifique mas lo hago pero lo unico que necesito es que me guieis un poco de como deberia hacerlo y funciones son las correctas para utilizar en este tipo de ordenes que se basa en el envio y recepcion de cambios de estados por comunicacion.

Un saludo y gracias

Buenas adjunto el codigo que tengo probado y que ha funcionado con lo que quiero hacer, pero tiene retraso por lo que no podre hacer pulsaciones largas y cortas.

Nose como optimizarlo ya que se lo justo y he creado todo esto a base de ir indagando y copiando a ver si me podeis ayudar un poquillo.

creo que el retraso viene porque por algun motivo no cierra comunicaciones y me satura de paquetes vacios.
la verificacion de si hay comunicacion con el elemento remoto no he podio activarlo no me funciona como yo quiero.

dejo el codigo aver quien me echa una manita.

CASA_ARDUINO.ino (15.5 KB)