kopia lustrzana https://github.com/martin-ger/esp_mqtt
added and
rodzic
acfcac6843
commit
f7af07080a
|
@ -66,7 +66,8 @@ In general, scripts conform to the following BNF:
|
||||||
|
|
||||||
<val> := <string> | <const> | #<hex-string> | $[any ASCII]* | @<num> |
|
<val> := <string> | <const> | #<hex-string> | $[any ASCII]* | @<num> |
|
||||||
gpio_in(<num>) | $adc | $this_item | $this_data | $this_serial |
|
gpio_in(<num>) | $adc | $this_item | $this_data | $this_serial |
|
||||||
$this_gpio | $this_http_code | $this_http_body | $timestamp | $weekday
|
$this_gpio | $timestamp | $weekday |
|
||||||
|
$this_http_code | $this_http_host | $this_http_path | $this_http_body
|
||||||
|
|
||||||
<string> := "[any ASCII]*" | [any ASCII]*
|
<string> := "[any ASCII]*" | [any ASCII]*
|
||||||
|
|
||||||
|
@ -280,7 +281,8 @@ gpio_in(<num>)
|
||||||
Reads the current boolean input value of the given GPIO pin. This pin has to be defined as input before using the "gpio_pinmode" action.
|
Reads the current boolean input value of the given GPIO pin. This pin has to be defined as input before using the "gpio_pinmode" action.
|
||||||
|
|
||||||
```
|
```
|
||||||
$adc | $this_item | $this_data | $this_serial | $this_gpio | $timestamp | $weekday | $this_http_body | $this_http_code
|
$adc | $this_item | $this_data | $this_serial | $this_gpio | $timestamp | $weekday |
|
||||||
|
$this_http_host | $this_http_path | $this_http_code | $this_http_body
|
||||||
```
|
```
|
||||||
Special variables:
|
Special variables:
|
||||||
- $adc gives you the current value of the ADC (analog to digital input pin)
|
- $adc gives you the current value of the ADC (analog to digital input pin)
|
||||||
|
@ -288,7 +290,7 @@ Special variables:
|
||||||
- $this_serial contains the serial input string in an "on serial" clause.
|
- $this_serial contains the serial input string in an "on serial" clause.
|
||||||
- $this_gpio contains the state of the GPIO in an "on gpio_interrupt" clause.
|
- $this_gpio contains the state of the GPIO in an "on gpio_interrupt" clause.
|
||||||
- $timestamp contains the current time of day in "hh:mm:ss" format. If no NTP sync happened the time will be reported as "99:99:99". $weekday returns the day of week as three letters ("Mon","Tue",...).
|
- $timestamp contains the current time of day in "hh:mm:ss" format. If no NTP sync happened the time will be reported as "99:99:99". $weekday returns the day of week as three letters ("Mon","Tue",...).
|
||||||
- $this_http_body and $this_http_code are only defined inside the "on http_response" clause and contain the body of an HTTP response and the HTTP return code.
|
- $this_http_code, $this_http_host, $this_http_path, and $this_http_body are only defined inside the "on http_response" clause and contain the HTTP return code, the URL host and path of the request, and the body of an HTTP response.
|
||||||
|
|
||||||
## Operators
|
## Operators
|
||||||
Operators are used to combine values and expressions.
|
Operators are used to combine values and expressions.
|
||||||
|
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
|
@ -1,2 +1,2 @@
|
||||||
d8ba3e38c5c27e69d64f23cc408bceb7adeec416 0x00000.bin
|
033d48114a262ca73b6b505079e92bb2870b934d 0x00000.bin
|
||||||
94d406c685a6f15b4f2ff42c93c9ec5297d43425 0x10000.bin
|
efa7d3a70c006f6d7e4cd8115dfde375275324f8 0x10000.bin
|
||||||
|
|
|
@ -339,7 +339,7 @@ static void ICACHE_FLASH_ATTR disconnect_callback(void * arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req->user_callback != NULL) { // Callback is optional.
|
if (req->user_callback != NULL) { // Callback is optional.
|
||||||
req->user_callback(body, http_status, req->buffer, body_size);
|
req->user_callback(req->hostname, req->path, body, http_status, req->buffer, body_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
os_free(req->buffer);
|
os_free(req->buffer);
|
||||||
|
@ -367,7 +367,7 @@ static void ICACHE_FLASH_ATTR dns_callback(const char * hostname, ip_addr_t * ad
|
||||||
if (addr == NULL) {
|
if (addr == NULL) {
|
||||||
os_printf("DNS failed for %s\n", hostname);
|
os_printf("DNS failed for %s\n", hostname);
|
||||||
if (req->user_callback != NULL) {
|
if (req->user_callback != NULL) {
|
||||||
req->user_callback("", -1, "", 0);
|
req->user_callback(req->hostname, req->path, "", -1, "", 0);
|
||||||
}
|
}
|
||||||
os_free(req->buffer);
|
os_free(req->buffer);
|
||||||
os_free(req->post_data);
|
os_free(req->post_data);
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
* A successful request corresponds to an HTTP status code of 200 (OK).
|
* A successful request corresponds to an HTTP status code of 200 (OK).
|
||||||
* More info at http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
|
* More info at http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
|
||||||
*/
|
*/
|
||||||
typedef void (* http_callback)(char * response_body, int http_status, char * response_headers, int body_size);
|
typedef void (* http_callback)(char* hostname, char* path, char * response_body, int http_status, char * response_headers, int body_size);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Download a web page from its URL.
|
* Download a web page from its URL.
|
||||||
|
|
|
@ -10,6 +10,7 @@ do
|
||||||
|
|
||||||
on http_response
|
on http_response
|
||||||
do
|
do
|
||||||
|
println "called url: " | $this_http_host | $this_http_path
|
||||||
println "return code: " | $this_http_code
|
println "return code: " | $this_http_code
|
||||||
println $this_http_body
|
println $this_http_body
|
||||||
|
|
||||||
|
|
36
user/lang.c
36
user/lang.c
|
@ -77,8 +77,10 @@ int interpreter_gpioval;
|
||||||
#ifdef HTTPC
|
#ifdef HTTPC
|
||||||
bool in_http_statement;
|
bool in_http_statement;
|
||||||
int interpreter_http_status;
|
int interpreter_http_status;
|
||||||
|
char *interpreter_http_path;
|
||||||
|
char *interpreter_http_hostname;
|
||||||
|
|
||||||
void interpreter_http_reply(char *response_body, int http_status, char *response_headers, int body_size);
|
void interpreter_http_reply(char *hostname, char *path, char *response_body, int http_status, char *response_headers, int body_size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static os_timer_t timers[MAX_TIMERS];
|
static os_timer_t timers[MAX_TIMERS];
|
||||||
|
@ -1686,6 +1688,34 @@ int ICACHE_FLASH_ATTR parse_value(int next_token, char **data, int *data_len, Va
|
||||||
*data_type = STRING_T;
|
*data_type = STRING_T;
|
||||||
return next_token + 1;
|
return next_token + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (is_token(next_token, "$this_http_host")) {
|
||||||
|
static char codebuf[4];
|
||||||
|
lang_debug("val $this_http_host\r\n");
|
||||||
|
|
||||||
|
if (!in_http_statement)
|
||||||
|
return syntax_error(next_token, "undefined $this_http_host");
|
||||||
|
if (interpreter_status == HTTP_RESPONSE) {
|
||||||
|
*data = interpreter_http_hostname;
|
||||||
|
*data_len = os_strlen(interpreter_http_hostname);
|
||||||
|
*data_type = STRING_T;
|
||||||
|
}
|
||||||
|
return next_token + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (is_token(next_token, "$this_http_path")) {
|
||||||
|
static char codebuf[4];
|
||||||
|
lang_debug("val $this_http_path\r\n");
|
||||||
|
|
||||||
|
if (!in_http_statement)
|
||||||
|
return syntax_error(next_token, "undefined $this_http_path");
|
||||||
|
if (interpreter_status == HTTP_RESPONSE) {
|
||||||
|
*data = interpreter_http_path;
|
||||||
|
*data_len = os_strlen(interpreter_http_path);
|
||||||
|
*data_type = STRING_T;
|
||||||
|
}
|
||||||
|
return next_token + 1;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef NTP
|
#ifdef NTP
|
||||||
else if (is_token(next_token, "$timestamp")) {
|
else if (is_token(next_token, "$timestamp")) {
|
||||||
|
@ -1902,7 +1932,7 @@ int ICACHE_FLASH_ATTR interpreter_serial_input(const char *data, int data_len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HTTPC
|
#ifdef HTTPC
|
||||||
void ICACHE_FLASH_ATTR interpreter_http_reply(char *response_body, int http_status, char *response_headers, int body_size) {
|
void ICACHE_FLASH_ATTR interpreter_http_reply(char *hostname, char *path, char *response_body, int http_status, char *response_headers, int body_size) {
|
||||||
if (!script_enabled)
|
if (!script_enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1911,6 +1941,8 @@ void ICACHE_FLASH_ATTR interpreter_http_reply(char *response_body, int http_stat
|
||||||
interpreter_status = HTTP_RESPONSE;
|
interpreter_status = HTTP_RESPONSE;
|
||||||
interpreter_topic = response_headers;
|
interpreter_topic = response_headers;
|
||||||
interpreter_http_status = http_status;
|
interpreter_http_status = http_status;
|
||||||
|
interpreter_http_hostname = hostname;
|
||||||
|
interpreter_http_path = path;
|
||||||
interpreter_data = response_body;
|
interpreter_data = response_body;
|
||||||
interpreter_data_len = body_size;
|
interpreter_data_len = body_size;
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue