[Сценарии] Виртуальный датчик освещенности

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

Ответить
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

[Сценарии] Виртуальный датчик освещенности

Сообщение Dark_Veter » Ср мар 18, 2015 3:41 pm

Всем привет! Недавно захотелось мне управлять подсветкой в зависимости от уровня освещения, а такого датчика у меня не оказалось. Вот тут: http://ab-log.ru/smart-house/video_came ... ght-sensor нашел пример получения уровня освещенности анализируя картинку с камеры наблюдения и чуть модифицировал код. Домашние камеры анализировать не стал, т.к. при включении освещения они будут показывать, что сейчас день, а уличных камер у меня нет, т.к. дом многоквартирный. Нашел сервис http://www.probkiizokna.ru/ В итоге получилась неплохая альтернатива датчику освещения. Может быть кому пригодится :-)

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

$camIds = array('7117', '11695', '10290', '8750');
$final = 0;
$count = 0;

for ($index = 0; $index < count($camIds); $index++) {
    $lightLevel = getLightLevel($camIds[$index]);
    if ($lightLevel == 11.38) {
        continue;
    }
    $final += $lightLevel;
    $count++;
}

$final = round($final / $count, 2);
sg('lightLevel', $final);
//echo $final;
//if ($final <= 5.83 && date('H') > 14) {
//    //Действия если стемнело;
//}

function getLightLevel($camId) {
    $url = 'http://sat01.probkiizokna.ru/prb/getsnapshot.php?id=' . $camId . '&s=3&q=' . rand();

    $im = @imagecreatefromjpeg($url);

    imagefilter($im, IMG_FILTER_GRAYSCALE);

    $rgb_tot = 0;

    for ($y = 0; $y < 480; $y++) {
        for ($x = 0; $x < 640; $x++) {
            $rgb = imagecolorat($im, $x, $y);
            $rgb_tot = $rgb + $rgb_tot;
        }
    }

    $result = round($rgb_tot / 307200, 0);
    $final = round($result / 1000000, 2);

    return $final;
}
 
За это сообщение автора Dark_Veter поблагодарил:
Hitman_dc (Пн апр 06, 2015 1:49 am)
Рейтинг: 1.16%
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
DiArt
Сообщения: 210
Зарегистрирован: Пт апр 12, 2013 2:27 pm
Откуда: Уфа
Благодарил (а): 28 раз
Поблагодарили: 16 раз

Re: Виртуальный датчик освеченности

Сообщение DiArt » Ср мар 18, 2015 8:27 pm

Отлично!
Работает, благодарю
Система на Неттоп 3Q Nettop Qoo!
(Intel Celeron J1800, 2x2410 МГц, 4096 Мб, HDD 1000 Гб, HDMI, VGA , Wi-Fi, Ethernet, Ubuntu 14.04.2)
Вторая система на Raspberry Pi 3.
D-Link DCS-930L/Broadlink RM2-Pro/BroadLink SP3 CC/Ginzzu HS-K07W
Я в CONNECT
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Виртуальный датчик освеченности

Сообщение Ivan » Ср мар 18, 2015 8:33 pm

У камер есть авто баланс белого. Потому непонимаю как он правильно выдает освешенность.

В проэкте NarodMon можно читать публичеые датчики (если они есть в вашем городе)
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

Re: Виртуальный датчик освеченности

Сообщение Dark_Veter » Чт мар 19, 2015 5:02 pm

Если подобрать для себя значение переменной $final, то довольно правдоподобно получается.
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
Hitman_dc
Сообщения: 8
Зарегистрирован: Сб май 04, 2013 8:39 am
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Re: Виртуальный датчик освеченности

Сообщение Hitman_dc » Пн апр 06, 2015 1:50 am

Dark_Veter писал(а):Всем привет! Недавно захотелось мне управлять подсветкой в зависимости от уровня освещения...
[/code]

В какое место вставлять режим светло?
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

Re: Виртуальный датчик освеченности

Сообщение Dark_Veter » Пн апр 06, 2015 11:51 am

Опытным путем найти значение свойства ThisComputer.lightLevel когда светло и когда темно, и затем в например в методе onNewMinute сравнивать значения полученные опытным путем с ThisComputer.lightLevel и в зависимости от результата выполнять действия если светло/если темно.
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
Ответить