22.11.2024
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
отправка команд
logoffДата: Суббота, 10.12.2011, 21:15 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
Скрипт отсылает команду по списку приборов.
Code

use bn -- база BN
go
-- Обявили переменные
declare @device_code varchar(16);
declare @CommandCode int;
declare @Command nvarchar(500);
declare @UserName nvarchar(500);
declare @UserID int;

-- теперь значения и курсор
declare cur cursor local for select d.code from sys_dev_device as d-- обявление курсора для выборки
             inner join FLEET_object as O on O.Device_ID=d.id
where d.code in ('00051695','00056432','00045678')  -- список приборов, куда надо послать команду
--where O.ObjectGarNum in ('А132','А2223','А43555')  -- закоментировано - снять коммент, если хотите использовать
-- в качестве фильтра список гаражных номеров and D.deviceactive=1 and O.ObjectActive=1 -- доп фильтры на ТС и АТ
and d.deviceactive=1 and o.objectactive=1

set @UserName='Админ' -- имя пользователя, от котого посылается команда
set @CommandCode='10'; -- код команды, что вы хотите послать
set @Command='23|MAX SPEED=70|'; -- содержимое команды, что вы хотите послать - смотрите примеры команд

set @UserID=(select id from sys_Users where name=@UserName); -- получим ид пользователя с указанным именем
if (@UserID) is null begin print ('Пользователь не найден!'); return; end;-- провка на пользователя, что он есть
--if not exists (select * from sys_dev_device where code=@device_code) begin print ('указан не верный номер прибора'); return; end; -- проверка на номер прибора

OPEN cur

FETCH NEXT FROM cur INTO @device_code -- нач значение цикла
WHILE @@FETCH_STATUS = 0 -- условие цикла, пока есть чего из него получать
BEGIN if not exists  -- проверка на то, что есть что добавлять для прибора
      (select @UserID as UserID, d.code as dev_code,c.CmmandID as CommandTemplID,@Command as Command, o.ObjectID as ObjectID,0 as State      
      from FLEET_Command as C      
      inner join sys_dev_device as D on d.id=C.Device_id
      inner join fleet_object as o on o.device_id=C.Device_id      
      where d.code=@device_code and c.CommandCode=@CommandCode) print ('для АТ: '+(@device_code)+' не найден датчик')

      insert into FLEET_OutCome -- сама вставка данных в таблицу сообщений
      (UserID,dev_code,CommandTemplID,Command,ObjectID, state) -- по указанным полям
      select -- из запроса
      @UserID as UserID, d.code as dev_code,c.CmmandID as CommandTemplID,@Command as Command, o.ObjectID as ObjectID,0 as State      
      from FLEET_Command as C -- из таблицы списка команд
      inner join sys_dev_device as D on d.id=C.Device_id -- и таблицы приборов
      inner join fleet_object as o on o.device_id=C.Device_id -- и таблицы ТС
      where d.code=@device_code and c.CommandCode=@CommandCode; -- где код прибора соотвествует выборке из курсора и команда тоже есть
           
      FETCH NEXT FROM cur INTO @device_code -- след инерация цикла
end;
go


где
where d.code in ('00051695','00056432','00045678')
список приборов

set @UserName='Админ' -- имя пользователя, от котого посылается команда
set @CommandCode='10'; -- код команды, что вы хотите послать (10 - это консольная команда, 1 - интервал отбивки в движении и т.д. для M2M Cyber GLX)
set @Command='23|MAX SPEED=70|'; -- содержимое команды, что вы хотите послать - смотрите примеры команд, в уже отправленных
 
logoffДата: Вторник, 28.02.2012, 12:44 | Сообщение # 2
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
пример отправки по сгенерированному таблицей списку

Code

use bn -- база BN   
go   
-- Обявили переменные   
declare @device_code varchar(16);   
declare @CommandCode int;   
declare @Command nvarchar(500);   
declare @UserName nvarchar(500);   
declare @UserID int;   

-- теперь значения и курсор   
declare cur cursor local for select d.code from sys_dev_device as d-- обявление курсора для выборки   
             inner join FLEET_object as O on O.Device_ID=d.id   
where d.code in   
(
select d.code
--select org.ShortName,o.ObjectGarNum,d.code,
--otpr.Command Command
--,otpr.State   
--,proverka.Answer proverka
--,cd.tele_time last_data
from dbo.FLEET_Object as O
inner join dbo.SYS_DEV_Device as D on d.id=o.Device_ID
left join dbo.SYS_OrgRequisite as org on org.id=o.OrganizationId
left join   
(select ou.dev_code, ou.ObjectID, ou.Command, ou.state from [BN].[dbo].[FLEET_OutCome] ou
inner join   
(SELECT [dev_code]
        ,[ObjectID]
        ,MAX(idrec) idrec
    FROM [dbo].[FLEET_OutCome]
    where Command like '%cmd number=9616%'
    group by [dev_code]
        ,[ObjectID]) as otpravleno on otpravleno.idrec=ou.IDRec)
        as otpr on otpr.ObjectID=o.ObjectID and otpr.dev_code=d.code

left join   
(select ou.dev_code, ou.ObjectID, ou.Answer from [BN].[dbo].[FLEET_OutCome] ou
inner join   
(SELECT [dev_code]
        ,[ObjectID]
        ,MAX(idrec) idrec
    FROM [dbo].[FLEET_OutCome]
    where Command like '%cmd number?%'
    group by [dev_code]
        ,[ObjectID]) as otpravleno on otpravleno.idrec=ou.IDRec)
        as proverka on proverka.ObjectID=o.ObjectID and proverka.dev_code=d.code
left join dbo.SYS_DEV_CurrentData as CD on cd.ObjectID=o.ObjectID

where o.ObjectActive=1
--and Command is null -- фильтр по не отправленным командам
and State=2
--order by org.ShortName,o.ObjectGarNum
)

--('00051695','00056432','00045678')  -- список приборов, куда надо послать команду   
--where O.ObjectGarNum in ('А132','А2223','А43555')  -- закоментировано - снять коммент, если хотите использовать   
-- в качестве фильтра список гаражных номеров and D.deviceactive=1 and O.ObjectActive=1 -- доп фильтры на ТС и АТ   
and d.deviceactive=1 and o.objectactive=1   

set @UserName='Админ' -- имя пользователя, от котого посылается команда   
set @CommandCode='10'; -- код команды, что вы хотите послать   
set @Command='23|cmd number?|'; -- содержимое команды, что вы хотите послать - смотрите примеры команд   

set @UserID=(select id from sys_Users where name=@UserName); -- получим ид пользователя с указанным именем   
if (@UserID) is null begin print ('Пользователь не найден!'); return; end;-- провка на пользователя, что он есть   
--if not exists (select * from sys_dev_device where code=@device_code) begin print ('указан не верный номер прибора'); return; end; -- проверка на номер прибора   

OPEN cur   

FETCH NEXT FROM cur INTO @device_code -- нач значение цикла   
WHILE @@FETCH_STATUS = 0 -- условие цикла, пока есть чего из него получать   
BEGIN if not exists  -- проверка на то, что есть что добавлять для прибора   
      (select @UserID as UserID, d.code as dev_code,c.CmmandID as CommandTemplID,@Command as Command, o.ObjectID as ObjectID,0 as State      
      from FLEET_Command as C      
      inner join sys_dev_device as D on d.id=C.Device_id   
      inner join fleet_object as o on o.device_id=C.Device_id      
      where d.code=@device_code and c.CommandCode=@CommandCode) print ('для АТ: '+(@device_code)+' не найден датчик')   

      insert into FLEET_OutCome -- сама вставка данных в таблицу сообщений   
      (UserID,dev_code,CommandTemplID,Command,ObjectID, state) -- по указанным полям   
      select -- из запроса   
      @UserID as UserID, d.code as dev_code,c.CmmandID as CommandTemplID,@Command as Command, o.ObjectID as ObjectID,0 as State      
      from FLEET_Command as C -- из таблицы списка команд   
      inner join sys_dev_device as D on d.id=C.Device_id -- и таблицы приборов   
      inner join fleet_object as o on o.device_id=C.Device_id -- и таблицы ТС   
      where d.code=@device_code and c.CommandCode=@CommandCode; -- где код прибора соотвествует выборке из курсора и команда тоже есть   
           
      FETCH NEXT FROM cur INTO @device_code -- след инерация цикла   
end;   
go


использовалось совместно вот с этим скриптом
 
  • Страница 1 из 1
  • 1
Поиск:

LogOff © 2024
Сайт создан в системе uCoz Рейтинг GPS Клуба. GPS навигаторы. GPS мониториг. GPS трекеры. ГЛОНАСС