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

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

akininav
Сообщения: 12
Зарегистрирован: Ср мар 06, 2019 7:55 pm
Благодарил (а): 2 раза
Поблагодарили: 4 раза

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

Сообщение akininav » Вт мар 12, 2019 4:32 pm

Доброго времени суток.
Опишу вкратце проблему:
Есть устройство которое отправляет данные (в моем случае роутер 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
)
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

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

Сообщение nightwind » Вт мар 12, 2019 4:40 pm

непонятно, что ты хочешь из этого поиметь. ну есть у тебя массив, пихай через setglobal куда хочешь
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1754 раза
Контактная информация:

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

Сообщение skysilver » Вт мар 12, 2019 4:41 pm

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

Если нужен именно отдельный php-файл, то для доступа в нем к стандартный МДМ функциям (setGlobal, getGlobal и т.п.) нужно сначала добавить несколько строк кода и подключиться к базе.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
akininav
Сообщения: 12
Зарегистрирован: Ср мар 06, 2019 7:55 pm
Благодарил (а): 2 раза
Поблагодарили: 4 раза

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

Сообщение akininav » Вт мар 12, 2019 6:23 pm

nightwind писал(а):
Вт мар 12, 2019 4:40 pm
непонятно, что ты хочешь из этого поиметь. ну есть у тебя массив, пихай через setglobal куда хочешь
Я на выходе хочу полученные данные запихнуть в классы. setglobal я не могу использовать так как это отдельная страница и она не связана с mdm. Вот и пытаюсь узнать либо как связать эту страницу, либо что нужно создать в mdm на что будут отправляться эти данные.
akininav
Сообщения: 12
Зарегистрирован: Ср мар 06, 2019 7:55 pm
Благодарил (а): 2 раза
Поблагодарили: 4 раза

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

Сообщение akininav » Вт мар 12, 2019 6:30 pm

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

Если нужен именно отдельный php-файл, то для доступа в нем к стандартный МДМ функциям (setGlobal, getGlobal и т.п.) нужно сначала добавить несколько строк кода и подключиться к базе.
Спасибо,
сейчас попробую так сделать (непринципиально иметь отдельный файл), но тогда встает вопрос, что устройства на dhcp сервере могут появляться новые и тогда каждое устройство нужно будет вручную добавлять. А в отдельном php можно сделать что бы создавались новые объекты в зависимости от полученного результата.
Последний раз редактировалось akininav Вт мар 12, 2019 7:10 pm, всего редактировалось 2 раза.
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

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

Сообщение Chainik » Вт мар 12, 2019 6:33 pm

Если в текстовый файл формируется, может быть получится так:

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

$result = file_get_contents("C:\Путь_к_файлу\...........");
А дальше парсить и распихивать по свойствам.
akininav
Сообщения: 12
Зарегистрирован: Ср мар 06, 2019 7:55 pm
Благодарил (а): 2 раза
Поблагодарили: 4 раза

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

Сообщение akininav » Вт мар 12, 2019 6:39 pm

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

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

$result = file_get_contents("C:\Путь_к_файлу\...........");
А дальше парсить и распихивать по свойствам.
Про текстовый файл я написал просто что выполнял проверку скрипта, а так на выходе есть массив данных.
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

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

Сообщение nightwind » Вт мар 12, 2019 8:04 pm

Напиши ты нормальное техзадание. зачем тебе их распихивать, зачем создавать новые объекты в дереве при появлении лизингов днср. может это ненужно совсем, и вопрос решится одностройчником баш типа того

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

#!/bin/bash
tty -s || exec x-terminal-emulator -e $0 $@
ssh root@192.168.1.1 'cat /tmp/*.leases' | awk '{print $2,$3,$4}'
akininav
Сообщения: 12
Зарегистрирован: Ср мар 06, 2019 7:55 pm
Благодарил (а): 2 раза
Поблагодарили: 4 раза

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

Сообщение akininav » Вт мар 12, 2019 8:26 pm

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

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

#!/bin/bash
tty -s || exec x-terminal-emulator -e $0 $@
ssh root@192.168.1.1 'cat /tmp/*.leases' | awk '{print $2,$3,$4}'
Хорошо.
Моя конечная цель смотреть подключенные к роутеру (mikrotik) устройства. На форуме есть похожая тема, но там идет подключение к роутеру через api (то есть инициатором является МДМ).
Я же хочу что бы роутер отсылал данные, а МДМ их принимал, обрабатывал, создавал объекты и заполнял их данными.
Скрипт выполняемый на роутере готов и представлен в первом письме, а как принять правильно эту информацию в МДМ я не знаю, по этому и создал тему.
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

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

Сообщение nightwind » Вт мар 12, 2019 8:55 pm

самый простой вариант - это в твоем этом отдельном от мажора скрипте сделать публикацию в mqtt топик. это очень просто, примеров миллион. а у мажора есть готовый mqtt клиент (который к тому же сам распарсит все твои данные, если хочешь)
Создавать на лету неопределенное количество объектов в дереве - это мазохизм и расточительство. зачем тебе оно надо? создаешь один объект leases, свойство value, onvalueupdate создаешь скрипт, который разбирает пришедшую строку и делает что тебе надо.
За это сообщение автора nightwind поблагодарил:
akininav (Ср мар 13, 2019 10:58 am)
Рейтинг: 1.16%
Ответить