Страница 8 из 15

Re: Активные объекты на сценах

Добавлено: Пн сен 15, 2014 10:29 pm
Bagir
Релиз элемента температуры для сцен. Вариант с круговым градиентом.
ИзображениеИзображениеИзображение
Element details:SPOILER_SHOW
Тип HTML
Ширина 60
Высота 60
Код

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

<style>
div.element_36 {
  font-size: 12pt;
  font-weight:700;
  text-align: center;
  border-radius: 30px;
  background-image: radial-gradient(%Officeroom.TempHEX% -15px, rgba(0,0,0,0) 65%);
}
.triangle1 {
    width: 0;
    height: 0;
    border-left: 10px solid transparent;
    border-right: 10px solid transparent;
    border-bottom: 10px solid red;
}
.triangle-1 {
    width: 0;
    height: 0;
    border-left: 10px solid transparent;
    border-right: 10px solid transparent;
    border-top: 10px solid blue;
}
</style>

<br>
%Officeroom.Temperature% ℃
<div class="triangle%ts_office.direction%"></div> 
Описание:
Цвет градиента меняется в зависимости от значения температуры. Есть индикация направления изменения показаний. В планах индикация статуса объекта датчика - живой/мертвый.
Применены правила перевода градусов в цвет. Значение цвета рассчитывается при изменении температуры, и при желании можно все легко поправить. За основу взяты следующие положения:
1. Будут использованы три цвета и переходы между ними. Голубой->Синий->Красный
2. 18 градусов - синий цвет;
3. 30 градусов - красный цвет;
4. Из этого следует, что голубой цвет это 12 градусов;
5. Все что ниже 12 градусов так и останется голубым;
6. Все что выше 30 градусов так и будет красным.
Для оценки воздуха комнаты это вполне справедливо.
Таблица изменения градиента в зависимости от температурыSPOILER_SHOW
Изображение
Настройка:
  • 1. Сразу поменять номер элемента на свой div.element_36
    2. %Officeroom.Temperature% - это свойство объекта со значением температуры.
    3. %ts_office.direction% - направление изменения: 1 - растет (красный треугольник вверх), -1 - снижается (синий треугольник вниз), 0 (или что другое) - значение не изменилось. Ничего отображаться не будет.
    4. %Officeroom.TempHEX% - цветовое представление температуры.
В классе Rooms создам новое свойство TempHEX. В него будет записываться HEX значение цвета. В свойстве Temperature укажем запускать метод при изменении onTempChanges и создадим этот метод
КодSPOILER_SHOW

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

// получить температуру
$x = $this->getProperty('Temperature');
// не больше и не меньше
if ($x<12) {$x=12;} elseif ($x>30) {$x=30;} 
// расчет величины цветовой шкалы
$x = round( ($x-12)*42,5 );
$hcolor = '#';
// расчет r
$y = $x-255;
if ($y < 0) {$y = 0;} elseif ($y > 255) {$y = 255;}
$y = dechex($y);
if (strlen($y) == 1) {$y = '0'.$y;}
$hcolor = $hcolor.$y;
// расчет g
$y = 255-$x;
if ($y < 0) {$y = 0;} elseif ($y > 255) {$y = 255;}
$y = dechex($y);
if (strlen($y) == 1) {$y = '0'.$y;}
$hcolor = $hcolor.$y;
// расчет b
$y = 765-$x;
if ($y < 0) {$y = 0;} elseif ($y > 255) {$y = 255;}
$y = dechex($y);
if (strlen($y) == 1) {$y = '0'.$y;}
$hcolor = $hcolor.$y;
// установить свойство цвета температуры
$this->setProperty('TempHEX', $hcolor); 
Теперь при каждом изменении свойства температуры будет рассчитываться HEX значение ее цвета для всех объектов комнат.

Re: Активные объекты на сценах

Добавлено: Вт сен 16, 2014 1:26 pm
sergejey
Bagir писал(а):Но есть и грабли. Цветовой градиент у элемента на сцене не обновляется сам при изменениях значения свойства температуры. Изменения будут видны только если обновить страничку со сценой. Вопрос уже наверное к Сергею. Как заставить полностью обновиться элемент на сцене с кодом SSC?
можно просто CSS это перенести внутрь кода состояния, обрамив в <style></style> и тогда он будет меняться сам собой

Re: Активные объекты на сценах

Добавлено: Вт сен 16, 2014 3:00 pm
Bagir
Отлично! Градиент ожил! Получается, что если CSS код у элемента постоянный, и нужен только раз для его оформления, его нужно указать в отдельном блоке. А если CSS код изменяется вместе со значением элемента, то нужно разместить его в коде состояния элемента обрамив <style></style>.
Я поправлю свой предыдущий пост. Спасибо за помощь!

Re: Активные объекты на сценах

Добавлено: Вт сен 16, 2014 7:11 pm
Bagir
Отпишитесь кто попробовал, как по вашему, выбранные цвета подходят к температуре?

Re: Активные объекты на сценах

Добавлено: Вт сен 16, 2014 8:28 pm
Bagir
И еще запчасть! Такой вот получился у меня простенький, но вполне отличный лог событий для отдельной сцены. Сейчас там просто повторяется прогноз погоды для демонстрации прокрутки. Скоро будет создан объект для этого лога, свойство которого будет содержать весь накопленный текст, который был этому объекту передан. Проверил на разных браузерах. работает везде, разве что IE опять отличился и на винде и на андроиде. Ну да ладно, Хром FF и Опера работают везде нормально. Причем на компе есть полоса прокрутки, а на мобилах нет. Там просто пальцем проматывает. Я доволен, за цените и Вы!
Изображение
Дополнительный код CSS

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

div.element_19 {
  overflow-y: scroll;
  overflow-x: hidden;
  font-size: 10pt;
  font-weight:600;
  padding: .25em .5em;
  border: 2px solid rgb(250,172,17);
  border-radius: 3px;
  background-image: linear-gradient(rgb(250,250,255), rgb(200,220,255));
}

Re: Активные объекты на сценах

Добавлено: Вт сен 16, 2014 8:30 pm
Vit
Bagir писал(а):Отпишитесь кто попробовал, как по вашему, выбранные цвета подходят к температуре?
Доберусь до системы обязательно сделаю такие же наглядные элементы. Еще бы для rgb что нибудь такое красивое

Re: Активные объекты на сценах

Добавлено: Вт сен 16, 2014 8:32 pm
Bagir
Так по rgb как раз датчик температуры и меняет свой цвет. Может стоит вытаскать ссылками на первое сообщение все законченные посты с элементами? Моих тут пока что два.
http://smartliving.ru/forum/viewtopic.p ... 595#p13593
http://smartliving.ru/forum/viewtopic.p ... 595#p13557

Re: Активные объекты на сценах

Добавлено: Вт сен 16, 2014 8:44 pm
Vit
Надо будет попробовать в rgb передать свойство объекта

Re: Активные объекты на сценах

Добавлено: Вт сен 16, 2014 8:45 pm
Bagir
Вот как раз пример с датчиком температуры так и работает. Потом попробуйте! А я пока помудрю с трубами, и их заливкой. Возможно тут стоит посмотреть в сторону P Chart, ну или на то, как там рисуются линии. Просто если делать большую схему только с помощью вертикальных и горизонтальных полосок, уйдет не мало времени, чтобы все это красиво состыковать. Да и наверное прорисовываться будет медленно. Надо попробовать, и еще по изучать эту тему. Конечно хотелось бы просто нарисовать например схему отопления, а потом с помощью контрольных точек залить ее градиентом. Но это уже смахивает даже уже на app. Так что пока будем стыковать полоски )) Но покою не дает тема о рисовании линий градиентом.

Re: Активные объекты на сценах

Добавлено: Вт сен 16, 2014 8:46 pm
Bagir
Только там бы утюгом по коду пройти еще ))) Уверен, что его можно оптимизировать. Метод onTempChanges