воскресенье, 11 мая 2014 г.

Библиотека KANKUN_KK_SP3.DLL (контроль Wi-Fi розетки из своих приложений)

Поскольку братья-китайцы не разродились API для доступа к мегадевайсу, а контролировать хотелось не только исключительно со смарта с китайским приложением, но и с любого ПК/ноута, то изыскания привели к созданию своего API, воплощенного в натив-библиотеке. Данная библиотека (далее DLL) предназначена для контроля Wi-Fi розетки KANKUN KK-SP3 по протоколу SSH (порт 22) в сети Интранет/Интернет. DLL предоставляет универсальный доступ для других приложений вне зависимости от языка в среде Win ALL.

















Введение

 

Cистемные требования и зависимости
  1. Windows XP/Vista/7/8/8.1/10.
  2. Подключенная к сети Интранет/Интернет Wi-Fi розетка KANKUN KK-SP3.
Для использования DLL в своих проектах соблюдайте соглашение об stdcall-вызовах. Тип соглашения о вызове объявляется после прототипа функции, будь то объявление функционального типа или же объявление функции.

Таблица расшифровок параметров экспортируемой процедуры 'reinit()' библиотеки:


 Таблица расшифровок параметров экспортируемой функции 'status()' библиотеки:


 Таблица расшифровок параметров экспортируемой процедуры 'onoff()' библиотеки:


 Пример динамического подключения (Delphi 6/7/2006/2009/2010/TDL/XE5-7):
var
    status: function: pansichar; stdcall; // статус соединения
    onoff: procedure(ip,                     // IP адрес розетки KANKUN KK-SP3
                     login,                      // Login, default = root
                     pass:                       // Password, default = admin
                     pansichar;
                     activate: uint            // Включить розетку/выключить
                     ); stdcall;
    reinit: procedure(activate:             // активировать/деактивировать поток
                      uint); stdcall;
    LibHandle: THandle;

function LinkProc(ProcName: string): Pointer;
begin
 result:= GetProcAddress(LibHandle, PChar(ProcName))
end;


{ Инициализация }
 LibHandle:= LoadLibrary('KANKUN_KK_SP3.dll');
 if LibHandle<>0 then begin
  onoff := LinkProc('onoff');
  reinit:= LinkProc('reinit');
  status:= LinkProc('status');
 end;

 // активируем поток
 reinit(1);
...


{ Деинициализация }

 if LibHandle<>0 then begin
  // деактивируем поток
  reinit(0);
  freelibrary(LibHandle);
 end;
...


{ Статус }
procedure Tsh.Timer1Timer(Sender: TObject);
begin
 statusbar1.Panels[0].Text:= status
...


{ Активация розетки }
onoff('192.168.1.102','', '', 1)


{ Деактивация розетки }
onoff('192.168.1.102','', '', 0)
Пример контроля розетки из скрипта VBS:
' runKANKUN_KK_SP3.VBS
' Демонстрационный скрипт контроля Wi-Fi розетки KANKUN KK-SP3 по LAN-сети клавишей пробел 'Space'
' Поддержка следующих команд: ON / OFF
'
' Зависимости:
' · Win OS 32/64-bit
' · COM-сервер DynWrapx.dll
' · SAPI (для озвучивания используется интерфейс по-умолчанию)
' · Подключенная к сети Интранет/Интернет Wi-Fi розетка KANKUN KK-SP3
'
' Региcтрация интерфейсов (обязательно первично однократно):
' · в данном скрипте задайте IP адрес для контроля розетки
' · запустите regdynwrapx.bat (на Windows Vista/7/8/8.1 запускать правой кнопкой мыши от имени Администратора)
' Использование:
' · запустите runKANKUN_KK_SP3.cmd
' · для завершения нажмите 'Escape'
'
' НАСТРОЙКИ

speakon = true ' разрешаем голосовое сопровождение, при надоедливости голоса speakon = false
ips     = "192.168.1.102" ' IP адрес розетки
  
' подключаем голосовое сопровождение
Dim Speak
Set Speak = CreateObject("sapi.spvoice")
' Информируем пользователя о начале работы
if (speakon = true) then
Speak.Speak "Ready to control socket."
End if

' создаем объект DynamicWrapperX
Set Wrap = CreateObject("DynamicWrapperX.2")

Wrap.Register "user32.dll", "GetAsyncKeyState", "i=l", "f=s", "r=l"
Wrap.Register "KANKUN_KK_SP3.dll", "reinit", "i=u"
Wrap.Register "KANKUN_KK_SP3.dll", "onoff", "i=sssu"

Wrap.reinit(1)

p = true

' запускаем бесконечный цикл по условию нажатия 'Escape' с задержкой
Do While Wrap.GetAsyncKeyState(27) = "0"

'задержка на кол-во миллисекунд
WScript.Sleep 1000
' отлавливаем нажатие SPace (пробела)
probel = Wrap.GetAsyncKeyState(32)


if (probel = "1") then
 p = not p

 if (p = false) then
  ' активируем розетку
  s = Wrap.onoff(ips, "", "", 1)
  ' озвучиваем
  if (speakon = true) then
   Speak.Speak "Socket turned on."
  End if
 End if

 if (p = true) then
  ' деактивируем розетку
  s = Wrap.onoff(ips, "", "", 0)
  ' озвучиваем
  if (speakon = true) then
   Speak.Speak "Socket turned off."
  End if
 End if

End if

Loop ' завершение цикла

Wrap.reinit(0)
' озвучиваем
if (speakon = true) then
 Speak.Speak "Program has been completed."
End if



Благодарности
  1. "Дядюшке Ляо" и непосредственно фирме Kankun за столь полезный гаджет.
  2. Владимиру Колпакову за плодотворный обмен мнениями по E-мылу.
  3. Облэнерго за ожидание восстановления энергоподачи в населенном пункте.
Пожертвования

 А тут я коплю на зеленую энергетику - солнечные панели (фото- видеоотчет по готовности).

ПОРЯДОК ИСПОЛЬЗОВАНИЯ и ОГРАНИЧЕНИЯ
  1. Параметры 'login' и 'pass' процедуры 'onoff' допустимо оставлять пустыми, по-умолчанию используется логин 'root' и пароль 'admin'.
  2. При использовании роутера и активном NAT, для контроля Wi-Fi розетки KANKUN KK-SP3 через сеть Интернет осуществите проброс порта 22 (протокол ALL) на IP адрес гаджета в вашей внутренней сети.
  3. Вы можете создать два скрипта 'on.cgi':
 RELAY_CTRL=/sys/class/leds/tp-link:blue:relay/brightness
 echo 1 > $RELAY_CTRL
и 'off.cgi':

 RELAY_CTRL=/sys/class/leds/tp-link:blue:relay/brightness
 echo 0 > $RELAY_CTRL
в корне устройства, после чего, соединившись по SSH, контролировать включение-отключение просто написав '/on' или '/off'.
скачать

Продолжение материала. Голосовой контроль розетки

4 комментария:

  1. Здравствуйте, а не могли бы вы перезалить файл?

    ОтветитьУдалить
  2. Здравствуйте, Владимир. Ловите https://yadi.sk/d/asLmnSZ-ksW8e

    ОтветитьУдалить
  3. Как говорится: "...спасибо. - Пожалуйста".

    ОтветитьУдалить

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.