NETGEAR is aware of a growing number of phone and online scams. To learn how to stay safe click here.
Forum Discussion
Fiddlin
Mar 16, 2022Tutor
Read status of LM1200
Does anyone know of a way to read the status of an LM1200 without watching the web page? I would like to use anything similar to SNMP to just get a text reading of connection status, cell signal lev...
- Mar 17, 2022
You can try to log in to WebUI as admin and capture the model.json log. It will present the info you require. If you need any help on reading the logs, I can help.
- Logon to the webui (http://192.168.1.1 ) as an administrator
- Navigate to URL http://192.168.1.1/model.json via the same browser window
- Capture the results (by selecting all + copy) and send it backHope this helps.
Thanks
Fiddlin
Mar 18, 2022Tutor
Thanks John! There is a ton of data in there. That should work great for building a small status display app.
Fiddlin
Mar 19, 2022Tutor
Well, the data is in there, but so far, I have not figured out how to get the full (logged in version) model.json data with a script rather than just getting it with a browser. Do you have any suggestions?
- JohnPengMar 20, 2022NETGEAR Expert
Fiddlin wrote:
Well, the data is in there, but so far, I have not figured out how to get the full (logged in version) model.json data with a script rather than just getting it with a browser. Do you have any suggestions?
I am not a programmer, but can you check the following link to see whether this is helpful?
https://stackoverflow.com/questions/34393353/login-to-a-website-using-script
You can run one script to get the model.json periodically and run another one to parse the data you need.
Thanks
- FiddlinMar 20, 2022Tutor
I did finally get it working. I was hoping to just use javascript in a local HTML file, but I ran into a ton of CORS (cross-origin request) errors. I got it working by using PHP and its cURL library. It is nice being able to see my GB/day remaining so I can maintain my data-rationing.
Thank you for the help.
- FiddlinMar 21, 2022Tutor
I don't know if anyone will be interested, but here is my hacked up code for pulling the session details from my LM1200.
I plan to have this script run on my web server and build a pretty graph that will be saved as HTML for my other computers to display so they are not all requesting updates directly from the LM1200.
<?php $ipaddress = "192.168.5.1"; $cookiefile = "cookie.txt"; $password = "password"; function InitializeCurl($cookiefile) { $curl = curl_init(); curl_setopt($curl,CURLOPT_COOKIEJAR,$cookiefile); //file for saving cookie data curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false); //this is local traffic - don't bother with SSL verification curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); //this is local traffic - don't bother with SSL verification curl_setopt($curl,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); //always want to capture result to string curl_setopt($curl,CURLOPT_HEADER,false); //leave headers out of result string return($curl); } function GetToken($curl,$ipaddress) { $url = "http://$ipaddress"; curl_setopt($curl,CURLOPT_URL,$url); curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true); //Let LM1200 forward to /index.html $result = curl_exec($curl); //Extract token from result $n = preg_match('/\"token\" value=\"([^\"]+)/',$result,$match); if ($n>0) { $token = $match[1]; } else { $token = ""; } return($token); } function DoLogin($curl,$ipaddress,$token,$password) { $data = 'token=' . $token . '&ok_redirect=%2Findex.html&err_redirect=%2Findex.html&session.password=' . $password; curl_setopt($curl,CURLOPT_URL,"http://{$ipaddress}/Forms/config"); curl_setopt($curl,CURLOPT_POST,true); curl_setopt($curl,CURLOPT_POSTFIELDS,$data); curl_setopt($curl,CURLOPT_REFERER,"http://{$ipaddress}/index.html"); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_FOLLOWLOCATION,false); curl_setopt($curl,CURLOPT_HTTPHEADER,array( //Simulate headers captured from chrome developer mode 'Content-Type: application/x-www-form-urlencoded' ,'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' ,'Accept-Encoding: gzip, deflate' ,'Accept-Language: en-US,en;q=0.9' ,'Origin: http://' . $ipaddress )); $result = curl_exec($curl); //discard results - this will set the session as logged in } function GetJson($curl,$ipaddress,$token) { curl_setopt($curl,CURLOPT_FOLLOWLOCATION,false); //don't follow redirects for json calls curl_setopt($curl,CURLOPT_HTTPHEADER,array( //simulate headers captured from chrome developer mode 'Accept: */*' ,'Accept-Encoding: gzip, deflate' ,'Accept-Language: en-US,en;q=0.9' ,'Origin: http://' . $ipaddress )); curl_setopt($curl,CURLOPT_POST,false); //force cURL back to GET curl_setopt($curl,CURLOPT_POSTFIELDS,''); //force cURL back to GET curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'GET'); //force cURL back to GET $randomnum = rand(0,65535); //my guess is that this is a random number to prevent caching? curl_setopt($curl,CURLOPT_URL,"http://{$ipaddress}/api/model.json?internalapi=1&x={$randomnum}"); $result = curl_exec($curl); $json = json_decode($result); return($json); } function ShowStatus($json) { echo "\n\n"; echo "IP: {$json->wwan->IP}\n"; echo "Next billing date: " . strftime("%Y-%m-%d %H:%M:%S",$json->wwan->dataUsage->generic->nextBillingDate) . "\n"; echo "Billing cycle remainder: " . number_format($json->wwan->dataUsage->generic->billingCycleRemainder) . " seconds\n"; echo "-----\n"; echo "Data transferred: " . number_format($json->wwan->dataUsage->generic->dataTransferred) . "\n"; echo "Billing cycle limit: " . number_format($json->wwan->dataUsage->generic->billingCycleLimit) . "\n"; echo "-----\n"; echo "Session duration: " . number_format($json->wwan->sessDuration) . " seconds\n"; echo "Session start time: " . strftime("%Y-%m-%d %H:%M:%S",$json->wwan->sessStartTime) . "\n"; echo "Session transferred: " . number_format($json->wwan->dataTransferred) . "\n"; echo "Session Rx: " . number_format($json->wwan->dataTransferredRx) . "\n"; echo "Session Tx: " . number_format($json->wwan->dataTransferredTx) . "\n"; $dataremaining = $json->wwan->dataUsage->generic->billingCycleLimit - $json->wwan->dataUsage->generic->dataTransferred; $daysremaining = $json->wwan->dataUsage->generic->billingCycleRemainder / 24 / 60 / 60; $dataperday = $dataremaining / $daysremaining; echo "Data per day left: $dataperday\n"; $gigperday = $dataperday / 1024 / 1024 / 1024; printf("GB/day left: %3.3f\n",$gigperday); } $curl = InitializeCurl($cookiefile); $token = GetToken($curl,$ipaddress); DoLogin($curl,$ipaddress,$token,$password); while (true) { $json = GetJson($curl,$ipaddress,$token); ShowStatus($json); sleep(60); } curl_close($curl); ?>