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 Offline
    dbemowskD Offline
    dbemowsk
    wrote on last edited by
    #13

    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.

    Vera Plus running UI7 with MySensors, Sonoffs and 1-Wire devices
    Visit my website for more Bits, Bytes and Ramblings from me: http://dan.bemowski.info/

    loic13L 1 Reply Last reply
    0
    • 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
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          7

                                          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