Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. tropicaxarquia
    3. Best
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Best posts made by tropicaxarquia

    • RE: Messages list without ack

      @mfalkvidd it's very strange. Some messages that I had sent from a Domoticz python sketch sent V_VAR24-25-26 and they have worked, but in the sending I put 1 in ack instead of 0 and the arduino sckets did not manage the ack and therefore they have stayed in some queue and sends them constantly (every so often the same message over and over again from the gateway). If I send another message modifying V_VAR26 to the same node, it works, but after a short time the gateway sends the original message again (the one that had ack in its format).

      this has me crazy!!!!

      posted in General Discussion
      tropicaxarquia
      tropicaxarquia
    • RE: Messages list without ack

      In sketch definitions:
      ...
      MyMessage msg1valve(CHILD_ID_IRRIGATION_SYSTEM, V_LIGHT);
      MyMessage var1valve(CHILD_ID_IRRIGATION_SYSTEM, V_VAR1);
      MyMessage var2valve(CHILD_ID_IRRIGATION_SYSTEM, V_VAR2);
      MyMessage var3valve(CHILD_ID_IRRIGATION_SYSTEM, V_TEXT);
      ..
      in sketch receive function:
      ...
      if (message.type == V_LIGHT)
      {
      ...
      }
      else if (message.type == V_VAR1)
      {
      int variable1 = atoi(message.data);// RUN_ALL_ZONES time
      DEBUG_PRINT(F("Recibida V_VAR1 de la válvula:"));
      DEBUG_PRINT(i);
      DEBUG_PRINT(F(" = "));
      DEBUG_PRINTLN(variable1);
      if (variable1 != allZoneTime[i]) // es un valor diferente del que había anteriormente
      {
      allZoneTime[i] = variable1;
      zoneTimeUpdate = true;

            //enviar valor al contrtolador
            send(var1valve.setSensor(i).set(variable1), false);
          }
          receivedInitialValue = true;
        }
        else if (message.type == V_VAR2)
        {
          int variable2 = atoi(message.data);// RUN_SINGLE_ZONE time
          DEBUG_PRINT(F("Recibida V_VAR2 de la válvula:"));
          DEBUG_PRINT(i);
          DEBUG_PRINT(F(" = "));
          DEBUG_PRINTLN(variable2);
          if (variable2 != valveSoloTime[i]) // es un valor diferente del que había anteriormente
          {
            valveSoloTime[i] = variable2;
            zoneTimeUpdate = true;
            //enviar valor al contrtolador
            send(var2valve.setSensor(i).set(variable2), false);
          }
          receivedInitialValue = true;
        }
        else if (message.type == V_TEXT)
        {
          String newMessage = String(message.data);
          if (newMessage.length() == 0)
          {
            DEBUG_PRINT(F("No se ha recibido NOMBRE (V_TEXT) para la zona "));
            DEBUG_PRINTLN(i);
            break;
          }
          if (newMessage.length() > 16)
          {
            newMessage.substring(0, 16);
          }
          valveNickName[i] = "";
          valveNickName[i] += newMessage;
          String val = String(valveNickName[i]);
          DEBUG_PRINT(F("Recibida V_TEXT de la válvula: "));
          DEBUG_PRINT(i);
          DEBUG_PRINT(F(" = "));
          DEBUG_PRINTLN(valveNickName[i]);
        }
        receivedInitialValue = true;
      }
      

      ...

      In domoticz:

      each scene for each valve who on action:
      script://exec.sh irrigation_single_zone 10 1 0 5 "Zona 1"

      in /domoticz/scripts/exec.sh:

      #!/bin/sh
      case $1 in
      irrigation_single_zone)
      python /home/pi/domoticz/scripts/python/send_vars_to_irrigation_system.py --nodo_id=$2 --child_id=$3 --time_all_zones=$4 --time_single_zone=$5 --n$
      exit 0
      ;;
      irrigation_all_zones)
      python /home/pi/domoticz/scripts/python/send_vars_to_irrigation_system.py --nodo_id=$2 --child_id=1 --time_all_zones=$3 >/dev/null 2>&1 &
      python /home/pi/domoticz/scripts/python/send_vars_to_irrigation_system.py --nodo_id=$2 --child_id=2 --time_all_zones=$3 >/dev/null 2>&1 &
      python /home/pi/domoticz/scripts/python/send_vars_to_irrigation_system.py --nodo_id=$2 --child_id=3 --time_all_zones=$3 >/dev/null 2>&1 &
      python /home/pi/domoticz/scripts/python/send_vars_to_irrigation_system.py --nodo_id=$2 --child_id=4 --time_all_zones=$3 >/dev/null 2>&1 &
      python /home/pi/domoticz/scripts/python/send_vars_to_irrigation_system.py --nodo_id=$2 --child_id=5 --time_all_zones=$3 >/dev/null 2>&1 &
      python /home/pi/domoticz/scripts/python/send_vars_to_irrigation_system.py --nodo_id=$2 --child_id=6 --time_all_zones=$3 >/dev/null 2>&1 &
      python /home/pi/domoticz/scripts/python/send_vars_to_irrigation_system.py --nodo_id=$2 --child_id=7 --time_all_zones=$3 >/dev/null 2>&1 &
      python /home/pi/domoticz/scripts/python/send_vars_to_irrigation_system.py --nodo_id=$2 --child_id=8 --time_all_zones=$3 >/dev/null 2>&1 &
      exit 0
      ;;
      esac

      /domoticz/scripts/python/send_vars_to_irrigation_system.py:
      #!/usr/bin/python3

      import socket
      from time import sleep
      import sys
      import argparse
      #import DomoticzEvents as DE

      def gwsend(args):

      nodoID = str.encode(str(args.nodo_id))
      childID = str.encode(str(args.child_id))
      timeAllZones = str.encode(str(args.time_all_zones))
      timeSingleZone = str.encode(str(args.time_single_zone))
      nameZone = args.name_zone
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      s.connect(("127.0.0.1", 5003))
      sleep(3)

      #estructura del mensaje
      #99: Node ID
      #1: ChildId
      #1: command (Set in this case)
      #0: ACK (None in this case)
      #47: V_TYPE (V_TEXT in this case), 24-25-26 V_VAR1-2-3

      #enviar tiempo duracion en modo All Zones (V_VAR1 -> value 24)
      if timeAllZones != "None":
      s.sendall(b"" + nodoID + ";" + childID + ";1;0;24;" + timeAllZones + b"\n")
      sleep(3)
      #enviar tiempo de duracion en modo Single zone(V_VAR2 -> value 25)
      if timeSingleZone != "None":
      s.sendall(b"" + nodoID + ";" + childID + ";1;0;25;" + timeSingleZone + b"\n")
      sleep(3)
      #enviar nombre de zona (V_VAR3 -> value 26)
      if nameZone is not None:
      s.sendall(b"" + nodoID + ";" + childID + ";1;0;47;" + nameZone + b"\n")
      sleep(3)

      s.shutdown(socket.SHUT_WR)
      s.close()
      def main():

      my_parser = argparse.ArgumentParser(prog='send_vars_to_irrigation_system',
      usage='%(prog)s --nodo_id=NODO_ID --child_id=VALVULA_ID, [--time_all_zones=TIME_EN_MODO_TODAS] [--time_single_zone$
      description='Envio de parametros de cada zona al sistema de riego')
      my_parser.version = '1.0'

      my_parser.add_argument('--nodo_id',
      type=int,
      action='store',
      required=True,
      help='ID del nodo Sistema de Riego')
      my_parser.add_argument('--child_id',
      type=int,
      action='store',
      required=True,
      help='ID de la valvula')
      my_parser.add_argument('--time_all_zones',
      type=int,
      action='store',
      required=False,
      help='Duracion en modo Todas las zonas')
      my_parser.add_argument('--time_single_zone',
      type=int,
      action='store',
      required=False,
      help='Duracion en modo Solo esta zona')
      my_parser.add_argument('--name_zone',
      type=str,
      action='store',
      required=False,
      help='Nombre de la zona')

      args = my_parser.parse_args()

      gwsend(args)

      if name == 'main':
      main()

      posted in General Discussion
      tropicaxarquia
      tropicaxarquia