Страница 1 из 2

Распределение переменных по классам

Добавлено: Вт мар 12, 2019 4:32 pm
akininav
Доброго времени суток.
Опишу вкратце проблему:
Есть устройство которое отправляет данные (в моем случае роутер mikrotik но суть не в нем)
Код отправки:

Код: Выделить всё

/tool fetch mode=http url=$url keep-result=no http-method="post" http-data="wifi=$str";
где $str содержит необходимые данные.
Полный код:

Код: Выделить всё

:local url "http://192.168.88.100/mikrot.php";
:set $str "";
:foreach i in=[/caps-man registration-table find] do={
:local mac [/caps-man registration-table get $i mac-address];
:local ip [/ip dhcp-server lease get [/ip dhcp-server lease find where mac-address="$mac"] address];
:local getcomment [/ip dhcp-server lease get [/ip dhcp-server lease find where address="$ip"] comment];
:local hostname [/ip dhcp-server lease get [/ip dhcp-server lease find where mac-address="$mac"] host-name];
:local capnumber [/caps-man registration-table get [/caps-man registration-table find where mac-address="$mac"] interface];
:local rxsignal [/caps-man registration-table get [/caps-man registration-table find where mac-address="$mac"] rx-signal];
:local uptime [/caps-man registration-table get [/caps-man registration-table find where mac-address="$mac"] uptime];
:set $str "$str|$getcomment;$hostname;$capnumber;$rxsignal;$ip;$mac;$uptime";
}
:do {
/tool fetch mode=http url=$url keep-result=yes dst-path="result.txt" http-method="post" http-data="wifi=$str";
} on-error={ log warning "Mojerdomo: Send to server Failed!" }
Если создать просто php страницу с кодом ниже и выставить keep-result=yes и указать путь, то получаю текстовый файл с обработанными данными, то есть скрипт работает правильно.
А вот как распихать эти данные в классы объекта mdm совершенно не понимаю. Подскажите пожалуйста :(
Код php:

Код: Выделить всё

<?php

$ip = $_SERVER['REMOTE_ADDR'];
$array=$_POST['wifi'];
print_r($array);

$tmp1 = explode('|', $array);

foreach ($tmp1 as $i) { 
list($getcomment, $hostname ,$wlannumber, $signalstr , $ip, $mac, $uptime) = explode(";", $i);

if ($mac != '')
{
$wificlienttmp['getcomment'] = $getcomment;
$wificlienttmp['hostname'] = $hostname;
$wificlienttmp['wlannumber'] = $wlannumber;
$wificlienttmp['signalstr '] = $signalstr ;
$wificlienttmp['ip'] = $ip;
$wificlienttmp['mac'] = $mac;
$wificlienttmp['uptime'] = $uptime;
$wificlient[] = $wificlienttmp;
print_r($wificlienttmp);
}
}
Ответ возвращается в таком виде:
|Xiaomi Gateway;lumi-gateway-v3_miio;Cap1_2.4Ghz;-64;192.168.88.25;7C:49:EB:B0:A9:8D;1d21:59:15.590
Array
(
[getcomment] => Xiaomi Gateway
[hostname] => lumi-gateway-v3_miio
[capnumber] => Cap1_2.4Ghz
[rxsignal] => -64
[ip] => 192.168.88.25
[mac] => 7C:49:EB:B0:A9:8D
[uptime] => 1d21:59:15.590
)

Re: Распределение переменных по классам

Добавлено: Вт мар 12, 2019 4:40 pm
nightwind
непонятно, что ты хочешь из этого поиметь. ну есть у тебя массив, пихай через setglobal куда хочешь

Re: Распределение переменных по классам

Добавлено: Вт мар 12, 2019 4:41 pm
skysilver
А не проще сразу сценарий или метод объекта дергать ГЕТ-ом и ему передавать данные?
https://kb.mjdm.ru/http-ssilki-dlya-raboti-s-majordomo/

Если нужен именно отдельный php-файл, то для доступа в нем к стандартный МДМ функциям (setGlobal, getGlobal и т.п.) нужно сначала добавить несколько строк кода и подключиться к базе.

Re: Распределение переменных по классам

Добавлено: Вт мар 12, 2019 6:23 pm
akininav
nightwind писал(а): Вт мар 12, 2019 4:40 pm непонятно, что ты хочешь из этого поиметь. ну есть у тебя массив, пихай через setglobal куда хочешь
Я на выходе хочу полученные данные запихнуть в классы. setglobal я не могу использовать так как это отдельная страница и она не связана с mdm. Вот и пытаюсь узнать либо как связать эту страницу, либо что нужно создать в mdm на что будут отправляться эти данные.

Re: Распределение переменных по классам

Добавлено: Вт мар 12, 2019 6:30 pm
akininav
skysilver писал(а): Вт мар 12, 2019 4:41 pm А не проще сразу сценарий или метод объекта дергать ГЕТ-ом и ему передавать данные?
https://kb.mjdm.ru/http-ssilki-dlya-raboti-s-majordomo/

Если нужен именно отдельный php-файл, то для доступа в нем к стандартный МДМ функциям (setGlobal, getGlobal и т.п.) нужно сначала добавить несколько строк кода и подключиться к базе.
Спасибо,
сейчас попробую так сделать (непринципиально иметь отдельный файл), но тогда встает вопрос, что устройства на dhcp сервере могут появляться новые и тогда каждое устройство нужно будет вручную добавлять. А в отдельном php можно сделать что бы создавались новые объекты в зависимости от полученного результата.

Re: Распределение переменных по классам

Добавлено: Вт мар 12, 2019 6:33 pm
Chainik
Если в текстовый файл формируется, может быть получится так:

Код: Выделить всё

$result = file_get_contents("C:\Путь_к_файлу\...........");
А дальше парсить и распихивать по свойствам.

Re: Распределение переменных по классам

Добавлено: Вт мар 12, 2019 6:39 pm
akininav
Chainik писал(а): Вт мар 12, 2019 6:33 pm Если в текстовый файл формируется, может быть получится так:

Код: Выделить всё

$result = file_get_contents("C:\Путь_к_файлу\...........");
А дальше парсить и распихивать по свойствам.
Про текстовый файл я написал просто что выполнял проверку скрипта, а так на выходе есть массив данных.

Re: Распределение переменных по классам

Добавлено: Вт мар 12, 2019 8:04 pm
nightwind
Напиши ты нормальное техзадание. зачем тебе их распихивать, зачем создавать новые объекты в дереве при появлении лизингов днср. может это ненужно совсем, и вопрос решится одностройчником баш типа того

Код: Выделить всё

#!/bin/bash
tty -s || exec x-terminal-emulator -e $0 $@
ssh [email protected] 'cat /tmp/*.leases' | awk '{print $2,$3,$4}'

Re: Распределение переменных по классам

Добавлено: Вт мар 12, 2019 8:26 pm
akininav
nightwind писал(а): Вт мар 12, 2019 8:04 pm Напиши ты нормальное техзадание. зачем тебе их распихивать, зачем создавать новые объекты в дереве при появлении лизингов днср. может это ненужно совсем, и вопрос решится одностройчником баш типа того

Код: Выделить всё

#!/bin/bash
tty -s || exec x-terminal-emulator -e $0 $@
ssh [email protected] 'cat /tmp/*.leases' | awk '{print $2,$3,$4}'
Хорошо.
Моя конечная цель смотреть подключенные к роутеру (mikrotik) устройства. На форуме есть похожая тема, но там идет подключение к роутеру через api (то есть инициатором является МДМ).
Я же хочу что бы роутер отсылал данные, а МДМ их принимал, обрабатывал, создавал объекты и заполнял их данными.
Скрипт выполняемый на роутере готов и представлен в первом письме, а как принять правильно эту информацию в МДМ я не знаю, по этому и создал тему.

Re: Распределение переменных по классам

Добавлено: Вт мар 12, 2019 8:55 pm
nightwind
самый простой вариант - это в твоем этом отдельном от мажора скрипте сделать публикацию в mqtt топик. это очень просто, примеров миллион. а у мажора есть готовый mqtt клиент (который к тому же сам распарсит все твои данные, если хочешь)
Создавать на лету неопределенное количество объектов в дереве - это мазохизм и расточительство. зачем тебе оно надо? создаешь один объект leases, свойство value, onvalueupdate создаешь скрипт, который разбирает пришедшую строку и делает что тебе надо.