You are here

Support for TP-Link WBS210/510

34 posts / 0 new
Last post
KE0RSX
KE0RSX's picture
Support for TP-Link WBS210/510

Hi, everyone,

So, I'm still researching and found this product on Amazon ( https://smile.amazon.com/TP-LINK-WBS210-300Mbps-Outdoor-Wireless/dp/B011...). It's a TP-Link WBS210 Base station, which is supposed to work with their CEP210 and other equipment to form their Pharos Mesh Network. I also see that OpenWRT has firmware for this device. So I'm wondering if there are plans to support it on AREDN? My thought is that right now, you need multiple routers to cover the different areas, where the base station is omnidirectional.

I realize this might be more suited to the development forum, but I'm asking here in case someone already has one set up. If it needs to be moved, please do so.

Have a great day. :)
Patrick.

w6bi
w6bi's picture
Reviews

Boy, the (3) reviews on that product on Amazon aren't very favorable.  I wonder if they're using it properly, though.

AE6XE
AE6XE's picture
An AREDN firmware image can

An AREDN firmware image can be made available for the WBS210 and WBS510 v1 hardware if anyone is willing to test.   Alternatively loan or donate the hardware to AREDN Inc. to get working.  Given OpenWRT support for these devices, it is expected to be straight forward to get working.

The Amazon reviews don't look credible.  They appear to be indoor home users not understanding this device is targeted for tower sites.   One has to separately purchase and match the appropriate antenna for a designed coverage need.  One reviewer probably tried to compare this device with no antenna to another indoor device, naturally it doesn't perform very well without an antenna :) .

Joe AE6XE



 

w6bi
w6bi's picture
Yeah

Yeah, I suspected that from the tone of the comments :-)
Orv W6BI

KE0RSX
KE0RSX's picture
This is probably going to be

This is probably going to be a silly (borderline stupid) question, but... What exactly is the procedure for porting AREDN to a new device? Is it just copying the OpenWRT firmware and adding our configurations, or is there more to it than that? I found the process for building your own firmware but wasn't sure about the changes necessary for new hardware.

It might be a few weeks, but when I can, I'll buy one of these to test it. After all, if it works, it will save us at least two CPE210's for our mesh. Possibly more.

Have a great day. :)
Patrick.

AE6XE
AE6XE's picture
Patrick,

Patrick,

There is one place, in a perl module, where we capture the specific power settings, band, and device name for AREDN to know about the new hardware.  Another place where we configure AREDN's use of an LED for mesh RF network connection.  When the device is supported by OpenWrt, these may be the only definitions needed.  It can get more complex from there if a device is not yet supported by OpenWrt.  Then we might need to write some C code for the kernel to have the right drivers, update build definitions, network ports and switch settings, and more.  

For further details, look at the git commit history to find prior devices added to review the specific changes made.

Joe AE6XE

KE0RSX
KE0RSX's picture
Hi, Joe,

Hi, Joe,

So I started playing around with this and was able to build a firmware image for the WBS210-v1. Granted, I don't have a device to test it out on, so I'm not prepared to commit my changes back. But, I do have a question. In the perfunc.pm file, you have entries like this:
<code>

'TP-Link CPE210 v1.0' => {
  'name' => 'TP-Link CPE210 v1.0',
  'comment' => '',
  'supported' => '1',
  'maxpower' => '23',
  'pwroffset' => '0',
  'usechains' => 1,
  'rfband' => '2400',
  'chanpower' => { 1 => '22', 14 => '23' },
  },

</code>

How do you find the values for these entries (specifically maxpower, pwroffset, rfband, and chanpower)? When I built this, I just copied from one of the earlier entries (albeit, I think I copied one for a 5 Ghz instead of a 2.4 Ghz device). I definitely don't want to send in faulty changes, so I'd like to find the appropriate values for the WBS210/510 device.

Thanks, and have a great night. :)
Patrick.

AE6XE
AE6XE's picture
For tp-link, the power

For tp-link, the power offsite is '0' on all the devices we've seen.   offset is only significant on ubiquiti devices. 

The maxpower can be set to the manufacture specs, but it's not used on tplink.  The max power is controlled by the 'chanpower', a per channel setting.   Only on tp-link devices do we see different limits on different channels.  The only place this detail could be stored is on the vendor flash partition where device unique data is stored after being calibrated in the factory with a lot of high cost equipment.  To discover this, set chanpower to {14 => 30 } . This means all channels 14 and below are 30dBm max setting.    Then manually starting from ch -2, set the max power to 30 in basic setup, "apply" the setting, and then check "iw dev wlan0 info" to see what value the driver accepted on that channel.  go up each channel  and record the accepted values.     As an example in your current chanpower code, channels -2 through 1 will have max of 22 dBm,   channels 2 though 14 will have 23 dBm. 

Generally, ch -2 and -1 will have a higher max than ch 1.   However, we have been making ch -2 and -1 match the max of ch 1.  this is to be concervative on the signal quality.   If we get the device on a scope to compare the signal shapes,  then we can decide if it's appropriate to increase the max power on a give n channel if the driver lets us.  

rfband on 2GHz devices is always '2400'.  for 5GHz is always "5800ubntus"     I think someone was thinking there would  be 5800tplinkus or similar in the early days, but this didn't happen over time. 

Joe AE6XE

 

KE0RSX
KE0RSX's picture
Thank you. As soon as I can

Thank you. As soon as I can get my hands on a WBS210, I'll start testing things out. I appreciate all the help.

Have a great day. :)
Patrick.

KE0RSX
KE0RSX's picture
An Update on the support for the WBS210

Hi, everyone,

So, I was able to install the firmware on a WBS210. Now the fun begins. My first issue is that I don't see Channels, and I don't see the amateur band frequencies. The lowest frequency I can select is 2412 (Channel 1). And its max power is 13dBm. I'm not sure what I did wrong, or what I have to do to get the amateur frequencies to show up. I guess until I figure that out, I'm stuck.

Also in the basic setup, I only see the TX Power setting. I don't see anything that will let me set individual channels (unless that will show up once I get the channel issue figured out). I left this in but edited it because I realized what you meant about setting the channels and checking the power.

Have a great day. :)
Patrick.

KE0RSX
KE0RSX's picture
More information about the WBS210 v1.

So in looking at things, TP-Link numbers their channels quite differently than we do. I'm not sure if it will matter though in the firmware. I'm attaching pictures of the channel numbering scheme. You'll also notice that the frequencies range from 2312 MHz to 2570 MHz. I have the router in "Test Mode", so it's exposing the entire range. My hope is that between this and other information, I can help to get the support set up. Hopefully without having to write a bunch of C code.

Have a great night. :)
Patrick.

Image Attachments: 
KE0RSX
KE0RSX's picture
One final update for the night. Unless I figure something out.

So I have three WBS210's to test on. I have one connected to a laptop, one connected to a desktop, and one that I haven't opened yet. The one connected to the desktop has the TP-Link firmware installed, and provided the screenshots above. The one connected to the laptop has the AREDN firmware flashed. 

When I go into setup, I don't see the - channels  at all. But, when I run a command to get the channel information, I see them.
 

Here's what I get for the results:

root@AC0EC-213-26-176:~# cat /root/wifioutput2.txt
nextCh.push(-2); nextChFreq[-2] = "2397MHz"; nextChPwr[-2] = 27;
nextCh.push(-1); nextChFreq[-1] = "2402MHz"; nextChPwr[-1] = 27;
nextCh.push(1); nextChFreq[1] = "2412MHz"; nextChPwr[1] = 27;
nextCh.push(2); nextChFreq[2] = "2417MHz"; nextChPwr[2] = 27;
nextCh.push(3); nextChFreq[3] = "2422MHz"; nextChPwr[3] = 27;
nextCh.push(4); nextChFreq[4] = "2427MHz"; nextChPwr[4] = 27;
nextCh.push(5); nextChFreq[5] = "2432MHz"; nextChPwr[5] = 27;
nextCh.push(6); nextChFreq[6] = "2437MHz"; nextChPwr[6] = 27;
nextCh.push(7); nextChFreq[7] = "2442MHz"; nextChPwr[7] = 27;
nextCh.push(8); nextChFreq[8] = "2447MHz"; nextChPwr[8] = 27;
nextCh.push(9); nextChFreq[9] = "2452MHz"; nextChPwr[9] = 27;
nextCh.push(10); nextChFreq[10] = "2457MHz"; nextChPwr[10] = 27;
nextCh.push(11); nextChFreq[11] = "2462MHz"; nextChPwr[11] = 27;
nextCh.push(12); nextChFreq[12] = "2467MHz"; nextChPwr[12] = 27;
nextCh.push(13); nextChFreq[13] = "2472MHz"; nextChPwr[13] = 27;
nextCh.push(14); nextChFreq[14] = "2484MHz"; nextChPwr[14] = 27;

And iw dev wlan0 info gives me:

root@AC0EC-213-26-176:~# iw dev wlan0 info
Interface wlan0
ifindex 9
wdev 0x2
addr 18:a6:f7:d5:1a:b0
ssid AREDN-5-v3
type IBSS
wiphy 0
channel 1 (2412 MHz), width: 20 MHz, center1: 2412 MHz
txpower 13.00 dBm
root@AC0EC-213-26-176:~#

So, I'm at a loss as to how to select the channel that I need, along with the bandwidth that I need.

Have a great night. :slight_smile:
Patrick.

AE6XE
AE6XE's picture
Patrick,  can you capture a

Patrick,  can you capture a support data download from the Admin page and attach?   Need to take a look at the dmesg output, etc. to see what is going on.

Joe AE6XE

AE6XE
AE6XE's picture
Covering the basics, just in

Covering the basics, just in case...  Did you add "CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_wbs210-v1=y" to  "./configs/ar71xx-generic.config" when you built the image (and used this image)? 

KE0RSX
KE0RSX's picture
Config file entry

Hi, there,

I have this: CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_wbs210-v1=y right after the CPE610 entry. I'm building it off of the development branch, and have some errors that don't kill the build but show up. Things like you should use double-quotes to avoid globbing and shouldn't escape here. I'll look into how to get the information that you requested, and upload it tonight or tomorrow. The irony is, the firmware builds, and in a command line, I can see the channels. But they don't show up in the web-based setup.

Have a great night. :)
Patrick.

 

KE0RSX
KE0RSX's picture
Support Data

I'm attaching the support data download.

Have a great night. :)
Patrick.

AE6XE
AE6XE's picture
Nothing jumped out at me in

Nothing jumped out at me in the support data.   Try this...  on the device, edit the file "/etc/config/wireless" and change "option channel '1'" to -2.   Then reboot. is it working on ch -2 now, e.g. "iw dev wlan0 info" shows as such?    If it is, then this is strictly an issue in the perl code to show the channel options on the basic setup screen. 

Triple check the syntax for the entry in perlfunc.pm of the device.  missing ',' etc.?

make sure the entry in perlfunc.pm matches exactly, "TP-Link WBS210 v1.20".

The script "/usr/local/bin/get_model" needs updated, currently returns "Unknown Hardware", the output should be "TP-Link WBS210 v1.20" also. (don't recall which one of get_* is called to match the string model. )

Joe AE6XE

KE0RSX
KE0RSX's picture
Results of your requests.

Hi, Joe,

You're right about the iw dev wlan0 info command. It is showing -2 for the channel with the proper frequency and a txpower of 27 dBm.

So, I see one problem. I have 1.0 for the version in the perlfunc.pm file. I'll fix that, and check the other issues and rebuild.

Here's the code that I have so far:
<code>'TP-Link WBS210 v1.0' => {
      'name'            => 'TP-Link WBS210 v1.0',
      'comment'         => '',
      'supported'       => '1',
      'maxpower'        => '27',
      'pwroffset'       => '0',
      'usechains'       => '1',
      'rfband'          => '2400',
      'chanpower'       => { 1 => '13', 10 => '18', 11 => '13', 14 => '27' },
    },</code> (note I'll change the version number after posting this).

I looked at the script in /usr/local/bin/get_model, and it calls the hardware_info subroutine from the perlfunc.pm file. Since I had the wrong name (no 1.20), that's most likely why it's returning "Unknown Hardware.". Again, I'll check in the next build.

On a side note. When I upgraded my firmware, I get this message: "This filename is NOT appropriate for this device!
This device expects a file such as: aredn-KE0RSX-develop-22fe3bd-cpe-sysupgrade.bin
Click OK to continue if you are CERTAIN that the file is correct." and when I look at the hardware type in Administration, it says cpe (wbs210). So, I think I have an issue with that, unless the perlfunc.pm correction fixes that as well.

Have a great day. :)
Patrick.

P.S. I'll post another reply with the results of the new build. After I have most everything else fixed, I'll look into the perl script and see why it's not showing the channels or at least the lower frequencies.

AE6XE
AE6XE's picture
At this point, just edit the

At this point, just edit the code directly on the live node to get working and test out.  Then, don't forget what you changed, and apply back to the code base with a final image build and test, to save time. 

Review the code in /www/cgi-bin/admin and look around line 140.   Need to add a couple lines in there for the upload check warning.

Joe AE6XE

 

KE0RSX
KE0RSX's picture
A question about versions of libraries and compilers

Would it matter if I'm using a different version of Python, GCC, and libraries than what you're using? I ask, because I have some odd error messages.

<code>
In /home/patrickdickey/gitprojects/aredn_ar71xx-github/files/usr/local/bin/wifi-setup line 93:
  if [[  $wifi2_enable -eq 1 -a \( $ifacecount -eq 1 -o \( \( $ifacecount -gt 1 \) -a \( "$hwmode" = "$wifi2_hwmode" \) \) \) ]] ; then
     ^-- SC2039: In POSIX sh, [[ ]] is undefined.
         ^-- SC2154: wifi2_enable is referenced but not assigned.
                             ^-- SC2108: In [[..]], use && instead of -a.
                                ^-- SC1029: In [[..]] you shouldn't escape ().
                                                     ^-- SC2110: In [[..]], use || instead of -o.
                                                        ^-- SC1029: In [[..]] you shouldn't escape ().
                                                           ^-- SC1029: In [[..]] you shouldn't escape ().
                                                                                ^-- SC1031: In [[..]] you shouldn't escape ().
                                                                                   ^-- SC2108: In [[..]], use && instead of -a.
                                                                                      ^-- SC1029: In [[..]] you shouldn't escape ().
                                                                                                      ^-- SC2154: wifi2_hwmode is referenced but not assigned.
                                                                                                                     ^-- SC1031: In [[..]] you shouldn't escape ().
                                                                                                                        ^-- SC1031: In [[..]] you shouldn't escape ().
                                                                                                                           ^-- SC1031: In [[..]] you shouldn't escape ().


In /home/patrickdickey/gitprojects/aredn_ar71xx-github/files/usr/local/bin/wifi-setup line 103:
    channel="${wifi_channel}"
             ^-- SC2154: wifi_channel is referenced but not assigned.


In /home/patrickdickey/gitprojects/aredn_ar71xx-github/files/usr/local/bin/wifi-setup line 104:
    chanbw="${wifi_chanbw}"
            ^-- SC2154: wifi_chanbw is referenced but not assigned.


In /home/patrickdickey/gitprojects/aredn_ar71xx-github/files/usr/local/bin/wifi-setup line 106:
    distance="${wifi_distance}"
              ^-- SC2154: wifi_distance is referenced but not assigned.


In /home/patrickdickey/gitprojects/aredn_ar71xx-github/files/usr/local/bin/wifi-setup line 107:
    ssid="${wifi_ssid}-${chanbw}-v3"
          ^-- SC2154: wifi_ssid is referenced but not assigned.


In /home/patrickdickey/gitprojects/aredn_ar71xx-github/files/usr/local/bin/wifi-setup line 114:
    channel="${wifi2_channel}"
             ^-- SC2154: wifi2_channel is referenced but not assigned.


In /home/patrickdickey/gitprojects/aredn_ar71xx-github/files/usr/local/bin/wifi-setup line 118:
    ssid=$(echo "${wifi2_ssid}" | sed -e 's/\(..\)/\\x\1/g')
                 ^-- SC2154: wifi2_ssid is referenced but not assigned.


In /home/patrickdickey/gitprojects/aredn_ar71xx-github/files/usr/local/bin/wifi-setup line 119:
    ssid=$(echo -e "${ssid}")
                ^-- SC2039: In POSIX sh, echo flags are undefined.
</code>

are some of the ones I'm getting. As I mentioned above, they don't stop the build from happening, but they are there.

Have a great night. :) I'm off to bed.
Patrick.

AE6XE
AE6XE's picture
There are different versions

There are different versions of "shellcheck" producing different results.  The nightly builds use a ubuntu docker container, so I also receive different output than the formal nightly builds.  These particular warnings do not produce any negative results, e.g. we know that a variable storing the path "/etc/config/wireless" will never have a space in it, so while it would be good to fix this warning, it does not change the quality for the running mesh node -- it just makes it cleaner for you and I.   It's on the long list to do, and if you have opportunity, it would be good to correct.  
 

KE0RSX
KE0RSX's picture
Not show-stoppers

I think I understand. They aren't showstopper bugs, so they are on the back burner, so to speak. Since they don't break the build or the final image, they're "when we have a chance, we'll fix them" bugs.

I have a feeling I didn't put enough code in to make the device work. Originally I started to copy the patch file for the CPE610 and redo it. But then I realized that it already had references to the WBS210 in it. So I mistakenly assumed that the proper code was already there. The good thing is, from the little I searched last night, it uses the same firmware as the CPE210/510. So, hopefully the additional code will be mainly copy and paste with a little tweaking.

I'll keep working at it. When I have a more successful build, I'll repost the results of the Support Data download.

Have a great day. :) (Stay warm, if you're in the Northern half of the US like me)
Patrick.

AE6XE
AE6XE's picture
Yea, since the device is

Yea, since the device is already supported in OpenWrt, then we may only need updates to the code that affects the AREDN UI -- keyed off the model strings.   

I checked, the code previously put in for AREDN vlan settings is correct handling for all the tp-link 2 ethernet port device known to openwrt, including wbs210.  Thus, no further changes needed there.   These devices unfortunately all have the same issue-limitation, LAN on main port and DtDlink/WAN on secondary.   Another item on the list to see if both ports can be configured with standard AREDN port configuration.   I found a trick to get it working on UBNT, and hopefully will work on tp-link too.

You're very close, just getting the settings working for these new model in AREDN UI, and a couple misc places.

(Yea, it's been very cold here in SoCal.  Dropping below 50 degrees occasionally at night :) .  But, we pay a lot for that...)
  
Joe AE6XE

KE0RSX
KE0RSX's picture
Success!!!!!

So, the latest build shows the proper channels and I'm able to set it up to -1 and connect to my mesh nodes in the house. I'm attaching the latest support data download, to find out if there are any other issues that need to be taken care of.

Have a great night. :)
Patrick.

 

AE6XE
AE6XE's picture
By the way, most all these

By the way, most all these warnings are bogus.  It's not really the issue that these need to be corrected.  It's an issue that shellcheck is not smart enough or is in conflict with /bin/ash, so we would look to turn off this warning or similar.   For example most all the warnings are:

    channel="${wifi_channel}"
             ^-- SC2154: wifi_channel is referenced but not assigned.

This is false.  These variables are initialized with prior code, setting name value pairs from a config file.   Shellcheck can't detect this:
 

while read -r line; do                                                                                                                 
  if [ -n "$line" -a -z "${line##wifi*}" ]; then                                                                                       
    eval ${line%% =*}="\"${line##*= }"\"                                                                                               
  fi  


Joe AE6XE

KE0RSX
KE0RSX's picture
I'm building the firmware on

I'm building the firmware on the most recent commits to the repository. If it works, I'll most likely upload it to my branch on github and put in a pull request. I didn't create a patch, because I don't know how, and in truth 98% of the code is already there. It might need a little tweaking, as I'm not sure about one or two items. And I didn't get the LAN 1 interface to work at all. So, it will need updating for that as well. But, it does build and it does install and work on the WBS210.

Have a great night. :)
Patrick.

P.S. If you want me to hold on on committing until I have the last two or three items worked out, I will. Just let me know.

AE6XE
AE6XE's picture
Since the wbs is already

Since the wbs is already supported in openwrt, and prior changes have already been added to configure vlans and leds, a patch doesn't look necessary.  The LAN is not configured on the 2nd port  for several tp-link devices, so this is consistant.   Look for only dtdlink and wan to be on the second port.    BTW, take a look at this document for submitting the PR:

https://github.com/aredn/documentation/blob/master/How%20to%20Use%20GitH...

I can review and give feedback, or accept as appropriate.

Joe AE6XE

KE0RSX
KE0RSX's picture
An interesting issue with the LAN Ports

Hi there, 
First of all, thank you for the link to contributing. I realized I had been doing it wrong, and have since fixed my setup.

Now the interesting issue. I've uploaded the firmware to my WBS210. If I connect a cable to Link 1 from my Internet router, which is supposed to be the DtD/WAN link, I don't see an IP address for the WAN side at all in the status page (it's set to DHCP). However, if I reboot the WBS210 while the cable is connected, my computer gets an IP Address from the internet router instead of the mesh node. So, it seems like LAN0/LAN1 are being bridged somewhere along the lines (but only if the cables are connected on boot). If I leave the cable unplugged from LAN 1, my computer gets its IP address from the mesh node as it should.

I'll commit my changes after I do a final round of testing. But, I realize that this is a bug that will need to be addressed somewhere along the lines. I haven't tested this on the Ubiquiti Rocket yet, so I don't know if it's only an issue with the TP-Link hardware or something overall.

Have a great night. :)
Patrick.

AE6XE
AE6XE's picture
Patrick,  your code submit in

Patrick,  your code submit in github to define the definition and handling the tp-link WBS device is now in the master git repository and should be in Nightly Build images tomorrow.  I've been traveling, sorry took a few days to get to it.  All looks good, nice clean git PR.

Joe AE6XE

w6bi
w6bi's picture
5 GHz?

Any chance this support could be extended to the TP-Link WBS510, the 5 GHz version?

Orv W6BI

AE6XE
AE6XE's picture
Sure, but need someone to

Sure, but need someone to purchase the device to test. 

VA2XJM
I just bought 2 WBS510. I am

I just bought 2 WBS510. I am not home yet, but will be able to test next week.

Just let me know what information you will need to generate a test BIN. As soon as I get back home, I will provide what is needed.
 

AE6XE
AE6XE's picture
ssh log into the device (with

ssh log into the device (with the Pharos OS vendor firmware running) and need the output of the commands:

dmesg
cat /proc/cpuinfo

Once an AREDN image loads, then there will be a couple more commands to run to discover and validate power settings.

Joe AE6XE
 

VA2XJM
For follow up: https://github

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer