Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Controllers
  3. Domoticz
  4. Requesting value from Domoticz

Requesting value from Domoticz

Scheduled Pinned Locked Moved Domoticz
39 Posts 9 Posters 13.1k Views 11 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • dbemowskD dbemowsk

    You are going to use 2 things. message.type and message.data. The message.type in my scenario is V_TEXT, and message.data is the payload, which in my case is O, H, C or A, but can be whatever you pass from Domoticz. The code in your receive function would look something like this:

    if (message.type == V_TEXT) {
      Serial.println("Received data" + String(message.data));
      //Here you would do something with message.data
    }
    

    If you have more than one child sensor sending V_TEXT data, you would then use an if statement or a switch/case to check message.sensor for the child ID of the sensor and process each as above.

    if (message.type == V_TEXT) {
      if (message.sensor == 1) {
        Serial.println("Received data from child 1" + String(message.data));
        //Here you would do something with message.data for the first child
      } else if (message.sensor == 2) {
        Serial.println("Received data from child 2" + String(message.data));
        //Here you would do something with message.data for the second child
      }
    }
    

    Let us know if you have trouble.

    loic13L Offline
    loic13L Offline
    loic13
    wrote on last edited by
    #14

    That is perfect thanks a lot.

    1 Reply Last reply
    0
    • dbemowskD dbemowsk

      I pull the thermostat mode from my thermostat bridge node like this:

          request( CHILD_ID_MODE, V_TEXT );
      

      I have never used the destination attribute, so I can't speak to it's use, but using the childSensorId and variableType works for me. You still need to use the technique I described to set the MySensors child node from the dummy sensor though.

      ? Offline
      ? Offline
      A Former User
      wrote on last edited by A Former User
      #15

      @dbemowsk

      At the moment I'm trying to send a text value from Domoticz with MySensors Gateway to one of my nodes.

      I need to implement the "request" function in this node. So here's my question: what value did you assign to "CHILD_ID_MODE". I presume that's the ID of the dummy selector described in another topic on this forum? How did you obtain this value? Is it available somewhere in Domoticz UI?

      Now I request a text value, but all I get is a blank message, cause I don't know what I should insert as "uint8_t childSensorId".

      1 Reply Last reply
      0
      • gohanG Offline
        gohanG Offline
        gohan
        Mod
        wrote on last edited by
        #16

        The child ID is something you define when you present the sensors of the node

        ? 1 Reply Last reply
        0
        • gohanG gohan

          The child ID is something you define when you present the sensors of the node

          ? Offline
          ? Offline
          A Former User
          wrote on last edited by
          #17

          @gohan Yes, I understand, but when I create a dummy text sensor I can't define its child ID. Can I find it somewhere?

          1 Reply Last reply
          0
          • gohanG Offline
            gohanG Offline
            gohan
            Mod
            wrote on last edited by
            #18

            You have to create a sensor in the sensor node sketch, assign a child ID to it and present it like the others sensors during setup, then it should show on the controller. I can't be more specific because I haven't worked on text sensors yet

            ? 1 Reply Last reply
            0
            • gohanG gohan

              You have to create a sensor in the sensor node sketch, assign a child ID to it and present it like the others sensors during setup, then it should show on the controller. I can't be more specific because I haven't worked on text sensors yet

              ? Offline
              ? Offline
              A Former User
              wrote on last edited by A Former User
              #19

              @gohan Dummy sensors are created in Domoticz, they don't use the MySensors library, so one doesn't upload any sketches to Arduino :)

              What I want to achieve specifically is to send outside temperature received from WeatherUnderground to one of my MySensors nodes.

              1 Reply Last reply
              0
              • gohanG Offline
                gohanG Offline
                gohan
                Mod
                wrote on last edited by
                #20

                I know, but if you don't create a sensor able to receive the value, you can't send anything to it through the mysensors network

                ? 1 Reply Last reply
                0
                • gohanG gohan

                  I know, but if you don't create a sensor able to receive the value, you can't send anything to it through the mysensors network

                  ? Offline
                  ? Offline
                  A Former User
                  wrote on last edited by
                  #21

                  @gohan hey, now I get it!

                  got it working the way I wanted, thank you so much :D

                  mar.conteM 1 Reply Last reply
                  1
                  • gohanG Offline
                    gohanG Offline
                    gohan
                    Mod
                    wrote on last edited by
                    #22

                    Just for my curiosity, why are you using the temperature from weather underground? Is it just displayed on a screen?

                    ? 1 Reply Last reply
                    0
                    • gohanG gohan

                      Just for my curiosity, why are you using the temperature from weather underground? Is it just displayed on a screen?

                      ? Offline
                      ? Offline
                      A Former User
                      wrote on last edited by A Former User
                      #23

                      @gohan I'm doing a project for my master's thesis.

                      There's a mathematical thermal model of a building running on MySensors node. I wanted to supply it with an information about actual outside temperature to have accurate results.

                      1 Reply Last reply
                      0
                      • gohanG Offline
                        gohanG Offline
                        gohan
                        Mod
                        wrote on last edited by
                        #24

                        A real mysensors project would require an external node with temperature and humidity sensor 😁

                        ? 1 Reply Last reply
                        0
                        • gohanG gohan

                          A real mysensors project would require an external node with temperature and humidity sensor 😁

                          ? Offline
                          ? Offline
                          A Former User
                          wrote on last edited by
                          #25

                          @gohan This model is just a small part of my project. But I get your concept.

                          There's already a DHT11 node running inside my house, measuring quantities that you've mentioned.

                          1 Reply Last reply
                          1
                          • ? A Former User

                            @gohan hey, now I get it!

                            got it working the way I wanted, thank you so much :D

                            mar.conteM Offline
                            mar.conteM Offline
                            mar.conte
                            wrote on last edited by mar.conte
                            #26

                            @tomek_olo
                            Sorry what is the way for send from domoticz child -node to other node through lua script for example Tanks

                            M.C.

                            ? 1 Reply Last reply
                            0
                            • mar.conteM mar.conte

                              @tomek_olo
                              Sorry what is the way for send from domoticz child -node to other node through lua script for example Tanks

                              ? Offline
                              ? Offline
                              A Former User
                              wrote on last edited by A Former User
                              #27

                              @mar.conte I don't understand your question. Can you clarify, please?

                              mar.conteM 1 Reply Last reply
                              0
                              • ? A Former User

                                @mar.conte I don't understand your question. Can you clarify, please?

                                mar.conteM Offline
                                mar.conteM Offline
                                mar.conte
                                wrote on last edited by
                                #28

                                @tomek_olo
                                Sorry what is the way for send from domoticz child -node to other node through lua script for example Tanks

                                M.C.

                                ? 1 Reply Last reply
                                0
                                • mar.conteM mar.conte

                                  @tomek_olo
                                  Sorry what is the way for send from domoticz child -node to other node through lua script for example Tanks

                                  ? Offline
                                  ? Offline
                                  A Former User
                                  wrote on last edited by A Former User
                                  #29

                                  @mar.conte

                                  OK, I'll try to describe everything I've done to get it working:

                                  1. I'm presenting MySensors node to Domoticz as S_INFO: "present(CHILD_ID, S_INFO);"
                                  2. Next step is to add this node in your Domoticz. It should be visible at first in "Devices" as a "Text" device. After you add it it will be present in the "Utility" tab.
                                  3. Now you have to edit a text value of this device in Domoticz. (I think that's what interests you but in reverse) I'm using a "Device" script that updates this text value with outside temperature every time the weather is updated:

                                  commandArray = {}
                                  local tempOut = devicechanged["Outside_Temperature"]
                                  local tempOutIdx = 25

                                  if ( devicechanged["Outside"]) then
                                  commandArray['UpdateDevice'] = otherdevices_idx['TextNode']..'|1|'..tempOut
                                  end

                                  1. Now when I want to download this new value to my node I use "request( CHILD_ID, V_TEXT );" and inside "receive()" function:

                                  if (message.type == V_TEXT) {
                                  if (message.sensor == CHILD_ID) {
                                  outTemp = message.getFloat();
                                  }
                                  }

                                  That's all, it's complicated. If you have any questions feel free to ask. I'll do my best to help.

                                  1 Reply Last reply
                                  0
                                  • gohanG Offline
                                    gohanG Offline
                                    gohan
                                    Mod
                                    wrote on last edited by
                                    #30

                                    If the temperature sensor is also running on a mysensors node, you can send the value from the node to the one with lcd screen directly without using the controller.

                                    1 Reply Last reply
                                    0
                                    • mar.conteM Offline
                                      mar.conteM Offline
                                      mar.conte
                                      wrote on last edited by
                                      #31

                                      For send message to child node wich isnt present in device list? In other words i have a node wich is in device list and the child 's node called S_custom with id 200 .... the node id is 101...

                                      M.C.

                                      1 Reply Last reply
                                      0
                                      • R Offline
                                        R Offline
                                        ricorico94
                                        wrote on last edited by ricorico94
                                        #32

                                        Hi,
                                        I've been trying to modify the sketch of Solar Powered Plant moisture sensor so that I can remotely control the sleep time from Domoticz.. But so far I failed.. ;-(
                                        Sorry for the long post below, but I try to provide all details, as I don't understand what I did wrong..

                                        I tried to understand several contributions including the ones above from dbemowsk (thank you also for your chat messages!) and tomek_olo, as well as the Water Pulse meter sensor , but I still don't succeed having the sensor receiving data from Domoticz.

                                        Here's what I tried to do.
                                        In Sensor, I reused the code from solar powered moisture sensor from other post (and that code is working on another sensor) then I modified it to:

                                        • present an additional child to Domoticz (CHILD_ID_SLEEP 2 with S_INFO) in setup
                                        • send a value (here 11) of V_VAR1 in setup as per the advise from dbemowsk so that domotic recognize that data field
                                        • then in Loop(), I have (apart the code for moisture sensor) a loop for requesting V_VAR1 (copied that from the water pulse meter sensor code)
                                        • outside Loop() (at bottom of script), I created the receive(const MyMessage &message) procedure (in code below, I tried to print to serial several debugging messages...)

                                        Here's below the whole code:

                                        #include <SPI.h>
                                        #define MY_RADIO_NRF24
                                        #define MY_DEBUG
                                        #include <MySensors.h>
                                        
                                        #define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
                                        #define N_ELEMENTS(array) (sizeof(array)/sizeof((array)[0]))
                                        
                                        #define CHILD_ID_MOISTURE 0
                                        #define CHILD_ID_BATTERY 1
                                        #define CHILD_ID_SLEEP_S 2
                                        // #define SLEEP_TIME_S 100 // Sleep time between reads (in seconds)
                                        #define THRESHOLD 1.1 // Only make a new reading with reverse polarity if the change is larger than 10%.
                                        #define STABILIZATION_TIME 1000 // Let the sensor stabilize before reading default BOD settings.
                                        const int SENSOR_ANALOG_PINS[] = {A4, A5}; // Sensor is connected to these two pins. Avoid A3 if using ATSHA204. A6 and A7 cannot be used because they don't have pullups.
                                        
                                        // MySensor gw;
                                        MyMessage msg(CHILD_ID_MOISTURE, V_HUM);
                                        MyMessage voltage_msg(CHILD_ID_BATTERY, V_VOLTAGE);
                                        MyMessage sleep_msg(CHILD_ID_SLEEP_S, V_VAR1);
                                        unsigned long SLEEP_TIME_S = 10;
                                        unsigned long SLEEP_TIME = 10000;
                                        long oldvoltage = 0;
                                        byte direction = 0;
                                        int oldMoistureLevel = -1;
                                        float batteryPcnt;
                                        float batteryVolt;
                                        int LED = 5;
                                        bool pcReceived = false;
                                        
                                        void setup()
                                        {
                                          pinMode(LED, OUTPUT);
                                          digitalWrite(LED, HIGH);
                                          delay(200);
                                          digitalWrite(LED, LOW);
                                          delay(200);
                                          digitalWrite(LED, HIGH);
                                          delay(200);
                                          digitalWrite(LED, LOW);
                                          SLEEP_TIME=SLEEP_TIME_S*1000;
                                        
                                        
                                        sendSketchInfo("Plant moisture solar proto", "1.0");
                                        // request(CHILD_ID_SLEEP_S, V_VAR1);
                                        present(CHILD_ID_MOISTURE, S_HUM);
                                          delay(250);
                                        present(CHILD_ID_BATTERY, S_MULTIMETER);
                                          for (int i = 0; i < N_ELEMENTS(SENSOR_ANALOG_PINS); i++) {
                                            pinMode(SENSOR_ANALOG_PINS[i], OUTPUT);
                                            digitalWrite(SENSOR_ANALOG_PINS[i], LOW);
                                          }
                                        present(CHILD_ID_SLEEP_S, S_INFO);
                                        send(sleep_msg.set(11));
                                        }
                                        
                                        void loop()
                                        {
                                          pcReceived = false;
                                          int moistureLevel = readMoisture();
                                        
                                          // Send rolling average of 2 samples to get rid of the "ripple" produced by different resistance in the internal pull-up resistors
                                          // See http://forum.mysensors.org/topic/2147/office-plant-monitoring/55 for more information
                                          if (oldMoistureLevel == -1) { // First reading, save current value as old
                                            oldMoistureLevel = moistureLevel;
                                          }
                                          if (moistureLevel > (oldMoistureLevel * THRESHOLD) || moistureLevel < (oldMoistureLevel / THRESHOLD)) {
                                            // The change was large, so it was probably not caused by the difference in internal pull-ups.
                                            // Measure again, this time with reversed polarity.
                                            moistureLevel = readMoisture();
                                          }
                                        send(msg.set((moistureLevel + oldMoistureLevel) / 2.0 / 10.23, 1));
                                          oldMoistureLevel = moistureLevel;
                                          
                                          int sensorValue = analogRead(A0);
                                          Serial.println(sensorValue);
                                          float voltage=sensorValue*(3.3/1023);
                                          Serial.println(voltage);
                                          batteryPcnt = (sensorValue - 248) * 0.72;
                                          batteryVolt = voltage;
                                        sendBatteryLevel(batteryPcnt);
                                          resend((voltage_msg.set(batteryVolt, 3)), 10);
                                        
                                        if (!pcReceived) {
                                              //Last sleept time not yet received from controller, request it again
                                              request(CHILD_ID_SLEEP_S, V_VAR1);
                                              Serial.print("Requested time sleep from gw VAR1");
                                              return;
                                            }
                                        
                                        
                                          digitalWrite(LED, HIGH);
                                          delay(200);
                                          digitalWrite(LED, LOW);
                                        SLEEP_TIME=SLEEP_TIME_S*1000;  
                                        sleep(SLEEP_TIME);
                                        }
                                        
                                        void resend(MyMessage &msg, int repeats)
                                        {
                                          int repeat = 1;
                                          int repeatdelay = 0;
                                          boolean sendOK = false;
                                        
                                          while ((sendOK == false) and (repeat < repeats)) {
                                            if (send(msg)) {
                                              sendOK = true;
                                            } else {
                                              sendOK = false;
                                              Serial.print("Error ");
                                              Serial.println(repeat);
                                              repeatdelay += 500;
                                            } repeat++; delay(repeatdelay);
                                          }
                                        }
                                        
                                        
                                        int readMoisture() {
                                          pinMode(SENSOR_ANALOG_PINS[direction], INPUT_PULLUP); // Power on the sensor
                                          analogRead(SENSOR_ANALOG_PINS[direction]);// Read once to let the ADC capacitor start charging
                                          sleep(STABILIZATION_TIME);
                                          int moistureLevel = (1023 - analogRead(SENSOR_ANALOG_PINS[direction]));
                                        
                                          // Turn off the sensor to conserve battery and minimize corrosion
                                          pinMode(SENSOR_ANALOG_PINS[direction], OUTPUT);
                                          digitalWrite(SENSOR_ANALOG_PINS[direction], LOW);
                                        
                                          direction = (direction + 1) % 2; // Make direction alternate between 0 and 1 to reverse polarity which reduces corrosion
                                          return moistureLevel;
                                        }
                                        
                                        void receive(const MyMessage &message)
                                        {
                                          if (message.type==V_TEXT) {
                                            // unsigned long infosleep=message.getULong();
                                            String infosleepstr=message.getString();
                                            unsigned long infosleep=infosleepstr.toInt();
                                            Serial.print("Received time sleep as string from gw:");
                                            Serial.println(infosleepstr);
                                            Serial.print("fin de msg");
                                            SLEEP_TIME_S = infosleep;
                                            pcReceived = true;
                                          }
                                          if (message.type==V_VAR1) {
                                            unsigned long infosleep=message.getULong();
                                            //unsigned long infosleep=message.getString();
                                            
                                            Serial.print("Received time sleep as VAR1 ULOng from gw:");
                                            Serial.println(infosleep);
                                            Serial.print("fin de msg");
                                            SLEEP_TIME_S = infosleep;
                                            pcReceived = true;
                                          }  
                                        }
                                        

                                        In Domoticz, in hardware I can see this:
                                        0_1509627328360_hardware view.png
                                        The sensor is the "proto" one (ID 1) where I can see the various children (Humidity=0 is normal as I did not attach the soil sensor and voltage is weird as it's not connected either).
                                        In devices view, I have:
                                        0_1509627449535_devices view.png
                                        where I can see the text sensor of S_INFO which is set to "5" thanks to a user variable (see LUA script below).
                                        0_1509628921576_button view.png
                                        I created a user variable "SondeSleep" with a LUA script (type "variables") to update the text sensor whenever the suer variable changes:

                                        commandArray = {}
                                        if ( uservariablechanged['SondeSleep']) then
                                        print ("nouvelle valeur Level1 de SondeSleep:" .. uservariables['SondeSleep']);
                                        ttidx=otherdevices_idx['SondeSolProto_Text_Sensor'];
                                        commandArray['UpdateDevice']=ttidx..'|1|' .. uservariables['SondeSleep'] 
                                        end
                                        return commandArray 
                                        

                                        This script seems working since it replicates properly the vriable value to the text_sensor. I'm just confused by the command

                                        commandArray['UpdateDevice']=ttidx..'|1|' .. uservariables['SondeSleep']
                                        

                                        where I couldn't understand the meaning of the value between the || (here |1|).

                                        The Domoticz website refers to LUA and JSON page, but I coudn't find the explanation. In 1 script of this post, I saw a 0, in another a 1.. I tried with both and also wit 2 (just in case it refers to Child ID ..) but no better result.
                                        Could someone clarifies the meaning ?

                                        When I run the sensor, I can only see (in serial monitor) the message "Requested time sleep from gw VAR1" from the "request" loop. and in Domoticz log, I can see that the sensor updates the humidity and voltage values, but that's all.

                                        I'm also surprised I do'nt see any value in S_INFO child, but maybe it's normal.
                                        I had tried to use V_TEXT instead of V_VAR1 everhwhere, but same result. There's definitely something I misunderstood somewehere.

                                        Anyone could help me ?
                                        ricorico94

                                        1 Reply Last reply
                                        0
                                        • gohanG Offline
                                          gohanG Offline
                                          gohan
                                          Mod
                                          wrote on last edited by
                                          #33

                                          Have you tried with a variable that is Integer instead of text or other? I am just guessing, as I haven't tried what you are doing yet.

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          5

                                          Online

                                          11.7k

                                          Users

                                          11.2k

                                          Topics

                                          113.0k

                                          Posts


                                          Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • MySensors
                                          • OpenHardware.io
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular