Category Archives: at-command

Execute AT command from browser when someone access my page

I need to execute AT command from browser. My /etc/at.deny is empty and /etc/at.allow does not exists. I could execute "php page.php" on command line with any user and works fine.

Here is my page (page.php):

<?php
exec('at -f job.txt now + 1 minutes'); 
?>

My job.txt:

/bin/php /var/www/html/my_job.php 

So now I wan't to execute page.php when someone access my page.php from their browser:

https://mywebpage.com/page.php

I got this error "PAM failure: System error" from /var/log/httpd/error_log when someone access my page. I guess that this error is caused by permission issue, could someone please tell me how fix it or give me some suggestion. I can't found any answer or example online.

UPDATE

Thanks to Barmar reminded me that I should use full path. And now this is my new page.php, but I still getting same error "PAM failure". Any suggestion please?

<?php
exec('at -f /var/www/html/job.txt now + 1 minutes');
>?

I think that the main problem is AT command. If I remove the AT command and using 'sh' command it will work.

exec('sh /var/www/html/job.txt'); 

PHP GET request sent by ESP8266 Wifi chip but not received by website

I am building a simple website which should update a text file when the host receives data from another device connected to the same network. The device in question is a small weather station which measures temperature. The temperature is sent by the station in a PHP GET command through Wifi from an ESP8266 chip. The signal is received by the home router and redirected to a laptop on the network which is hosting the website.

I am having issues because the ESP8266 chip seems to send the data/PHP GET command correctly. Yet the website never updates itself.

In order to simplify the system for troubleshooting, the weather station is replaced by the laptop. The laptop is connected directly to the ESP8266 chip through a USB-to-Serial(UART) cable. All the AT commands to communicate with the ESP8266 chip are typed in the Arduino IDE Serial Monitor.

The website

The website is very simple. Whenever it receives data from the ESP8266 chip, it writes it in a text file.

The website is stored on a laptop whose IP is 192.168.1.2.

[email protected]:~$ ifconfig    
wlp2s0    Link encap:Ethernet  HWaddr 18:cf:5e:ee:3f:10  
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0

The website is a php file hosted on an apache2 server. When executed, the php file stores the temperature in file data.txt. The files are stored at /var/www/html.

[email protected]:~$ ls -la /var/www/html
-rwxrwxrwx 1 root root     0 Jul 31 22:41 data.txt
-rwxr-xr-x 1 root root   127 Jul 31 21:40 index.php

Any GET request sent to the PHP file should contain the temperature so the PHP file can store the temperature in data.txt.

[email protected]:~$ cat /var/www/html/index.php 

<!DOCTYPE html>
<html>
<body>
<?php
  $a = $_GET['temp'];
  $dataSaved = file_put_contents("data.txt",$a . "\n",FILE_APPEND);  
  echo "Temperature is " . $a . " oC.";  
?>
</body>
</html>

When I type manually the following line in Firefox:

http://192.168.1.2/index.php?temp=28

The following text gets displayed in the browser & number "28" gets saved in data.txt.

Temperature is 28 oC.

The ESP8266 Chip

As explained above, in the final system the ESP8266 chip will receive serial instructions from a small weather station. But in order to simplify debugging, the chip is now connected to the laptop with a USB-to-Serial (UART) cable. Serial commands are sent to the chip by using the Arduino IDE Serial Monitor. Here are the commands sent.

AT

OK
AT+CWLAP
+CWLAP:(3,"MYMODEM",-31,"aa:bb:cc:dd:ee:ff",1,21)

OK
AT+CWJAP="MYMODEM","mypassword"

WIFI CONNECTED
WIFI GOT IP

OK
AT+CIPSTART="TCP","192.168.1.2",80
CONNECT

OK
AT+CIPSEND=56

OK
> GET /index.php?temp=10 HTTP/1.1\r\nHost: 192.168.1.2\r\n\r\n

busy s...

Recv 56 bytes

SEND OK
CLOSED

So at this point, message "Temperature is 10 oC." should appear in the Serial Monitor and the number "10" should get appended to file "data.txt". But nothing happens...

Any suggestions?

Additional Notes

1) The PHP and AT code I am using is very similar to what is presented in this post: https://www.youtube.com/watch?v=q02f4sPghSo .

2) As was pointed in some comments below, the GET command might be less conventional. POST or PUT might be more appropriate. Yet at the moment I am only trying to understand why the website is not responding to the chip.