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. OpenHardware.io
  3. Office plant monitor

Office plant monitor

Scheduled Pinned Locked Moved OpenHardware.io
mysensorsplanthumidity
41 Posts 11 Posters 9.8k Views 10 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.
  • NeverDieN Offline
    NeverDieN Offline
    NeverDie
    Hero Member
    wrote on last edited by
    #24

    Completely unrelated, but I just noticed this:
    https://www.aliexpress.com/item/SHT10-SHT11-SHT15-waterproof-sensor-case-temperature-and-humidity-protective-cover-soil-sensor-cover-40mm-15mm/32575966509.html?spm=2114.8153822.cb0001.16.lITM8E&scm=1007.13409.76764.0&pvid=0acc75b7-138d-456f-a5bf-5147c2ea763f&tpp=1
    So with that, you could just use a regular humidity sensor inside it to judge soil moisture. Pretty cool, yes? Not sure how big it is, but maybe you could even fit your entire sensor node inside it.

    Nca78N 1 Reply Last reply
    0
    • NeverDieN NeverDie

      Completely unrelated, but I just noticed this:
      https://www.aliexpress.com/item/SHT10-SHT11-SHT15-waterproof-sensor-case-temperature-and-humidity-protective-cover-soil-sensor-cover-40mm-15mm/32575966509.html?spm=2114.8153822.cb0001.16.lITM8E&scm=1007.13409.76764.0&pvid=0acc75b7-138d-456f-a5bf-5147c2ea763f&tpp=1
      So with that, you could just use a regular humidity sensor inside it to judge soil moisture. Pretty cool, yes? Not sure how big it is, but maybe you could even fit your entire sensor node inside it.

      Nca78N Offline
      Nca78N Offline
      Nca78
      Hardware Contributor
      wrote on last edited by
      #25

      @NeverDie said in Office plant monitor:

      Completely unrelated, but I just noticed this:
      https://www.aliexpress.com/item/SHT10-SHT11-SHT15-waterproof-sensor-case-temperature-and-humidity-protective-cover-soil-sensor-cover-40mm-15mm/32575966509.html?spm=2114.8153822.cb0001.16.lITM8E&scm=1007.13409.76764.0&pvid=0acc75b7-138d-456f-a5bf-5147c2ea763f&tpp=1
      So with that, you could just use a regular humidity sensor inside it to judge soil moisture. Pretty cool, yes? Not sure how big it is, but maybe you could even fit your entire sensor node inside it.

      One of the local shops I buy electronic parts from has those. Unfortunately it's too small to house an entire sensor.

      NeverDieN 1 Reply Last reply
      1
      • NeverDieN Offline
        NeverDieN Offline
        NeverDie
        Hero Member
        wrote on last edited by
        #26

        This thread also has a lot of good background information and links about capacitive soil moisture sensors: https://lowpowerlab.com/forum/general-topics/using-capsense-to-measure-soil-moisture/

        1 Reply Last reply
        1
        • NeverDieN Offline
          NeverDieN Offline
          NeverDie
          Hero Member
          wrote on last edited by NeverDie
          #27

          It might be that one could more or less whack an 80Mhz frequency oscillation chip into the Chirp circuit: https://www.digikey.com/product-detail/en/linear-technology/LTC6905CS5-80-TRMPBF/LTC6905CS5-80-TRMPBFCT-ND/810907

          1 Reply Last reply
          0
          • scalzS Offline
            scalzS Offline
            scalz
            Hardware Contributor
            wrote on last edited by scalz
            #28

            i agree with @NeverDie ;)
            It's better to use high freq for a reliable soil moisture, regarding soils, calibration etc. and some studies argues even more than 200Mhz. but with 80-100 it's nice.
            I have one design at this freq, non corrosive design, and not same as chirp though, but can't really help you (mine is not open yet, and busy on others projects).
            Regarding the chirp design, I think it may need an opamp for better results regarding the 1M resistor etc, and some more tuning if going high freq.

            1 Reply Last reply
            1
            • S Offline
              S Offline
              simbic
              wrote on last edited by
              #29

              Trying to get this working but getting alot of errors. New to this so bear with me.

              In file included from C:\...\Arduino\libraries\Moisture_sensor\Moisture_sensor.ino:55:0:
              
              C:\...\Arduino\libraries\MySensors/MyTransportRFM69.h:31:1: error: expected class-name before '{' token
              
               { 
              
               ^
              
              C:\...\Arduino\libraries\MySensors/MyTransportRFM69.h:33:36: error: 'RFM69_FREQUENCY' was not declared in this scope
              
                MyTransportRFM69(uint8_t freqBand=RFM69_FREQUENCY, uint8_t networkId=RFM69_NETWORKID, uint8_t slaveSelectPin=RF69_SPI_CS, uint8_t interruptPin=RF69_IRQ_PIN, bool isRFM69HW=false, uint8_t interruptNum=RF69_IRQ_NUM);
              
                                                  ^
              
              C:\...\Arduino\libraries\MySensors/MyTransportRFM69.h:33:71: error: 'RFM69_NETWORKID' was not declared in this scope
              
                MyTransportRFM69(uint8_t freqBand=RFM69_FREQUENCY, uint8_t networkId=RFM69_NETWORKID, uint8_t slaveSelectPin=RF69_SPI_CS, uint8_t interruptPin=RF69_IRQ_PIN, bool isRFM69HW=false, uint8_t interruptNum=RF69_IRQ_NUM);
              
                                                                                     ^
              
              In file included from C:\...\Arduino\libraries\Moisture_sensor\Moisture_sensor.ino:56:0:
              
              C:\...\Arduino\libraries\MySensors/MySigningAtsha204Soft.h:55:1: error: expected class-name before '{' token
              
               { 
              
               ^
              
              C:\...\Arduino\libraries\MySensors/MySigningAtsha204Soft.h:62:25: error: 'MY_RANDOMSEED_PIN' was not declared in this scope
              
                 uint8_t randomseedPin=MY_RANDOMSEED_PIN);
              
                                       ^
              
              Moisture_sensor:83: error: call to 'MySigningAtsha204Soft::MySigningAtsha204Soft(bool, uint8_t)' uses the default argument for parameter 2, which is not yet defined
              
               MySigningAtsha204Soft signer;
              
                                     ^
              
              Moisture_sensor:84: error: 'MyHwATMega328' does not name a type
              
               MyHwATMega328 hw;
              
               ^
              
              Moisture_sensor:85: error: call to 'MyTransportRFM69::MyTransportRFM69(uint8_t, uint8_t, uint8_t, uint8_t, bool, uint8_t)' uses the default argument for parameter 1, which is not yet defined
              
               MyTransportRFM69 transport;
              
                                ^
              
              Moisture_sensor:85: error: call to 'MyTransportRFM69::MyTransportRFM69(uint8_t, uint8_t, uint8_t, uint8_t, bool, uint8_t)' uses the default argument for parameter 2, which is not yet defined
              
              Moisture_sensor:86: error: 'MySensor' does not name a type
              
               MySensor node(transport, hw, signer);
              
               ^
              
              C:\...\Arduino\libraries\Moisture_sensor\Moisture_sensor.ino: In function 'void setup()':
              
              Moisture_sensor:112: error: 'node' was not declared in this scope
              
                 node.begin();
              
                 ^
              
              C:\...\Arduino\libraries\Moisture_sensor\Moisture_sensor.ino: In function 'void loop()':
              
              Moisture_sensor:163: error: 'node' was not declared in this scope
              
                 node.send(msgMoisture.set((moistureLevel + oldMoistureLevel) / 2.0 / 10.23, 1));
              
                 ^
              
              C:\...\Arduino\libraries\Moisture_sensor\Moisture_sensor.ino: In function 'int readMoisture()':
              
              Moisture_sensor:200: error: 'node' was not declared in this scope
              
                 node.sleep(STABILIZATION_TIME);
              
                 ^
              
              exit status 1
              call to 'MySigningAtsha204Soft::MySigningAtsha204Soft(bool, uint8_t)' uses the default argument for parameter 2, which is not yet defined
              
              

              I have looked through the code but can't seem to see what is wrong with it.

              Please help :)

              mfalkviddM 1 Reply Last reply
              0
              • S simbic

                Trying to get this working but getting alot of errors. New to this so bear with me.

                In file included from C:\...\Arduino\libraries\Moisture_sensor\Moisture_sensor.ino:55:0:
                
                C:\...\Arduino\libraries\MySensors/MyTransportRFM69.h:31:1: error: expected class-name before '{' token
                
                 { 
                
                 ^
                
                C:\...\Arduino\libraries\MySensors/MyTransportRFM69.h:33:36: error: 'RFM69_FREQUENCY' was not declared in this scope
                
                  MyTransportRFM69(uint8_t freqBand=RFM69_FREQUENCY, uint8_t networkId=RFM69_NETWORKID, uint8_t slaveSelectPin=RF69_SPI_CS, uint8_t interruptPin=RF69_IRQ_PIN, bool isRFM69HW=false, uint8_t interruptNum=RF69_IRQ_NUM);
                
                                                    ^
                
                C:\...\Arduino\libraries\MySensors/MyTransportRFM69.h:33:71: error: 'RFM69_NETWORKID' was not declared in this scope
                
                  MyTransportRFM69(uint8_t freqBand=RFM69_FREQUENCY, uint8_t networkId=RFM69_NETWORKID, uint8_t slaveSelectPin=RF69_SPI_CS, uint8_t interruptPin=RF69_IRQ_PIN, bool isRFM69HW=false, uint8_t interruptNum=RF69_IRQ_NUM);
                
                                                                                       ^
                
                In file included from C:\...\Arduino\libraries\Moisture_sensor\Moisture_sensor.ino:56:0:
                
                C:\...\Arduino\libraries\MySensors/MySigningAtsha204Soft.h:55:1: error: expected class-name before '{' token
                
                 { 
                
                 ^
                
                C:\...\Arduino\libraries\MySensors/MySigningAtsha204Soft.h:62:25: error: 'MY_RANDOMSEED_PIN' was not declared in this scope
                
                   uint8_t randomseedPin=MY_RANDOMSEED_PIN);
                
                                         ^
                
                Moisture_sensor:83: error: call to 'MySigningAtsha204Soft::MySigningAtsha204Soft(bool, uint8_t)' uses the default argument for parameter 2, which is not yet defined
                
                 MySigningAtsha204Soft signer;
                
                                       ^
                
                Moisture_sensor:84: error: 'MyHwATMega328' does not name a type
                
                 MyHwATMega328 hw;
                
                 ^
                
                Moisture_sensor:85: error: call to 'MyTransportRFM69::MyTransportRFM69(uint8_t, uint8_t, uint8_t, uint8_t, bool, uint8_t)' uses the default argument for parameter 1, which is not yet defined
                
                 MyTransportRFM69 transport;
                
                                  ^
                
                Moisture_sensor:85: error: call to 'MyTransportRFM69::MyTransportRFM69(uint8_t, uint8_t, uint8_t, uint8_t, bool, uint8_t)' uses the default argument for parameter 2, which is not yet defined
                
                Moisture_sensor:86: error: 'MySensor' does not name a type
                
                 MySensor node(transport, hw, signer);
                
                 ^
                
                C:\...\Arduino\libraries\Moisture_sensor\Moisture_sensor.ino: In function 'void setup()':
                
                Moisture_sensor:112: error: 'node' was not declared in this scope
                
                   node.begin();
                
                   ^
                
                C:\...\Arduino\libraries\Moisture_sensor\Moisture_sensor.ino: In function 'void loop()':
                
                Moisture_sensor:163: error: 'node' was not declared in this scope
                
                   node.send(msgMoisture.set((moistureLevel + oldMoistureLevel) / 2.0 / 10.23, 1));
                
                   ^
                
                C:\...\Arduino\libraries\Moisture_sensor\Moisture_sensor.ino: In function 'int readMoisture()':
                
                Moisture_sensor:200: error: 'node' was not declared in this scope
                
                   node.sleep(STABILIZATION_TIME);
                
                   ^
                
                exit status 1
                call to 'MySigningAtsha204Soft::MySigningAtsha204Soft(bool, uint8_t)' uses the default argument for parameter 2, which is not yet defined
                
                

                I have looked through the code but can't seem to see what is wrong with it.

                Please help :)

                mfalkviddM Offline
                mfalkviddM Offline
                mfalkvidd
                Mod
                wrote on last edited by
                #30

                @simbic did you modify the sketch in any way? If so, could you please post it?

                My guess would be an incomplete #define or using incompatible versions. Which version of MySensors are you using?

                S 1 Reply Last reply
                0
                • mfalkviddM mfalkvidd

                  @simbic did you modify the sketch in any way? If so, could you please post it?

                  My guess would be an incomplete #define or using incompatible versions. Which version of MySensors are you using?

                  S Offline
                  S Offline
                  simbic
                  wrote on last edited by
                  #31

                  @mfalkvidd

                  I have assembled a copy of @carlierd 's office plant monitor since it looked kinda neat.
                  When I first tried to upload @carlierd 's Moisture_sensor.ino it complained that several libraries were missing.
                  So I started google-fu around to find them.
                  What was missing was:
                  MyTransportRFM69.h
                  MyTransport.h
                  MySigningAtsha204Soft.h
                  MySigning.h
                  MyMessage.h

                  aswell as drivers, that I placed in folder /utility/
                  ATSHA204.h
                  RFM69.h
                  sha256.h

                  The code is as follows. I have only pressed include mysensors' library since it complained that it was missing.

                  /**
                   * The MySensors Arduino library handles the wireless radio link and protocol
                   * between your home built sensors/actuators and HA controller of choice.
                   * The sensors forms a self healing radio network with optional repeaters. Each
                   * repeater and gateway builds a routing tables in EEPROM which keeps track of the
                   * network topology allowing messages to be routed to nodes.
                   *
                   * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
                   * Copyright (C) 2013-2015 Sensnology AB
                   * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
                   *
                   * Documentation: http://www.mysensors.org
                   * Support Forum: http://forum.mysensors.org
                   *
                   * This program is free software; you can redistribute it and/or
                   * modify it under the terms of the GNU General Public License
                   * version 2 as published by the Free Software Foundation.
                   *
                   * Code and idea from mfalkvidd (http://forum.mysensors.org/user/mfalkvidd).
                   *
                   */
                  
                  /**************************************************************************************/
                  /* Moisture sensor.                                                                   */
                  /*                                                                                    */
                  /* Version     : 1.2.5                                                                */
                  /* Date        : 11/04/2016                                                           */
                  /* Modified by : David Carlier                                                        */
                  /**************************************************************************************/
                  /*                                ---------------                                     */
                  /*                            RST |             |  A5                                 */
                  /*                            RX  |             |  A4                                 */
                  /*                            TX  |   ARDUINO   |  A3                                 */
                  /*     RFM69 (DIO0) --------- D2  |     UNO     |  A2                                 */
                  /*                            D3  |             |  A1 --------- Moisture probe        */
                  /*            Power --------- D4  | ATMEGA 328p |  A0 --------- Moisture probe        */
                  /*              +3v --------- VCC |             | GND --------- GND                   */
                  /*              GND --------- GND |  8MHz int.  | REF                                 */
                  /*                            OSC |             | VCC --------- +3v                   */
                  /*                            OSC |             | D13 --------- RFM69 (SCK)           */
                  /*                            D5  |             | D12 --------- RFM69 (MISO)          */
                  /*                            D6  |             | D11 --------- RFM69 (MOSI)          */
                  /*                            D7  |             | D10 --------- RFM69 (NSS)           */
                  /*              LED --------- D8  |             |  D9                                 */
                  /*                                ---------------                                     */
                  /*                                                                                    */
                  /* +3v = 2*AA                                                                         */
                  /*                                                                                    */
                  /**************************************************************************************/
                  
                  
                  #include <SPI.h>
                  #include <MySensors.h>
                  #include <MyTransportRFM69.h>
                  #include <MySigningAtsha204Soft.h>
                  
                  
                  //Define functions
                  #define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
                  #define N_ELEMENTS(array) (sizeof(array)/sizeof((array)[0]))
                  
                  //Constants for MySensors
                  #define SKETCH_NAME           "Moisture Sensor"
                  #define SKETCH_VERSION        "1.2.6"
                  #define CHILD_ID_MOISTURE     0
                  #define CHILD_ID_VOLTAGE      1
                  #define LED_PIN               8
                  #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
                  //#define BATTERY_FULL          3143    // 2xAA usually gives 3.143V when full
                  #define BATTERY_FULL          3100    // CR2032 usually gives 3.1V when full
                  #define BATTERY_ZERO          2340    // 2.34V limit for 328p at 8MHz
                  #define SLEEP_TIME            7200000 // Sleep time between reads (in milliseconds) (close to 2 hours)
                  const int SENSOR_ANALOG_PINS[] = {A0, A1};
                  
                  
                  //Variables
                  byte direction = 0;
                  int oldMoistureLevel = -1;
                  
                  //Construct MySensors library
                  MySigningAtsha204Soft signer;
                  MyHwATMega328 hw;
                  MyTransportRFM69 transport;
                  MySensor node(transport, hw, signer);
                  MyMessage msgMoisture(CHILD_ID_MOISTURE, V_HUM);
                  MyMessage msgVolt(CHILD_ID_VOLTAGE, V_VOLTAGE);
                  
                  /**************************************************************************************/
                  /* Initialization                                                                     */
                  /**************************************************************************************/
                  void setup()  
                    {
                    //Get time (for setup duration)
                    #ifdef DEBUG
                      unsigned long startTime = millis();
                    #endif
                  
                    //Setup LED pin
                    pinMode(LED_PIN, OUTPUT);
                    blinkLedFastly(3);
                  
                    //Set moisutre sensor pins
                    for (int i = 0; i < N_ELEMENTS(SENSOR_ANALOG_PINS); i++)
                      {
                      pinMode(SENSOR_ANALOG_PINS[i], OUTPUT);
                      digitalWrite(SENSOR_ANALOG_PINS[i], LOW);
                      }
                  
                    //Start MySensors and send the sketch version information to the gateway
                    node.begin();
                    node.sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
                  
                    //Register all sensors
                    node.present(CHILD_ID_MOISTURE, S_HUM);
                    node.present(CHILD_ID_VOLTAGE, S_MULTIMETER);
                  
                    //Setup done !
                    blinkLedFastly(3);
                  
                    //Print setup debug
                    #ifdef DEBUG
                      int duration = millis() - startTime;
                      Serial.print("[Setup duration: "); Serial.print(duration, DEC); Serial.println(" ms]");
                    #endif
                    }
                  
                  /**************************************************************************************/
                  /* Main loop                                                                          */
                  /**************************************************************************************/
                  void loop()
                    {
                    //Get time (for a complete loop)
                    #ifdef DEBUG
                      unsigned long startTime = millis();
                    #endif
                  
                    //Get moisture level
                    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
                    //Check if it was first reading, save current value as old
                    if (oldMoistureLevel == -1)
                      { 
                      oldMoistureLevel = moistureLevel;
                      }
                  
                    //Verify if current measurement is not too far from the previous one
                    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();
                      }
                  
                    //Store current moisture level
                    oldMoistureLevel = moistureLevel;
                  
                    //Report data to the gateway
                    long voltage = getVoltage();
                    node.send(msgMoisture.set((moistureLevel + oldMoistureLevel) / 2.0 / 10.23, 1));
                    node.send(msgVolt.set(voltage / 1000.0, 2));
                    int batteryPcnt = round((voltage - BATTERY_ZERO) * 100.0 / (BATTERY_FULL - BATTERY_ZERO));
                    if (batteryPcnt > 100) {batteryPcnt = 100;}
                    node.sendBatteryLevel(batteryPcnt);
                  
                    //Print debug
                    #ifdef DEBUG
                      Serial.print((moistureLevel + oldMoistureLevel) / 2.0 / 10.23);
                      Serial.print("%");
                      Serial.print("   ");
                      Serial.print(voltage / 1000.0);
                      Serial.print("v");
                      Serial.print("   ");
                      Serial.print(batteryPcnt);
                      Serial.print("%");
                      int duration = millis() - startTime;
                      Serial.print("   ");
                      Serial.print("["); Serial.print(duration, DEC); Serial.println(" ms]");
                      Serial.flush();
                    #endif
                  
                    //Sleep until next measurement
                    blinkLedFastly(1);
                    node.sleep(SLEEP_TIME);
                    }
                  
                  /**************************************************************************************/
                  /* Allows to get moisture.                                                            */
                  /**************************************************************************************/
                  int readMoisture()
                    {
                    //Power on the sensor and read once to let the ADC capacitor start charging
                    pinMode(SENSOR_ANALOG_PINS[direction], INPUT_PULLUP);
                    analogRead(SENSOR_ANALOG_PINS[direction]);
                    
                    //Stabilize and read the value
                    node.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);
                  
                    //Make direction alternate between 0 and 1 to reverse polarity which reduces corrosion
                    direction = (direction + 1) % 2;
                    return moistureLevel;
                    }
                  
                  /**************************************************************************************/
                  /* Allows to fastly blink the LED.                                                    */
                  /**************************************************************************************/
                  void blinkLedFastly(byte loop)
                    {
                    byte delayOn = 150;
                    byte delayOff = 150;
                    for (int i = 0; i < loop; i++)
                      {
                      blinkLed(LED_PIN, delayOn);
                      delay(delayOff);
                      }
                    }
                  
                  /**************************************************************************************/
                  /* Allows to blink a LED.                                                             */
                  /**************************************************************************************/
                  void blinkLed(byte pinToBlink, int delayInMs)
                    {
                    digitalWrite(pinToBlink,HIGH);
                    delay(delayInMs);
                    digitalWrite(pinToBlink,LOW);
                    }
                  
                  /**************************************************************************************/
                  /* Allows to get the real Vcc (return value in mV).                                   */
                  /* http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/   */
                  /**************************************************************************************/
                  long getVoltage()
                    {
                    ADMUX = (0<<REFS1) | (1<<REFS0) | (0<<ADLAR) | (1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (0<<MUX0);
                    delay(50);  // Let mux settle a little to get a more stable A/D conversion
                    //Start a conversion  
                    ADCSRA |= _BV( ADSC );
                    //Wait for it to complete
                    while (bit_is_set(ADCSRA, ADSC));
                  
                    //Compute and return the value
                    uint8_t low  = ADCL;                  // must read ADCL first - it then locks ADCH
                    uint8_t high = ADCH;                  // unlocks both
                    long result = (high << 8) | low;
                    result = 1125300L / result;           // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
                    return result;                        // Vcc in millivolts
                    }
                  

                  I have just installed Arduino IDE, and are using the latest mysensors library 2.1.1.

                  Another thing it complains about is:

                  Invalid library found in C:\...\Arduino\libraries\Moisture_sensor: C:\...\Arduino\libraries\Moisture_sensor```
                  

                  which is wierd since I have just copy+pasted it from here:
                  https://www.openhardware.io/view/123/Office-plant-monitor

                  aswell as built the sensor from there.

                  If you can help, I would be very glad, as I just hoped it would be smooth sailing using mysensors. Build, upload and let it work its magic.

                  Tack på förhand!
                  Simon

                  mfalkviddM 1 Reply Last reply
                  0
                  • S simbic

                    @mfalkvidd

                    I have assembled a copy of @carlierd 's office plant monitor since it looked kinda neat.
                    When I first tried to upload @carlierd 's Moisture_sensor.ino it complained that several libraries were missing.
                    So I started google-fu around to find them.
                    What was missing was:
                    MyTransportRFM69.h
                    MyTransport.h
                    MySigningAtsha204Soft.h
                    MySigning.h
                    MyMessage.h

                    aswell as drivers, that I placed in folder /utility/
                    ATSHA204.h
                    RFM69.h
                    sha256.h

                    The code is as follows. I have only pressed include mysensors' library since it complained that it was missing.

                    /**
                     * The MySensors Arduino library handles the wireless radio link and protocol
                     * between your home built sensors/actuators and HA controller of choice.
                     * The sensors forms a self healing radio network with optional repeaters. Each
                     * repeater and gateway builds a routing tables in EEPROM which keeps track of the
                     * network topology allowing messages to be routed to nodes.
                     *
                     * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
                     * Copyright (C) 2013-2015 Sensnology AB
                     * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
                     *
                     * Documentation: http://www.mysensors.org
                     * Support Forum: http://forum.mysensors.org
                     *
                     * This program is free software; you can redistribute it and/or
                     * modify it under the terms of the GNU General Public License
                     * version 2 as published by the Free Software Foundation.
                     *
                     * Code and idea from mfalkvidd (http://forum.mysensors.org/user/mfalkvidd).
                     *
                     */
                    
                    /**************************************************************************************/
                    /* Moisture sensor.                                                                   */
                    /*                                                                                    */
                    /* Version     : 1.2.5                                                                */
                    /* Date        : 11/04/2016                                                           */
                    /* Modified by : David Carlier                                                        */
                    /**************************************************************************************/
                    /*                                ---------------                                     */
                    /*                            RST |             |  A5                                 */
                    /*                            RX  |             |  A4                                 */
                    /*                            TX  |   ARDUINO   |  A3                                 */
                    /*     RFM69 (DIO0) --------- D2  |     UNO     |  A2                                 */
                    /*                            D3  |             |  A1 --------- Moisture probe        */
                    /*            Power --------- D4  | ATMEGA 328p |  A0 --------- Moisture probe        */
                    /*              +3v --------- VCC |             | GND --------- GND                   */
                    /*              GND --------- GND |  8MHz int.  | REF                                 */
                    /*                            OSC |             | VCC --------- +3v                   */
                    /*                            OSC |             | D13 --------- RFM69 (SCK)           */
                    /*                            D5  |             | D12 --------- RFM69 (MISO)          */
                    /*                            D6  |             | D11 --------- RFM69 (MOSI)          */
                    /*                            D7  |             | D10 --------- RFM69 (NSS)           */
                    /*              LED --------- D8  |             |  D9                                 */
                    /*                                ---------------                                     */
                    /*                                                                                    */
                    /* +3v = 2*AA                                                                         */
                    /*                                                                                    */
                    /**************************************************************************************/
                    
                    
                    #include <SPI.h>
                    #include <MySensors.h>
                    #include <MyTransportRFM69.h>
                    #include <MySigningAtsha204Soft.h>
                    
                    
                    //Define functions
                    #define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
                    #define N_ELEMENTS(array) (sizeof(array)/sizeof((array)[0]))
                    
                    //Constants for MySensors
                    #define SKETCH_NAME           "Moisture Sensor"
                    #define SKETCH_VERSION        "1.2.6"
                    #define CHILD_ID_MOISTURE     0
                    #define CHILD_ID_VOLTAGE      1
                    #define LED_PIN               8
                    #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
                    //#define BATTERY_FULL          3143    // 2xAA usually gives 3.143V when full
                    #define BATTERY_FULL          3100    // CR2032 usually gives 3.1V when full
                    #define BATTERY_ZERO          2340    // 2.34V limit for 328p at 8MHz
                    #define SLEEP_TIME            7200000 // Sleep time between reads (in milliseconds) (close to 2 hours)
                    const int SENSOR_ANALOG_PINS[] = {A0, A1};
                    
                    
                    //Variables
                    byte direction = 0;
                    int oldMoistureLevel = -1;
                    
                    //Construct MySensors library
                    MySigningAtsha204Soft signer;
                    MyHwATMega328 hw;
                    MyTransportRFM69 transport;
                    MySensor node(transport, hw, signer);
                    MyMessage msgMoisture(CHILD_ID_MOISTURE, V_HUM);
                    MyMessage msgVolt(CHILD_ID_VOLTAGE, V_VOLTAGE);
                    
                    /**************************************************************************************/
                    /* Initialization                                                                     */
                    /**************************************************************************************/
                    void setup()  
                      {
                      //Get time (for setup duration)
                      #ifdef DEBUG
                        unsigned long startTime = millis();
                      #endif
                    
                      //Setup LED pin
                      pinMode(LED_PIN, OUTPUT);
                      blinkLedFastly(3);
                    
                      //Set moisutre sensor pins
                      for (int i = 0; i < N_ELEMENTS(SENSOR_ANALOG_PINS); i++)
                        {
                        pinMode(SENSOR_ANALOG_PINS[i], OUTPUT);
                        digitalWrite(SENSOR_ANALOG_PINS[i], LOW);
                        }
                    
                      //Start MySensors and send the sketch version information to the gateway
                      node.begin();
                      node.sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
                    
                      //Register all sensors
                      node.present(CHILD_ID_MOISTURE, S_HUM);
                      node.present(CHILD_ID_VOLTAGE, S_MULTIMETER);
                    
                      //Setup done !
                      blinkLedFastly(3);
                    
                      //Print setup debug
                      #ifdef DEBUG
                        int duration = millis() - startTime;
                        Serial.print("[Setup duration: "); Serial.print(duration, DEC); Serial.println(" ms]");
                      #endif
                      }
                    
                    /**************************************************************************************/
                    /* Main loop                                                                          */
                    /**************************************************************************************/
                    void loop()
                      {
                      //Get time (for a complete loop)
                      #ifdef DEBUG
                        unsigned long startTime = millis();
                      #endif
                    
                      //Get moisture level
                      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
                      //Check if it was first reading, save current value as old
                      if (oldMoistureLevel == -1)
                        { 
                        oldMoistureLevel = moistureLevel;
                        }
                    
                      //Verify if current measurement is not too far from the previous one
                      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();
                        }
                    
                      //Store current moisture level
                      oldMoistureLevel = moistureLevel;
                    
                      //Report data to the gateway
                      long voltage = getVoltage();
                      node.send(msgMoisture.set((moistureLevel + oldMoistureLevel) / 2.0 / 10.23, 1));
                      node.send(msgVolt.set(voltage / 1000.0, 2));
                      int batteryPcnt = round((voltage - BATTERY_ZERO) * 100.0 / (BATTERY_FULL - BATTERY_ZERO));
                      if (batteryPcnt > 100) {batteryPcnt = 100;}
                      node.sendBatteryLevel(batteryPcnt);
                    
                      //Print debug
                      #ifdef DEBUG
                        Serial.print((moistureLevel + oldMoistureLevel) / 2.0 / 10.23);
                        Serial.print("%");
                        Serial.print("   ");
                        Serial.print(voltage / 1000.0);
                        Serial.print("v");
                        Serial.print("   ");
                        Serial.print(batteryPcnt);
                        Serial.print("%");
                        int duration = millis() - startTime;
                        Serial.print("   ");
                        Serial.print("["); Serial.print(duration, DEC); Serial.println(" ms]");
                        Serial.flush();
                      #endif
                    
                      //Sleep until next measurement
                      blinkLedFastly(1);
                      node.sleep(SLEEP_TIME);
                      }
                    
                    /**************************************************************************************/
                    /* Allows to get moisture.                                                            */
                    /**************************************************************************************/
                    int readMoisture()
                      {
                      //Power on the sensor and read once to let the ADC capacitor start charging
                      pinMode(SENSOR_ANALOG_PINS[direction], INPUT_PULLUP);
                      analogRead(SENSOR_ANALOG_PINS[direction]);
                      
                      //Stabilize and read the value
                      node.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);
                    
                      //Make direction alternate between 0 and 1 to reverse polarity which reduces corrosion
                      direction = (direction + 1) % 2;
                      return moistureLevel;
                      }
                    
                    /**************************************************************************************/
                    /* Allows to fastly blink the LED.                                                    */
                    /**************************************************************************************/
                    void blinkLedFastly(byte loop)
                      {
                      byte delayOn = 150;
                      byte delayOff = 150;
                      for (int i = 0; i < loop; i++)
                        {
                        blinkLed(LED_PIN, delayOn);
                        delay(delayOff);
                        }
                      }
                    
                    /**************************************************************************************/
                    /* Allows to blink a LED.                                                             */
                    /**************************************************************************************/
                    void blinkLed(byte pinToBlink, int delayInMs)
                      {
                      digitalWrite(pinToBlink,HIGH);
                      delay(delayInMs);
                      digitalWrite(pinToBlink,LOW);
                      }
                    
                    /**************************************************************************************/
                    /* Allows to get the real Vcc (return value in mV).                                   */
                    /* http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/   */
                    /**************************************************************************************/
                    long getVoltage()
                      {
                      ADMUX = (0<<REFS1) | (1<<REFS0) | (0<<ADLAR) | (1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (0<<MUX0);
                      delay(50);  // Let mux settle a little to get a more stable A/D conversion
                      //Start a conversion  
                      ADCSRA |= _BV( ADSC );
                      //Wait for it to complete
                      while (bit_is_set(ADCSRA, ADSC));
                    
                      //Compute and return the value
                      uint8_t low  = ADCL;                  // must read ADCL first - it then locks ADCH
                      uint8_t high = ADCH;                  // unlocks both
                      long result = (high << 8) | low;
                      result = 1125300L / result;           // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
                      return result;                        // Vcc in millivolts
                      }
                    

                    I have just installed Arduino IDE, and are using the latest mysensors library 2.1.1.

                    Another thing it complains about is:

                    Invalid library found in C:\...\Arduino\libraries\Moisture_sensor: C:\...\Arduino\libraries\Moisture_sensor```
                    

                    which is wierd since I have just copy+pasted it from here:
                    https://www.openhardware.io/view/123/Office-plant-monitor

                    aswell as built the sensor from there.

                    If you can help, I would be very glad, as I just hoped it would be smooth sailing using mysensors. Build, upload and let it work its magic.

                    Tack på förhand!
                    Simon

                    mfalkviddM Offline
                    mfalkviddM Offline
                    mfalkvidd
                    Mod
                    wrote on last edited by
                    #32

                    @simbic that sketch is made for MySensors 1.x so it won't work with MySensors 2.x.

                    You either need to convert it (guide: https://forum.mysensors.org/topic/4276/converting-a-sketch-from-1-5-x-to-2-0-x) or use/create one for 2.x, for example https://www.mysensors.org/build/moisture

                    1 Reply Last reply
                    0
                    • Nca78N Nca78

                      @NeverDie said in Office plant monitor:

                      Completely unrelated, but I just noticed this:
                      https://www.aliexpress.com/item/SHT10-SHT11-SHT15-waterproof-sensor-case-temperature-and-humidity-protective-cover-soil-sensor-cover-40mm-15mm/32575966509.html?spm=2114.8153822.cb0001.16.lITM8E&scm=1007.13409.76764.0&amp;pvid=0acc75b7-138d-456f-a5bf-5147c2ea763f&amp;tpp=1
                      So with that, you could just use a regular humidity sensor inside it to judge soil moisture. Pretty cool, yes? Not sure how big it is, but maybe you could even fit your entire sensor node inside it.

                      One of the local shops I buy electronic parts from has those. Unfortunately it's too small to house an entire sensor.

                      NeverDieN Offline
                      NeverDieN Offline
                      NeverDie
                      Hero Member
                      wrote on last edited by NeverDie
                      #33

                      @Nca78

                      I see now that they have expanded their selection of waterproof sensor shells:

                      https://www.aliexpress.com/item/2pcs-Waterproof-Temperature-and-humidity-sensor-shell-SHT10-SHT21-SHT15-shT11-sht20-SHT75-sensor-protective-sleeve/32725766858.html?spm=2114.10010108.1000013.6.PVGRb3&traffic_analysisId=recommend_2088_3_81019_new2&scm=1007.13339.81019.0&pvid=b9edd7ff-9069-4c39-be95-b2d3ca8bdf17&tpp=1

                      https://www.aliexpress.com/item/2pcs-YS1560J-Temperature-and-humidity-sensor-shell-Waterproof-temperature-sensor-protective-cover-SHT10-SHT15-SHT20/32725840346.html?spm=2114.10010108.1000013.25.PVGRb3&traffic_analysisId=recommend_2088_13_81019_new2&scm=1007.13339.81019.0&pvid=b9edd7ff-9069-4c39-be95-b2d3ca8bdf17&tpp=1

                      https://www.aliexpress.com/item/TM16-115-temperature-and-humidity-sensor-protective-cover-waterproof-SHT10-SHT11-SHT20-SHT21-SHT15-SHT75-sensor/32578099865.html?spm=2114.10010108.1000013.10.gZI6yC&traffic_analysisId=recommend_2088_5_82199_new&scm=1007.13339.82199.0&pvid=3cc09c58-99e7-4a67-834a-3313c87ab573&tpp=1

                      Perhaps one of those might be big enough? Or, if not, perhaps it could be joined onto a larger waterproof cavity, and just the sensor itself goes into it? Unfortunately for me, the parts appear to be metric. However, maybe a search would yield some kind of metric-to-imperial union, at which point I could then leverage cheap local parts from Home Depot or the like, to fabricate a larger cavity for the rest of a wireless mote.

                      On the face of it, it seems plausible. It's main virtue is simplicity. Not sure what the failure modes are, or how they might be avoided if there are any. Plainly, you don't want to use components which might rust or otherwise corrode from humidity. Probably my biggest worry would be the possibility of condensate forming on the humidity sensor and skewing results until it evaporated. However, a sensor heater, such as some sensors (e.g. si7021: https://www.aliexpress.com/item/Industrial-High-Precision-Si7021-Humidity-Sensor-with-I2C-Interface-for-Arduino/32524005324.html?spm=a2g0s.13010208.99999999.350.t9NHvJ ) already have, might remedy that if it were to occur.

                      Has anyone tried either one of the above or anything similar? For instance, perhaps wrapping a mote in Tyvek and sealing the seam with Dupont housewrap tape would work just as well.

                      Nca78N 1 Reply Last reply
                      0
                      • NeverDieN NeverDie

                        @Nca78

                        I see now that they have expanded their selection of waterproof sensor shells:

                        https://www.aliexpress.com/item/2pcs-Waterproof-Temperature-and-humidity-sensor-shell-SHT10-SHT21-SHT15-shT11-sht20-SHT75-sensor-protective-sleeve/32725766858.html?spm=2114.10010108.1000013.6.PVGRb3&traffic_analysisId=recommend_2088_3_81019_new2&scm=1007.13339.81019.0&pvid=b9edd7ff-9069-4c39-be95-b2d3ca8bdf17&tpp=1

                        https://www.aliexpress.com/item/2pcs-YS1560J-Temperature-and-humidity-sensor-shell-Waterproof-temperature-sensor-protective-cover-SHT10-SHT15-SHT20/32725840346.html?spm=2114.10010108.1000013.25.PVGRb3&traffic_analysisId=recommend_2088_13_81019_new2&scm=1007.13339.81019.0&pvid=b9edd7ff-9069-4c39-be95-b2d3ca8bdf17&tpp=1

                        https://www.aliexpress.com/item/TM16-115-temperature-and-humidity-sensor-protective-cover-waterproof-SHT10-SHT11-SHT20-SHT21-SHT15-SHT75-sensor/32578099865.html?spm=2114.10010108.1000013.10.gZI6yC&traffic_analysisId=recommend_2088_5_82199_new&scm=1007.13339.82199.0&pvid=3cc09c58-99e7-4a67-834a-3313c87ab573&tpp=1

                        Perhaps one of those might be big enough? Or, if not, perhaps it could be joined onto a larger waterproof cavity, and just the sensor itself goes into it? Unfortunately for me, the parts appear to be metric. However, maybe a search would yield some kind of metric-to-imperial union, at which point I could then leverage cheap local parts from Home Depot or the like, to fabricate a larger cavity for the rest of a wireless mote.

                        On the face of it, it seems plausible. It's main virtue is simplicity. Not sure what the failure modes are, or how they might be avoided if there are any. Plainly, you don't want to use components which might rust or otherwise corrode from humidity. Probably my biggest worry would be the possibility of condensate forming on the humidity sensor and skewing results until it evaporated. However, a sensor heater, such as some sensors (e.g. si7021: https://www.aliexpress.com/item/Industrial-High-Precision-Si7021-Humidity-Sensor-with-I2C-Interface-for-Arduino/32524005324.html?spm=a2g0s.13010208.99999999.350.t9NHvJ ) already have, might remedy that if it were to occur.

                        Has anyone tried either one of the above or anything similar? For instance, perhaps wrapping a mote in Tyvek and sealing the seam with Dupont housewrap tape would work just as well.

                        Nca78N Offline
                        Nca78N Offline
                        Nca78
                        Hardware Contributor
                        wrote on last edited by
                        #34

                        @NeverDie they are all very small inside (5-6mm) so are only suitable for very thin PCB with SMD version of the sensor, even the breakout of si7021 that you linked is too big.

                        NeverDieN 2 Replies Last reply
                        1
                        • Nca78N Nca78

                          @NeverDie they are all very small inside (5-6mm) so are only suitable for very thin PCB with SMD version of the sensor, even the breakout of si7021 that you linked is too big.

                          NeverDieN Offline
                          NeverDieN Offline
                          NeverDie
                          Hero Member
                          wrote on last edited by NeverDie
                          #35

                          @Nca78
                          Golly, even an nRF52832 chip all by its lonesome self is bigger than 5-6mm. Those shells must be intended for just the sensor and nothing but the sensor (except maybe connecting wires). That would explain the presence of gland seals on some of them, such as:

                          https://www.aliexpress.com/item/Temperature-and-humidity-sensor-jacket-shell-protective-cover-waterproof-SHT10-SHT15-SHT20/32785090319.html?spm=2114.10010108.1000014.6.oDKhCV&traffic_analysisId=recommend_3035_null_null_null&scm=1007.13338.80878.000000000000000&pvid=2f02fcf9-5f96-485c-b076-6d892d6d2ae5&tpp=1
                          or
                          https://www.aliexpress.com/item/100pcs-lot-Free-shipping-SMD-resettable-fuse-SMD1206P150TF-60-1206-1-5A-1500MA-60V-PPTC/32422603296.html?spm=2114.search0104.3.126.qYG2gx&ws_ab_test=searchweb0_0,searchweb201602_5_10152_10065_10151_10068_10130_10084_10083_10119_10080_10082_10081_10110_10178_10136_10137_10111_10060_10112_5360018_10113_10155_10114_10154_438_10056_10055_10054_10182_10059_100031_10099_10078_10079_10103_10073_10102_10120_10189_10052_10053_10142_10107_10050_10051-10120,searchweb201603_5,ppcSwitch_5&btsid=4b333183-9955-44bb-a985-eb0a3aed0e3f&algo_expid=ad603dac-549a-4315-8ae9-50a2bd436e1b-17&algo_pvid=ad603dac-549a-4315-8ae9-50a2bd436e1b
                          or
                          https://www.aliexpress.com/item/50pcs-lot-Free-shipping-SMD-ceramic-gas-discharge-tube-BC401M-1812-400V-2KA-4-5X3-2X2/32428795826.html?spm=2114.search0104.3.119.qYG2gx&ws_ab_test=searchweb0_0,searchweb201602_5_10152_10065_10151_10068_10130_10084_10083_10119_10080_10082_10081_10110_10178_10136_10137_10111_10060_10112_5360018_10113_10155_10114_10154_438_10056_10055_10054_10182_10059_100031_10099_10078_10079_10103_10073_10102_10120_10189_10052_10053_10142_10107_10050_10051-10120,searchweb201603_5,ppcSwitch_5&btsid=4b333183-9955-44bb-a985-eb0a3aed0e3f&algo_expid=ad603dac-549a-4315-8ae9-50a2bd436e1b-16&algo_pvid=ad603dac-549a-4315-8ae9-50a2bd436e1b

                          1 Reply Last reply
                          0
                          • Nca78N Nca78

                            @NeverDie they are all very small inside (5-6mm) so are only suitable for very thin PCB with SMD version of the sensor, even the breakout of si7021 that you linked is too big.

                            NeverDieN Offline
                            NeverDieN Offline
                            NeverDie
                            Hero Member
                            wrote on last edited by
                            #36

                            @Nca78 said in Office plant monitor:

                            @NeverDie they are all very small inside (5-6mm) so are only suitable for very thin PCB with SMD version of the sensor, even the breakout of si7021 that you linked is too big.

                            I haven't confirmed it, but FWIW according to: http://www.wxforum.net/index.php?topic=32182.0
                            "The model shown in this link is too small for I2C boards, but seller has much larger models. L-04 has 12.8mm opening, L-06 has 17 mm and L-10 has 23mm opening."

                            NeverDieN 1 Reply Last reply
                            1
                            • NeverDieN NeverDie

                              @Nca78 said in Office plant monitor:

                              @NeverDie they are all very small inside (5-6mm) so are only suitable for very thin PCB with SMD version of the sensor, even the breakout of si7021 that you linked is too big.

                              I haven't confirmed it, but FWIW according to: http://www.wxforum.net/index.php?topic=32182.0
                              "The model shown in this link is too small for I2C boards, but seller has much larger models. L-04 has 12.8mm opening, L-06 has 17 mm and L-10 has 23mm opening."

                              NeverDieN Offline
                              NeverDieN Offline
                              NeverDie
                              Hero Member
                              wrote on last edited by NeverDie
                              #37

                              @NeverDie
                              I've since had some communication with the seller. He said, "We have these dimensions," in reference to the photo below that he had attached:

                              0_1500030762964_HTB1nn0uSpXXXXXAXpXXq6xXFXXXk.jpg

                              NeverDieN 1 Reply Last reply
                              1
                              • NeverDieN NeverDie

                                @NeverDie
                                I've since had some communication with the seller. He said, "We have these dimensions," in reference to the photo below that he had attached:

                                0_1500030762964_HTB1nn0uSpXXXXXAXpXXq6xXFXXXk.jpg

                                NeverDieN Offline
                                NeverDieN Offline
                                NeverDie
                                Hero Member
                                wrote on last edited by NeverDie
                                #38

                                The seller says I can buy 3 of the 1" diameter units at $5/pc.

                                The communication with the seller is like playing 20 questions, but I only get to ask one question at a time, with typically one day turnaround for an answer. If I ask more than one question per interaction, he doesn't really answer any of them. So, getting truly meaningful answers is a slow process.

                                Nca78N 1 Reply Last reply
                                0
                                • NeverDieN NeverDie

                                  The seller says I can buy 3 of the 1" diameter units at $5/pc.

                                  The communication with the seller is like playing 20 questions, but I only get to ask one question at a time, with typically one day turnaround for an answer. If I ask more than one question per interaction, he doesn't really answer any of them. So, getting truly meaningful answers is a slow process.

                                  Nca78N Offline
                                  Nca78N Offline
                                  Nca78
                                  Hardware Contributor
                                  wrote on last edited by
                                  #39

                                  @NeverDie that sounds expensive, and I'm worried that at this size it's going to be difficult to stick in the soil for small plants...

                                  NeverDieN 1 Reply Last reply
                                  0
                                  • Nca78N Nca78

                                    @NeverDie that sounds expensive, and I'm worried that at this size it's going to be difficult to stick in the soil for small plants...

                                    NeverDieN Offline
                                    NeverDieN Offline
                                    NeverDie
                                    Hero Member
                                    wrote on last edited by
                                    #40

                                    @Nca78
                                    Well, for small potted plants, you might have to re-pot the plant. However, the nice benefit that would arise is: no visible sensors, which carries with it very high WAF.

                                    1 Reply Last reply
                                    0
                                    • A Offline
                                      A Offline
                                      aramko aramko
                                      Banned
                                      wrote on last edited by aramko aramko
                                      #41
                                      This post is deleted!
                                      1 Reply Last reply
                                      0
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      17

                                      Online

                                      11.7k

                                      Users

                                      11.2k

                                      Topics

                                      113.1k

                                      Posts


                                      Copyright 2025 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