Температура за бортом на цифровике

Все о УАТС Mitel MD-110 и MX-ONE

Модератор: BVN

Ответить
Sam
Сообщения: 61
Зарегистрирован: Пн май 26, 2008 9:10

Температура за бортом на цифровике

Сообщение Sam » Пт июн 22, 2018 10:01

Попалась старая тема там обсуждалось как выводить температуру на дисплеи цифровых телефонов. Посмотрел мануал на Цифровик - действительно отображается температура.
в связи с чем возникли вопросы
вывод информационной строки производиться какой-то командой с какой-то платы?

BVN
Мастер
Сообщения: 4928
Зарегистрирован: Чт фев 26, 2004 15:11
Откуда: Санкт-Петербург

Температура за бортом на цифровике

Сообщение BVN » Пт июн 22, 2018 10:09

Sam писал(а):
Пт июн 22, 2018 10:01
Посмотрел мануал на Цифровик - действительно отображается температура.
а этот мануал часом не для ВР250?

Sam
Сообщения: 61
Зарегистрирован: Пн май 26, 2008 9:10

Температура за бортом на цифровике

Сообщение Sam » Пт июн 22, 2018 12:30

BVN писал(а):
Пт июн 22, 2018 10:09
Sam писал(а):
Пт июн 22, 2018 10:01
Посмотрел мануал на Цифровик - действительно отображается температура.
а этот мануал часом не для ВР250?
Скорее всего что так.
Задумка была в следующем - если в МД-110 есть комманда выводящая информацию на все цифровые телефоны написать прогу которая будет брать температуру с электронного градусника или с сайта погоды и с заданной периодичностью отправлять команду в АТС.

Geka
Сообщения: 45
Зарегистрирован: Вт июн 01, 2004 11:38
Откуда: Ярославль

Температура за бортом на цифровике

Сообщение Geka » Пт июн 22, 2018 12:59

На цифровиках меняется информация командой:
KSTSC:STRNO=IDL1,STRING="T = +12#B0C";
для старых цифровиков
KSTSC:STRNO=IDL12,STRING="T = +12#B0C";
Я написала такую программу. Информацию беру из интернета. Если не работает один ресурс температурный, то беру с другого сайта. Если нет интернета, то пишу название компании.

Sam
Сообщения: 61
Зарегистрирован: Пн май 26, 2008 9:10

Температура за бортом на цифровике

Сообщение Sam » Пт июн 22, 2018 13:41

Geka писал(а):
Пт июн 22, 2018 12:59
На цифровиках меняется информация командой:
KSTSC:STRNO=IDL1,STRING="T = +12#B0C";
для старых цифровиков
KSTSC:STRNO=IDL12,STRING="T = +12#B0C";
Я написала такую программу. Информацию беру из интернета. Если не работает один ресурс температурный, то беру с другого сайта. Если нет интернета, то пишу название компании.
2 вопроса
1) какое значение имеет IDL1 по умолчанию
2) если не секрет с какого сайта берете инфу, понимаю, парсить можно с любого, но где проще?

Geka
Сообщения: 45
Зарегистрирован: Вт июн 01, 2004 11:38
Откуда: Ярославль

Температура за бортом на цифровике

Сообщение Geka » Пт июн 22, 2018 14:00

1) Значение STRING? хз, пустое, наверно :) У нас всегда было название организации.
2) один - только у нас есть, другой - мне больше понравилось у яндекса. можно у weather, тоже нормально.

Sam
Сообщения: 61
Зарегистрирован: Пн май 26, 2008 9:10

Температура за бортом на цифровике

Сообщение Sam » Пн июл 02, 2018 10:42

Сделал я прогу.
Раз в час беру данные с gismeteo.ru, подключаюсь по telnet к АТС, отправляю данные, отключаюсь.
Но столкнулся с не понятной фигней. После ночи работы и 5-6 удачных(судя по логу подключений) станция заблокировала подключение:
Лог удачного подключения:

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

"
login: 
ÿûÿûÿý
S
S
S
S
S
S
S
S
S
S;

ENTER USER NAME
<
A
D
M
I
N

ENTER PASSWORD
<
     AUTHORITY CLASS   7
(C)  COPYRIGHT ERICSSON  
     test        02JUL18    11:00:27       1-0-60-04 SYSNET1    
   
<
K
S
T
S
P
:
S
T
R
N
O
=
ID
L1;

KEY SYSTEM TEXT STRING
 
LANG:   ENGLISH                       
STRNO   STRING                     TIMFMT       CHRVAL       POS            
IDL1   "t = 29..31  C       "                   B0           12             

END


<
K
S
T
S
C
:
S
T
R
N
O
=
I
D
L
1,S
T
R
I
N
G
=
 
"
t
 
=
 
1
9
.
.
2
1
 
#
B
0
C
"
;
EXECUTED

<
KSTSP:S
T
R
N
O
=
IDL1;

KEY SYSTEM TEXT STRING
 
LANG:   ENGLISH                       

STRNO   STRING                     TIMFMT       CHRVAL       POS            

IDL1   "t = 19..21  C       "                   B0           12             

END

<

o
;

?
<
LOGGED OFF"

"Есть подключение к АТС sam_test
>login: 
S
S
S
S
S
S
S
S
S
S
;

Login Rejected 
>login: 
S
S
S
S
S
S
S
S
S
S
;

Login Rejected 
>login: 
S
S
S
S
S
S
S
S
S
S
;

Login Rejected 
>login: "
И выйти из этой ситуации помогает только физический перезапуск NIU2
Может есть у кого какие мысли?

Viktor
Специалист
Сообщения: 101
Зарегистрирован: Чт ноя 16, 2017 9:26
Откуда: НиНо

Температура за бортом на цифровике

Сообщение Viktor » Пн июл 02, 2018 11:44

Может дело в перенёсшейся ";" после последней "S"?
Может убавить количество "S" до семи или восьми?
Не просто что-либо понять в приведённом листинге.
:)

Sam
Сообщения: 61
Зарегистрирован: Пн май 26, 2008 9:10

Температура за бортом на цифровике

Сообщение Sam » Пн июл 02, 2018 12:44

Делаю в Delphi 7, может листинг что прояснит

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

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, Gauges, ExtCtrls, ScktComp;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    Edit1: TEdit;
    Gauge1: TGauge;
    Timer1: TTimer;
    Button2: TButton;
    Label1: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit5: TEdit;
    Label5: TLabel;
    GroupBox1: TGroupBox;
    Edit6: TEdit;
    Label6: TLabel;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    Button3: TButton;
    Button4: TButton;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Memo3: TMemo;
    ClientSocket1: TClientSocket;
    GroupBox4: TGroupBox;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    CheckBox1: TCheckBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure Button9Click(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button4Click(Sender: TObject);
    procedure Button5KeyPress(Sender: TObject; var Key: Char);
    procedure CheckBox1Click(Sender: TObject);
    procedure ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  t,i,eror:integer;
  Period:integer;
  s:AnsiString;
  s1:string;
  temp:string;
  dat:Tdatetime;
  
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  timer1.Enabled:=true;
  Period:=strtoint(edit6.Text);
  Gauge1.MaxValue:=  Period;
  clientsocket1.Active:=false;
  clientsocket1.Host:=edit2.text;		//23 порт телнет
  clientsocket1.Port:=strtoint(edit3.Text);		//ip АТС
  dat := now;
  memo2.Lines.Add('Старт - дата/время = '+  DateToStr(dat) + ' ' + TimeToStr(dat));		//запись в лог
  end;

  
procedure TForm1.Button2Click(Sender: TObject);			//тестовая кнопка проверки температуры
begin
S:=utf8decode(idhttp1.Get(edit1.Text));
memo1.Lines.Add(s) ;
while pos('температура ',s) <> 0 do
    begin
      delete(s,1, pos('температура ',s)+11);
      memo2.Lines.Add(copy(s,1,pos('С',s)) );
      temp:=copy(s,1,pos('С',s)-1) ;
      s:='';

      //http://informer.gismeteo.ru/rss/04202.xml pitufik
      //http://informer.gismeteo.ru/rss/28900.xml samara      
      //http://informer.gismeteo.ru/rss/04200.xml attu
    end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
  inc(t);		//таймер 1сек за проход
  Gauge1.Progress:=t;		
  dat := now;		//запрашиваем актуальные дату/время

  if t=Period-15 then			//запрос погоды
    begin
    S:=utf8decode(idhttp1.Get(edit1.Text));
      memo1.Lines.Add(s) ;

      while pos('температура ',s) <> 0 do
        begin
          delete(s,1, pos('температура ',s)+11);
          memo2.Lines.Add(copy(s,1,pos('С',s)) +'   дата/время = '+  DateToStr(dat) + ' ' + TimeToStr(dat));
          temp:=copy(s,1,pos('С',s)-1) ;
          s:='';
        end;
    clientsocket1.Active:=true;		//конект к АТС

    end;


  if t=(Period-11) then		//смотрим текущее значение
    begin
      clientsocket1.Socket.SendText('KSTSP:STRNO=IDL1;'+#13#10) ;
    //  clientsocket1.Socket.SendText('o;'+#13#10) ;
    end;

  if t=(Period-8) then		//меняем на актуальное
    begin

      TEMP:= 'KSTSC:STRNO=IDL1,STRING= '+ #34+'t = '+ temp + '#B0C'+#34 + ';';
      clientsocket1.Socket.SendText(TEMP+#13#10) ;

    end;

   if t=(Period-5) then			//смотрим ещё раз, для лога
    begin
      clientsocket1.Socket.SendText('KSTSP:STRNO=IDL1;'+#13#10) ;
    //  clientsocket1.Socket.SendText('o;'+#13#10) ;
    end;




  if t=(Period-2) then		//отключаемся от АТС
    begin
      clientsocket1.Socket.SendText(#$18+'o;'+#13#10) ;
    //  clientsocket1.Socket.SendText('o;'+#13#10) ;
    end;



  if t>(Period) then			//обнуляем таймер и перезапускаем период
    begin
      t:=0;
      Gauge1.Progress:=t;
    end;


end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  if errorcode<>0 then
    begin
      memo3.Lines.Add('Ошибка сокета - '+ inttostr(errorcode));
      errorcode:=0;
    end;
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
  dat := now;
  memo2.Lines.Add('Стоп  - дата/время = '+  DateToStr(dat) + ' ' + TimeToStr(dat));
  timer1.Enabled:=false;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 s1:=socket.ReceiveText;
  memo3.Lines.Add(S1);

  if pos('login',s1)<>0 then
    begin
      clientsocket1.Socket.SendText('SSSSSSSSSS;'+#13#10);
      inc(eror);
      if eror>3 then			//3 попытки подключения
        begin
          eror:=0;
          clientsocket1.Active:=false;		// если все 3 неудачные отключаемся от АТС
        end;
    end;

  if pos('ENTER USER NAME',s1)<>0 then			//логин
    begin
      clientsocket1.Socket.SendText(EDIT4.Text+#13#10);
    end;
    
  if pos('ENTER PASSWORD',s1)<>0 then			//пароль
    begin
      clientsocket1.Socket.SendText(EDIT5.Text+#13#10);
    end;








end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  clientsocket1.Socket.SendText('KSTSC:STRNO=IDL1,STRING=" ";'+#13#10);
end;

procedure TForm1.Button5KeyPress(Sender: TObject; var Key: Char);
begin
  edit5.PasswordChar:=#0;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if checkbox1.Checked=true then
  edit5.PasswordChar:=#0
else
    edit5.PasswordChar:='x';
end;

procedure TForm1.ClientSocket1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  dat := now;
  memo2.Lines.Add('Подключение к АТС - дата/время = '+  DateToStr(dat) + ' ' + TimeToStr(dat));
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  dat := now;
  memo2.Lines.Add('Отключение от АТС - дата/время = '+  DateToStr(dat) + ' ' + TimeToStr(dat));
end;

end.





Viktor
Специалист
Сообщения: 101
Зарегистрирован: Чт ноя 16, 2017 9:26
Откуда: НиНо

Температура за бортом на цифровике

Сообщение Viktor » Вт июл 03, 2018 16:09

Не. Ничем не помогу. Ни в программировании не смыслю, ни процедуру подключения к MD110 в деталях уже не помню.
:)

Geka
Сообщения: 45
Зарегистрирован: Вт июн 01, 2004 11:38
Откуда: Ярославль

Температура за бортом на цифровике

Сообщение Geka » Пн июл 09, 2018 9:28

Такое ощущение, что прога не отключается от АТС... или отключается некорректно.
У меня программа висит постоянно включенная и запускается по таймеру, выставленному как хочешь. Сейчас раз в 20 минут.
Я использую прогу tst10 для подключения к станции. Пробовала по-разному подключатся, этот способ мне больше всего понравился. Будет время я посмотрю компонент ClientSocket. Сегодня первый день после отпуска вышла, много дел образовалось :)

Sam
Сообщения: 61
Зарегистрирован: Пн май 26, 2008 9:10

Температура за бортом на цифровике

Сообщение Sam » Пн июл 09, 2018 15:58

Geka писал(а):
Пн июл 09, 2018 9:28
У меня программа висит постоянно включенная и запускается по таймеру, выставленному как хочешь. Сейчас раз в 20 минут.
Сам бы хотел так сделать, но лицензия для подключения по Telnet одна. Потому и приходится делать реконекты. Была мысль по Сом порту выкладывать, но его занял (Сом порт) чуть раньше под другую задумку - сделал сборщик SDR данных с АТС(принимаю по RS232 с платы SIU и складываю на SQL сервер). Простенький такой тарификатор.

Geka
Сообщения: 45
Зарегистрирован: Вт июн 01, 2004 11:38
Откуда: Ярославль

Температура за бортом на цифровике

Сообщение Geka » Ср июл 11, 2018 9:03

Пробежалась "по-верхам" проги. Я бы добавила при отключение от АТС:
clientsocket1.Active:=false;
Если я правильно поняла работу компонента.
А при отключении clientsocket1.Socket.SendText(#$18+'o;'+#13#10) ; символ #$18 что значит? остальное вроде понятно

Viktor
Специалист
Сообщения: 101
Зарегистрирован: Чт ноя 16, 2017 9:26
Откуда: НиНо

Температура за бортом на цифровике

Сообщение Viktor » Пт июл 13, 2018 13:21

Geka навела на идею. Раз уж Telnet только один и по нему подключается скорее всего WinFIOL, то его можно заставить делать всю коммуникационную работу. Он ведь скрипты какие-то, свои собственные правда, умеет.
А во вторых У MD-110, как минимум 2 COM-порта. Уж чего а SMDR мдэшка умеет в любой порт выдавать и даже на свой диск складывать (при наличии лицензии)
:)

Ответить