Генераторы D300

Вход в систему мониторинга

{{ S.auth.error }}

Обзор

{{ k.name }}
{{ k.value }}

Требуют внимания

Всё в порядке
{{ a.d.gen_name || 'Генератор' }} · {{ a.d.location_name || 'не привязан' }}
{{ t }}
и ещё {{ a.texts.length-4 }}

Топливо

Нет данных

Последние события

{{ c[1] }}
{{ dt(e.time) }} {{ e.gen_name }}
{{ e.location_name || 'не привязан' }}
{{ S.ff.region || S.ff.loc || S.ff.board || S.ff.type ? 'По выбранному событий нет' : 'Событий пока нет' }}
{{ l.name }}
{{ KIND[l.kind] }}{{ l.region_name ? ' · ' + l.region_name : '' }}{{ l.address ? ' · ' + l.address : '' }}
{{ l.total }} {{ l.running }} {{ l.alarm }} {{ l.offline }}
Мест не найдено

Генераторы

{{ d.gen_name || 'Генератор' }}

{{ d.location_name || 'не привязан' }} · в настройках модуля: {{ d.loc_hint }}
{{ stateOf(d).text }}
{{ d.gen_model }}
№ {{ d.gen_serial }}
инв. {{ d.gen_inventory }}
прибыл {{ dd(d.arrived.time) }}
Нагрузка
{{ f(d.data.gen_kw) }} кВт ({{ pct(d) }}%)
Сеть / генер.
{{ f(avg(d.data.mains_v),0) }} / {{ f(avg(d.data.gen_v),0) }} В
Топливо
{{ f(d.data.fuel_pct) }} %
Двигатель
{{ f(d.data.engine_c) }} °C · {{ f(d.data.oil_bar) }} бар
Батарея
{{ f(d.data.battery_v) }} В
Моточасы
{{ f(d.data.engine_hours) }} ч
Нет данных: {{ faultText(d) }}
{{ dt(d.last_seen) }}

{{ m.gen_name || 'Генератор' }}

переехал
{{ m.gen_model }}
№ {{ m.gen_serial }}
инв. {{ m.gen_inventory }}
Куда
{{ m.to_name }}
Дата переезда
{{ dt(m.time) }}
Переместил
{{ m.user_name || '—' }}
Моточасы
{{ f(m.dep_hours) }} ч
Топливо
{{ fuelTxt(m.dep_fuel) }}
{{ S.view.t==='filter' ? 'Таких генераторов сейчас нет' : 'Здесь пока нет генераторов' }}
Выберите место слева

Журнал перемещений

ДатаГенераторПереместилОткудаКудаОтъезд: моточасы / топливоПрибытие: моточасы / топливо
{{ dt(m.time) }} {{ m.gen_name }}
№ {{ m.gen_serial || '—' }}
{{ m.user_name || '—' }} {{ m.kind==='added' ? '—' : m.from_name }}
{{ m.note }}
{{ m.to_name }} первое место{{ f(m.dep_hours) }} ч · {{ fuelTxt(m.dep_fuel) }}
{{ dt(m.dep_time) }}
—
{{ f(m.arr_hours) }} ч · {{ fuelTxt(m.arr_fuel) }}
{{ dt(m.arr_time) }}
не подключалсяожидается подключение
Записей о перемещениях нет

Уведомления в Telegram

Сообщения в Telegram для вас выключены. Включить может ваш руководитель или администратор.

Пользователи

Почта для писем не настроена — данные для входа новым пользователям придётся передавать самим. Настроить: Настройки → Почта. Настраивает администратор.
ФИО / логинГруппаРегионы и магазиныКонтактыTelegramПоследний вход
{{ u.name }}
@{{ u.login }}
{{ u.group }}
свои права: +{{ u.perms_add.length }} / −{{ u.perms_del.length }}
{{ zoneOf(u) }}
{{ u.phone }}
{{ u.email }}
—
{{ u.tg_name }}— {{ dt(u.last_login) }}
Никого не найдено

Каждый видит генераторы только своих магазинов и регионов. Права пользователя — права его группы плюс личные поправки. Менять можно только своих подчинённых и выдавать только те права, которые есть у вас.

Генераторы (временные)

Эти генераторы переданы вам на время — например, на отпуск или болезнь коллеги. После указанной даты они пропадут из списка сами.

Временных генераторов сейчас нет

{{ t.gen_name || 'Генератор' }}

до {{ dDay(t.until - 1) }}
{{ t.location_name || '—' }}{{ t.gen_serial ? ' · № ' + t.gen_serial : '' }}
Вместо: {{ t.from_name }}
{{ stateOf(tempDev(t.board_id)).text }}

Замены

Генераторы сотрудника на время передаются другому — на отпуск, болезнь, командировку. У основного сотрудника ничего не отнимается. {{ can('delegate') ? '' : 'Ваше предложение вступит в силу, когда его подтвердит руководитель.' }} Насовсем — назначьте магазины в карточке пользователя.

Чьи → комуГенераторыСрокСостояние
{{ d.from_name }} → {{ d.to_name }}
{{ d.created_by === d.from_login && d.status === 'proposed' ? 'предложил' : 'назначил' }}: {{ d.by_name }}
{{ d.note }}
{{ g.gen_name || 'Генератор' }} · {{ g.location_name || '—' }}
{{ dDay(d.since) }} — {{ dDay(d.until - 1) }}
{{ d.notify ? 'с сообщениями в Telegram' : 'без сообщений' }}
{{ DSTATE[d.state][0] }}
Замен пока не было

Настройки

Почта для писем

{{ S.site.mail.configured ? 'настроена' : 'не настроена' }}
Почта не указана: письма с логином и паролем новым пользователям не отправляются — сайт покажет их один раз, передать нужно самим (например, по телефону).

С этого ящика сайт отправляет данные для входа новым пользователям и новые пароли. Для Gmail, Яндекса и Mail.ru нужен не обычный пароль, а пароль приложения (создаётся в настройках безопасности ящика).

{{ S.site.tg.configured ? 'Бот @' + S.site.tg.bot + ' подключён' : 'Бот Telegram не подключён' }}
Свой бот: создайте его у @BotFather и вставьте токен. Пустое поле и «Сохранить» — отключить бота.

Права групп

Пользователь получает права своей группы. Отдельному пользователю права можно добавить или убрать в его карточке. У администраторов — всегда все права.

Право{{ g.name }}

Регионы

Магазины объединяются в регионы. Региональный администратор видит все магазины своих регионов.

РегионМагазины
{{ r.name }} {{ S.locations.filter(l => l.region_id === r.id).map(l => l.name).join(', ') || '—' }}
Регионов пока нет
Без региона: {{ S.locations.filter(l => !l.region_id).map(l => l.name).join(', ') }}

Журнал изменений

{{ isAdmin ? 'Все изменения на сайте.' : 'Ваши изменения и изменения ваших подчинённых.' }}

КогдаКтоЧто сделалБыло → стало
{{ dt(a.time) }} {{ a.user_name }}
@{{ a.login }}
{{ a.text }}
{{ r[0] }}: {{ r[1] }} → {{ r[2] }}
Записей нет

Названия аварий D300

D300 сообщает аварии номерами битов (0–255) в трёх группах: останов, сброс нагрузки, предупреждение; номер одинаков во всех группах. Биты 0–7 — цифровые входы: их смысл зависит от подключения конкретного генератора, поэтому для модели можно завести свою таблицу. Остальные модели используют стандартную (список Datakom).

ТаблицаМоделиНазваний
{{ t.name }} стандартная все остальные
{{ m }}
{{ Object.keys(t.bits||{}).length }}

{{ curDev.gen_name || 'Генератор' }}

{{ stateOf(curDev).text }} {{ MODE[curDev.data.mode] || curDev.data.mode }}
{{ curDev.location_name || 'не привязан' }} · {{ curDev.gen_model }} · зав. № {{ curDev.gen_serial || '—' }}{{ curDev.gen_inventory ? ' · инв. № ' + curDev.gen_inventory : '' }}
загрузка…
Активные ошибки и предупреждения
  • {{ i.text }}
Генератор уехал из «{{ curDev.gone.from_name }}» в «{{ curDev.gone.to_name }}» {{ dt(curDev.gone.time) }}. Здесь — его история до отъезда.
При отъезде: моточасы {{ f(curDev.gone.dep_hours) }} ч, топливо {{ fuelTxt(curDev.gone.dep_fuel) }}
Нет данных: {{ faultText(curDev) }}. Последние данные: {{ dt(curDev.last_seen) }}
Если неисправность не проходит, сообщите разработчику код {{ curDev.fault }}.
Модель{{ curDev.gen_model || '—' }}
Номинал{{ curDev.rated_kw || '—' }} кВт
Заводской №{{ curDev.gen_serial || '—' }}
Инвентарный №{{ curDev.gen_inventory || '—' }}
Контроллер{{ ctrlText(curDev) }}
Обновлено{{ dt(curDev.last_seen) }}
Впервые на связи{{ dt(curDev.first_seen) }}
Неисправность{{ curDev.fault ? 'код ' + curDev.fault : 'нет' }}
Отключение автомата{{ tgText(curDev.trip_guard) }}
Отладка: всё, что прислала плата (видит только разработчик)
{{ JSON.stringify(curDev.debug, null, 1) }}
{{ S.tab.events.length }} записей
ВремяСобытиекВтСеть, ВТопливоМоточасы
{{ dt(e.time) }} {{ f(e.data.gen_kw) }}{{ f(Array.isArray(e.data.mains_v) ? avg(e.data.mains_v) : e.data.mains_v, 0) }} {{ fuelTxt(e.data.fuel_pct) }}{{ f(e.data.engine_hours) }}
Событий нет
НачалоКонецРаботалНагрузкакВт·чТопливоПик, кВт
{{ dt(r.start_time) }}{{ r.stop_time ? dt(r.stop_time) : 'работает' }}{{ dur(r.run_s) }} {{ r.loaded ? 'да' : 'нет (тест / холостой)' }}{{ f(r.kwh) }}{{ r.fuel_pct==null ? '—' : '−' + f(r.fuel_pct) + ' %' }}{{ f(r.max_kw) }}
Запусков пока нет
МесяцЗапусковС нагрузкойЧасов работыкВт·чИзрасходованоЗаправленоПик, кВт
{{ r.month }}{{ r.runs||0 }}{{ r.loaded_runs||0 }}{{ ((r.run_s||0)/3600).toFixed(1) }}{{ f(r.kwh) }} {{ r.fuel_used ? '−' + f(r.fuel_used) + ' %' : '—' }}{{ r.fuel_added ? '+' + f(r.fuel_added) + ' %' : '—' }}{{ r.refuels ? ' (' + r.refuels + ')' : '' }}{{ f(r.max_kw) }}
Статистики пока нет
Мало данных для графика
{{ S.tab.extremes.extremes.length }} эпизодов
{{ S.me.extreme_names[r.kind] || r.kind }}
{{ r.n }} раз · всего {{ dur(r.total_s) }} · последний {{ dt(r.last) }}
НачалоДлительностьРежимХудшееПорог
{{ dt(x.start_time) }} {{ x.end_time ? dur(x.end_time-x.start_time) : 'продолжается (' + dur(S.tab.extremes.now-x.start_time) + ')' }} {{ x.level===2 ? 'Опасно' : 'Внимание' }}: {{ S.me.extreme_names[x.kind] || x.kind }}{{ valText(x) }}{{ limText(x.kind, x.lim, x.unit) }}
Генератор в экстремальных режимах не работал
ДатаПеремещениеПереместилОтъезд: последние данныеПрибытие: первое подключение
{{ dt(m.time) }} Добавлен в «{{ m.to_name }}»«{{ m.from_name }}» → «{{ m.to_name }}»
{{ m.note }}
{{ m.user_name || '—' }} первое место{{ dt(m.dep_time) }}
моточасы {{ f(m.dep_hours) }} ч · топливо {{ fuelTxt(m.dep_fuel) }}
данных не было
{{ dt(m.arr_time) }}
моточасы {{ f(m.arr_hours) }} ч · топливо {{ fuelTxt(m.arr_fuel) }}
не подключался (уехал дальше) уехал из ваших магазинов
{{ m.wait_reconnect ? 'ожидается переподключение на новом месте' : 'ожидается первое подключение' }}
Перемещений не было

{{ M.err }}
{{ M.d.gen_model }} · № {{ M.d.gen_serial || '—' }}
Место в настройках RP2040: {{ M.d.loc_hint || '—' }}
{{ M.err }}
Откуда
{{ M.m.from_name }}
Куда
{{ M.m.to_name }}
сейчас: {{ M.m.now_location_name }}
Дата переезда
{{ dt(M.m.time) }}
Переместил
{{ M.m.user_name || '—' }}
Примечание: {{ M.m.note }}
Последние данные на этом месте {{ M.m.dep_time ? dt(M.m.dep_time) : '' }}
Моточасы
{{ f(M.m.dep_hours) }} ч
Топливо
{{ fuelTxt(M.m.dep_fuel) }}
Сеть / генер.
{{ f(avg(M.m.dep_data.mains_v),0) }} / {{ f(avg(M.m.dep_data.gen_v),0) }} В
Нагрузка
{{ f(M.m.dep_data.gen_kw) }} кВт
Двигатель
{{ f(M.m.dep_data.engine_c) }} °C · {{ f(M.m.dep_data.oil_bar) }} бар
Батарея
{{ f(M.m.dep_data.battery_v) }} В
Выработано всего
{{ f(M.m.dep_data.total_kwh) }} кВт·ч
Режим
{{ MODE[M.m.dep_data.mode] || M.m.dep_data.mode || '—' }}
Данных от генератора на этом месте не было.
Записей нет
{{ dt(e.time) }}{{ e.user_name ? ' · ' + e.user_name : '' }}
{{ LOCT[e.type] || e.type }} «{{ e.gen_name }}»{{ e.gen_serial ? ' № ' + e.gen_serial : '' }} из «{{ e.other_name }}» в «{{ e.other_name }}»
{{ e.note }}
1. Кто это
2. Вход на сайт
Почта для писем не настроена: логин и пароль покажутся после сохранения — передайте их пользователю сами (например, по телефону).
Чтобы отправить письмо, укажите почту пользователя.
3. Группа и магазины
{{ GHELP[M.role] }}
{{ M.err }}

{{ M.edit ? 'Новый пароль' : 'Данные для входа' }} отправлены на {{ M.email }}. На всякий случай — они же:

{{ M.edit ? 'Пароль пользователя «' + M.name + '» изменён.' : 'Пользователь «' + M.name + '» создан.' }} {{ M.mail_error ? 'Письмо не ушло: ' + M.mail_error + '.' : '' }} Передайте ему данные для входа сами:

Сайт: {{ siteUrl }}
Логин: {{ M.login }}
Пароль: {{ M.password }}

Пароль показывается только сейчас.{{ M.must_change ? ' При первом входе сайт попросит его сменить.' : ' Пользователь может сменить его сам после входа.' }}

Магазинов пока нет
{{ M.err }}
У этого сотрудника нет генераторов
{{ M.err }}
Логин: {{ S.me.user.login }} · группа: {{ S.me.user.group }}
{{ M.err }}
{{ M.err }}
Этот генератор не в ваших магазинах, сообщения о нём не приходят.
Генератор «{{ M.d.gen_name }}» и вся его история (журнал, запуски, статистика, перемещения) будут удалены. Отменить можно только восстановлением из резервной копии.

Если модуль связи генератора ещё работает, генератор снова появится в «Новых генераторах» — уже без истории.

{{ M.err }}
Вам выдали временный пароль. Придумайте свой, чтобы продолжить.
{{ M.err }}

Первое число — «внимание», второе — «опасно». Напряжение, частота и масло проверяются через {{ S.me.limits.stable_s }} с после пуска.

{{ S.me.extreme_names[r[0]] }}{{ r[1] }}
{{ t.text }}