more status values
Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "persistence_manager.h"
|
#include "persistence_manager.h"
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
// Gibt ein cJSON-Objekt with dem aktuellen Lichtstatus zurück
|
// Gibt ein cJSON-Objekt with dem aktuellen Lichtstatus zurück
|
||||||
cJSON *create_light_status_json(void)
|
cJSON *create_light_status_json(void)
|
||||||
@@ -35,6 +36,14 @@ cJSON *create_light_status_json(void)
|
|||||||
cJSON_AddNumberToObject(color, "b", 220);
|
cJSON_AddNumberToObject(color, "b", 220);
|
||||||
cJSON_AddItemToObject(json, "color", color);
|
cJSON_AddItemToObject(json, "color", color);
|
||||||
|
|
||||||
|
// Add current time as HH:MM only (suffix is handled in the frontend)
|
||||||
|
time_t now = time(NULL);
|
||||||
|
struct tm tm_info;
|
||||||
|
localtime_r(&now, &tm_info);
|
||||||
|
char time_str[8];
|
||||||
|
strftime(time_str, sizeof(time_str), "%H:%M", &tm_info);
|
||||||
|
cJSON_AddStringToObject(json, "clock", time_str);
|
||||||
|
|
||||||
persistence_manager_deinit(&pm);
|
persistence_manager_deinit(&pm);
|
||||||
|
|
||||||
return json;
|
return json;
|
||||||
|
|||||||
@@ -557,6 +557,11 @@ body {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
border-bottom: 1px solid var(--border);
|
border-bottom: 1px solid var(--border);
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-item.visible {
|
||||||
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-item:last-child {
|
.status-item:last-child {
|
||||||
|
|||||||
@@ -92,18 +92,18 @@
|
|||||||
<div class="control-section">
|
<div class="control-section">
|
||||||
<h3 data-i18n="control.status.title">Aktueller Status</h3>
|
<h3 data-i18n="control.status.title">Aktueller Status</h3>
|
||||||
<div class="status-display">
|
<div class="status-display">
|
||||||
<div class="status-item">
|
<div class="status-item visible">
|
||||||
<span class="status-label" data-i18n="control.status.mode">Modus</span>
|
<span class="status-label" data-i18n="control.status.mode">Modus</span>
|
||||||
<span class="status-value" id="current-mode" data-i18n="mode.simulation">Simulation</span>
|
<span class="status-value" id="current-mode" data-i18n="mode.simulation">Simulation</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="status-item">
|
<div class="status-item visible">
|
||||||
<span class="status-label" data-i18n="control.status.schema">Schema</span>
|
|
||||||
<span class="status-value" id="current-schema">Schema 1</span>
|
|
||||||
</div>
|
|
||||||
<div class="status-item">
|
|
||||||
<span class="status-label" data-i18n="control.status.color">Aktuelle Farbe</span>
|
<span class="status-label" data-i18n="control.status.color">Aktuelle Farbe</span>
|
||||||
<div class="current-color-preview" id="current-color"></div>
|
<div class="current-color-preview" id="current-color"></div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="status-item">
|
||||||
|
<span class="status-label" data-i18n="control.status.clock">Uhrzeit</span>
|
||||||
|
<span class="status-value" id="current-clock">--:-- Uhr</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ document.addEventListener('touchend', (e) => {
|
|||||||
lastTouchEnd = now;
|
lastTouchEnd = now;
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
// Initialization
|
|
||||||
document.addEventListener('DOMContentLoaded', async () => {
|
document.addEventListener('DOMContentLoaded', async () => {
|
||||||
initI18n();
|
initI18n();
|
||||||
initTheme();
|
initTheme();
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ const translations = {
|
|||||||
'control.status.mode': 'Modus',
|
'control.status.mode': 'Modus',
|
||||||
'control.status.schema': 'Schema',
|
'control.status.schema': 'Schema',
|
||||||
'control.status.color': 'Aktuelle Farbe',
|
'control.status.color': 'Aktuelle Farbe',
|
||||||
|
'control.status.clock': 'Uhrzeit',
|
||||||
|
|
||||||
// Common
|
// Common
|
||||||
'common.on': 'AN',
|
'common.on': 'AN',
|
||||||
@@ -174,7 +175,8 @@ const translations = {
|
|||||||
// General
|
// General
|
||||||
'loading': 'Laden...',
|
'loading': 'Laden...',
|
||||||
'error': 'Fehler',
|
'error': 'Fehler',
|
||||||
'success': 'Erfolg'
|
'success': 'Erfolg',
|
||||||
|
'clock.suffix': 'Uhr'
|
||||||
},
|
},
|
||||||
|
|
||||||
en: {
|
en: {
|
||||||
@@ -216,6 +218,7 @@ const translations = {
|
|||||||
'control.status.mode': 'Mode',
|
'control.status.mode': 'Mode',
|
||||||
'control.status.schema': 'Schema',
|
'control.status.schema': 'Schema',
|
||||||
'control.status.color': 'Current Color',
|
'control.status.color': 'Current Color',
|
||||||
|
'control.status.clock': "Time",
|
||||||
|
|
||||||
// Common
|
// Common
|
||||||
'common.on': 'ON',
|
'common.on': 'ON',
|
||||||
@@ -349,7 +352,8 @@ const translations = {
|
|||||||
// General
|
// General
|
||||||
'loading': 'Loading...',
|
'loading': 'Loading...',
|
||||||
'error': 'Error',
|
'error': 'Error',
|
||||||
'success': 'Success'
|
'success': 'Success',
|
||||||
|
'clock.suffix': "o'clock"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -115,6 +115,20 @@ function updateSimulationOptions() {
|
|||||||
} else {
|
} else {
|
||||||
options.classList.remove('visible');
|
options.classList.remove('visible');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[
|
||||||
|
'control.status.clock'
|
||||||
|
].forEach(i18nKey => {
|
||||||
|
const label = document.querySelector(`.status-item .status-label[data-i18n="${i18nKey}"]`);
|
||||||
|
const item = label ? label.closest('.status-item') : null;
|
||||||
|
if (item) {
|
||||||
|
if (currentMode === 'simulation') {
|
||||||
|
item.classList.add('visible');
|
||||||
|
} else {
|
||||||
|
item.classList.remove('visible');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function setActiveSchema() {
|
async function setActiveSchema() {
|
||||||
@@ -173,8 +187,6 @@ async function loadLightStatus() {
|
|||||||
// Update schema
|
// Update schema
|
||||||
if (status.schema) {
|
if (status.schema) {
|
||||||
document.getElementById('active-schema').value = status.schema;
|
document.getElementById('active-schema').value = status.schema;
|
||||||
const schemaNum = status.schema.replace('schema_0', '').replace('.csv', '');
|
|
||||||
document.getElementById('current-schema').textContent = t(`schema.name.${schemaNum}`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update current color
|
// Update current color
|
||||||
@@ -184,6 +196,15 @@ async function loadLightStatus() {
|
|||||||
colorPreview.style.backgroundColor = `rgb(${status.color.r}, ${status.color.g}, ${status.color.b})`;
|
colorPreview.style.backgroundColor = `rgb(${status.color.r}, ${status.color.g}, ${status.color.b})`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update clock/time
|
||||||
|
if (status.clock) {
|
||||||
|
const clockEl = document.getElementById('current-clock');
|
||||||
|
if (clockEl) {
|
||||||
|
// Use one translation key for the suffix, language is handled by t()
|
||||||
|
clockEl.textContent = status.clock + ' ' + t('clock.suffix');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('Light status not available');
|
console.log('Light status not available');
|
||||||
|
|||||||
Reference in New Issue
Block a user