[Ovmsdev] Terrible Network Manager

Tom Parker tom at carrott.org
Sat Oct 28 19:28:53 HKT 2017


Hi,

I've been driving around with the v3 hardware in my car for a couple of 
weeks using my phone's wifi hotspot. I found that it wouldn't re-connect 
to my phone after I turned off the hotspot and it wouldn't connect to my 
house wifi when the car is at home. So fixed it with a terrible network 
manager:

https://github.com/openvehicles/Open-Vehicle-Monitoring-System-3/compare/master...carrott:terrible-network-manager

This network manager is terrible:

* it doesn't scan for available wifi and try to connect to only those 
that are available
* it tries to connect to the next network once per minute, meaning it 
can take several minutes to connect
* it iterates through a list of 3 networks, if you don't have 3 
networks, you still have to wait
* it's implemented using a mixture of events, scripts and terrible C++ code
* it should use string concatenation to make the event names, rather 
than 3 hard coded names, but if it did that then the terrible C++ code 
wouldn't be so terrible
* you can't turn it on or off except in sdkconfig. If it's compiled in, 
it tries to connect every minute
* it doesn't connect to my office wifi, I haven't looked in to why, 
maybe it is because there is a space in the SSID name on that network

Despite being so terrible, it's been pretty reliable for me. I'm not 
sure if you want a pull request for this thing, or perhaps someone could 
re-write it "properly". The obvious thing to do is to scan for available 
networks, look at the list of configured SSID-Password pairs and if any 
are in range, trigger the wifi connection directly rather than 
triggering an event that runs a script that attempts to connect to the 
network.

If you want to try it out, I wrote some instructions:

Beware that the following advice appends to files, but does not confirm 
they are empty before doing so, be sure you don't end up with unexpected 
scripts or script content, as unexpected things could happen.

Store the credentials for your wifi network(s) with
config set wifi.ssid <ssid> <password>

Create a script to stop the v2 server when the network goes down (note 
the "network.down" doesn't fire, so use system.wifi.sta.disconnected):
vfs mkdir /store/events/system.wifi.sta.disconnected
vfs append "server v2 stop" 
/store/events/system.wifi.sta.disconnected/shutdown

Create a script to start the v2 server client when the network comes up:
vfs mkdir /store/events/network.up
vfs append "server v2 start" /store/events/network.up/startmeup

Create a script to select a vehicle on startup:
vfs mkdir /store/events/system.start
vfs append "vehicle module NL" /store/events/system.start/startmeup

Create scripts to connect to your wifi network in response to the 
terrible network manager events:
vfs mkdir /store/events/tnm.connect.0
vfs append "wifi mode client <ssid_1>" /store/events/tnm.connect.0/connect
vfs mkdir /store/events/tnm.connect.1
vfs append "wifi mode client <ssid_2>" /store/events/tnm.connect.1/connect
vfs mkdir /store/events/tnm.connect.2
vfs append "wifi mode client <ssid_3>" /store/events/tnm.connect.2/connect


More information about the OvmsDev mailing list