2026-03-02 01:48:51 +01:00
/** Mock data for development preview when backend is unavailable. */
import type { DashboardData } from "./api" ;
export const MOCK_DATA : DashboardData = {
timestamp : new Date ( ) . toISOString ( ) ,
weather : {
primary : {
location : "Leverkusen" ,
temp : 8 ,
feels_like : 5 ,
humidity : 72 ,
wind_kmh : 18 ,
description : "Teilweise bewölkt" ,
icon : "⛅" ,
forecast : [
{ date : "2026-03-02" , max_temp : 10 , min_temp : 3 , icon : "⛅" , description : "Partly cloudy" } ,
{ date : "2026-03-03" , max_temp : 12 , min_temp : 5 , icon : "🌤️" , description : "Sunny intervals" } ,
{ date : "2026-03-04" , max_temp : 7 , min_temp : 1 , icon : "🌧️" , description : "Rain" } ,
] ,
} ,
secondary : {
location : "Rab, Kroatien" ,
temp : 16 ,
feels_like : 15 ,
humidity : 58 ,
wind_kmh : 12 ,
description : "Sonnig" ,
icon : "☀️" ,
forecast : [
{ date : "2026-03-02" , max_temp : 18 , min_temp : 10 , icon : "☀️" , description : "Sunny" } ,
{ date : "2026-03-03" , max_temp : 19 , min_temp : 11 , icon : "🌤️" , description : "Mostly sunny" } ,
{ date : "2026-03-04" , max_temp : 17 , min_temp : 9 , icon : "⛅" , description : "Partly cloudy" } ,
] ,
} ,
hourly : [
{ time : "14:00" , temp : 8 , icon : "⛅" , precip_chance : 10 } ,
{ time : "15:00" , temp : 9 , icon : "🌤️" , precip_chance : 5 } ,
{ time : "16:00" , temp : 8 , icon : "⛅" , precip_chance : 15 } ,
{ time : "17:00" , temp : 7 , icon : "☁️" , precip_chance : 25 } ,
{ time : "18:00" , temp : 6 , icon : "☁️" , precip_chance : 30 } ,
{ time : "19:00" , temp : 5 , icon : "🌧️" , precip_chance : 55 } ,
{ time : "20:00" , temp : 4 , icon : "🌧️" , precip_chance : 60 } ,
{ time : "21:00" , temp : 4 , icon : "☁️" , precip_chance : 35 } ,
] ,
} ,
news : {
articles : [
{ id : 1 , source : "tagesschau" , title : "Bundesregierung beschließt neues Infrastrukturpaket" , url : "#" , category : "politik" , published_at : new Date ( Date . now ( ) - 3600000 ) . toISOString ( ) } ,
{ id : 2 , source : "heise" , title : "Intel stellt neue Arc-Grafikkarten vor: Battlemage kommt im Q2" , url : "#" , category : "tech" , published_at : new Date ( Date . now ( ) - 7200000 ) . toISOString ( ) } ,
{ id : 3 , source : "spiegel" , title : "DAX erreicht neues Allzeithoch trotz geopolitischer Spannungen" , url : "#" , category : "wirtschaft" , published_at : new Date ( Date . now ( ) - 10800000 ) . toISOString ( ) } ,
{ id : 4 , source : "google_finance" , title : "NVIDIA reports record quarterly revenue driven by AI demand" , url : "#" , category : "wirtschaft" , published_at : new Date ( Date . now ( ) - 14400000 ) . toISOString ( ) } ,
{ id : 5 , source : "tagesschau" , title : "Klimagipfel: Neue Vereinbarungen zum CO2-Ausstoß beschlossen" , url : "#" , category : "politik" , published_at : new Date ( Date . now ( ) - 18000000 ) . toISOString ( ) } ,
{ id : 6 , source : "heise" , title : "Linux 6.14 Kernel bringt massiven Performance-Boost für AMD Zen 5" , url : "#" , category : "tech" , published_at : new Date ( Date . now ( ) - 21600000 ) . toISOString ( ) } ,
{ id : 7 , source : "google_de_finance" , title : "Rheinmetall-Aktie steigt um 8% nach neuem NATO-Auftrag" , url : "#" , category : "wirtschaft" , published_at : new Date ( Date . now ( ) - 25200000 ) . toISOString ( ) } ,
{ id : 8 , source : "spiegel" , title : "Studie: Homeoffice bleibt auch 2026 die beliebteste Arbeitsform" , url : "#" , category : "allgemein" , published_at : new Date ( Date . now ( ) - 28800000 ) . toISOString ( ) } ,
{ id : 9 , source : "heise" , title : "Docker Desktop 5.0: Neue Container-Management-Features im Überblick" , url : "#" , category : "tech" , published_at : new Date ( Date . now ( ) - 32400000 ) . toISOString ( ) } ,
{ id : 10 , source : "tagesschau" , title : "Europäische Zentralbank senkt Leitzins um 0.25 Prozentpunkte" , url : "#" , category : "wirtschaft" , published_at : new Date ( Date . now ( ) - 36000000 ) . toISOString ( ) } ,
{ id : 11 , source : "google_defense" , title : "NATO increases defense spending targets for 2027" , url : "#" , category : "politik" , published_at : new Date ( Date . now ( ) - 39600000 ) . toISOString ( ) } ,
{ id : 12 , source : "spiegel" , title : "Unraid 7.0: Das neue Server-Betriebssystem im Test" , url : "#" , category : "tech" , published_at : new Date ( Date . now ( ) - 43200000 ) . toISOString ( ) } ,
] ,
total : 12 ,
limit : 20 ,
offset : 0 ,
} ,
servers : {
servers : [
{
name : "Daddelolymp" ,
host : "10.10.10.10" ,
online : true ,
uptime : "42 days, 7:23" ,
cpu : { usage_pct : 38 , cores : 16 , temp_c : 52 } ,
ram : { used_gb : 24.3 , total_gb : 32 , pct : 76 } ,
array : {
status : "normal" ,
disks : [
{ name : "Disk 1" , status : "active" , size : "8 TB" , used : "5.2 TB" } ,
{ name : "Disk 2" , status : "active" , size : "8 TB" , used : "6.1 TB" } ,
{ name : "Disk 3" , status : "active" , size : "4 TB" , used : "2.8 TB" } ,
{ name : "Parity" , status : "active" , size : "8 TB" , used : "-" } ,
{ name : "Cache" , status : "active" , size : "1 TB" , used : "320 GB" } ,
] ,
} ,
docker : {
running : 14 ,
containers : [
{ name : "gitlab" , status : "running" , image : "gitlab/gitlab-ce" } ,
{ name : "n8n" , status : "running" , image : "n8nio/n8n" } ,
{ name : "postgres" , status : "running" , image : "postgres:15" } ,
{ name : "daily-briefing" , status : "running" , image : "daily-briefing" } ,
{ name : "jukebox-vibe" , status : "running" , image : "jukebox-vibe" } ,
{ name : "redis" , status : "running" , image : "redis:7" } ,
{ name : "vikunja" , status : "running" , image : "vikunja/vikunja" } ,
{ name : "nginx" , status : "running" , image : "nginx:alpine" } ,
] ,
} ,
} ,
{
name : "Moneyboy" ,
host : "192.168.1.100" ,
online : true ,
uptime : "12 days, 14:52" ,
cpu : { usage_pct : 12 , cores : 10 , temp_c : 41 } ,
ram : { used_gb : 8.7 , total_gb : 16 , pct : 54 } ,
array : {
status : "normal" ,
disks : [
{ name : "Disk 1" , status : "active" , size : "4 TB" , used : "1.8 TB" } ,
{ name : "Disk 2" , status : "active" , size : "4 TB" , used : "2.1 TB" } ,
{ name : "Cache" , status : "active" , size : "500 GB" , used : "180 GB" } ,
] ,
} ,
docker : {
running : 6 ,
containers : [
{ name : "freqtrade" , status : "running" , image : "freqtradeorg/freqtrade" } ,
{ name : "plex" , status : "running" , image : "plexinc/pms-docker" } ,
{ name : "nextcloud" , status : "running" , image : "nextcloud" } ,
] ,
} ,
} ,
] ,
} ,
ha : {
online : true ,
lights : [
{ entity_id : "light.wohnzimmer" , name : "Wohnzimmer" , state : "on" , brightness : 80 } ,
{ entity_id : "light.schlafzimmer" , name : "Schlafzimmer" , state : "off" , brightness : 0 } ,
{ entity_id : "light.kueche" , name : "Küche" , state : "on" , brightness : 100 } ,
{ entity_id : "light.flur" , name : "Flur" , state : "off" , brightness : 0 } ,
{ entity_id : "light.badezimmer" , name : "Badezimmer" , state : "on" , brightness : 60 } ,
{ entity_id : "light.buero" , name : "Büro" , state : "off" , brightness : 0 } ,
{ entity_id : "light.balkon" , name : "Balkon" , state : "off" , brightness : 0 } ,
{ entity_id : "light.gaestezimmer" , name : "Gästezimmer" , state : "off" , brightness : 0 } ,
] ,
2026-03-02 19:30:20 +01:00
switches : [
{ entity_id : "switch.buro_pc" , name : "Büro PC" , state : "on" } ,
{ entity_id : "switch.teich" , name : "Teich Socket" , state : "on" } ,
{ entity_id : "switch.kinderzimmer" , name : "Kinderzimmer Plug" , state : "off" } ,
] ,
2026-03-02 01:48:51 +01:00
covers : [
2026-03-02 19:30:20 +01:00
{ entity_id : "cover.wohnzimmer" , name : "Wohnzimmer Rollo" , state : "open" , current_position : 100 , device_class : "shutter" } ,
{ entity_id : "cover.schlafzimmer" , name : "Schlafzimmer Rollo" , state : "closed" , current_position : 0 , device_class : "shutter" } ,
{ entity_id : "cover.kueche" , name : "Küche Rollo" , state : "open" , current_position : 75 , device_class : "curtain" } ,
2026-03-02 01:48:51 +01:00
] ,
sensors : [
2026-03-02 19:30:20 +01:00
{ entity_id : "sensor.temp_wohnzimmer" , name : "Wohnzimmer" , state : 21.5 , unit : "°C" , device_class : "temperature" } ,
{ entity_id : "sensor.temp_aussen" , name : "Außen" , state : 7.8 , unit : "°C" , device_class : "temperature" } ,
{ entity_id : "sensor.temp_schlafzimmer" , name : "Schlafzimmer" , state : 19.2 , unit : "°C" , device_class : "temperature" } ,
{ entity_id : "sensor.hum_wohnzimmer" , name : "Wohnzimmer" , state : 48.2 , unit : "%" , device_class : "humidity" } ,
{ entity_id : "sensor.hum_kueche" , name : "Küche" , state : 33.4 , unit : "%" , device_class : "humidity" } ,
] ,
binary_sensors : [
{ entity_id : "binary_sensor.front_door" , name : "Haustür" , state : "off" , device_class : "door" } ,
{ entity_id : "binary_sensor.motion_og" , name : "Bewegung OG" , state : "off" , device_class : "occupancy" } ,
] ,
climate : [
{ entity_id : "climate.klima" , name : "Klima" , state : "heat" , current_temperature : 23 , target_temperature : 25 , hvac_modes : [ "off" , "heat" , "cool" ] , humidity : 28 } ,
2026-03-02 01:48:51 +01:00
] ,
lights_on : 3 ,
lights_total : 8 ,
2026-03-02 19:30:20 +01:00
switches_on : 2 ,
switches_total : 3 ,
2026-03-02 01:48:51 +01:00
} ,
2026-03-02 10:13:50 +01:00
mqtt : {
connected : true ,
entities : [
{ topic : "unraid/daddelolymp/cpu_temp" , value : 52 , timestamp : Date.now ( ) / 1000 - 5 , name : "Cpu Temp" , category : "unraid" } ,
{ topic : "unraid/daddelolymp/array_status" , value : "normal" , timestamp : Date.now ( ) / 1000 - 12 , name : "Array Status" , category : "unraid" } ,
{ topic : "unraid/moneyboy/cpu_temp" , value : 41 , timestamp : Date.now ( ) / 1000 - 8 , name : "Cpu Temp" , category : "unraid" } ,
{ topic : "zigbee2mqtt/wohnzimmer/temperature" , value : 21.5 , timestamp : Date.now ( ) / 1000 - 30 , name : "Temperature" , category : "zigbee2mqtt" } ,
{ topic : "zigbee2mqtt/wohnzimmer/humidity" , value : 48 , timestamp : Date.now ( ) / 1000 - 30 , name : "Humidity" , category : "zigbee2mqtt" } ,
{ topic : "frigate/events/front_door" , value : "person" , timestamp : Date.now ( ) / 1000 - 120 , name : "Front Door" , category : "frigate" } ,
] ,
} ,
2026-03-02 01:48:51 +01:00
tasks : {
private : {
open : [
{ id : 101 , title : "Garten winterfest machen" , done : false , priority : 3 , project_name : "Haus & Garten" , due_date : "2026-03-05" } ,
{ id : 102 , title : "Heizung warten lassen" , done : false , priority : 2 , project_name : "Haus & Garten" , due_date : "2026-03-10" } ,
{ id : 103 , title : "Projekt-Bericht abgeben" , done : false , priority : 4 , project_name : "Jugendeinrichtung" , due_date : "2026-03-03" } ,
{ id : 104 , title : "Elternabend planen" , done : false , priority : 1 , project_name : "Jugendeinrichtung" , due_date : null } ,
{ id : 105 , title : "Neue Pflanzen bestellen" , done : false , priority : 1 , project_name : "Haus & Garten" , due_date : null } ,
] ,
done : [
{ id : 106 , title : "Müll rausbringen" , done : true , priority : 1 , project_name : "Haus & Garten" , due_date : null } ,
] ,
open_count : 5 ,
} ,
sams : {
open : [
{ id : 201 , title : "Daily Briefing Dashboard refactoren" , done : false , priority : 4 , project_name : "OpenClaw AI" , due_date : "2026-03-02" } ,
{ id : 202 , title : "n8n Workflows aufräumen" , done : false , priority : 3 , project_name : "OpenClaw AI" , due_date : null } ,
{ id : 203 , title : "Trading Bot backtesting" , done : false , priority : 2 , project_name : "Sam's Wunderwelt" , due_date : null } ,
] ,
done : [
{ id : 204 , title : "Jukebox Drag & Drop Feature" , done : true , priority : 3 , project_name : "OpenClaw AI" , due_date : null } ,
] ,
open_count : 3 ,
} ,
} ,
} ;