{{ t('sensors.orgTitle') }} — {{ organizationName }}
{{ t('sensors.noneOrg') }}
{{ t('sensors.noResults', { q: sensorSearch }) }}
| {{ t('field.sensor') }} | {{ t('field.location') }} | {{ t('field.level') }} | {{ t('field.date') }} | {{ t('field.humidity') }} | {{ t('field.temperature') }} | {{ t('field.battery') }} | RSSI | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ s.sensor }} | {{ s.address }} {{ Number(s.lat).toFixed(5) }}, {{ Number(s.lng).toFixed(5) }} — | {{ corpoReadingDisplay(s) }} | {{ fmtReadTime(s.read_time) }} {{ fmtReadTimeShort(s.read_time) }} | {{ hasEnvSensors(s) && s.humidity != null ? fmtNum(s.humidity) + '%' : '—' }} | {{ hasEnvSensors(s) && s.temp != null ? fmtNum(s.temp) + '°C' : '—' }} | {{ rowBatteryPct(s) }}% — | {{ s.rssi != null ? s.rssi + ' dBm' : '—' }} | ||||||||||||
|
{{ t('field.location') }}
{{ s.address }}
{{ Number(s.lat).toFixed(5) }}, {{ Number(s.lng).toFixed(5) }}
—
{{ t('field.battery') }}
{{ rowBatteryPct(s) }}%
—
{{ t('field.humidity') }}
{{ hasEnvSensors(s) && s.humidity != null ? fmtNum(s.humidity) + '%' : '—' }}
{{ t('field.temperature') }}
{{ hasEnvSensors(s) && s.temp != null ? fmtNum(s.temp) + '°C' : '—' }}
RSSI
{{ s.rssi != null ? s.rssi + ' dBm' : '—' }}
|
|||||||||||||||||||
{{ t('sensors.waiting') }}
{{ t('details.pickSensor') }}
- ID
- {{ selectedCorpoSensorObj.sensor }}
- {{ t('field.name') }}
- {{ selectedCorpoSensorObj.settings_name || '—' }}
- {{ t('field.use') }}
- {{ tankUseLabel(selectedCorpoSensorObj.tank_use) }}
- {{ t('field.tankShape') }}
- {{ tankShapeValLabel(selectedCorpoSensorObj.tank_shape) }}
- {{ t('tank.fullAtDist') }}
- {{ selectedCorpoSensorObj.max_level ?? '—' }}
- {{ t('field.depthToBottom') }}
- {{ tankDepthLabel(selectedCorpoSensorObj) }}
- {{ t('field.volume') }}
- {{ corpoVolumeLabel }}
- {{ t('field.address') }}
- {{ selectedCorpoSensorObj.address || '—' }}
- GPS
- {{ Number(selectedCorpoSensorObj.lat).toFixed(6) }}, {{ Number(selectedCorpoSensorObj.lng).toFixed(6) }} —
- {{ t('fw.current') }}
- {{ corpoFirmware.current || corpoFirmware.reportedVersion || '—' }}
- {{ t('fw.family') }}
- {{ corpoFirmware.cohort ? t('fw.family.' + corpoFirmware.cohort) : t('fw.family.none') }}
- {{ t('fw.receivers') }}
- {{ corpoFirmware.receivers.join(', ') }}
{{ t('fw.unsupported') }}
{{ t('fw.upToDate') }}
{{ t('fw.adminOnly') }}
{{ t('fw.hint.' + corpoFirmware.cohort) }}
- {{ t('field.time') }}
- {{ fmtReadTime(selectedCorpoSensorObj.read_time) }}
- {{ t('field.reading') }}
- {{ corpoLatestReadingDisplay }}
- {{ t('tank.predictFull') }}
- {{ predictionLabel(selectedCorpoSensorObj) }}
- {{ t('field.temperature') }}
- {{ selectedCorpoSensorObj.temp != null ? fmtNum(selectedCorpoSensorObj.temp) + ' °C' : '—' }}
- {{ t('field.humidity') }}
- {{ selectedCorpoSensorObj.humidity != null ? fmtNum(selectedCorpoSensorObj.humidity) + ' %' : '—' }}
- {{ t('field.battery') }}
- {{ rowBatteryPct(selectedCorpoSensorObj) }} % ({{ selectedCorpoSensorObj.battery_mv }} mV) —
- RSSI
- {{ selectedCorpoSensorObj.rssi != null ? selectedCorpoSensorObj.rssi + ' dBm' : '—' }}
- {{ t('field.amplitude') }}
- {{ fmtNum(selectedCorpoSensorObj.amp, 0) }}
- {{ t('field.readNo') }}
- {{ selectedCorpoSensorObj.read_num != null ? selectedCorpoSensorObj.read_num : '—' }}
- {{ t('field.operator') }}
- {{ selectedCorpoSensorObj.net_provider || '—' }}
- {{ t('field.connType') }}
- {{ selectedCorpoSensorObj.net_conn_type || '—' }}
- MCC
- {{ selectedCorpoSensorObj.net_mcc || '—' }}
- MNC
- {{ selectedCorpoSensorObj.net_mnc || '—' }}
- {{ t('field.cellId') }}
- {{ selectedCorpoSensorObj.net_cell_id || '—' }}
- IMEI
- {{ selectedCorpoSensorObj.net_imei || '—' }}
{{ corpoSensorParams.sendMidReads.valueSec === 1 ? t('param.modeLogger') : t('param.modeDetect') }} {{ t('param.modeDetect') }} {{ corpoSensorParams.sendMidReads.status === 'consumed' ? t('param.active') : corpoSensorParams.sendMidReads.status }} {{ t('param.default') }}
{{ t('param.mode.help') }}
- {{ t('param.rangeMin') }}
- {{ fmtNum(corpoSensorParams.radar_rangeMin.valueSec / 10, 1) }} {{ corpoSensorParams.radar_rangeMin.status === 'consumed' ? t('param.active') : corpoSensorParams.radar_rangeMin.status }} — {{ t('param.default') }}
- {{ t('param.rangeMax') }}
- {{ fmtNum(corpoSensorParams.radar_rangeMax.valueSec / 10, 1) }} {{ corpoSensorParams.radar_rangeMax.status === 'consumed' ? t('param.active') : corpoSensorParams.radar_rangeMax.status }} — {{ t('param.default') }}
{{ t('sched.groupRegular') }}
{{ t('sched.groupRegularWhat') }}
- {{ t('param.sendEvery') }}
- {{ Math.round(corpoSensorParams.sendInterval.valueSec / 60) }} {{ corpoSensorParams.sendInterval.status === 'consumed' ? t('param.active') : corpoSensorParams.sendInterval.status }} 480 {{ t('param.default') }}
{{ t('param.groupExtra') }}
{{ t('param.groupExtraWhat') }}
{{ t(corpoReadsThBaseline === 'lastSent' ? 'sched.baselineSent' : 'sched.baselineRead') }}
- {{ t('param.readEvery') }}
- {{ Math.round(corpoSensorParams.readInterval.valueSec / 60) }} {{ corpoSensorParams.readInterval.status === 'consumed' ? t('param.active') : corpoSensorParams.readInterval.status }} 15 {{ t('param.default') }}
{{ t('param.groupThWhat') }}
- {{ t('param.readsTh') }}
- {{ fmtNum(corpoSensorParams.readsTh.valueSec * 100, 1) }} {{ corpoSensorParams.readsTh.status === 'consumed' ? t('param.active') : corpoSensorParams.readsTh.status }} {{ paramDefaults.readsTh }} {{ t('param.default') }}
- {{ t('param.temperatureTh') }}
- {{ fmtNum(corpoSensorParams.temperatureTh.valueSec, 1) }} {{ corpoSensorParams.temperatureTh.status === 'consumed' ? t('param.active') : corpoSensorParams.temperatureTh.status }} {{ paramDefaults.temperatureTh }} {{ t('param.default') }}
- {{ t('param.humidityTh') }}
- {{ fmtNum(corpoSensorParams.humidityTh.valueSec, 1) }} {{ corpoSensorParams.humidityTh.status === 'consumed' ? t('param.active') : corpoSensorParams.humidityTh.status }} {{ paramDefaults.humidityTh }} {{ t('param.default') }}
{{ t('param.mode.help') }}
{{ t('param.groupRangeWhat') }}
{{ t('sched.groupRegular') }}
{{ t('sched.groupRegularWhat') }}
{{ t('sched.batteryHintSend') }}
{{ t('param.groupExtra') }}
{{ t('param.groupExtraWhat') }}
{{ t(corpoReadsThBaseline === 'lastSent' ? 'sched.baselineSent' : 'sched.baselineRead') }}
{{ t('sched.batteryHint') }}
{{ t('param.groupThWhat') }}
{{ t('sched.batteryHintTh') }}
{{ t('param.temperatureTh.help') }}
{{ t('param.humidityTh.help') }}
- {{ t('threshold.' + m) }}
- {{ thresholdLabel(m) }} —
{{ t('threshold.hint') }}
{{ thresholdRowError(m) }}
{{ t('threshold.editHint') }}
{{ t('sensors.none') }}
{{ t('range.clamped', { date: premiumDate(new Date(retailHistoryMeta.from)), months: retailHistoryMeta.maxMonths }) }} {{ t('range.clampedUpsell') }}
{{ t('premium.lockHistory') }}
{{ t('premium.tankLockedHint') }}
- ID
- {{ retailDetailSensorObj.sensor }}
- {{ t('field.name') }}
- {{ retailDetailSensorObj.settings?.name || '—' }}
- {{ t('field.use') }}
- {{ tankUse(retailDetailSensorObj.sensor) }}
- {{ t('field.tankShape') }}
- {{ tankShapeLabel(retailDetailSensorObj.sensor) }}
- {{ t('tank.fullAtDist') }}
- {{ retailDetailSensorObj.settings?.maxLevel ?? '—' }}
- {{ t('field.depthToBottom') }}
- {{ retailDetailSensorObj.settings.tankDepth.manualValue }} cm {{ t('tank.manualParen') }} {{ retailChartTankDepth }} cm {{ t('tank.autoParen') }} {{ t('tank.auto') }}
- {{ t('field.volume') }}
- {{ volumeLabel(retailDetailSensorObj.sensor) }}
{{ t('card.notifications') }}
- {{ t('tank.notifyFull') }}
- {{ notifyFullOn(retailDetailNotifications) ? t('tank.notifyOn') : t('tank.notifyOff') }}
- {{ t('thr.list') }}
- — {{ a.text }} · {{ a.label }} {{ t('thr.basic') }}
- {{ t('tank.notifyDaysBefore') }}
- {{ retailDetailNotifications.maxDaysBeforeFullToNotify ?? '—' }}
- {{ t('tank.notifyEmpty') }}
- {{ notifyEmptyOn(retailDetailNotifications) ? t('tank.notifyOn') : t('tank.notifyOff') }}
- {{ t('thr.list') }}
- — {{ a.text }} · {{ a.label }} {{ t('thr.basic') }}
- {{ t('tank.notifyDaysBeforeEmpty') }}
- {{ retailDetailNotifications.maxDaysBeforeEmptyToNotify ?? '—' }}
- {{ t('tank.notifyNoContact') }}
- {{ senderFailureDays(retailDetailSensorObj.sensor) ? senderFailureLabel(senderFailureDays(retailDetailSensorObj.sensor)) : t('tank.notifyNoContactOff') }}
- {{ t('field.emailNotify') }}
- {{ emailAddr(retailDetailSensorObj.sensor) || '—' }} {{ t('email.hintInactive') }}
{{ t('sched.title') }}
- {{ scheduleHasChangeSend(retailDetailSensorObj.sensor) ? t('sched.sendShort') : t('sched.sendShortExact') }}
- {{ scheduleLabel(scheduleState(retailDetailSensorObj.sensor).applied.sendInterval) }} {{ t('sched.fromFirmware') }} {{ t('sched.appliedAt', { when: fmtReadTimeShort(scheduleState(retailDetailSensorObj.sensor).confirmedAt) }) }}
- {{ t('sched.readShort') }}
- {{ scheduleLabel(scheduleState(retailDetailSensorObj.sensor).applied.readInterval) }}
- {{ t('sched.readsThShort') }}
- {{ scheduleThLabel(scheduleState(retailDetailSensorObj.sensor).applied.readsTh) }}
{{ t(schedulePendingKey(retailDetailSensorObj.sensor), schedulePendingParams(retailDetailSensorObj.sensor)) }}
{{ t(schedulePendingKey(retailDetailSensorObj.sensor), schedulePendingParams(retailDetailSensorObj.sensor)) }}
- Status
- {{ connLabel(retailDetailSensorObj.sensor) }}
- {{ t('field.level') }}
- {{ rowLevelText(retailDetailSensorObj) || '—' }}
- {{ t('field.freeSpace') }}
- {{ freeLevel(retailDetailSensorObj) }} cm
- {{ t('field.daysToFull') }}
- {{ t('tank.overdueOn', { date: fullDate(retailDetailSensorObj) }) }} {{ daysToFull(retailDetailSensorObj) }} {{ t('unit.days') }} ({{ fullDate(retailDetailSensorObj) }}) —
- {{ t('field.battery') }}
- {{ rowBatteryPct(retailDetailSensorObj) != null ? rowBatteryPct(retailDetailSensorObj) + ' %' : '—' }}
- {{ t('field.signal') }}
- {{ retailDetailSensorObj.rssi != null ? retailDetailSensorObj.rssi + ' dBm' : '—' }}
- {{ t('field.readTime') }}
- {{ lastRead(retailDetailSensorObj) }}
{{ t('card.orgUsers') }} — {{ organizationName }}
{{ t('users.none') }}
| {{ t('field.fullName') }} | Login | {{ t('users.notifyEmailShort') }} | {{ t('field.roles') }} | ||
|---|---|---|---|---|---|
| {{ u.name || '—' }} | {{ u.login }} | {{ u.email || '—' }} | {{ role }} {{ t('common.none') }} |
{{ t('nav.messages') }} {{ t('messages.last200') }}
{{ t('messages.none') }}
| Czas ↓ | {{ t('field.sensor') }} | {{ t('field.type') }} | {{ t('field.title') }} | {{ t('field.content') }} | {{ t('messages.receipts') }} |
|---|---|---|---|---|---|
| {{ fmtReadTime(m.time) }} | {{ m.sensor || '—' }} | {{ msgTypeLabel(m.msg_type) }} | {{ m.title || '—' }} | {{ m.content || '—' }} | {{ receiptIcon(m).count }} |
{{ t('messages.devices') }} {{ notificationDevices.length }}
{{ t('messages.devicesNone') }}
| {{ t('messages.deviceCol') }} | {{ t('messages.deviceLang') }} | {{ t('messages.deviceRegistered') }} | {{ t('messages.deviceLastDelivery') }} |
|---|---|---|---|
| {{ deviceLabel(d) }} {{ t('messages.deviceToken') }} {{ t('messages.deviceReported') }} | {{ d.lang || '\u2014' }} | {{ fmtReadTime(d.registeredAt) }} | {{ fmtReadTime(d.lastDeliveryAt) }} {{ t('messages.deviceNoDelivery') }} |
{{ t('messages.devicesNote') }}
{{ t('account.title') }}
- {{ t('account.login') }}
- {{ userName || '—' }}
- {{ t('account.org') }}
- {{ organizationName }}
{{ t('account.consents') }}
{{ t('terms.consentsNote') }}
{{ termsError }}
{{ t('account.consentsSaved') }}
{{ t('account.terms') }}
- {{ t('account.termsVersion') }}
- {{ (terms && terms.acceptedVersion) || '—' }}
- {{ t('account.termsAcceptedAt') }}
- {{ terms && terms.acceptedAt ? fmtReadTime(terms.acceptedAt) : '—' }}
{{ t('account.termsSuperseded', { version: terms.version }) }}
{{ t('account.delete') }}
{{ t('account.deleteHow') }}
{{ t('account.deleteWrite') }}