• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Мониторинг температуры через WEB

gerkimuyda

New member
Это не особенность arduino IDE, а передача строки в виде параметра функции. Т.е. вам надо в функцию передать строку. Можете ее заранее в переменной собирать, а можете сразу тут.
Вот эту строку функция и отдает в виде ответа. Соответственно, если вам надо символ перевода строки - то вы этот символ запихивается в вашу переменную.

Скрипт ставит везде NULL, т.к. там идет поиск значений через [inline]<span id='temperature'> </span>[/inline] и [inline]<span id='humidity'> </span>[/inline], а у вас таких строк в ответе пока нету. Когда сформируете такой ответ - скрипт подхватит значения. Я сразу 5 модулей сделал вам, но если пока не нужны - можете обрезать массив до одного модуля. Сам принцип функционирования опросов и описание модулей в массиве - вы поняли? В SQL вам пока не надо лезть - я запись значений вам написал, выборка делается просто (потом дойдем до этого). Там еще в коде стоит таймаут 1 секунда на неответ модуля, если надо другое значение - поправьте. По поводу книг - не знаю. Я это лет 15 назад изучал, уже не помню, какими материалами пользовался тогда. Поищите что-то типа пхп для начинающих, введение в пхп и т.д. Или пробуйте детальнее изучить те функции, которые я применял в вашем случае (чтобы лучше понять что там и как делается). Из самого непонятного, наверное - это регулярные выражение. Точнее - поиск по регулярным выражениям в теле ответа модуля (поиск temperature и humidity). Но с регулярками вы можете ознакомится и в javascript (если это вам ближе) - шаблоны такие-же. В общем - дерзайте и у вас получится o_O Рим не за один день строился...
 
  • Like
Реакции: kab

serenityLA

New member
Это не особенность arduino IDE, а передача строки в виде параметра функции. Т.е. вам надо в функцию передать строку. Можете ее заранее в переменной собирать, а можете сразу тут.
.
А можно как-то в Arduino IDE собирать html страницу в нормальном виде (не в одну строку) ?

Скрипт ставит везде NULL, т.к. там идет поиск значений через <span id='temperature'> </span> и <span id='humidity'> </span>, а у вас таких строк в ответе пока нету.
А разве это не ответ ?
HTML:
<h1>SENSOR 1</h1><hr><center>temperature: "+String(t)+ ".  </center>
Еще не могу понять принцип использования двойных кавычек, они ставятся в начале кода, который не стоит воспринимать как текст ?

И еще такой вопрос. Почему мы создаем отдельную веб страницу для "вырезания данных", нельзя ли esp заставить сразу в БД отправлять данные ?
 
Последнее редактирование:

gerkimuyda

New member
А можно как-то в Arduino IDE собирать html страницу в нормальном виде (не в одну строку) ?
можно, в ArduinoIDE если хотите текст продолжить на следующей строке - ставьте символ [inline]\[/inline]
Наример
Код:
String st = " тутуту \
лалала";
Но это просто продолжение строки, а не символ перевода строки. Если нужен перевод строки - вы его отдельно добавляйте [inline]\r\n[/inline].

А разве это не ответ ?
HTML:
<h1>SENSOR 1</h1><hr><center>temperature: "+String(t)+ ".  </center>
Это другой формат, чем тот, для которого написан скрипт. Тут по другому надо выдергивать числовое значение температуры. Можете переделать регулярное выражение под себя. Тем-более в вашем коде УЖЕ два символа [inline].[/inline] разделения целой части от дробной (правда это легко можно обработать, и я указал на это просто, как пример).

Еще не могу понять принцип использования двойных кавычек, они ставятся в начале кода, который не стоит воспринимать как текст ?
Вы про какие кавычки? Про подключаемые библиотеки? Можете заменить его на [inline]<>[/inline] если вас смущают кавычки. Или я вас не правильно понял?

И еще такой вопрос. Почему мы создаем отдельную веб страницу для "вырезания данных", нельзя ли esp заставить сразу в БД отправлять данные ?
Если вы напишите mysql_client для esp - то можете пробовать напрямую подключаться к mysql. Но esp не потянет такой громоздкий код. И все-равно mysql-сервер вам надо будет где-то размещать. И все-равно придется ставить пхп для фронтэнда. Так проще все это сделать сразу на сервере, тем-более, это будет более гибче решение, чем возлагать такое на esp. Оставим датчиковое - датчикам, а логику - более мощным устройствам :)

ps: если извратиться, можно обойтись без mysql и php - написать все на html iframe + javascript (DOM + ajax), но вы лишаетесь архива прошлых значений и возможности строить графики по ним.
 

serenityLA

New member
можно, в ArduinoIDE если хотите текст продолжить на следующей строке - ставьте символ [inline]\[/inline]
Наример
Код:
String st = " тутуту \
лалала";
Но это просто продолжение строки, а не символ перевода строки. Если нужен перевод строки - вы его отдельно добавляйте [inline]\r\n[/inline].
Если я пишу
Код:
server.send(200, "text/html", "<!DOCTYPE html>\r\n\
<html>\
<head>\
<title>TempAndHum</title><meta charset='utf-8'>\
</head>\r\n\
<body>\
<h1>SENSOR 1</h1>\
<hr>\
<center> temperature: "+String(t)+ ".  </center><br/>\
<center>humidity: "+String(h) +". </center><hr>\
</body>\
</html>");
IDE перестает это понимать.

Это другой формат, чем тот, для которого написан скрипт. Тут по другому надо выдергивать числовое значение температуры. Можете переделать регулярное выражение под себя. Тем-более в вашем коде УЖЕ два символа . разделения целой части от дробной (правда это легко можно обработать, и я указал на это просто, как пример).
"." это просто точка в конце выражения temperature: 24.60.

А как подогнать под скрип ?

HTML:
<h1>SENSOR 1</h1><hr><center><span id='temperature: '\>( "+String(t)+ ".)\<\/span\>  </center>
Так ?

Мне тут подсказали, что в случае, так как это прописано у меня, функция будет выглядеть вот так:

PHP:
preg_match('/temperature:?\s(.*?)?\s<\/center>/i', $res, $matches);
И скрипт понял и занес в БД значение. Но только смысла изменений я не понял =(

Кавычки именно в строке прописи html, мне постоянно IDE выдает ошибку компиляции, когда я их не так ставлю.

Вот например тут
HTML:
<center> temperature: "+String(t)+ ".  </center>
Мы выделяем что-то или даем компилятору какую-то задачу ?
 
Последнее редактирование:

gerkimuyda

New member
Если я пишу
Код:
server.send(200, "text/html", "<!DOCTYPE html>\r\n\
<html>\
<head>\
<title>TempAndHum</title><meta charset='utf-8'>\
</head>\r\n\
<body>\
<h1>SENSOR 1</h1>\
<hr>\
<center> temperature: "+String(t)+ ".  </center><br/>\
<center>humidity: "+String(h) +". </center><hr>\
</body>\
</html>");
IDE перестает это понимать.
Странно, ваш код у меня скомпилился без проблем. Может вы что-то не так до этого делаете? Тут надо быть очень внимательным к кавычкам!

Кавычки именно в строке прописи html, мне постоянно IDE выдает ошибку компиляции, когда я их не так ставлю.
Вот например тут
HTML:
<center> temperature: "+String(t)+ ".  </center>
Мы выделяем что-то или даем компилятору какую-то задачу ?
У нас полная форма должна быть типа такого:
Код:
String st = "<center> temperature: "+String(t)+ ".  </center>";
Теперь разбираем:
[inline]String st[/inline] - объявили переменную типа String
[inline]=[/inline] - и сразу присвоили ей значение
[inline]"<center> temperature: "[/inline] - просто любой текст.
[inline]+String(t)[/inline] - к предыдущему тексту добавляем еще текстовое значение переменной t (т.е. число из t переводим в текст)
[inline]+ ". </center>";[/inline] - ко всему, что было раньше, добавляем еще текст.

По вышеизложенному вопросу вам надо обратится к основам и синтаксису языка Си.
 

gerkimuyda

New member
С регулярками разобрались? В БД уже данные записываете? Тогда следующий этап - вывод последних значений по всем датчикам:
PHP:
<?php

  $db_server    =    "localhost";
  $db_username    =    "arduino";
  $db_password    =    "arduinotest";
  $db_database    =    "esp";

  // подключаемся к MySQL и проверяем на ошибки
  $db = mysqli_connect($db_server, $db_username, $db_password, $db_database);
  if(!$db) { print "MySQL Error: ".mysqli_connect_error(); exit; }

  // делаем функцию получения данных из MySQL с обработкой ошибок
  function dbquery($db, $sql) {
    $res = mysqli_query($db,$sql);
    $error = mysqli_error($db);  
    if($error) { print "MySQL Error: ".$error; exit; }
    $data=array();
    while ( $d = mysqli_fetch_assoc($res) )  { $data[]=$d; }
//    var_dump($data); exit; // <-- for debug only
    return $data;
  }


  // получаем список сенсоров, которые есть в таблице
  $sensors = dbquery($db,"SELECT `sensor` AS `name` FROM `serenity` GROUP BY `sensor` ASC");

  // теперь получаем по каждому сенсору его последнее значение
  $data = array();
  foreach($sensors as $sensor) {
    $sql  = "SELECT `temperature`, `humidity`, ".
        " DATE_FORMAT(`datetime`, '%Y-%m-%d %H:%i:%s') as formatdatetime ".
        "FROM `serenity` WHERE `sensor`='".mysqli_real_escape_string($db, $sensor['name']).
        " 'ORDER BY `datetime` DESC LIMIT 1;";
    $data[$sensor['name']] = dbquery($db,$sql);
  }

//Рисуем html страницу с таблицей
?><!DOCTYPE html>
<html>
<body><center>
<table border=1>
    <tr>
        <td>Sensor</td>
        <td>Temperature</td>
        <td>Humidity</td>
        <td>Last Request</td>
    <tr>
<?php foreach($data as $sensor=>$row) {  $row=current($row);
print "
    <tr>
        <td>".$sensor."</td>
        <td>".$row['temperature']."</td>
        <td>".$row['humidity']."</td>
        <td>".$row['formatdatetime']."</td>
    </tr>
"; }
if(count($data)==0) { print "<tr><td colspan='4' align='center'><i>(empty)</i></td></tr>"; }
?>
</table></center>
</body>
</html>
 
Последнее редактирование:

serenityLA

New member
С регулярками разобрались? В БД уже данные записываете? Тогда следующий этап - вывод последних значений по всем датчикам:
PHP:
<?php

  $db_server    =    "localhost";
  $db_username    =    "arduino";
  $db_password    =    "arduinotest";
  $db_database    =    "esp";

  // подключаемся к MySQL и проверяем на ошибки
  $db = mysqli_connect($db_server, $db_username, $db_password, $db_database);
  if(!$db) { print "MySQL Error: ".mysqli_connect_error(); exit; }

  // делаем функцию получения данных из MySQL с обработкой ошибок
  function dbquery($db, $sql) {
    $res = mysqli_query($db,$sql);
    $error = mysqli_error($db);
    if($error) { print "MySQL Error: ".$error; exit; }
    $data = mysqli_fetch_all($res, MYSQLI_ASSOC);
    if(count($data)==1) { $data = current($data); }
    return $data;
  }

  // получаем список сенсоров, которые есть в таблице
  $sensors = dbquery($db,"SELECT `sensor` AS `name` FROM `serenity` GROUP BY `sensor` ASC");

  // теперь получаем по каждому сенсору его последнее значение
  $data = array();
  foreach($sensors as $sensor) {
    $sql  = "SELECT `temperature`, `humidity`, ".
        " DATE_FORMAT(`datetime`, '%Y-%m-%d %H:%i:%s') as formatdatetime ".
        "FROM `serenity` WHERE `sensor`='".mysqli_real_escape_string($db, $sensor['name']).
        " 'ORDER BY `datetime` DESC LIMIT 1;";
    $data[$sensor['name']] = dbquery($db,$sql);
  }

//Рисуем html страницу с таблицей
?><!DOCTYPE html>
<html>
<body><center>
<table border=1>
    <tr>
        <td>Sensor</td>
        <td>Temperature</td>
        <td>Humidity</td>
        <td>Last Request</td>
    <tr>
<?php foreach($data as $sensor=>$row) {
print "
    <tr>
        <td>".$sensor."</td>
        <td>".$row['temperature']."</td>
        <td>".$row['humidity']."</td>
        <td>".$row['formatdatetime']."</td>
    </tr>
"; }
if(count($data)==0) { print "<tr><td colspan='4' align='center'><i>(empty)</i></td></tr>"; }
?>
</table></center>
</body>
</html>
С регулярками вроде как. В БД записываю. Но только не автоматически, мне нужно каждый раз заходить на скрипт в ручную. Нужно прописать, чтобы он сам обращался к esp с какой-то периодичностью.

Скрипт вывода почему-то не работает. Не может отобразить страницу.

Вставил скрипт в PHP Storm
он выделил строчку
PHP:
  $sensors = dbquery($db,"SELECT `sensor` AS `name` FROM `serenity` GROUP BY `sensor` ASC");
Если ее убрать, то скрипт выводит таблицу с наименованиями столбцов, но без данных.
 
Последнее редактирование:

gerkimuyda

New member
В БД записываю. Но только не автоматически, мне нужно каждый раз заходить на скрипт в ручную. Нужно прописать, чтобы он сам обращался к esp с какой-то периодичностью.
Я писал раньше - добавьте в планировщик вызов php с передачей в параметрах - путь к скрипту (в linux это cron).

Вставил скрипт в PHP Storm он выделил строчку
PHP:
  $sensors = dbquery($db,"SELECT `sensor` AS `name` FROM `serenity` GROUP BY `sensor` ASC");
Смотрите в файл php_error.log - какую ошибку выдает?
Данный запрос выгружает из БД список сенсоров, которые имеют записи в таблице.
(пс: все php-файлы, которые я вам давал - проверены на моем локальном компе.)

Идем далее? Вывод графика для первого сенсора (по имени).
PHP:
<?php

  $db_server    =    "localhost";
  $db_username    =    "arduino";
  $db_password    =    "arduinotest";
  $db_database    =    "esp";

  // подключаемся к MySQL и проверяем на ошибки
  $db = mysqli_connect($db_server, $db_username, $db_password, $db_database);
  if(!$db) { print "MySQL Error: ".mysqli_connect_error(); exit; }

  // делаем функцию получения данных из MySQL с обработкой ошибок
  function dbquery($db, $sql) {
    $res = mysqli_query($db,$sql);
    $error = mysqli_error($db);
    if($error) { print "MySQL Error: ".$error; exit; }
    $data = mysqli_fetch_all($res, MYSQLI_ASSOC);
    return $data;
  }

  // получаем по указанному сенсору его значения за последних 24 часа
  $sensor_name = '#1 (East)';

  $sql  = "SELECT `temperature`, `humidity`, ".
        " DATE_FORMAT(`datetime`, '%Y-%m-%d %H:%i:%s') as formatdatetime ".
        "FROM `serenity` WHERE `sensor`='".mysqli_real_escape_string($db, $sensor_name)."'".
        " AND `datetime`>DATE_SUB(NOW(),INTERVAL 1 DAY) ORDER BY `datetime`;";
  $data = dbquery($db,$sql);


//Рисуем html страницу с таблицей
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
.graph { width:95%; height:95%; }
</style>
<link rel="stylesheet" type="text/css" href="jquery-ui.css" />
<script type="text/javascript" src="jquery-1.12.4.js"></script>
<script type="text/javascript" src="jquery-ui.js"></script>
<script type="text/javascript" src="Chart.bundle.js"></script>
<script language="JavaScript"> <!-- hide

    Chart.defaults.global.defaultFontColor = "white";
    Chart.defaults.global.elements.point.radius=4;
    Chart.defaults.global.elements.point.borderWidth=3;
    Chart.defaults.global.elements.point.hitRadius=10;
    Chart.defaults.global.elements.point.hoverRadius=6;
    Chart.defaults.global.elements.line.tension=0;

        var ChartData1 = { type: "line",
            data: {
        labels : [<?php foreach($data as $row) { print "'".$row['formatdatetime']."',"; } ?>],
                datasets: [{
            label: " Temperature", yAxisID: "y-axis-1",
            data : [<?php foreach($data as $row) { print $row['temperature'].","; } ?>],
            backgroundColor:"rgba(0,255,0,0)", borderColor:"rgba(0,255,0,1)", pointBorderColor:"rgba(0,255,0,1)", pointBackgroundColor:"rgba(0,150,0,1)",
           },{
            label: " Humidity", yAxisID: "y-axis-2",
            data : [<?php foreach($data as $row) { print $row['humidity'].","; } ?>],
            backgroundColor:"rgba(255,0,0,0)", borderColor:"rgba(255,0,0,1)", pointBorderColor:"rgba(255,0,0,1)", pointBackgroundColor:"rgba(150,0,0,1)",
                }]
            },
            options: { responsive: true, animation: false, legend: {position: "bottom"},
                title:{ display:true, text: "<?=$sensor_name?>", fontSize: 36, },
                tooltips: { mode: "label", },
                scales: {
                    yAxes: [{ display: true, position: "left", id: "y-axis-1", gridLines: { color:"cyan", zeroLineWidth:3, zeroLineColor:"blue" } },
                { display: true, position: "right", id: "y-axis-2", gridLines: { drawOnChartArea: false, color:"cyan" }
                }],
                    xAxes: [{ display: true, gridLines: { display: false },
                        ticks: { autoSkip: true, userCallback: function(dataLabel, index) { return dataLabel; } }
                    }]
                },
            }
        };

    window.onload = function(){
        var ctx1 = document.getElementById("graph1").getContext("2d"); window.myLine1 = new Chart(ctx1, ChartData1);
    }
// end -->
</script>
</head>
<body topmargin=0 leftmargin=0 marginwidth=0 marginheight=0 bgcolor="#719bc6">
      <br/><center>
      <div class="graph"><canvas class="graph1" id="graph1"></canvas> </div>
      <div class="clearfix"></div>
</div></center>
</body>
</html>
Для html страницы понадобятся такие файлы: jquery-ui.css, Chart.bundle.js, jquery-1.12.4.js, jquery-ui.js - все есть в прикрепленном архиве. enjoy! o_O

201712281336.jpg
 

Вложения

Последнее редактирование:

serenityLA

New member
Я писал раньше - добавьте в планировщик вызов php с передачей в параметрах - путь к скрипту (в linux это cron).


Смотрите в файл php_error.log - какую ошибку выдает?
Данный запрос выгружает из БД список сенсоров, которые имеют записи в таблице.
(пс: все php-файлы, которые я вам давал - проверены на моем локальном компе.)
В корневой папке сервера нет этого файла, где его искать (мне кажется я каких-то очевидных вещей не понимаю :confused::confused::confused:).

С графиками тоже не отображает страницу.
 

gerkimuyda

New member
В корневой папке сервера нет этого файла, где его искать (мне кажется я каких-то очевидных вещей не понимаю :confused::confused::confused:).
Это не относится к серверу, а относится к операционной системе: https://esp8266.ru/forum/threads/monitoring-temperatury-cherez-web.3035/#post-46038
потом: cron - это планировщик в юниксах, если винда - тоже можно создать планировщик в
Пуск -> Панель управления -> Администрирование -> Планировщик заданий -> Создать задачу
где опишите запуск php.exe с передачей ему пути к вашему скрипту в параметрах командной строки.
Вот я и написал за вас весь функционал :) Вам осталось только собрать все в кучу и адаптировать под свои нужны.
Ну и сделать, в благодарность мне, что-то доброе какому-то другому человеку, или помочь ему. (http://kinogo.cc/2206-zaplati-drugomu-2000.html)
 

serenityLA

New member
Это не относится к серверу, а относится к операционной системе: https://esp8266.ru/forum/threads/monitoring-temperatury-cherez-web.3035/#post-46038


Вот я и написал за вас весь функционал :) Вам осталось только собрать все в кучу и адаптировать под свои нужны.
Ну и сделать, в благодарность мне, что-то доброе какому-то другому человеку, или помочь ему. (http://kinogo.cc/2206-zaplati-drugomu-2000.html)

Я имел в виду php_error.log


Я, честно говоря, поражаюсь как Вы делаете это так быстро и, вообще вашему желанию помочь таким дилетантам как я. Спасибо Вам огромное. Поставлю этот мониторинг (как до конца разберусь)всем своим соседям по даче, а то у них периодически котлы вырубаются и дома замерзают когда их нет.
 

gerkimuyda

New member
Я имел в виду php_error.log
Зависит от настроек php.ini
Попробуйте добавить строки в начало php-скрипта:
PHP:
 ini_set("display_errors","1");
 ini_set("error_reporting",E_ALL);
Это укажет PHP выводить все ошибки на экран (на страницу в браузер). И запустите скрипт из браузера (или из командной строки).
 

serenityLA

New member
Зависит от настроек php.ini
Попробуйте добавить строки в начало php-скрипта:
PHP:
 ini_set("display_errors","1");
 ini_set("error_reporting",E_ALL);
Это укажет PHP выводить все ошибки на экран (на страницу в браузер). И запустите скрипт из браузера (или из командной строки).
Для первого:
Код:
Fatal error: Uncaught Error: Call to undefined function mysqli_fetch_all() in C:\MAMP\htdocs\scriptOUT.php:19 Stack trace: #0 C:\MAMP\htdocs\scriptOUT.php(25): dbquery(Object(mysqli), 'SELECT `sensor`...') #1 {main} thrown in C:\MAMP\htdocs\scriptOUT.php on line 19
строка 19 : $data = mysqli_fetch_all($res, MYSQLI_ASSOC);

Для графиков:
PHP:
Fatal error: Uncaught Error: Call to undefined function mysqli_fetch_all() in C:\MAMP\htdocs\graph.php:18 Stack trace: #0 C:\MAMP\htdocs\graph.php(30): dbquery(Object(mysqli), 'SELECT `tempera...') #1 {main} thrown in C:\MAMP\htdocs\graph.php on line 18

запуск php.exe с передачей ему пути к вашему скрипту в параметрах командной строки.
Это через Visual Studio ?
 
Последнее редактирование:

gerkimuyda

New member
Понял, древняя версия PHP (ниже версии 5.3)
Меняем строку
PHP:
$data = mysqli_fetch_all($res, MYSQLI_ASSOC);
на
PHP:
$data=array();
while ( $d = mysqli_fetch_assoc($res) )  { $data[]=$d; }
 

gerkimuyda

New member
Сужу по информации на официальном сайте: PHP: mysqli_result::fetch_all - Manual
(PHP 5 >= 5.3.0, PHP 7)
Да и не особо важно, если мы может сделать тоже самое другим способом :) Теперь работает?

У вас такая структура таблицы?
Код:
CREATE TABLE `serenity` (
  `id` int(10) UNSIGNED NOT NULL,
  `sensor` varchar(20) NOT NULL,
  `temperature` decimal(5,2) DEFAULT NULL,
  `humidity` decimal(5,2) DEFAULT NULL,
  `datetime` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Полный код функции такой?

PHP:
  function dbquery($db, $sql) {
    $res = mysqli_query($db,$sql);
    $error = mysqli_error($db);
    if($error) { print "MySQL Error: ".$error; exit; }
//    $data = mysqli_fetch_all($res, MYSQLI_ASSOC);
    $data=array();
    while ( $d = mysqli_fetch_assoc($res) )  { $data[]=$d; }
//    var_dump($data); exit; // <-- for debug only
    return $data;
  }
Если все-равно не работает, тогда смотрим что у нас в данных получается (раскомментируйте строку "for debug only")
 
Последнее редактирование:

serenityLA

New member
Сужу по информации на официальном сайте: PHP: mysqli_result::fetch_all - Manual
(PHP 5 >= 5.3.0, PHP 7)
Да и не особо важно, если мы может сделать тоже самое другим способом :) Теперь работает?
Нет(....
Структура такая (если мы говорим о порядке переменных )

скрипт графиков показывает прежнюю ошибку, даже после изменений

upd. Графики заработали.
 

Вложения

Последнее редактирование:

serenityLA

New member
Если все-равно не работает, тогда смотрим что у нас в данных получается (раскомментируйте строку "for debug only")

PHP:
array(1) { ["name"]=> string(9) "#SENSOR 1" }
Не понимаю логики ошибки в коде вывода таблицы, если скрипт с графиками работает нормально.
 

gerkimuyda

New member
понял ошибку :) Поспешил немного. Сверху внес необходимые изменения в код. Теперь пробуйте. o_O

запуск php.exe с передачей ему пути к вашему скрипту в параметрах командной строки
Это через Visual Studio ?
Нет, это через cmd.exe

А вот как в планировщике выглядит :
201712281515.jpg
 
Последнее редактирование:
Сверху Снизу