diff --git a/docs/dashboards/geosmart_city_dashboard_2026-05-26.json b/docs/dashboards/geosmart_city_dashboard_2026-05-26.json index 92c5b1ac..7988c6be 100644 --- a/docs/dashboards/geosmart_city_dashboard_2026-05-26.json +++ b/docs/dashboards/geosmart_city_dashboard_2026-05-26.json @@ -1 +1 @@ -{"meta":{"type":"db","canSave":true,"canEdit":true,"canAdmin":true,"canStar":true,"canDelete":true,"slug":"smart-city-geomap-temps-reel","url":"/d/geomap-test-v1/smart-city-geomap-temps-reel","expires":"0001-01-01T00:00:00Z","created":"2026-05-26T17:44:51Z","updated":"2026-05-26T17:46:38Z","updatedBy":"admin","createdBy":"admin","version":2,"hasAcl":false,"isFolder":false,"folderId":0,"folderUid":"","folderTitle":"General","folderUrl":"","provisioned":false,"provisionedExternalId":"","annotationsPermissions":{"dashboard":{"canAdd":true,"canEdit":true,"canDelete":true},"organization":{"canAdd":true,"canEdit":true,"canDelete":true}}},"dashboard":{"id":39,"panels":[{"datasource":{"type":"postgres","uid":"a9b60854-60c5-4c86-bb0b-d98852df0c89"},"gridPos":{"h":16,"w":24,"x":0,"y":0},"id":1,"options":{"basemap":{"name":"openstreetmap","type":"default"},"layers":[{"config":{"color":{"fixed":"green"},"size":{"fixed":10}},"name":"Capteurs","type":"markers"}],"view":{"id":"coords","lat":14.6164,"lon":-61.07,"zoom":12}},"targets":[{"format":"table","rawSql":"SELECT s.name, s.type, ROUND(ST_Y(s.location::geometry)::numeric, 4) AS latitude, ROUND(ST_X(s.location::geometry)::numeric, 4) AS longitude FROM public.sensors s WHERE s.location IS NOT NULL ORDER BY s.id;","refId":"A"}],"title":"🗺️ Carte des Capteurs - Martinique","type":"geomap"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":15,"lineWidth":2},"unit":"celsius"}},"gridPos":{"h":8,"w":12,"x":0,"y":16},"id":2,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"temperature_celsius\") |\u003e aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |\u003e yield(name: \"mean\")","refId":"A"}],"title":"🌡️ Température (°C)","type":"timeseries"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":15,"lineWidth":2},"unit":"percent"}},"gridPos":{"h":8,"w":12,"x":12,"y":16},"id":3,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"humidity_percent\") |\u003e aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |\u003e yield(name: \"mean\")","refId":"A"}],"title":"💧 Humidité (%)","type":"timeseries"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"red","value":null},{"color":"orange","value":20},{"color":"yellow","value":50},{"color":"green","value":80}]},"unit":"percent"}},"gridPos":{"h":6,"w":6,"x":0,"y":24},"id":4,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: -5m) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"battery_level\") |\u003e last()","refId":"A"}],"title":"🔋 Batterie","type":"gauge"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"max":50,"min":-10,"thresholds":{"mode":"absolute","steps":[{"color":"blue","value":null},{"color":"green","value":15},{"color":"yellow","value":30},{"color":"red","value":40}]},"unit":"celsius"}},"gridPos":{"h":6,"w":6,"x":6,"y":24},"id":5,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: -5m) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"temperature_celsius\") |\u003e last()","refId":"A"}],"title":"🌡️ Température","type":"gauge"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"max":300,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":100},{"color":"orange","value":180},{"color":"red","value":240}]},"unit":"concppb"}},"gridPos":{"h":6,"w":6,"x":12,"y":24},"id":6,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: -5m) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"o3_ugm3\") |\u003e last()","refId":"A"}],"title":"💨 O₃","type":"gauge"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"max":10,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":2},{"color":"orange","value":5},{"color":"red","value":8}]},"unit":"concmgpm3"}},"gridPos":{"h":6,"w":6,"x":18,"y":24},"id":7,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: -5m) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"co_mgm3\") |\u003e last()","refId":"A"}],"title":"⚗️ CO","type":"gauge"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":15,"lineWidth":2},"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":40},{"color":"orange","value":100},{"color":"red","value":200}]},"unit":"concppb"}},"gridPos":{"h":8,"w":12,"x":0,"y":30},"id":8,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"no2_ugm3\") |\u003e aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |\u003e yield(name: \"mean\")","refId":"A"}],"title":"🔴 NO₂","type":"timeseries"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":15,"lineWidth":2},"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":25},{"color":"orange","value":50},{"color":"red","value":75}]},"unit":"concppb"}},"gridPos":{"h":8,"w":12,"x":12,"y":30},"id":9,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"pm25_ugm3\") |\u003e aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |\u003e yield(name: \"mean\")","refId":"A"}],"title":"🟣 PM2.5","type":"timeseries"}],"refresh":"10s","schemaVersion":38,"tags":["smartcity","geomap","iot"],"time":{"from":"now-1h","to":"now"},"timezone":"America/Martinique","title":"Smart City - GeoMap Temps Réel","uid":"geomap-test-v1","version":2}} \ No newline at end of file +{"meta":{"type":"db","canSave":true,"canEdit":true,"canAdmin":true,"canStar":true,"canDelete":true,"slug":"smart-city-geomap-temps-reel","url":"/d/geomap-test-v1/smart-city-geomap-temps-reel","expires":"0001-01-01T00:00:00Z","created":"2026-05-26T17:44:51Z","updated":"2026-05-26T18:03:54Z","updatedBy":"admin","createdBy":"admin","version":5,"hasAcl":false,"isFolder":false,"folderId":0,"folderUid":"","folderTitle":"General","folderUrl":"","provisioned":false,"provisionedExternalId":"","annotationsPermissions":{"dashboard":{"canAdd":true,"canEdit":true,"canDelete":true},"organization":{"canAdd":true,"canEdit":true,"canDelete":true}}},"dashboard":{"id":39,"panels":[{"datasource":{"type":"postgres","uid":"a9b60854-60c5-4c86-bb0b-d98852df0c89"},"gridPos":{"h":16,"w":24,"x":0,"y":0},"id":1,"options":{"basemap":{"name":"openstreetmap","type":"default"},"layers":[{"config":{"color":{"fixed":"green"},"size":{"fixed":10,"max":20,"min":6},"tooltip":{"mode":"details"}},"location":{"latitude":"latitude","longitude":"longitude","mode":"coords"},"name":"Capteurs","type":"markers"}],"view":{"id":"coords","lat":14.6164,"lon":-61.07,"zoom":11}},"targets":[{"format":"table","rawSql":"SELECT s.name, s.type, ROUND(ST_Y(s.location::geometry)::numeric, 4) AS latitude, ROUND(ST_X(s.location::geometry)::numeric, 4) AS longitude FROM public.sensors s WHERE s.location IS NOT NULL ORDER BY s.id;","refId":"A"}],"title":"🗺️ Carte des Capteurs - Martinique","type":"geomap"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":15,"lineWidth":2},"unit":"celsius"}},"gridPos":{"h":8,"w":12,"x":0,"y":16},"id":2,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"temperature_celsius\") |\u003e filter(fn: (r) =\u003e r.topic =~ /${capteur:regex}/) |\u003e aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |\u003e yield(name: \"mean\")","refId":"A"}],"title":"🌡️ Température (°C)","type":"timeseries"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":15,"lineWidth":2},"unit":"percent"}},"gridPos":{"h":8,"w":12,"x":12,"y":16},"id":3,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"humidity_percent\") |\u003e filter(fn: (r) =\u003e r.topic =~ /${capteur:regex}/) |\u003e aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |\u003e yield(name: \"mean\")","refId":"A"}],"title":"💧 Humidité (%)","type":"timeseries"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"red","value":null},{"color":"orange","value":20},{"color":"yellow","value":50},{"color":"green","value":80}]},"unit":"percent"}},"gridPos":{"h":6,"w":6,"x":0,"y":24},"id":4,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"battery_level\") |\u003e filter(fn: (r) =\u003e r.topic =~ /${capteur:regex}/) |\u003e last()","refId":"A"}],"title":"🔋 Batterie","type":"stat"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"max":50,"min":-10,"thresholds":{"mode":"absolute","steps":[{"color":"blue","value":null},{"color":"green","value":15},{"color":"yellow","value":30},{"color":"red","value":40}]},"unit":"celsius"}},"gridPos":{"h":6,"w":6,"x":6,"y":24},"id":5,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"temperature_celsius\") |\u003e filter(fn: (r) =\u003e r.topic =~ /${capteur:regex}/) |\u003e last()","refId":"A"}],"title":"🌡️ Température","type":"stat"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"max":300,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":100},{"color":"orange","value":180},{"color":"red","value":240}]},"unit":"concppb"}},"gridPos":{"h":6,"w":6,"x":12,"y":24},"id":6,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"o3_ugm3\") |\u003e filter(fn: (r) =\u003e r.topic =~ /${capteur:regex}/) |\u003e last()","refId":"A"}],"title":"💨 O₃","type":"stat"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"max":10,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":2},{"color":"orange","value":5},{"color":"red","value":8}]},"unit":"concmgpm3"}},"gridPos":{"h":6,"w":6,"x":18,"y":24},"id":7,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"co_mgm3\") |\u003e filter(fn: (r) =\u003e r.topic =~ /${capteur:regex}/) |\u003e last()","refId":"A"}],"title":"⚗️ CO","type":"stat"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":15,"lineWidth":2},"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":40},{"color":"orange","value":100},{"color":"red","value":200}]},"unit":"concppb"}},"gridPos":{"h":8,"w":12,"x":0,"y":30},"id":8,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"no2_ugm3\") |\u003e filter(fn: (r) =\u003e r.topic =~ /${capteur:regex}/) |\u003e aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |\u003e yield(name: \"mean\")","refId":"A"}],"title":"🔴 NO₂","type":"timeseries"},{"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"fieldConfig":{"defaults":{"custom":{"fillOpacity":15,"lineWidth":2},"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":25},{"color":"orange","value":50},{"color":"red","value":75}]},"unit":"concppb"}},"gridPos":{"h":8,"w":12,"x":12,"y":30},"id":9,"targets":[{"query":"from(bucket: \"smartcity\") |\u003e range(start: v.timeRangeStart, stop: v.timeRangeStop) |\u003e filter(fn: (r) =\u003e r._measurement == \"mqtt_consumer\") |\u003e filter(fn: (r) =\u003e r._field == \"pm25_ugm3\") |\u003e filter(fn: (r) =\u003e r.topic =~ /${capteur:regex}/) |\u003e aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |\u003e yield(name: \"mean\")","refId":"A"}],"title":"🟣 PM2.5","type":"timeseries"}],"refresh":"5s","schemaVersion":38,"tags":["smartcity","geomap","iot"],"templating":{"list":[{"current":{"text":"All","value":"$__all"},"datasource":{"type":"influxdb","uid":"dd1bfc24-de9d-4c23-8a3c-151d153f8169"},"includeAll":true,"label":"Capteur","multi":true,"name":"capteur","query":"import \"influxdata/influxdb/v1\" v1.tagValues(bucket: \"smartcity\", tag: \"topic\")","refresh":2,"type":"query"}]},"time":{"from":"now-1h","to":"now"},"timezone":"America/Martinique","title":"Smart City - GeoMap Temps Réel","uid":"geomap-test-v1","version":5}} \ No newline at end of file