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. Troubleshooting
  3. Values which gateway reads are others then sensor sends???

Values which gateway reads are others then sensor sends???

Scheduled Pinned Locked Moved Troubleshooting
9 Posts 5 Posters 2.6k Views 5 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.
  • HarrySteffH Offline
    HarrySteffH Offline
    HarrySteff
    wrote on last edited by HarrySteff
    #1

    Hi,
    i have a Problem. Using a sensebender micro as (Test)sensor and a ESP8266 as wifi gateway.
    So my problem is the following:

    This is what the sensor sends out:

    send: 15-15-0-0 s=1,c=1,t=0,pt=7,l=5,sg=0,st=ok:23.5
    send: 15-15-0-0 s=2,c=1,t=1,pt=2,l=2,sg=0,st=ok:64
    send: 15-15-0-0 s=3,c=1,t=0,pt=6,l=1,sg=0,st=ok:00
    send: 15-15-0-0 s=4,c=1,t=0,pt=6,l=1,sg=0,st=ok:00
    

    And this what my gateway gets:

    0;0;3;0;9;read: 15-15-0 s=1,c=1,t=0,pt=7,l=5,sg=0:23.5
    15;1;1;0;0;23.5
    Node-Sensor (yourvariable) 15-1; Value 23.5
    0;0;3;0;9;read: 15-15-0 s=2,c=1,t=1,pt=2,l=2,sg=0:1102839872
    15;2;1;0;1;1090519104
    Node-Sensor (yourvariable) 15-2; Value 1090519104
    0;0;3;0;9;read: 15-15-0 s=3,c=1,t=0,pt=6,l=1,sg=0:00
    15;3;1;0;0;00
    Node-Sensor (yourvariable) 15-3; Value 00
    0;0;3;0;9;read: 15-15-0 s=4,c=1,t=0,pt=6,l=1,sg=0:00
    15;4;1;0;0;00
    Node-Sensor (yourvariable) 15-4; Value 00
    

    The Value for Humidity from S2 looks very strange... Can anybody help me what i do wrong?
    (I tried it with example esp6266 sketch, too -> same strange values)

    Thank you!

    1 Reply Last reply
    0
    • mfalkviddM Offline
      mfalkviddM Offline
      mfalkvidd
      Mod
      wrote on last edited by
      #2

      Looks like the same problem as here: https://forum.mysensors.org/topic/2737/2-channel-relais-with-2-buttons-sending-strange-values-for-on-off - see if that helps.

      1 Reply Last reply
      0
      • AndurilA Offline
        AndurilA Offline
        Anduril
        wrote on last edited by
        #3

        Could you please post the versions of your ESP8266 library and MySensors library? As mfalkvidd said I had a similar problem and could fix it with newest versions for the ESP8266 gateway (no need to upgrade the nodes if not wanted).

        1 Reply Last reply
        1
        • HarrySteffH Offline
          HarrySteffH Offline
          HarrySteff
          wrote on last edited by HarrySteff
          #4

          Sorry @Anduril i don't know how to figure it out...
          This is the corresponding thread in pimatic-forum:
          https://forum.pimatic.org/topic/1853/mysensors-esp8266gateway-with-direct-rest-api-access-to-pimatic
          but here is the sketch:

          /**
           * 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.
           *
           *******************************
           *
           * REVISION HISTORY
           * 1.2 HvdW - add REST-API functionality to push sensor data to pimatic
           * 1.1 HvdW - add mDNS, static ip
           * Version 1.0 - Henrik EKblad
           * Contribution by a-lurker and Anticimex, 
           * Contribution by Norbert Truchsess <norbert.truchsess@t-online.de>
           * Contribution by Ivo Pullens (ESP8266 support)
           * 
           * DESCRIPTION
           * The EthernetGateway sends data received from sensors to the WiFi link. 
           * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
           *
           * VERA CONFIGURATION:
           * Enter "ip-number:port" in the ip-field of the Arduino GW device. This will temporarily override any serial configuration for the Vera plugin. 
           * E.g. If you want to use the defualt values in this sketch enter: 192.168.178.66:5003
           *
           * LED purposes:
           * - To use the feature, uncomment WITH_LEDS_BLINKING in MyConfig.h
           * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
           * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
           * - ERR (red) - fast blink on error during transmission error or recieve crc error  
           * 
           * See http://www.mysensors.org/build/ethernet_gateway for wiring instructions.
           * The ESP8266 however requires different wiring:
           * nRF24L01+  ESP8266
           * VCC        VCC
           * CE         GPIO4          
           * CSN/CS     GPIO15
           * SCK        GPIO14
           * MISO       GPIO12
           * MOSI       GPIO13
           *            
           * Not all ESP8266 modules have all pins available on their external interface.
           * This code has been tested on an ESP-12 module.
           * The ESP8266 requires a certain pin configuration to download code, and another one to run code:
           * - Connect REST (reset) via 10K pullup resistor to VCC, and via switch to GND ('reset switch')
           * - Connect GPIO15 via 10K pulldown resistor to GND
           * - Connect CH_PD via 10K resistor to VCC
           * - Connect GPIO2 via 10K resistor to VCC
           * - Connect GPIO0 via 10K resistor to VCC, and via switch to GND ('bootload switch')
           * 
            * Inclusion mode button:
           * - Connect GPIO5 via switch to GND ('inclusion switch')
           * 
           * Hardware SHA204 signing is currently not supported!
           *
           * Make sure to fill in your ssid and WiFi password below for ssid & pass.
           */
          #define NO_PORTB_PINCHANGES 
          
          #include <SPI.h>  
          
          #include <MySigningNone.h> 
          #include <MySigningAtsha204Soft.h>
          #include <MyTransportNRF24.h>
          #include <MyTransportRFM69.h>
          #include <EEPROM.h>
          #include <MyHwESP8266.h>
          #include <ESP8266WiFi.h>
          
          #include <MyParserSerial.h>  
          #include <MySensor.h>  
          #include <stdarg.h>
          #include "GatewayUtil.h"
          
          #include <ESP8266mDNS.h>
          #include <Base64.h>
          
          #define MY_DEBUG 
          
          
          ///////////// WLAN settings ////////////
          const char *ssid =  "Fritzbox7390";    // cannot be longer than 32 characters!
          const char *pass =  "**************"; //
          String espName    = "esp8266gateway";  // for avahi/bonjour name => gives in this example esp8266gateway.local
          
          ///////////// pimatic settings ////////////
          String pim_host = "192.168.0.120";   // your pimatic server
          const int pim_port = 8080;                // your pimatic server port
          String pim_user =  "admin";             // the user you use to read from & write to pimatic
          String pim_pass =  "********";             // The password for that pim_user
          
          char authVal[40];  
          char authValEncoded[40];
          
          ///////////// Configure a static ip address ////////////
          IPAddress ip(192,168,0,135);
          IPAddress gateway(192,168,0,1);
          IPAddress subnet(255,255,255,0);
          
          
          #define INCLUSION_MODE_TIME 1 // Number of minutes inclusion mode is enabled
          #define INCLUSION_MODE_PIN  5 // Digital pin used for inclusion mode button
          
          #define RADIO_CE_PIN        4   // radio chip enable
          #define RADIO_SPI_SS_PIN    15  // radio SPI serial select
          
          #ifdef WITH_LEDS_BLINKING
          #define RADIO_ERROR_LED_PIN 7  // Error led pin
          #define RADIO_RX_LED_PIN    8  // Receive led pin
          #define RADIO_TX_LED_PIN    9  // the PCB, on board LED
          #endif
          
          
          // NRFRF24L01 radio driver (set low transmit power by default) 
          MyTransportNRF24 transport(RADIO_CE_PIN, RADIO_SPI_SS_PIN, RF24_PA_LEVEL_GW);
          //MyTransportRFM69 transport;
          
          
          // Message signing driver (signer needed if MY_SIGNING_FEATURE is turned on in MyConfig.h)
          #ifdef MY_SIGNING_FEATURE
          MySigningNone signer;
          //MySigningAtsha204Soft signer;
          #endif
          
          // Hardware profile 
          MyHwESP8266 hw;
          
          // Construct MySensors library (signer needed if MY_SIGNING_FEATURE is turned on in MyConfig.h)
          // To use LEDs blinking, uncomment WITH_LEDS_BLINKING in MyConfig.h
          MySensor gw(transport, hw
          #ifdef MY_SIGNING_FEATURE
              , signer
          #endif
          #ifdef WITH_LEDS_BLINKING
            , RADIO_RX_LED_PIN, RADIO_TX_LED_PIN, RADIO_ERROR_LED_PIN
          #endif
            );
            
          
          #define IP_PORT 5003         // The port you want to open 
          #define MAX_SRV_CLIENTS 5    // how many clients should be able to telnet to this ESP8266
          
          // a R/W server on the port
          static WiFiServer server(IP_PORT);
          static WiFiClient clients[MAX_SRV_CLIENTS];
          static bool clientsConnected[MAX_SRV_CLIENTS];
          static inputBuffer inputString[MAX_SRV_CLIENTS];
          
          // Activate mDNS
          MDNSResponder   mdns;
          
          String ClientIP;
          // send data
          WiFiClient client;
          
          
          #define ARRAY_SIZE(x)  (sizeof(x)/sizeof(x[0]))
          
          
          void output(const char *fmt, ... )
          {
            char serialBuffer[MAX_SEND_LENGTH];
            va_list args;
            va_start (args, fmt );
            vsnprintf_P(serialBuffer, MAX_SEND_LENGTH, fmt, args);
            va_end (args);
            Serial.print(serialBuffer);
            for (uint8_t i = 0; i < ARRAY_SIZE(clients); i++)
            {
              if (clients[i] && clients[i].connected())
              {
          //       Serial.print("Client "); Serial.print(i); Serial.println(" write");
                 clients[i].write((uint8_t*)serialBuffer, strlen(serialBuffer));
              }
            }
          }
          
          void incomingMessageESP(const MyMessage &message) {
            String yourdata;
             char yourvariable[10];
          
            // Pass along the message from sensors to serial line
            serial(PSTR("%d;%d;%d;%d;%d;%s\n"),message.sender, message.sensor, mGetCommand(message), mGetAck(message), message.type, message.getString(convBuf));
            Serial.print("Node-Sensor (yourvariable) ");Serial.print(message.sender);Serial.print("-");Serial.print(message.sensor);Serial.print("; Value ");Serial.println(message.getString(convBuf));
          
              char host_char_array[pim_host.length()+1];
            pim_host.toCharArray(host_char_array,pim_host.length()+1);
            
            if (!client.connect(host_char_array, pim_port)) {
              Serial.println("connection failed");
              return;
            }
            
            // calculate Base64Login
            memset(authVal,0,40);
            (pim_user + String(":") + pim_pass).toCharArray(authVal, 40);
            memset(authValEncoded,0,40);
            base64_encode(authValEncoded, authVal, (pim_user + String(":") + pim_pass).length());
          
            
            //Send Value received from node
            yourdata = "{\"type\": \"value\", \"valueOrExpression\": \"" + String(message.getString(convBuf)) + "\"}";
            sprintf(yourvariable, "%d-%d",message.sender,message.sensor);
             
              client.print("PATCH /api/variables/");
              client.print(yourvariable);
              client.print(" HTTP/1.1\r\n");
              client.print("Authorization: Basic ");
              client.print(authValEncoded);
              client.print("\r\n");
              client.print("Host: " + pim_host +"\r\n");
              client.print("Content-Type:application/json\r\n");
              client.print("Content-Length: ");
              client.print(yourdata.length());
              client.print("\r\n\r\n");
              client.print(yourdata);  
          
          } 
          
          
          void checkwifi(){
            //check if connected to wifi - if not connect
            if (WiFi.status() != WL_CONNECTED){
              (void)WiFi.begin(ssid, pass);
              while (WiFi.status() != WL_CONNECTED){
                delay(500);
                Serial.print(".");
              }
              // When connected set static ip
              WiFi.config(ip, gateway, subnet);
            Serial.println("Connected!");  Serial.print("IP: "); Serial.println(WiFi.localIP());  Serial.flush();
            }
          }
          
          
          void setup()  
          { 
            // Setup console
            hw_init();
          
            Serial.println(); Serial.println();
            Serial.println("ESP8266 MySensors Gateway with pimatic interface");
            Serial.print("Connecting to "); Serial.println(ssid);
          
            checkwifi();
          
            // Start mDNS service
            if (!mdns.begin(espName.c_str(), WiFi.localIP())) {
              Serial.println("Error setting up MDNS responder!");
              while(1) { 
                delay(1000);
              }
            }
            
            setupGateway(INCLUSION_MODE_PIN, INCLUSION_MODE_TIME, output);
          
            // Initialize gateway at maximum PA level, channel 70 and callback for write operations 
            //gw.begin(incomingMessage, 0, true, 0);
          
            gw.begin(incomingMessageESP, 0, true, 0);
            
            // start listening for clients
            server.begin();
            server.setNoDelay(true);  
          }
          
          
          void loop() {
            gw.process();  
            
            checkButtonTriggeredInclusion();
            checkInclusionFinished();
          
            // Go over list of clients and stop any that are no longer connected.
            // If the server has a new client connection it will be assigned to a free slot.
            bool allSlotsOccupied = true;
            for (uint8_t i = 0; i < ARRAY_SIZE(clients); i++)
            {
              if (!clients[i].connected())
              {
                if (clientsConnected[i])
                {
                  Serial.print("Client "); Serial.print(i); Serial.println(" disconnected");
                  clients[i].stop();
                }
                //check if there are any new clients
                if (server.hasClient())
                {
                  clients[i] = server.available();
                  inputString[i].idx = 0;
                  Serial.print("Client "); Serial.print(i); Serial.println(" connected"); 
                  output(PSTR("0;0;%d;0;%d;Gateway startup complete.\n"),  C_INTERNAL, I_GATEWAY_READY);
                }
              }
              bool connected = clients[i].connected();
              clientsConnected[i] = connected;
              allSlotsOccupied &= connected;
            }
            if (allSlotsOccupied && server.hasClient())
            {
              //no free/disconnected spot so reject
              Serial.println("No free slot available");
              WiFiClient c = server.available();
              c.stop();
            }
            
            // Loop over clients connect and read available data
            for (uint8_t i = 0; i < ARRAY_SIZE(clients); i++)
            {
              while(clients[i].connected() && clients[i].available())
              {
                char inChar = clients[i].read();
                if ( inputString[i].idx < MAX_RECEIVE_LENGTH - 1 )
                { 
                  // if newline then command is complete
                  if (inChar == '\n')
                  {  
                    // a command was issued by the client
                    // we will now try to send it to the actuator
                    inputString[i].string[inputString[i].idx] = 0;
              
                    // echo the string to the serial port
                    Serial.print("Client "); Serial.print(i); Serial.print(": "); Serial.println(inputString[i].string);
              
                    parseAndSend(gw, inputString[i].string);
              
                    // clear the string:
                    inputString[i].idx = 0;
                    // Finished with this client's message. Next loop() we'll see if there's more to read.
                    break;
                  } else {  
                   // add it to the inputString:
                   inputString[i].string[inputString[i].idx++] = inChar;
                  }
                } else {
                  // Incoming message too long. Throw away 
                  Serial.print("Client "); Serial.print(i); Serial.println(": Message too long");
                  inputString[i].idx = 0;
                  // Finished with this client's message. Next loop() we'll see if there's more to read.
                  break;
                }
              }
            }
          }
          
          1 Reply Last reply
          0
          • AndurilA Offline
            AndurilA Offline
            Anduril
            wrote on last edited by
            #5

            Yeah the problem is that this is a 1.5 sketch (and this mod of ESP gateway is only working with 1.5 at the moment) and my problem was solved with the newest dev version.
            So I think best would be to make this mod working with current dev.
            For the others reading this: the sketch has changed the incomingMessage procedure to send a REST-API call to the controller (pimatic) to update sensor values. I talked to him and his problem with migrating this to 2.0 is that this incomingMessage procedure is hidden behind the scenes to make the sketch more readable. Can any of the developers say where this function is now, than the author could adopt.

            mfalkviddM 1 Reply Last reply
            0
            • AndurilA Anduril

              Yeah the problem is that this is a 1.5 sketch (and this mod of ESP gateway is only working with 1.5 at the moment) and my problem was solved with the newest dev version.
              So I think best would be to make this mod working with current dev.
              For the others reading this: the sketch has changed the incomingMessage procedure to send a REST-API call to the controller (pimatic) to update sensor values. I talked to him and his problem with migrating this to 2.0 is that this incomingMessage procedure is hidden behind the scenes to make the sketch more readable. Can any of the developers say where this function is now, than the author could adopt.

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

              @Anduril a conversion guide is availabe at https://docs.google.com/document/d/1NKq5uuNdnxF5jWnum7VT32mbKLjuvqlx2A5D1qQ-H3Q/mobilebasic

              If node expects incoming messages, add the following function to handle data:

              void receive(const MyMessage &msg) {}
              
              1 Reply Last reply
              0
              • martinhjelmareM Offline
                martinhjelmareM Offline
                martinhjelmare
                Plugin Developer
                wrote on last edited by
                #7

                This bug should also be solved in version 1.5.4. Have you tried that version? As I remember it, the bug is present only in 1.5.2-1.5.3.

                1 Reply Last reply
                0
                • AndurilA Offline
                  AndurilA Offline
                  Anduril
                  wrote on last edited by
                  #8

                  @mfalkvidd it's not a node, but a modified version of the gateway. Harry van der Wolf changed it to directly send all incoming data via api to the controller. Therefore he changed the void incomingMessage() to void incomingMessageESP() and called that instead of the old in his gw.begin. Is it possible to manipulate the function for message reading in a similar way with current dev branch?
                  Of course it would be best to use the normal ethernet gateway, but for pimatic there is no plugin capable of connecting to an ethernet gateway, only serial is supported. And those interested in having a ethernet gateway don't have the knowledge to programm it.

                  1 Reply Last reply
                  0
                  • JonnydJ Offline
                    JonnydJ Offline
                    Jonnyd
                    wrote on last edited by
                    #9

                    I have same problem using sensebender as node and ESP8266 as wifi gateway with the sense bender node reporting HUM as a 10 digit number. Mysensors 1.5 lib and 2.0.0 ESP8266 (no diff with 2.0.3). Only affects the HUM reading - not the temp or batt voltage. Interestingly a standard mysensors DHT11 node reports HUM correctly in the gateway while simultaneously the sensebender node does not. Will try the Dev library next.

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


                    28

                    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