Values which gateway reads are others then sensor sends???
-
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!
-
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.
-
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).
-
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; } } } }
-
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.
-
@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) {}
-
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.
-
@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()
tovoid incomingMessageESP()
and called that instead of the old in hisgw.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.
-
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.
Suggested Topics
-
Day 1 - Status report
Announcements • 23 Mar 2014, 22:45 • hek 24 Mar 2014, 20:12 -
Extraneous info in Debug log
Troubleshooting • 28 Jun 2024, 22:42 • Gibber 28 Jun 2024, 22:42 -
Can not compile MySensors on esp8266
Troubleshooting • 24 Aug 2024, 15:35 • TheoL 29 Aug 2024, 20:47 -
Echo request is not set
Troubleshooting • 12 Aug 2024, 15:36 • kamilb85 3 Sept 2024, 08:58 -
Suddenly a Sensor is Missing, not the whole Node. (RPI Eth Gateway, HA)
Troubleshooting • 3 Jul 2024, 07:20 • se-O-matic 15 Jul 2024, 08:45