Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incompatibility to WiFi Manager or another WiFi Connection? #2

Closed
gon0 opened this issue Oct 30, 2017 · 8 comments
Closed

Incompatibility to WiFi Manager or another WiFi Connection? #2

gon0 opened this issue Oct 30, 2017 · 8 comments
Assignees

Comments

@gon0
Copy link

gon0 commented Oct 30, 2017

First of all: great idea! Since I have a FritzBox 6490 Cable, I would like to use this library.

My Network looks like this:
ESP8266 <-WiFi-> WiFi Access point <-LAN-cable-> FritzBox 6490

This is the configuration:

#include <tr064.h>
//IP address of your router. This should be "192.168.179.1" for all FRITZ!Boxes
const char* IP = "192.168.123.254";
//Port of the API of your router. This should be 49000 for all TR-064 devices.
const int PORT = 49000;
//The username if you created and account, "admin" otherwise
const char* fuser = "ESP8266_homechecker";
//The password for the aforementioned account.
const char* fpass = "homechecker-Password";

If i add the following under Setup(),

//### with the following two lines, I get an Exception(29) ####
  WiFiManager wifiManager;
  wifiManager.autoConnect("AP-ssid", "password");
//###############################################


  //Initialize the TR-064 library
  //(IMPORTANT!)
  Serial.printf("Initialize TR-064 connection");
  connection.init();
  //Request the number of (connected) Wifi-Devices
  int numDev = getWifiNumber();
  Serial.printf("WIFI has %d (connected) devices.\n", numDev);
  //Check the status of all the devices connected to wifi
  getStatusOfAllWifi(numDev);
  //Get the number of all devices, that are known to this router
  numDev = getDeviceNumber();
  Serial.printf("Router has %d known devices.\n", numDev);

this is the serial output when connection.init(); was called:

Exception (29):
epc1=0x4000e1b2 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

ctx: cont 
sp: 3fff3380 end: 3fff3990 offset: 01a0

>>>stack>>>
3fff3520:  00000040 00000082 3fffb304 40234ae1  
3fff3530:  3fff8c1c 3fff8714 00000000 00000041  
3fff3540:  00000040 0000003f 00000000 00000041  
3fff3550:  3fffbd24 00000000 3fffb394 3fff8c04  
3fff3560:  3fffbe20 3fffbf2c 3fff8714 3fff8714  
3fff3570:  00000040 3fff8714 3fffb304 3fff8714  
3fff3580:  00000040 3fff8714 3fffb304 40235616  
3fff3590:  3fff87a4 0000003f aa28019e 00000020  
3fff35a0:  3fffa1ec 3fff8714 3fff89fc 00000020  
3fff35b0:  3fffa1ec 3fff8714 00000010 402358fc  
3fff35c0:  3fff640c 3fff89e4 3fff89fc 00000001  
3fff35d0:  00000001 3fff89fc 3fff6579 402346d4  
3fff35e0:  00000100 3fff8774 3fff6577 00000000  
3fff35f0:  00000100 3fff8774 3fff6577 402368fd  
3fff3600:  3fff3630 00000000 000000d0 00000030  
3fff3610:  4bca4dfd 9225d911 6acfa58b 00000004  
3fff3620:  00000004 3fff64b4 3fff6571 40232a08  
3fff3630:  464b0203 200701db 69c9081f 3bf5f9ed  
3fff3640:  4d589bd3 1a5455e6 2e8953ee 7c55f5cc  
3fff3650:  99351ee1 3d48cf39 caa9bb61 4dfda26b  
3fff3660:  00000004 3fff6571 3fff64b4 40232e09  
3fff3670:  74189ebf 4b3693ed bb2b5f8c 3fff63e4  
3fff3680:  00000000 00000004 00000004 402055db  
3fff3690:  3fff6575 3fff6571 3fff805c 00001200  
3fff36a0:  000012a0 3fff77dc 00000034 00000004  
3fff36b0:  3fff64b4 3fff6571 00000004 00000004  
3fff36c0:  00000004 3fff6571 3fff64b4 40232800  
3fff36d0:  00000000 3fff6571 3fff64b4 40232ba8  
3fff36e0:  00000010 3ffe9d4c 00000011 401004d8  
3fff36f0:  3fff3740 0000000e 00000010 00000000  
3fff3700:  3fff6484 3ffe9d4c 3fff64b4 01000000  
3fff3710:  3fff3740 3fff2620 3fff64b4 40232958  
3fff3720:  40205460 00000001 3fff2970 00001387  
3fff3730:  00008976 3fff2620 3fff6084 40205a4d  
3fff3740:  000001bb 3fff632c 3fff2620 40204e8a  
3fff3750:  c5a79a95 40219deb 3fff37a8 3fff3800  
3fff3760:  000001bb 3fff2620 3ffe9d4c 40205c5d  
3fff3770:  3ffead30 c5a79a95 3ffead30 c5a79a95  
3fff3780:  3fff380c 3fff6228 3fff25ac 4020788d  
3fff3790:  00000003 00000000 00000000 3fff3948  
3fff37a0:  00000040 3fff3800 3fff606c 0000000f  
3fff37b0:  00000000 0000003c 3fff3800 4020cde7  
3fff37c0:  3fff2884 00000396 3fff3800 4020ce19  
3fff37d0:  0000a86f 3fff6228 3fff3800 4020cf20  
3fff37e0:  3ffea03c 3fff6228 3fff25ac 3fff3948  
3fff37f0:  0000a86f 3fff6228 3fff25ac 40207ac8  
3fff3800:  3fff5fdc 0000003f 0000003c 3fff619c  
3fff3810:  0000000f 00000000 3fff6024 0000003f  
3fff3820:  0000003c 3fff6228 00000000 40206ab0  
3fff3830:  00000010 3fff393c 3fff393c 3fff3948  
3fff3840:  3fff25ac 3fff393c 3fff6228 40207b99  
3fff3850:  3ffea2a8 00000388 3fff621c 00000200  
3fff3860:  3fff3954 3ffeba10 3fff393c 4020ce6a  
3fff3870:  3ffeba10 3ffeba10 3fff28a8 3fff2964  
3fff3880:  3fff2660 3ffeba10 3fff28a8 40203b83  
3fff3890:  00000000 00000000 3ffea6c8 00000000  
3fff38a0:  3fff5f3c 0000000f 00000000 3fff5f54  
3fff38b0:  0000000f 00000000 00000000 00000000  
3fff38c0:  00000000 3ffead30 00000000 3ffead30  
3fff38d0:  00000000 3ffead30 00000000 3ffead30  
3fff38e0:  00000000 3ffead30 00000000 3ffead30  
3fff38f0:  00000000 00000000 ffffffff fe000001  
3fff3900:  3ffeba10 00000000 fe01ef35 00000000  
3fff3910:  00000000 feefeffe feefeffe feefeffe  
3fff3920:  feefeffe feefeffe feefeffe feefeffe  
3fff3930:  feefeffe feefeffe feefeffe 3fff6184  
3fff3940:  0000000f 00000000 3fff5f6c 0000002f  
3fff3950:  00000029 3fff43d4 0000000f 00000009  
3fff3960:  3fff5fa4 0000002f 00000029 feefeffe  
3fff3970:  3fffdad0 00000000 3fff295c 4020d85c  
3fff3980:  feefeffe feefeffe 3fff2970 40100718  
<<<stack<<<

 ets Jan  8 2013,rst cause:2, boot mode:(1,6)


 ets Jan  8 2013,rst cause:4, boot mode:(1,6)

wdt reset

If I change Setup() to the following:

  //Connect to wifi
  WiFiMulti.addAP(ssid, password);

  
  //Wait for the wifi to connect and flash all LEDs
  while ((WiFiMulti.run() != WL_CONNECTED)) {
    for (int i=0;i<numUser;++i) {
      digitalWrite(userPins[i], HIGH);
    }
    delay(50);
    for (int i=0;i<numUser;++i) {
      digitalWrite(userPins[i], LOW);
    }
    delay(50);
  }

  // attempt to connect to Wifi network:
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);


  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  //**************************************************
  //Wait a few secs for warm-up (dunno why, was in the default code for http connections).
  //You might be able to remove this block
  for(uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    for (int i=0;i<numUser;++i) {
      digitalWrite(userPins[i], HIGH);
    }
    delay(300);
    for (int i=0;i<numUser;++i) {
      digitalWrite(userPins[i], LOW);
    }
    delay(700);
    Serial.flush();
  }
  //**************************************************

  //Initialize the TR-064 library
  //(IMPORTANT!)
  //Serial.printf("Initialize TR-064 connection");
  connection.init();
  //Request the number of (connected) Wifi-Devices
  int numDev = getWifiNumber();
  Serial.printf("WIFI has %d (connected) devices.\n", numDev);
  //Check the status of all the devices connected to wifi
  getStatusOfAllWifi(numDev);
  //Get the number of all devices, that are known to this router
  //numDev = getDeviceNumber();
  Serial.printf("Router has %d known devices.\n", numDev);

the listing of devices works, but after that, the exception occurs:

[SETUP] WAIT 4...
[SETUP] WAIT 3...
[SETUP] WAIT 2...
[SETUP] WAIT 1...
WIFI has 5 (connected) devices.
0:	18:fe:35:a2:87:32 is online 1
1:	20:08:ed:17:ed:25 is online 1
2:	f4:42:8f:04:ea:d0 is online 1
3:	a0:39:f7:20:05:43 is online 0
4:	18:86:17:e0:cc:fc is online 1
Router has 5 known devices.

Exception (29):
epc1=0x4000e1b2 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000100 depc=0x00000000

ctx: cont 
sp: 3fff29a0 end: 3fff2f00 offset: 01a0

>>>stack>>>
3fff2b40:  00000040 3fff80bc 4020aba0 40228947  
3fff2b50:  3fffb6b4 3fff80bc 3fff590c 40228ae0  
3fff2b60:  00000000 ffffffff 3fffb6a4 3fff80bc  
3fff2b70:  00000040 3fff80bc 3fffacac 40228edd  
3fff2b80:  3fff7e74 3fff80bc 3fffacac 402298d5  
3fff2b90:  3fff814c e81d53c7 2c57ef23 00000001  
3fff2ba0:  3fff80bc 3fffac94 3fffacac 00000001  
3fff2bb0:  00000010 3fff80bc 0000000f 40229b49  
3fff2bc0:  3fff590c 3fff838c 0000000f 00000001  
3fff2bd0:  00000001 3fff83a4 3fff5d79 402289ac  
3fff2be0:  00000100 3fff811c 3fff5d77 00000000  
3fff2bf0:  00000100 3fff811c 3fff5d77 4022abd5  
3fff2c00:  3fff2c30 00000000 000000d0 00000030  
3fff2c10:  f7030d20 9225d911 6acfa58b 00000004  
3fff2c20:  00000004 3fff5cb4 3fff5d71 40226ce0  
3fff2c30:  89010203 8a6066b2 4cb5bb30 aba210a1  
3fff2c40:  e74becf1 d2641800 d616befe 874150c3  
3fff2c50:  e8a26b5f 0e387633 fc00debc 0d201bc2  
3fff2c60:  00000004 3fff5d71 3fff5cb4 402270e1  
3fff2c70:  74189ebf 4b3693ed bb2b5f8c 3fff5814  
3fff2c80:  00000000 00000004 00000004 4020560b  
3fff2c90:  3fff5d75 3fff5d71 3fff785c 00001200  
3fff2ca0:  000012a0 3fff6fdc 00000034 00000004  
3fff2cb0:  3fff5cb4 3fff5d71 00000004 00000004  
3fff2cc0:  00000004 3fff5d71 3fff5cb4 40226ad8  
3fff2cd0:  00000000 3fff5d71 3fff5cb4 40226e80  
3fff2ce0:  00000010 3ffe9b90 00000011 401004d8  
3fff2cf0:  3fff2d40 0000000e 00000010 00000000  
3fff2d00:  3fff407c 3ffe9b90 3fff5cb4 01000000  
3fff2d10:  3fff2d40 3fff1b90 3fff5cb4 40226c30  
3fff2d20:  402054bc 000005a9 3fff1ee0 00001387  
3fff2d30:  0000a466 3fff1b90 3fffbeb4 40205a7d  
3fff2d40:  000001bb 3fff5b84 3fff1b90 40204f66  
3fff2d50:  c7a79a95 00000001 3fff2da8 3fff2e00  
3fff2d60:  000001bb 3fff1b90 3ffe9b90 40205c8d  
3fff2d70:  3ffea550 c7a79a95 3ffea550 c7a79a95  
3fff2d80:  3fff2e0c 3fff59f0 3fff1b1c 40207ea9  
3fff2d90:  00000003 00000000 00000000 3fff2e9c  
3fff2da0:  00000040 3fff2e00 3fff560c 0000000f  
3fff2db0:  00000000 0000003c 3fff2e00 4020a0e7  
3fff2dc0:  3fff1dfc 0000044b 3fff2e00 4020a119  
3fff2dd0:  0000c360 3fff59f0 3fff2e00 4020a220  
3fff2de0:  3ffe9e80 3fff59f0 3fff1b1c 3fff2e9c  
3fff2df0:  0000c360 3fff59f0 3fff1b1c 402080e4  
3fff2e00:  3fff5af4 0000003f 0000003c 3fffbc2c  
3fff2e10:  0000000f 00000000 3fff5b3c 0000003f  
3fff2e20:  0000003c 3fff59f0 00000000 402070cc  
3fff2e30:  00000010 3fff2e90 3fff2e90 3fff2e9c  
3fff2e40:  3fff1b1c 3fff2e90 3fff59f0 402081b5  
3fff2e50:  3ffea0f0 00000400 3fff59e4 00000200  
3fff2e60:  3fff2ea8 00000005 3fff2e90 4020a16a  
3fff2e70:  3ffeaf9c 00000005 3fff1e1c 3fff1bdc  
3fff2e80:  3ffe8360 00000005 3fff1e1c 402041e4  
3fff2e90:  3fff4784 0000000f 00000000 3fff589c  
3fff2ea0:  0000002f 00000029 3fff3944 0000000f  
3fff2eb0:  00000009 3fff58d4 0000002f 00000029  
3fff2ec0:  00000008 feefeffe feefeffe feefeffe  
3fff2ed0:  feefeffe feefeffe feefeffe 3fff1ed8  
3fff2ee0:  3fffdad0 00000000 3fff1ed0 4020abe4  
3fff2ef0:  feefeffe feefeffe 3fff1ee0 40100718  
<<<stack<<<

 ets Jan  8 2013,rst cause:2, boot mode:(1,6)


 ets Jan  8 2013,rst cause:4, boot mode:(1,6)

wdt reset

I am not sure which library might cause this exception. If I run your example, it runs fine. If I disconnect devices from the WiFi, the FritzBox changes the Active state to 0 after ~9 minutes.

Maybe this helps in troubleshooting.

@Aypac
Copy link
Owner

Aypac commented Oct 30, 2017

Hi.
Thanks for your very verbose Issue. I'll check it out on the weekend.

@Aypac
Copy link
Owner

Aypac commented Oct 30, 2017

Also I'm quite surprised to hear that it takes so long for your router to register that the device is gone. For me the change was usually registered after 5-30s.

@Aypac
Copy link
Owner

Aypac commented Oct 30, 2017

Just before I spend any time of debugging the library; you seem to get a "rst cause: 2" error. That might be related to pins not properly pulled up or down or power supply issues (esp8266/Arduino#2414).
Can you check that and report back?

@gon0
Copy link
Author

gon0 commented Oct 31, 2017

Good hint!
In my first post, I have run your example sketch on a standalone ESP8266.
Now I have run your example sketch on the ESP8266 wired in "full setup": The sketch runs fine.

Here is the serial output:

⸮


[SETUP] WAIT 4...
[SETUP] WAIT 3...
[SETUP] WAIT 2...
[SETUP] WAIT 1...
Initialize TR-064 connectionWIFI has 5 (connected) devices.
0:	18:fe:35:a2:87:83 is online 1
1:	20:18:ed:98:ed:05 is online 1
2:	f4:42:8f:04:ea:d2 is online 1
3:	a0:39:f7:11:05:33 is online 0
4:	18:44:17:e0:cc:fc is online 1
Router has 34 known devices.
> USER 0 -------------------------------
30:9C:23:05:60:4B is online 1
MAC=31:9C:23:05:60:4B, IP=192.168.123.113, HOSTNAME=, ACTIVE=1, 
> USER 1 -------------------------------
DC:2B:61:45:4E:04 is online 1
MAC=DC:1B:61:45:4E:04, IP=192.168.123.32, HOSTNAME=, ACTIVE=1, 
> USER 2 -------------------------------
A0:39:F7:10:05:53 is online 1
MAC=A0:38:F7:10:06:53, IP=192.168.123.21, HOSTNAME=, ACTIVE=1, 
-------------------------------------------

I have attached my full sketch in this post, which causes the following exception (sorry for german comments; the important parts are in english). In this sketch I have integrated only the definitions, the helper methods and the setup()-part of your example sketch, since the connected-devices list (shown after "Initialize TR-064 connectionWIFI has 5 (connected) devices.") is all I am interested in.
I have altered the MAC-Addresses, WiFi SSID and passwords due to posting them online.
Telegram_Debugging.ino.txt

⸮Connecting Wifi: WLAN_SSID

WiFi connected
IP address: [SETUP] WAIT 4...
[SETUP] WAIT 3...
[SETUP] WAIT 2...
[SETUP] WAIT 1...
**WIFI has 5 (connected) devices.**
0:	18:fe:34:a2:87:82 is online 1
1:	20:08:ed:97:ed:05 is online 1
2:	f4:42:8f:09:ea:d0 is online 1
3:	a0:39:f7:10:05:43 is online 0
4:	18:46:17:e0:cc:fc is online 1
Router has 5 known devices.

Exception (29):
epc1=0x4000e1b2 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000004 depc=0x00000000

ctx: cont 
sp: 3fff2950 end: 3fff2f00 offset: 01a0

>>>stack>>>
3fff2af0:  3fff1dfc 0000104a 0000104a 402288ef  
3fff2b00:  00000208 3fff7ecc 3fffaad4 40228a88  
3fff2b10:  00000104 00008040 00001008 3fff7ecc  
3fff2b20:  00000040 00000082 3fffaabc 40228d3a  
3fff2b30:  00800000 00000080 00000000 00000041  
3fff2b40:  00000040 0000003f 4020ab64 00000041  
3fff2b50:  3fffb4c4 3fff7ecc 3fff5bf4 3fff83bc  
3fff2b60:  3fffb9d8 ffffffff 3fff7ecc 3fff7ecc  
3fff2b70:  00000040 3fff7ecc 3fffaabc 3fff7ecc  
3fff2b80:  00000040 3fff7ecc 3fffaabc 40229896  
3fff2b90:  3fff7f5c 0000003f 464b3341 00000001  
3fff2ba0:  3fff7ecc 3fffaaa4 3fffaabc 00000001  
3fff2bb0:  00000010 3fff7ecc 0000000f 40229af1  
3fff2bc0:  3fff5bf4 3fff819c 0000000f 00000001  
3fff2bd0:  00000001 3fff81b4 3fff5d31 40228954  
3fff2be0:  00000100 3fff7f2c 3fff5d2f 00000000  
3fff2bf0:  00000100 3fff7f2c 3fff5d2f 4022ab7d  
3fff2c00:  3fff2c30 00000000 000000d0 00000030  
3fff2c10:  0833f85d 9225d911 6acfa58b 00000004  
3fff2c20:  00000004 3fff5c6c 3fff5d29 40226c88  
3fff2c30:  01260203 81e17847 93e32fa9 22ba4ad8  
3fff2c40:  d0efeac8 6a1b676f a20e34f3 d494e671  
3fff2c50:  dda4d90e d2ce0154 47f17534 f85dc9b1  
3fff2c60:  00000004 3fff5d29 3fff5c6c 40227089  
3fff2c70:  74189ebf 4b3693ed bb2b5f8c 3fffbeb4  
3fff2c80:  00000000 00000004 00000004 402055f7  
3fff2c90:  3fff5d2d 3fff5d29 3fff7814 00001200  
3fff2ca0:  000012a0 3fff6f94 00000034 00000004  
3fff2cb0:  3fff5c6c 3fff5d29 00000004 00000004  
3fff2cc0:  00000004 3fff5d29 3fff5c6c 40226a80  
3fff2cd0:  00000000 3fff5d29 3fff5c6c 40226e28  
3fff2ce0:  00000010 3ffe9b90 00000011 401004d8  
3fff2cf0:  3fff2d40 0000000e 00000010 00000000  
3fff2d00:  3fff407c 3ffe9b90 3fff5c6c 01000000  
3fff2d10:  3fff2d40 3fff1b90 3fff5c6c 40226bd8  
3fff2d20:  402054a8 0000056f 3fff1ee0 00001387  
3fff2d30:  0000dc26 3fff1b90 3fff591c 40205a69  
3fff2d40:  000001bb 3fff5b3c 3fff1b90 40204f52  
3fff2d50:  c5a79a95 00000001 3fff2da8 3fff2e00  
3fff2d60:  000001bb 3fff1b90 3ffe9b90 40205c79  
3fff2d70:  3ffea550 c5a79a95 3ffea550 c5a79a95  
3fff2d80:  3fff2e0c 3fff59f0 3fff1b1c 40207e95  
3fff2d90:  00000003 00000000 00000000 3fff2e9c  
3fff2da0:  00000040 3fff2e00 3fffbc2c 0000000f  
3fff2db0:  00000000 0000003c 3fff2e00 4020a0ab  
3fff2dc0:  3fff1dfc 00000407 3fff2e00 4020a0dd  
3fff2dd0:  0000fb16 3fff59f0 3fff2e00 4020a1e4  
3fff2de0:  3ffe9e80 3fff59f0 3fff1b1c 3fff2e9c  
3fff2df0:  0000fb16 3fff59f0 3fff1b1c 402080d0  
3fff2e00:  3fff58d4 0000003f 0000003c 3fff560c  
3fff2e10:  0000000f 00000000 3fff5af4 0000003f  
3fff2e20:  0000003c 3fff59f0 00000000 402070b8  
3fff2e30:  00000010 3fff2e90 3fff2e90 3fff2e9c  
3fff2e40:  3fff1b1c 3fff2e90 3fff59f0 402081a1  
3fff2e50:  3ffea0f0 000003ef 3fff59e4 00000200  
3fff2e60:  3fff2ea8 00000005 3fff2e90 4020a12e  
3fff2e70:  3ffeaf9c 00000005 3fff1e1c 3ffeaf9c  
3fff2e80:  3ffe8360 00000005 3fff1e1c 402041d0  
3fff2e90:  3fff4784 0000000f 00000000 3fff5814  
3fff2ea0:  0000002f 00000029 3fff3944 0000000f  
3fff2eb0:  00000009 3fff589c 0000002f 00000029  
3fff2ec0:  00000008 feefeffe feefeffe feefeffe  
3fff2ed0:  feefeffe feefeffe feefeffe 3fff1ed8  
3fff2ee0:  3fffdad0 00000000 3fff1ed0 4020aba8  
3fff2ef0:  feefeffe feefeffe 3fff1ee0 40100718  
<<<stack<<<

 ets Jan  8 2013,rst cause:2, boot mode:(1,7)

 ets Jan  8 2013,rst cause:4, boot mode:(1,7)

wdt reset


Although "wdt reset" is the last serial output of the first run after flashing, the ESP did not restart. When I restart it manually, the ESP restarts after each exception:

WiFi connected
IP address: [SETUP] WAIT 4...
[SETUP] WAIT 3...
[SETUP] WAIT 2...
[SETUP] WAIT 1...
WIFI has 5 (connected) devices.
0:	18:fe:34:a2:87:82 is online 1
1:	20:08:ed:97:ed:05 is online 1
2:	f4:42:8f:09:ea:d0 is online 1
3:	a0:39:f7:10:05:43 is online 0
4:	18:46:17:e0:cc:fc is online 1
Router has 5 known devices.

Exception (29):
epc1=0x4000e1b2 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000100 depc=0x00000000

ctx: cont 
sp: 3fff29a0 end: 3fff2f00 offset: 01a0

>>>stack>>>
3fff2b40:  00000040 3fff7fbc 4020ab64 402288ef  
3fff2b50:  3fffb5b4 3fff7fbc 3fff5bf4 40228a88  
3fff2b60:  00000000 ffffffff 3fffb5a4 3fff7fbc  
3fff2b70:  00000040 3fff7fbc 3fffabac 40228e85  
3fff2b80:  3fffbacc 3fff7fbc 3fffabac 4022987d  
3fff2b90:  3fff804c a20783af 472f49c9 00000001  
3fff2ba0:  3fff7fbc 3fffab94 3fffabac 00000001  
3fff2bb0:  00000010 3fff7fbc 0000000f 40229af1  
3fff2bc0:  3fff5bf4 3fff828c 0000000f 00000001  
3fff2bd0:  00000001 3fff82a4 3fff5d77 40228954  
3fff2be0:  00000100 3fff801c 3fff5d2f 00000000  
3fff2bf0:  00000100 3fff801c 3fff5d2f 4022ab7d  
3fff2c00:  3fff2c30 00000000 000000d0 00000030  
3fff2c10:  927cf6de 9225d911 6acfa58b 00000004  
3fff2c20:  00000004 3fff5c6c 3fff5d29 40226c88  
3fff2c30:  1c180203 30343915 ee578aaa 5ac6932b  
3fff2c40:  4091b83d 2eda2f65 c13b15f6 58156a0f  
3fff2c50:  11ecbf71 42cba60e 45433201 f6de0934  
3fff2c60:  00000004 3fff5d29 3fff5c6c 40227089  
3fff2c70:  74189ebf 4b3693ed bb2b5f8c 3fff5974  
3fff2c80:  00000000 00000004 00000004 402055f7  
3fff2c90:  3fff5d2d 3fff5d29 3fff7814 00001200  
3fff2ca0:  000012a0 3fff6f94 00000034 00000004  
3fff2cb0:  3fff5c6c 3fff5d29 00000004 00000004  
3fff2cc0:  00000004 3fff5d29 3fff5c6c 40226a80  
3fff2cd0:  00000000 3fff5d29 3fff5c6c 40226e28  
3fff2ce0:  00000010 3ffe9b90 00000011 401004d8  
3fff2cf0:  3fff2d40 0000000e 00000010 00000000  
3fff2d00:  3fff407c 3ffe9b90 3fff5c6c 01000000  
3fff2d10:  3fff2d40 3fff1b90 3fff5c6c 40226bd8  
3fff2d20:  402054a8 00000498 3fff1ee0 00001387  
3fff2d30:  00003965 3fff1b90 3fff560c 40205a69  
3fff2d40:  000001bb 3fff5b3c 3fff1b90 40204f52  
3fff2d50:  c5a79a95 00000001 3fff2da8 3fff2e00  
3fff2d60:  000001bb 3fff1b90 3ffe9b90 40205c79  
3fff2d70:  3ffea550 c5a79a95 3ffea550 c5a79a95  
3fff2d80:  3fff2e0c 3fff59f0 3fff1b1c 40207e95  
3fff2d90:  00000003 00000000 00000000 3fff2e9c  
3fff2da0:  00000040 3fff2e00 3fffbc2c 0000000f  
3fff2db0:  00000000 0000003c 3fff2e00 4020a0ab  
3fff2dc0:  3fff1dfc 00000407 3fff2e00 4020a0dd  
3fff2dd0:  0000586f 3fff59f0 3fff2e00 4020a1e4  
3fff2de0:  3ffe9e80 3fff59f0 3fff1b1c 3fff2e9c  
3fff2df0:  0000586f 3fff59f0 3fff1b1c 402080d0  
3fff2e00:  3fff58d4 0000003f 0000003c 3fff591c  
3fff2e10:  0000000f 00000000 3fff5af4 0000003f  
3fff2e20:  0000003c 3fff59f0 00000000 402070b8  
3fff2e30:  00000010 3fff2e90 3fff2e90 3fff2e9c  
3fff2e40:  3fff1b1c 3fff2e90 3fff59f0 402081a1  
3fff2e50:  3ffea0f0 000003ef 3fff59e4 00000200  
3fff2e60:  3fff2ea8 00000005 3fff2e90 4020a12e  
3fff2e70:  3ffeaf9c 00000005 3fff1e1c 3ffeaf9c  
3fff2e80:  3ffe8360 00000005 3fff1e1c 402041d0  
3fff2e90:  3fff4784 0000000f 00000000 3fff5814  
3fff2ea0:  0000002f 00000029 3fff3944 0000000f  
3fff2eb0:  00000009 3fff589c 0000002f 00000029  
3fff2ec0:  00000008 feefeffe feefeffe feefeffe  
3fff2ed0:  feefeffe feefeffe feefeffe 3fff1ed8  
3fff2ee0:  3fffdad0 00000000 3fff1ed0 4020aba8  
3fff2ef0:  feefeffe feefeffe 3fff1ee0 40100718  
<<<stack<<<

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v60000318
~ld
Connecting Wifi: WLAN_SSID

WiFi connected
IP address: [SETUP] WAIT 4...
[SETUP] WAIT 3...
[SETUP] WAIT 2...
[SETUP] WAIT 1...
WIFI has 5 (connected) devices.
0:	18:fe:34:a2:87:82 is online 1
1:	20:08:ed:97:ed:05 is online 1
2:	f4:42:8f:09:ea:d0 is online 1
3:	a0:39:f7:10:05:43 is online 0
4:	18:46:17:e0:cc:fc is online 1
Router has 5 known devices.

Exception (29):
epc1=0x4000e1b2 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000100 depc=0x00000000

ctx: cont 
sp: 3fff29a0 end: 3fff2f00 offset: 01a0

>>>stack>>>
3fff2b40:  00000040 3fff7f54 4020ab64 402288ef  
3fff2b50:  3fffb54c 3fff7f54 3fff590c 40228a88  
3fff2b60:  00000000 ffffffff 3fffb53c 3fff7f54  
3fff2b70:  00000040 3fff7f54 3fffab44 40228e85  
3fff2b80:  3fffba64 3fff7f54 3fffab44 4022987d  
3fff2b90:  3fff7fe4 0ee04723 361befa6 00000001  
3fff2ba0:  3fff7f54 3fffab2c 3fffab44 00000001  
3fff2bb0:  00000010 3fff7f54 0000000f 40229af1  
3fff2bc0:  3fff590c 3fff8224 0000000f 00000001  
3fff2bd0:  00000001 3fff823c 3fff5d79 40228954  
3fff2be0:  00000100 3fff7fb4 3fff5d77 00000000  
3fff2bf0:  00000100 3fff7fb4 3fff5d77 4022ab7d  
3fff2c00:  3fff2c30 00000000 000000d0 00000030  
3fff2c10:  e58c9080 9225d911 6acfa58b 00000004  
3fff2c20:  00000004 3fff5cb4 3fff5d71 40226c88  
3fff2c30:  b0ad0203 45324283 f5bdf191 0f01548f  
3fff2c40:  8fe10289 8a089458 d84c2657 957bca02  
3fff2c50:  d2cc299d 5e19aa3f 727b0f62 90800063  
3fff2c60:  00000004 3fff5d71 3fff5cb4 40227089  
3fff2c70:  74189ebf 4b3693ed bb2b5f8c 3fff5814  
3fff2c80:  00000000 00000004 00000004 402055f7  
3fff2c90:  3fff5d75 3fff5d71 3fff785c 00001200  
3fff2ca0:  000012a0 3fff6fdc 00000034 00000004  
3fff2cb0:  3fff5cb4 3fff5d71 00000004 00000004  
3fff2cc0:  00000004 3fff5d71 3fff5cb4 40226a80  
3fff2cd0:  00000000 3fff5d71 3fff5cb4 40226e28  
3fff2ce0:  00000010 3ffe9b90 00000011 401004d8  
3fff2cf0:  3fff2d40 0000000e 00000010 00000000  
3fff2d00:  3fff407c 3ffe9b90 3fff5cb4 01000000  
3fff2d10:  3fff2d40 3fff1b90 3fff5cb4 40226bd8  
3fff2d20:  402054a8 000005a9 3fff1ee0 00001387  
3fff2d30:  000038a4 3fff1b90 3fffbeb4 40205a69  
3fff2d40:  000001bb 3fff5b84 3fff1b90 40204f52  
3fff2d50:  c5a79a95 00000001 3fff2da8 3fff2e00  
3fff2d60:  000001bb 3fff1b90 3ffe9b90 40205c79  
3fff2d70:  3ffea550 c5a79a95 3ffea550 c5a79a95  
3fff2d80:  3fff2e0c 3fff59f0 3fff1b1c 40207e95  
3fff2d90:  00000003 00000000 00000000 3fff2e9c  
3fff2da0:  00000040 3fff2e00 3fff560c 0000000f  
3fff2db0:  00000000 0000003c 3fff2e00 4020a0ab  
3fff2dc0:  3fff1dfc 0000044b 3fff2e00 4020a0dd  
3fff2dd0:  000057aa 3fff59f0 3fff2e00 4020a1e4  
3fff2de0:  3ffe9e80 3fff59f0 3fff1b1c 3fff2e9c  
3fff2df0:  000057aa 3fff59f0 3fff1b1c 402080d0  
3fff2e00:  3fff5af4 0000003f 0000003c 3fffbc2c  
3fff2e10:  0000000f 00000000 3fff5b3c 0000003f  
3fff2e20:  0000003c 3fff59f0 00000000 402070b8  
3fff2e30:  00000010 3fff2e90 3fff2e90 3fff2e9c  
3fff2e40:  3fff1b1c 3fff2e90 3fff59f0 402081a1  
3fff2e50:  3ffea0f0 00000400 3fff59e4 00000200  
3fff2e60:  3fff2ea8 00000005 3fff2e90 4020a12e  
3fff2e70:  3ffeaf9c 00000005 3fff1e1c 3ffeaf9c  
3fff2e80:  3ffe8360 00000005 3fff1e1c 402041d0  
3fff2e90:  3fff4784 0000000f 00000000 3fff589c  
3fff2ea0:  0000002f 00000029 3fff3944 0000000f  
3fff2eb0:  00000009 3fff58d4 0000002f 00000029  
3fff2ec0:  00000008 feefeffe feefeffe feefeffe  
3fff2ed0:  feefeffe feefeffe feefeffe 3fff1ed8  
3fff2ee0:  3fffdad0 00000000 3fff1ed0 4020aba8  
3fff2ef0:  feefeffe feefeffe 3fff1ee0 40100718  
<<<stack<<<

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v60000318
~ld
⸮

It is interesting, that my full sketch shows Router has 5 known devices. in the serial output. When running your example sketch, the serial output gives Router has 34 known devices..

The result of running my sketch causing the exception and running your example sketch causing a working example is repeatable.

Let me know of any further questions or if I can help somehow.

@Aypac
Copy link
Owner

Aypac commented Oct 31, 2017

So the difference between the 34 and 5 comes from the fact, that you commented out the line to get the number of known devices¹ numDev = getDeviceNumber(); and write into that variable the number of connected devices² int numDev = getWifiNumber(); instead.

¹ As in "connected to the network at SOME point."
² As in "connected right now."

@Aypac
Copy link
Owner

Aypac commented Oct 31, 2017

Okay, I just ran this MWE with the WiFi Manager you'd like to use and it worked just fine. Here is the code:

#define USE_SERIAL Serial

#include <ESP8266WiFi.h>//https://github.com/esp8266/Arduino
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h> 

WiFiManager wifiManager;

#include <tr064.h>

//-------------------------------------------------------------------------------------
//Put your router settings here
//-------------------------------------------------------------------------------------

//Wifi network name
const char* wifi_ssid = "wifi_ssid"; 

//Wifi network password
const char* wifi_password = "wifi_pass";

//IP address of your router. This should be "192.168.179.1" for regular configuration of FRITZ!Boxes
const char* IP = "192.168.179.1";

//Port of the API of your router. This should be 49000 for all TR-064 devices.
const int PORT = 49000;

//The username if you created and account, "admin" otherwise
const char* fuser = "router_usr";

//The password for the aforementioned account.
const char* fpass = "router_pass";

//Do not mess with these :)
//TR-064 connection
TR064 connection(PORT, IP, fuser, fpass);

void setup() {
  //You might want to change the baud-rate
  USE_SERIAL.begin(115200);
  //USE_SERIAL.setDebugOutput(true);

  //Clear some space in the serial monitor.
  USE_SERIAL.println();
  USE_SERIAL.println();
  USE_SERIAL.println();


  //Connect to wifi
  wifiManager.autoConnect("AP-ssid", "password");
  
  //Initialize the TR-064 library
  //(IMPORTANT!)
  USE_SERIAL.printf("Initialize TR-064 connection\n\n");
  connection.init();

  //Request the number of (connected) Wifi-Devices
  int numDev = getWifiNumber();
  USE_SERIAL.printf("WIFI has %d (connected) devices.\n", numDev);

  //Check the status of all the devices connected to wifi
  getStatusOfAllWifi(numDev);

  //Get the number of all devices, that are known to this router
  numDev = getDeviceNumber();
  USE_SERIAL.printf("Router has %d known devices.\n", numDev);
}

void loop() {
    USE_SERIAL.printf("Still alive \n");

    delay(1000);
}


/////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////// helper methods//////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////


/** 
 *  Get the number of devices that were connected to the router (ever)
 *  (some of them might not be online, you need to check them individually!)
 *  return (int)
 */
int getDeviceNumber() {
  String params[][2] = {{}};
  String req[][2] = {{"NewHostNumberOfEntries", ""}};
  connection.action("urn:dslforum-org:service:Hosts:1", "GetHostNumberOfEntries", params, 0, req, 1);
  int numDev = (req[0][1]).toInt();
  return numDev;
}

/** 
 *  Get the number of devices that were connected to the WIFI lastly
 *  (some of them might not be online anymore, you need to check them individually!)
 *  return (int)
 */
int getWifiNumber() {
  String params[][2] = {{}};
  String req[][2] = {{"NewTotalAssociations", ""}};
  connection.action("urn:dslforum-org:service:WLANConfiguration:1", "GetTotalAssociations", params, 0, req, 1);
  int numDev = (req[0][1]).toInt();
  return numDev;
}

/** Print the status of all devices that were connected to the WIFI lastly
*  (some of them might not be online anymore, also gets you the hostnames and macs)
*  return nothing as of yet
 */
void getStatusOfAllWifi() {
  getStatusOfAllWifi(getWifiNumber());
}


/** 
 *  Print the status of all devices that were connected to the WIFI lastly
 * (some of them might not be online anymore, also gets you the hostnames and macs)
 * return nothing as of yet
 */
void getStatusOfAllWifi(int numDev) {
  //Query the mac and status of each device
    for (int i=0;i<numDev;++i) {
      String params[][2] = {{"NewAssociatedDeviceIndex", String(i)}};
      String req[][2] = {{"NewAssociatedDeviceAuthState", ""}, {"NewAssociatedDeviceMACAddress", ""}, {"NewAssociatedDeviceIPAddress", ""}};
      connection.action("urn:dslforum-org:service:WLANConfiguration:1", "GetGenericAssociatedDeviceInfo", params, 1, req, 2);
      USE_SERIAL.printf("%d:\t", i);
      USE_SERIAL.println((req[1][1])+" is online "+(req[0][1]));
      USE_SERIAL.flush();
    }
}

Can you test and see if this is working for you?

@Aypac Aypac self-assigned this Oct 31, 2017
@gon0
Copy link
Author

gon0 commented Nov 3, 2017

Thank you for your quick support. Your posted sketch works fine. Also, you are right, I have commented out the wrong part, so getDeviceNumber(); was not called.

After some testing, I think there seems to a an incompatability between #include <tr064.h> and #include <UniversalTelegramBot.h>. For the latter, an issue already exists: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot/issues/56 , so I think your work here may be done.

When testing, I changed the order, where the Telegram Bot is used.

if setup() looks like this

void setup() {
  //You might want to change the baud-rate
  Serial.begin(115200);

  //Connect to wifi
  wifiManager.autoConnect("AP-esp", "password");

  String start = "bot online with IP "; // Telegram bot function is called before TR-64 functions
  bot.sendMessage("123456789", start);

  //Initialize the TR-064 library
  //(IMPORTANT!)
  Serial.printf("Initialize TR-064 connection\n\n");
  connection.init();

  //Request the number of (connected) Wifi-Devices
  int numDev = getWifiNumber();
  Serial.printf("WIFI has %d (connected) devices.\n", numDev);

  //Check the status of all the devices connected to wifi
  getStatusOfAllWifi(numDev);

  //Get the number of all devices, that are known to this router
  numDev = getDeviceNumber();
  Serial.printf("Router has %d known devices.\n", numDev);
}

I get a message from the Telegram Bot and the following serial output:

*WM: 
*WM: AutoConnect
*WM: Connecting as wifi client...
*WM: Using last saved values, should be faster
*WM: Connection result: 
*WM: 3
*WM: IP Address:
*WM: 192.168.123.33
Initialize TR-064 connection

WIFI has 0 (connected) devices.
Router has 0 known devices.
Still alive 
Still alive 

If the bot function is used after TR-64,

void setup() {
  //You might want to change the baud-rate
  Serial.begin(115200);

  //Connect to wifi
  wifiManager.autoConnect("AP-esp", "password");

  //Initialize the TR-064 library
  //(IMPORTANT!)
  Serial.printf("Initialize TR-064 connection\n\n");
  connection.init();

  //Request the number of (connected) Wifi-Devices
  int numDev = getWifiNumber();
  Serial.printf("WIFI has %d (connected) devices.\n", numDev);

  //Check the status of all the devices connected to wifi
  getStatusOfAllWifi(numDev);

  //Get the number of all devices, that are known to this router
  numDev = getDeviceNumber();
  Serial.printf("Router has %d known devices.\n", numDev);

  String start = "bot online with IP "; // Telegram bot function is called after TR-64 functions
  bot.sendMessage("123456789", start);
}

the serial output gives

⸮*WM: 
*WM: AutoConnect
*WM: Connecting as wifi client...
*WM: Using last saved values, should be faster
*WM: Connection result: 
*WM: 3
*WM: IP Address:
*WM: 192.168.123.33
Initialize TR-064 connection

WIFI has 5 (connected) devices.
0:	18:fe:34:a2:87:82 is online 1
1:	20:08:ed:97:ed:05 is online 1
2:	f4:42:8f:09:ea:d0 is online 1
3:	a0:39:f7:10:05:43 is online 0
4:	18:46:17:e0:cc:fc is online 1
Router has 34 known devices.

Exception (29):
epc1=0x4000e1b2 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000100 depc=0x00000000

ctx: cont 
sp: 3fff2b20 end: 3fff3060 offset: 01a0

>>>stack>>>
3fff2cc0:  00000040 3fff62b4 4020c5a8 40233413  
3fff2cd0:  3fffb604 3fff62b4 3fff6444 402335ac  
3fff2ce0:  00000000 ffffffff 3fffb5f4 3fff62b4  
3fff2cf0:  00000040 3fff62b4 3fffabfc 402339a9  
3fff2d00:  3fffbb1c 3fff62b4 3fffabfc 402343a1  
3fff2d10:  3fff6344 2aad60ba 90bd31c8 00000001  
3fff2d20:  3fff62b4 3fffabe4 3fffabfc 00000001  
3fff2d30:  00000010 3fff62b4 0000000f 40234615  
3fff2d40:  3fff6444 3fff6374 0000000f 00000001  
3fff2d50:  00000001 3fff82f4 3fff657d 40233478  
3fff2d60:  00000100 3fff6314 3fff650f 00000000  
3fff2d70:  00000100 3fff6314 3fff650f 402356a1  
3fff2d80:  3fff2db0 00000000 000000d0 00000030  
3fff2d90:  19d05ee3 9225d911 6acfa58b 00000004  
3fff2da0:  00000004 3fff5b2c 3fff6509 402317ac  
3fff2db0:  8f820203 012746fe 82e23a9a 47563151  
3fff2dc0:  d55d0ead 5baefb48 a7119fd4 953c61f5  
3fff2dd0:  c6f52a19 10b44b31 3db216dc 5ee30d96  
3fff2de0:  00000004 3fff6509 3fff5b2c 40231bad  
3fff2df0:  74189ebf 4b3693ed bb2b5f8c 3fff5874  
3fff2e00:  00000000 00000004 00000004 40203997  
3fff2e10:  3fff650d 3fff6509 3fff5bfc 00001200  
3fff2e20:  000012a0 3fff7774 00000034 00000004  
3fff2e30:  3fff5b2c 3fff6509 00000004 00000004  
3fff2e40:  00000004 3fff6509 3fff5b2c 402315a4  
3fff2e50:  00000000 3fff6509 3fff5b2c 4023194c  
3fff2e60:  00000010 3ffe9df0 00000011 401004d8  
3fff2e70:  3fff2ec0 0000000e 00000010 00000000  
3fff2e80:  3fff64bc 3ffe9df0 3fff5b2c 01000000  
3fff2e90:  3fff2ec0 3fff1d70 3fff5b2c 402316fc  
3fff2ea0:  4020381c 00000405 3fff2040 00001387  
3fff2eb0:  0000aa98 3fff1d70 3fff589c 40203e09  
3fff2ec0:  000001bb 3fff5a74 3fff1d70 40203242  
3fff2ed0:  c6a79a95 3fff2f30 3fff2f28 3fff2f80  
3fff2ee0:  000001bb 3fff1d70 3ffe9df0 40204019  
3fff2ef0:  3ffea4d0 c6a79a95 3ffea4d0 c6a79a95  
3fff2f00:  3fff2f8c 3fff58e8 3fff1cfc 4020adad  
3fff2f10:  00000003 3fff2fd0 3fff2fac 3fff301c  
3fff2f20:  00000040 3fff2f80 3fff41bc 0000000f  
3fff2f30:  00000000 0000003c 3fff2f80 4020ba6b  
3fff2f40:  3fff1f54 00000544 3fff2f80 4020ba9d  
3fff2f50:  0000c9a2 3fff58e8 3fff2f80 4020bba4  
3fff2f60:  3ffea0dc 3fff58e8 3fff1cfc 3fff301c  
3fff2f70:  0000c9a2 3fff58e8 3fff1cfc 4020aff0  
3fff2f80:  3fff63b4 0000003f 0000003c 3fff41a4  
3fff2f90:  0000000f 00000000 3fff63fc 0000003f  
3fff2fa0:  0000003c 3fff58e8 00000000 4020a394  
3fff2fb0:  00000010 3fff3010 3fff3010 3fff301c  
3fff2fc0:  3fff1cfc 3fff3010 3fff58e8 4020b0c1  
3fff2fd0:  3ffea338 00000000 3fff58dc 00000200  
3fff2fe0:  3fff3028 00000005 3fff3010 4020baee  
3fff2ff0:  3ffeb200 feefeffe 3fff1f78 3fff2034  
3fff3000:  3fffdad0 00000005 3fff1f78 4020238c  
3fff3010:  3fff413c 0000000f 00000000 3fffbf3c  
3fff3020:  0000001f 00000013 3fff48ac 0000000f  
3fff3030:  00000009 3fff447c 0000001f 00000013  
3fff3040:  feefeffe 00000000 3fff202c 4020c5ec  
3fff3050:  feefeffe feefeffe 3fff2040 40100718  
<<<stack<<<

 ets Jan  8 2013,rst cause:2, boot mode:(1,6)


 ets Jan  8 2013,rst cause:4, boot mode:(1,6)

wdt reset

So I think the cause for this is in the library https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot

Thank you for your time and keep up the good work!

@Aypac
Copy link
Owner

Aypac commented Jan 15, 2018

Ok, I'll consider this Closed for now. Let me know if you run into any further issues.

@Aypac Aypac closed this as completed Jan 15, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants