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

    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
                                        • R Offline
                                          R Offline
                                          ricorico94
                                          wrote on last edited by ricorico94
                                          #34

                                          well, one of my issues is that I don't understand how the V_VAR1 is managed by Domoticz. The website states that V_VARx exist for any kind of sensor, but in such case I don't understand how to define its value in Domoticz as V_VAR1 appears nowhere. So I used an integer user variable, then transtype to text and in my receive(à procedure, I was trying to transtype again to integer (or unsigned long)..
                                          It's also why I had tried to replace all my V_VAR1 by V_TEXT, to be more homogenous.

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


                                          6

                                          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