Compare commits
8 Commits
eb97f2a7dd
...
e4c558c296
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e4c558c296 | ||
|
|
65e2d42f63 | ||
|
|
a7716102fd | ||
|
|
7643d88ffb | ||
|
|
7df2f6798f | ||
|
|
943836f8fb | ||
|
|
5bbd5a6e5d | ||
|
|
6d1d9c8620 |
31
MONITORING_REPORT_2026-05-22.md
Normal file
31
MONITORING_REPORT_2026-05-22.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Smart City Monitoring Report - 2026-05-22
|
||||
|
||||
**Timestamp:** 2026-05-22 00:50:30
|
||||
|
||||
## Summary
|
||||
⚠️ **9 issue(s) detected** - Critical systems are partially unavailable
|
||||
|
||||
## Container Status
|
||||
| Container | Status |
|
||||
|-----------|--------|
|
||||
| openremote_manager_1 | 🛑 DOWN |
|
||||
| openremote_keycloak_1 | 🛑 DOWN |
|
||||
| stellio-api-gateway | 🛑 DOWN |
|
||||
| smart-city-prometheus-brokers | 🛑 DOWN |
|
||||
|
||||
## Endpoint Status
|
||||
| Service | URL | Status |
|
||||
|---------|-----|--------|
|
||||
| OpenRemote | https://openremote.digitribe.fr | 🌐 DOWN (HTTP 502) |
|
||||
| Orion-LD | http://fiware-gis-quickstart-orion-1:1026/version | 🌐 DOWN (HTTP 000) |
|
||||
| Stellio | https://stellio.digitribe.fr | 🌐 DOWN (HTTP 502) |
|
||||
| FROST | http://frost_http-web-1:8080/FROST-Server/core/v1.0/info | 🌐 DOWN (HTTP 000) |
|
||||
|
||||
## Network
|
||||
- 🔌 Network issue: Traefik → OpenRemote
|
||||
|
||||
## Recommendations
|
||||
1. Restart critical containers: `docker-compose up -d`
|
||||
2. Check Traefik logs for routing issues
|
||||
3. Verify network connectivity between services
|
||||
4. Review container health checks
|
||||
42
TODO.md
42
TODO.md
@@ -1,6 +1,6 @@
|
||||
# Smart City Digital Twin — TODO List
|
||||
|
||||
> Dernière mise à jour : 2026-05-20 04:15 (v3)
|
||||
> Dernière mise à jour : 2026-05-26 23:00
|
||||
|
||||
## ✅ Complété
|
||||
| ID | Tâche |
|
||||
@@ -15,34 +15,52 @@
|
||||
| or-agent | Agent MQTT créé dans OpenRemote |
|
||||
| contexus-mqtt | Driver MQTT configuré et recevant des données |
|
||||
| contexus-devices | 7 devices créés dans Contexus |
|
||||
| telegraf-fix | Noms containers corrigés + BunkerM désactivé |
|
||||
| or-pg-fix | Image PostgreSQL changée → timescaledb-ha:pg15 |
|
||||
| grafana-fix | Dashboard "no data" corrigé — datasource + requêtes Flux |
|
||||
| grafana-v4 | Dashboard v4 poussé avec 14 panels, données confirmées ✅ |
|
||||
| bunkerm-activate | BunkerM activé dans simulateur + Telegraf |
|
||||
| superset-deploy | Apache Superset déployé derrière Traefik ✅ |
|
||||
| metabase-deploy | Metabase déployé derrière Traefik ✅ |
|
||||
|
||||
## 🔴 En cours
|
||||
| ID | Tâche | Notes |
|
||||
|----|-------|-------|
|
||||
| p1-or-restart | Redémarrer OpenRemote | PG recréé, à relancer après reclonage répertoire |
|
||||
|
||||
## 🔴 Bloqué
|
||||
| ID | Tâche | Raison |
|
||||
|----|-------|--------|
|
||||
| p1-or-map | Affichage des points sur la carte OpenRemote | Points ne s'affichent pas malgré assets + agentLink |
|
||||
| p1-or-map | Affichage points carte OpenRemote | En attente restart |
|
||||
| p4-ditto | Ditto.digitribe.fr | MongoDB localhost hardcodé |
|
||||
| p1-prometheus | Prometheus + Grafana | Réseau interne inaccessible |
|
||||
| p3-kepler | KeplerGL | Image Docker incomplète |
|
||||
| p3-geomesa | GeoMesa | Installation complexe |
|
||||
|
||||
## ⏳ En attente
|
||||
| ID | Tâche |
|
||||
|----|-------|
|
||||
| p1-contexus-60 | Configurer les 60 devices Contexus |
|
||||
| p3-analyse | Analyse: GeoMesa + KeplerGL |
|
||||
| p1-ngsi | NGSI-LD: validation pipeline (basse priorité) |
|
||||
| p0-chirpstack | ChirpStack: login API gRPC-REST |
|
||||
| p1-thingsboard | Relayer ThingsBoard (si CPU dispo) |
|
||||
|
||||
## 📝 Notes 2026-05-20
|
||||
- **Contexus** : https://contexus.digitribe.fr — login: iotevadmin / Digitribe972
|
||||
- **OpenRemote** : https://openremote.digitribe.fr/manager/
|
||||
- **Agent MQTT** : mqtt-agent-1 créé dans OpenRemote (type: Agent)
|
||||
- **Assets IOTSensor** : 5 créés avec agentLink → mqtt-agent-1
|
||||
- **Contexus MQTT** : Driver EMQX connecté et recevant des données
|
||||
- **Contexus Devices** : 7 devices créés (airquality, traffic, weather, parking, noise, light, waterquality)
|
||||
- **Problème carte** : Les points ne s'affichent pas sur la carte OpenRemote malgré les assets et l'agentLink. Il faut peut-être redémarrer le Manager ou vérifier la configuration de l'agent MQTT.
|
||||
## 📝 Notes 2026-05-26
|
||||
- **Pipeline données** : Simulateur → EMQX/Mosquitto/BunkerM → Telegraf → InfluxDB → Grafana ✅
|
||||
- **Grafana** : Dashboard smartcity-martinique-complete v4 — données confirmées ✅
|
||||
- **Superset** : https://superset.digitribe.fr ✅ (UP, healthy)
|
||||
- **Metabase** : https://metabase.digitribe.fr ✅ (UP, healthy)
|
||||
- **BunkerM** : Port 1883→1900, dynsec désactivé, auth par password_file
|
||||
- **BunkerM Traefik** : https://bunkerm.digitribe.fr (config 27-bunkerm-web.yml corrigée)
|
||||
- **InfluxDB** : bucket `smartcity`, measurement `mqtt_consumer`, tag `topic` pour le type
|
||||
- **OpenRemote** : Abandon pour l'instant, l'utilisateur va recloner le répertoire
|
||||
|
||||
## Credentials
|
||||
- **Contexus**: iotevadmin / Digitribe972
|
||||
- **OpenRemote**: admin / Digitribe972
|
||||
- **PostgreSQL Contexus**: contexus / Digitribe972
|
||||
- **Redis Contexus**: Digitribe972
|
||||
- **Telegraf InfluxDB**: token=my-super-token, org=digitribe, bucket=smartcity
|
||||
- **Grafana**: admin / Digitribe972
|
||||
- **Superset**: admin / Digitribe972 (à configurer au premier accès)
|
||||
- **Metabase**: admin@digitribe.fr / Digitribe972
|
||||
- **BunkerM MQTT**: bunker / bunker
|
||||
|
||||
52
bemserver/Dockerfile
Normal file
52
bemserver/Dockerfile
Normal file
@@ -0,0 +1,52 @@
|
||||
# BEMServer - Building Energy Management Server
|
||||
# Multi-component Dockerfile: core + api + ui + celery
|
||||
# Based on Python 3.11 slim with TimescaleDB support
|
||||
|
||||
FROM python:3.11-slim AS base
|
||||
|
||||
# System dependencies
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
gcc \
|
||||
libpq-dev \
|
||||
libffi-dev \
|
||||
curl \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /opt/bemserver
|
||||
|
||||
# ---- Stage 1: Install bemserver-core ----
|
||||
FROM base AS core
|
||||
COPY bemserver/bemserver-core /tmp/bemserver-core
|
||||
RUN pip install --no-cache-dir /tmp/bemserver-core
|
||||
|
||||
# ---- Stage 2: Install bemserver-api ----
|
||||
FROM core AS api
|
||||
COPY bemserver/bemserver-api /tmp/bemserver-api
|
||||
RUN pip install --no-cache-dir /tmp/bemserver-api
|
||||
|
||||
# ---- Stage 3: Install bemserver-ui ----
|
||||
FROM api AS ui
|
||||
COPY bemserver/bemserver-ui /tmp/bemserver-ui
|
||||
RUN pip install --no-cache-dir /tmp/bemserver-ui
|
||||
|
||||
# ---- Final stage ----
|
||||
FROM ui AS final
|
||||
|
||||
# Create non-root user
|
||||
RUN groupadd -r bemserver && useradd -r -g bemserver -d /opt/bemserver -s /sbin/nologin bemserver
|
||||
|
||||
# Create config directory
|
||||
RUN mkdir -p /opt/bemserver/config /opt/bemserver/data \
|
||||
&& chown -R bemserver:bemserver /opt/bemserver
|
||||
|
||||
# Copy entrypoint script
|
||||
COPY bemserver/entrypoint.sh /opt/bemserver/entrypoint.sh
|
||||
RUN chmod +x /opt/bemserver/entrypoint.sh
|
||||
|
||||
# Healthcheck
|
||||
HEALTHCHECK --interval=30s --timeout=10s --retries=5 --start_period=60s \
|
||||
CMD curl -f http://localhost:5000/healthz || exit 1
|
||||
|
||||
USER bemserver
|
||||
|
||||
ENTRYPOINT ["/opt/bemserver/entrypoint.sh"]
|
||||
44
bemserver/entrypoint.sh
Normal file
44
bemserver/entrypoint.sh
Normal file
@@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
# BEMServer entrypoint - runs the specified component
|
||||
set -e
|
||||
|
||||
COMPONENT=${BEMSERVER_COMPONENT:-api}
|
||||
CONFIG_DIR="/opt/bemserver/config"
|
||||
|
||||
case "$COMPONENT" in
|
||||
api)
|
||||
echo "Starting BEMServer API on port 5000..."
|
||||
exec flask --app bemserver_api.app create --config "${CONFIG_DIR}/api-settings.py"
|
||||
;;
|
||||
ui)
|
||||
echo "Starting BEMServer UI on port 5001..."
|
||||
exec flask --app bemserver_ui.app create --config "${CONFIG_DIR}/ui-settings.cfg"
|
||||
;;
|
||||
celery-worker)
|
||||
echo "Starting BEMServer Celery worker..."
|
||||
export BEMSERVER_CORE_SETTINGS_FILE="${CONFIG_DIR}/core-settings.py"
|
||||
exec celery -A bemserver_core.celery_worker worker --loglevel=info
|
||||
;;
|
||||
celery-beat)
|
||||
echo "Starting BEMServer Celery beat..."
|
||||
export BEMSERVER_CORE_SETTINGS_FILE="${CONFIG_DIR}/core-settings.py"
|
||||
exec celery -A bemserver_core.celery_worker beat --loglevel=info
|
||||
;;
|
||||
init-db)
|
||||
echo "Initializing BEMServer database..."
|
||||
export BEMSERVER_CORE_SETTINGS_FILE="${CONFIG_DIR}/core-settings.py"
|
||||
bemserver_db_upgrade
|
||||
echo "Database initialized."
|
||||
;;
|
||||
create-admin)
|
||||
echo "Creating admin user..."
|
||||
export BEMSERVER_CORE_SETTINGS_FILE="${CONFIG_DIR}/core-settings.py"
|
||||
bemserver_create_user --name "${BEMSERVER_ADMIN_USER:-admin}" --email "${BEMSERVER_ADMIN_EMAIL:-admin@digitribe.fr}" --admin
|
||||
echo "Admin user created."
|
||||
;;
|
||||
*)
|
||||
echo "Unknown component: $COMPONENT"
|
||||
echo "Valid components: api, ui, celery-worker, celery-beat, init-db, create-admin"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
35
docker-compose.bunkerm.yml
Normal file
35
docker-compose.bunkerm.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
# BunkerM MQTT Broker - Smart City Digital Twin
|
||||
version: '3.8'
|
||||
|
||||
networks:
|
||||
smartcity-shared:
|
||||
external: true
|
||||
traefik-public:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
bunkerm_mosquitto_data:
|
||||
external: true
|
||||
|
||||
services:
|
||||
bunkerm:
|
||||
image: bunkeriot/bunkerm:latest
|
||||
container_name: bunkerm-bunkerm-1
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- smartcity-shared
|
||||
- traefik-public
|
||||
ports:
|
||||
- "1883:1900"
|
||||
- "2000:2000"
|
||||
environment:
|
||||
- MQTT_PORT=1900
|
||||
- CONFIG_API_PORT=2000
|
||||
volumes:
|
||||
- bunkerm_mosquitto_data:/var/lib/mosquitto
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/localhost/1900' || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 60s
|
||||
@@ -2,6 +2,7 @@ version: "3.8"
|
||||
|
||||
services:
|
||||
chirpstack:
|
||||
container_name: smart-city-chirpstack
|
||||
image: chirpstack/chirpstack:latest
|
||||
command: -c /etc/chirpstack
|
||||
restart: unless-stopped
|
||||
@@ -22,9 +23,10 @@ services:
|
||||
- smartcity-shared
|
||||
|
||||
chirpstack-rest-api:
|
||||
container_name: smart-city-chirpstack-rest-api
|
||||
image: chirpstack/chirpstack-rest-api:4
|
||||
restart: unless-stopped
|
||||
command: --server chirpstack:8080 --bind 0.0.0.0:8090 --insecure
|
||||
command: --server chirpstack:8080 --bind 0.0.0.0:8090 --insecure --cors-origins="*"
|
||||
depends_on:
|
||||
- chirpstack
|
||||
labels:
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
services:
|
||||
pulsar-distribution:
|
||||
container_name: smart-city-pulsar-distribution
|
||||
environment:
|
||||
- PULSAR_HOST=pulsar
|
||||
- PULSAR_PORT=6650
|
||||
|
||||
71
docker-compose.metabase.yml
Normal file
71
docker-compose.metabase.yml
Normal file
@@ -0,0 +1,71 @@
|
||||
# Metabase - BI Dashboard for Smart City Digital Twin
|
||||
# Usage: docker compose -f docker-compose.metabase.yml up -d
|
||||
# Access: https://metabase.digitribe.fr
|
||||
|
||||
version: '3.8'
|
||||
|
||||
networks:
|
||||
smartcity-shared:
|
||||
external: true
|
||||
traefik-public:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
metabase_data:
|
||||
name: smart-city-metabase-data
|
||||
|
||||
services:
|
||||
metabase-db:
|
||||
image: postgres:15-alpine
|
||||
container_name: metabase-postgres
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- smartcity-shared
|
||||
environment:
|
||||
POSTGRES_DB: metabase
|
||||
POSTGRES_USER: metabase
|
||||
POSTGRES_PASSWORD: Digitribe972
|
||||
volumes:
|
||||
- metabase_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U metabase"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
metabase:
|
||||
image: metabase/metabase:latest
|
||||
container_name: metabase-app
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- smartcity-shared
|
||||
- traefik-public
|
||||
depends_on:
|
||||
metabase-db:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
MB_DB_TYPE: postgres
|
||||
MB_DB_DBNAME: metabase
|
||||
MB_DB_PORT: 5432
|
||||
MB_DB_USER: metabase
|
||||
MB_DB_PASS: Digitribe972
|
||||
MB_DB_HOST: metabase-postgres
|
||||
MB_SITE_NAME: "Smart City Martinique"
|
||||
MB_SITE_URL: "https://metabase.digitribe.fr"
|
||||
MB_APPLICATION_DB: "file:/metabase-data/metabase.db"
|
||||
MB_ENABLE_PASSWORD_LOGIN: "true"
|
||||
MB_ADMIN_EMAIL: admin@digitribe.fr
|
||||
MB_ADMIN_PASSWORD: Digitribe972
|
||||
MB_JETTY_PORT: 3000
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.metabase.rule=Host(`metabase.digitribe.fr`)"
|
||||
- "traefik.http.routers.metabase.entrypoints=websecure"
|
||||
- "traefik.http.routers.metabase.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.metabase.loadbalancer.server.port=3000"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:3000/api/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 120s
|
||||
39
docker-compose.superset.yml
Normal file
39
docker-compose.superset.yml
Normal file
@@ -0,0 +1,39 @@
|
||||
# Apache Superset - Smart City Digital Twin
|
||||
# Uses official apache/superset Docker Hub image
|
||||
# Access: https://superset.digitribe.fr
|
||||
|
||||
networks:
|
||||
smartcity-shared:
|
||||
external: true
|
||||
traefik-public:
|
||||
external: true
|
||||
|
||||
volumes:
|
||||
superset_home:
|
||||
|
||||
services:
|
||||
superset:
|
||||
image: apache/superset:latest
|
||||
container_name: superset-app
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- smartcity-shared
|
||||
- traefik-public
|
||||
environment:
|
||||
# Use Superset's built-in SQLite for metadata (simplest setup)
|
||||
# For production, replace with PostgreSQL
|
||||
SUPERSET_SECRET_KEY: superset-secret-key-2024-change-me
|
||||
volumes:
|
||||
- superset_home:/app/superset_home
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.superset.rule=Host(`superset.digitribe.fr`)"
|
||||
- "traefik.http.routers.superset.entrypoints=websecure"
|
||||
- "traefik.http.routers.superset.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.superset.loadbalancer.server.port=8088"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:8088/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 15s
|
||||
retries: 5
|
||||
start_period: 120s
|
||||
@@ -11,6 +11,7 @@ version: "3.8"
|
||||
|
||||
services:
|
||||
tts-postgres:
|
||||
container_name: smart-city-tts-postgres
|
||||
image: postgres:14
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
@@ -22,6 +23,7 @@ services:
|
||||
networks:
|
||||
- smartcity-shared
|
||||
tts-redis:
|
||||
container_name: smart-city-tts-redis
|
||||
image: redis:7
|
||||
command: redis-server --appendonly yes
|
||||
restart: unless-stopped
|
||||
@@ -30,6 +32,7 @@ services:
|
||||
networks:
|
||||
- smartcity-shared
|
||||
tts-stack:
|
||||
container_name: smart-city-tts-stack
|
||||
image: thethingsnetwork/lorawan-stack:latest
|
||||
entrypoint: ttn-lw-stack -c /config/ttn-lw-stack-docker.yml
|
||||
command: start
|
||||
|
||||
@@ -24,28 +24,34 @@ services:
|
||||
- traefik-public
|
||||
- openremote_default
|
||||
environment:
|
||||
# MQTT Brokers - ALL enabled
|
||||
# MQTT Brokers
|
||||
- ENABLE_EMQX=1
|
||||
- ENABLE_MOSQUITTO=1
|
||||
- ENABLE_BUNKER=1
|
||||
- EMQX_HOST=emqx_emqx_1
|
||||
- EMQX_PORT=1883
|
||||
- MOSQUITTO_HOST=smart-city-digital-twin-martinique-mosquitto-1
|
||||
- MOSQUITTO_PORT=1883
|
||||
- BUNKERM_HOST=bunkerm-bunkerm-1
|
||||
- BUNKERM_PORT=1900
|
||||
# Context Brokers (DESACTIVE - tout passe par les IoT Agents via MQTT)
|
||||
- ENABLE_ORION=false
|
||||
- ENABLE_STELLIO=false
|
||||
- ENABLE_FROST=false
|
||||
# Databases
|
||||
- ENABLE_INFLUX=true
|
||||
# Databases (DESACTIVE - Telegraf s'occupe de InfluxDB)
|
||||
- ENABLE_INFLUX=false
|
||||
- INFLUX_URL=http://smart-city-influxdb:8086
|
||||
# OpenRemote
|
||||
- ENABLE_OPENREMOTE=1
|
||||
- OR_URL=http://openremote_manager_1:8080
|
||||
- ENABLE_OPENREMOTE=0
|
||||
- OR_MQTT_USER=admin
|
||||
- OR_MQTT_PASS=Digitribe972
|
||||
- OR_URL=http://openremote-manager:8080
|
||||
- OR_REALM=master
|
||||
- OR_TOKEN_REALM=master
|
||||
- OR_ADMIN_USER=admin
|
||||
- OR_ADMIN_PASS=Digitribe972
|
||||
- OR_CLIENT_SECRET=0oQjzTfiEELYmj5jFwT4iIuWUDtQDvVa
|
||||
# Pulsar (Disabled for demo stability)
|
||||
# Pulsar (Disabled for stability)
|
||||
- ENABLE_PULSAR=false
|
||||
# Redpanda (Disabled)
|
||||
- ENABLE_REDPANDA=false
|
||||
@@ -66,7 +72,7 @@ services:
|
||||
- traefik-public
|
||||
- openremote_default
|
||||
environment:
|
||||
- OR_URL=http://openremote_manager_1:8080
|
||||
- OR_URL=http://openremote-manager:8080
|
||||
- OR_ADMIN_USER=admin
|
||||
- OR_ADMIN_PASS=Digitribe972
|
||||
- OR_REALM=master
|
||||
|
||||
1
docs/dashboards/geosmart_city_dashboard_2026-05-26.json
Normal file
1
docs/dashboards/geosmart_city_dashboard_2026-05-26.json
Normal file
File diff suppressed because one or more lines are too long
@@ -1,7 +1,5 @@
|
||||
{
|
||||
"annotations": {
|
||||
"list": []
|
||||
},
|
||||
"annotations": {"list": []},
|
||||
"editable": true,
|
||||
"fiscalYearStartMonth": 0,
|
||||
"graphTooltip": 0,
|
||||
@@ -9,135 +7,166 @@
|
||||
"links": [],
|
||||
"panels": [
|
||||
{
|
||||
"title": "Air Quality (PM2.5)",
|
||||
"title": "Air Quality — PM2.5 (µg/m³)",
|
||||
"type": "timeseries",
|
||||
"datasource": {
|
||||
"type": "influxdb",
|
||||
"uid": "influxdb-smartcity"
|
||||
},
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\") |> range(start: v.timeRangeStart, stop:v.timeRangeStop) |> filter(fn: (r) => r[\"_measurement\"] == \"airquality\") |> filter(fn: (r) => r[\"_field\"] == \"pm25_ugm3\") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: \"mean\")"
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/airquality/)\n |> filter(fn: (r) => r[\"_field\"] == \"pm25_ugm3\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 0,
|
||||
"y": 0
|
||||
}
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 0}
|
||||
},
|
||||
{
|
||||
"title": "Traffic Flow (Vehicles)",
|
||||
"title": "Air Quality — NO2 (µg/m³)",
|
||||
"type": "timeseries",
|
||||
"datasource": {
|
||||
"type": "influxdb",
|
||||
"uid": "influxdb-smartcity"
|
||||
},
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\") |> range(start: v.timeRangeStart, stop:v.timeRangeStop) |> filter(fn: (r) => r[\"_measurement\"] == \"traffic\") |> filter(fn: (r) => r[\"_field\"] == \"vehicle_count\") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: \"mean\")"
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/airquality/)\n |> filter(fn: (r) => r[\"_field\"] == \"no2_ugm3\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 12,
|
||||
"y": 0
|
||||
}
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 0}
|
||||
},
|
||||
{
|
||||
"title": "Parking Occupancy (%)",
|
||||
"title": "Temperature (°C)",
|
||||
"type": "timeseries",
|
||||
"datasource": {
|
||||
"type": "influxdb",
|
||||
"uid": "influxdb-smartcity"
|
||||
},
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\") |> range(start: v.timeRangeStart, stop:v.timeRangeStop) |> filter(fn: (r) => r[\"_measurement\"] == \"parking\") |> filter(fn: (r) => r[\"_field\"] == \"occupancy_percent\") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: \"mean\")"
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"temperature_celsius\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 0,
|
||||
"y": 8
|
||||
}
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 8}
|
||||
},
|
||||
{
|
||||
"title": "Noise Levels (dB)",
|
||||
"title": "Humidity (%)",
|
||||
"type": "timeseries",
|
||||
"datasource": {
|
||||
"type": "influxdb",
|
||||
"uid": "influxdb-smartcity"
|
||||
},
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\") |> range(start: v.timeRangeStart, stop:v.timeRangeStop) |> filter(fn: (r) => r[\"_measurement\"] == \"noise\") |> filter(fn: (r) => r[\"_field\"] == \"noise_level_db\") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: \"mean\")"
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"humidity_percent\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 12,
|
||||
"y": 8
|
||||
}
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 8}
|
||||
},
|
||||
{
|
||||
"title": "Weather (Temperature \u00b0C)",
|
||||
"title": "Wind Speed (km/h)",
|
||||
"type": "timeseries",
|
||||
"datasource": {
|
||||
"type": "influxdb",
|
||||
"uid": "influxdb-smartcity"
|
||||
},
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\") |> range(start: v.timeRangeStart, stop:v.timeRangeStop) |> filter(fn: (r) => r[\"_measurement\"] == \"weather\") |> filter(fn: (r) => r[\"_field\"] == \"temperature_c\") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: \"mean\")"
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"wind_speed_kmh\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 0,
|
||||
"y": 16
|
||||
}
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 16}
|
||||
},
|
||||
{
|
||||
"title": "Light Levels",
|
||||
"title": "Rain (mm)",
|
||||
"type": "timeseries",
|
||||
"datasource": {
|
||||
"type": "influxdb",
|
||||
"uid": "influxdb-smartcity"
|
||||
},
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\") |> range(start: v.timeRangeStart, stop:v.timeRangeStop) |> filter(fn: (r) => r[\"_measurement\"] == \"light\") |> filter(fn: (r) => r[\"_field\"] == \"luminosity\") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: \"mean\")"
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"rain_mm\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {
|
||||
"h": 8,
|
||||
"w": 12,
|
||||
"x": 12,
|
||||
"y": 16
|
||||
}
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 16}
|
||||
},
|
||||
{
|
||||
"title": "Traffic — Vehicle Count",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/traffic/)\n |> filter(fn: (r) => r[\"_field\"] == \"vehicle_count\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 24}
|
||||
},
|
||||
{
|
||||
"title": "Traffic — Avg Speed (km/h)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/traffic/)\n |> filter(fn: (r) => r[\"_field\"] == \"average_speed_kmh\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 24}
|
||||
},
|
||||
{
|
||||
"title": "Parking — Available Spots",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/parking/)\n |> filter(fn: (r) => r[\"_field\"] == \"available_spots\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 32}
|
||||
},
|
||||
{
|
||||
"title": "Parking — Occupancy (%)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/parking/)\n |> filter(fn: (r) => r[\"_field\"] == \"occupancy_percent\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 32}
|
||||
},
|
||||
{
|
||||
"title": "Noise Level (dB)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/noise/)\n |> filter(fn: (r) => r[\"_field\"] == \"noise_level_db\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 40}
|
||||
},
|
||||
{
|
||||
"title": "Light — Brightness (lux)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/light/)\n |> filter(fn: (r) => r[\"_field\"] == \"brightness_lux\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 40}
|
||||
},
|
||||
{
|
||||
"title": "UV Index",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"uv_index\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 48}
|
||||
},
|
||||
{
|
||||
"title": "Pressure (hPa)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "uid": "influxdb-smartcity"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"pressure_hpa\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 48}
|
||||
}
|
||||
],
|
||||
"schemaVersion": 36,
|
||||
"style": "dark",
|
||||
"tags": [
|
||||
"smartcity",
|
||||
"martinique",
|
||||
"iot"
|
||||
],
|
||||
"templating": {
|
||||
"list": []
|
||||
},
|
||||
"time": {
|
||||
"from": "now-1h",
|
||||
"to": "now"
|
||||
},
|
||||
"title": "Smart City Digital Twin - Martinique",
|
||||
"tags": ["smartcity", "martinique", "iot"],
|
||||
"templating": {"list": []},
|
||||
"time": {"from": "now-1h", "to": "now"},
|
||||
"title": "Smart City Digital Twin — Martinique",
|
||||
"uid": "smartcity-martinique-v2",
|
||||
"version": 1
|
||||
}
|
||||
"version": 2
|
||||
}
|
||||
|
||||
@@ -2,13 +2,18 @@
|
||||
apiVersion: 1
|
||||
|
||||
datasources:
|
||||
- name: InfluxDB
|
||||
- name: influxdb-smartcity
|
||||
type: influxdb
|
||||
access: proxy
|
||||
url: http://docker-influxdb-1:8086
|
||||
database: iot_data
|
||||
user: admin
|
||||
password: digitribe972
|
||||
url: http://smart-city-influxdb:8086
|
||||
database: smartcity
|
||||
jsonData:
|
||||
version: Flux
|
||||
organization: digitribe
|
||||
defaultBucket: smartcity
|
||||
tlsSkipVerify: true
|
||||
secureJsonData:
|
||||
token: my-super-token
|
||||
isDefault: true
|
||||
readOnly: false
|
||||
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"annotations": {"list": []},
|
||||
"editable": true,
|
||||
"fiscalYearStartMonth": 0,
|
||||
"graphTooltip": 0,
|
||||
"links": [],
|
||||
"panels": [],
|
||||
"schemaVersion": 36,
|
||||
"style": "dark",
|
||||
"tags": ["smart-city"],
|
||||
"templating": {"list": []},
|
||||
"time": {"from": "now-24h", "to": "now"},
|
||||
"title": "Smart City Dashboards",
|
||||
"timezone": "Americas/Martinique",
|
||||
"uid": "smart-city-dashboards"
|
||||
}
|
||||
172
grafana/provisioning/dashboards/smart-city-dashboards.json.bak
Normal file
172
grafana/provisioning/dashboards/smart-city-dashboards.json.bak
Normal file
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"annotations": {"list": []},
|
||||
"editable": true,
|
||||
"fiscalYearStartMonth": 0,
|
||||
"graphTooltip": 0,
|
||||
"id": null,
|
||||
"links": [],
|
||||
"panels": [
|
||||
{
|
||||
"title": "Air Quality — PM2.5 (µg/m³)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/airquality/)\n |> filter(fn: (r) => r[\"_field\"] == \"pm25_ugm3\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 0}
|
||||
},
|
||||
{
|
||||
"title": "Air Quality — NO2 (µg/m³)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/airquality/)\n |> filter(fn: (r) => r[\"_field\"] == \"no2_ugm3\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 0}
|
||||
},
|
||||
{
|
||||
"title": "Temperature (°C)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"temperature_celsius\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 8}
|
||||
},
|
||||
{
|
||||
"title": "Humidity (%)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"humidity_percent\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 8}
|
||||
},
|
||||
{
|
||||
"title": "Wind Speed (km/h)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"wind_speed_kmh\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 16}
|
||||
},
|
||||
{
|
||||
"title": "Rain (mm)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"rain_mm\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 16}
|
||||
},
|
||||
{
|
||||
"title": "Traffic — Vehicle Count",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/traffic/)\n |> filter(fn: (r) => r[\"_field\"] == \"vehicle_count\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 24}
|
||||
},
|
||||
{
|
||||
"title": "Traffic — Avg Speed (km/h)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/traffic/)\n |> filter(fn: (r) => r[\"_field\"] == \"average_speed_kmh\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 24}
|
||||
},
|
||||
{
|
||||
"title": "Parking — Available Spots",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/parking/)\n |> filter(fn: (r) => r[\"_field\"] == \"available_spots\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 32}
|
||||
},
|
||||
{
|
||||
"title": "Parking — Occupancy (%)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/parking/)\n |> filter(fn: (r) => r[\"_field\"] == \"occupancy_percent\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 32}
|
||||
},
|
||||
{
|
||||
"title": "Noise Level (dB)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/noise/)\n |> filter(fn: (r) => r[\"_field\"] == \"noise_level_db\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 40}
|
||||
},
|
||||
{
|
||||
"title": "Light — Brightness (lux)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/light/)\n |> filter(fn: (r) => r[\"_field\"] == \"brightness_lux\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 40}
|
||||
},
|
||||
{
|
||||
"title": "UV Index",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"uv_index\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 48}
|
||||
},
|
||||
{
|
||||
"title": "Pressure (hPa)",
|
||||
"type": "timeseries",
|
||||
"datasource": {"type": "influxdb", "name": "Influxdb-v2"},
|
||||
"targets": [
|
||||
{
|
||||
"query": "from(bucket:\"smartcity\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"topic\"] =~ /smartcity\\/weather/)\n |> filter(fn: (r) => r[\"_field\"] == \"pressure_hpa\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")"
|
||||
}
|
||||
],
|
||||
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 48}
|
||||
}
|
||||
],
|
||||
"schemaVersion": 36,
|
||||
"style": "dark",
|
||||
"tags": ["smartcity", "martinique", "iot"],
|
||||
"templating": {"list": []},
|
||||
"time": {"from": "now-1h", "to": "now"},
|
||||
"title": "Smart City Digital Twin — Martinique",
|
||||
"uid": "smartcity-martinique-v2",
|
||||
"version": 2
|
||||
}
|
||||
@@ -1,9 +1,8 @@
|
||||
# Grafana datasources - Smart City Digital Twin Martinique
|
||||
# Each datasource is editable and uses the container DNS name in smartcity-shared network
|
||||
apiVersion: 1
|
||||
|
||||
datasources:
|
||||
# ── InfluxDB v2 (time-series IoT data) ──────────────────────────────────────
|
||||
# InfluxDB v2 (time-series IoT data)
|
||||
- name: InfluxDB-v2
|
||||
type: influxdb
|
||||
access: proxy
|
||||
@@ -13,12 +12,12 @@ datasources:
|
||||
jsonData:
|
||||
version: Flux
|
||||
organization: digitribe
|
||||
defaultBucket: iot_data
|
||||
defaultBucket: smartcity
|
||||
tlsSkipVerify: true
|
||||
secureJsonData:
|
||||
token: my-super-secret-admin-token
|
||||
token: my-super-token
|
||||
|
||||
# ── FIWARE Orion-LD (NGSI-LD context broker) ────────────────────────────────
|
||||
# Requires grafana-simple-json-datasource plugin
|
||||
# FIWARE Orion-LD
|
||||
- name: FIWARE Orion
|
||||
type: grafana-simple-json-datasource
|
||||
access: proxy
|
||||
@@ -28,8 +27,7 @@ datasources:
|
||||
queryURLTemplate: "/ngsi-ld/v1/entities?type={{type}}"
|
||||
method: GET
|
||||
|
||||
# ── GeoServer WMS (spatial data) ────────────────────────────────────────────
|
||||
# GeoServer is an external service reachable via its container name
|
||||
# GeoServer WMS
|
||||
- name: GeoServer WMS
|
||||
type: grafana-simple-json-datasource
|
||||
access: proxy
|
||||
@@ -39,8 +37,7 @@ datasources:
|
||||
queryURLTemplate: "/geoserver/wfs?service=WFS&version=2.0&request=GetFeature&typeName={{type}}"
|
||||
method: GET
|
||||
|
||||
# ── FROST-Server (SensorThings API) ──────────────────────────────────────────
|
||||
# Requires grafana-simple-json-datasource plugin
|
||||
# FROST-Server
|
||||
- name: FROST-Server
|
||||
type: grafana-simple-json-datasource
|
||||
access: proxy
|
||||
|
||||
14
scripts/bunkerm-init.sh
Executable file
14
scripts/bunkerm-init.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
# BunkerM init script - create MQTT user and start services
|
||||
set -e
|
||||
|
||||
# Create MQTT user if password file is empty or doesn't exist
|
||||
if [ ! -s /etc/mosquitto/mosquitto_passwd ]; then
|
||||
echo "Creating bunker MQTT user..."
|
||||
mosquitto_passwd -b /etc/mosquitto/mosquitto_passwd bunker bunker 2>/dev/null || true
|
||||
chown root:root /etc/mosquitto/mosquitto_passwd 2>/dev/null || true
|
||||
chmod 0700 /etc/mosquitto/mosquitto_passwd 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Execute the original entrypoint
|
||||
exec /bin/sh -c '/docker-entrypoint.sh'
|
||||
48
session_resume_2026-05-25.md
Normal file
48
session_resume_2026-05-25.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# Session Resume - 2026-05-25
|
||||
|
||||
## Objectifs
|
||||
Diagnostiquer et corriger : OpenRemote Bad Gateway + Grafana dashboard sans données.
|
||||
|
||||
## Diagnostic effectué
|
||||
|
||||
### Problème 1 : OpenRemote Bad Gateway (CRITIQUE)
|
||||
- **Cause** : `timescaledb_toolkit` extension PostgreSQL manquante
|
||||
- Image `timescale/timescaledb:latest-pg15` (Alpine) n'inclut PAS `timescaledb_toolkit`
|
||||
- Flyway tente de créer l'extension au démarrage → échoue → Manager crash en boucle
|
||||
- **Action** : Changement d'image PostgreSQL → `timescale/timescaledb-ha:pg15` (Debian, inclut timescaledb_toolkit)
|
||||
- **Statut** : Image téléchargée (2.25GB), container PG recréé (volume supprimé et recréé)
|
||||
- **À reprendre** : `cd /home/eric/openremote && docker-compose up -d postgresql` puis `docker-compose up -d`
|
||||
|
||||
### Problème 2 : Telegraf crash en boucle (CORRIGÉ)
|
||||
- **Cause 1** : Noms de containers incorrects dans `telegraf.conf`
|
||||
- `smart-city-mosquitto` → devrait être `smart-city-digital-twin-martinique-mosquitto-1`
|
||||
- `bunkerm_bunkerm_1` → devrait être `bunkerm-bunkerm-1`
|
||||
- **Cause 2** : Consumer BunkerM avec auth bloquait tout Telegraf ("not Authorized")
|
||||
- **Correction** : Modifié `telegraf.conf` (noms corrigés + BunkerM commenté)
|
||||
- **Statut** : Telegraf UP, consumers EMQX + Mosquitto connectés sans erreur
|
||||
|
||||
### Problème 3 : Dashboard Grafana sans données
|
||||
- Le simulateur envoie bien les données vers EMQX (logs confirment)
|
||||
- Le Mosquitto du projet est en fait celui de ChirpStack (même réseau, même config)
|
||||
- Telegraf fixé mais pas encore vérifié l'écriture réussie dans InfluxDB
|
||||
- Pipeline : Simulateur → MQTT (EMQX + Mosquitto) → Telegraf → InfluxDB → Grafana
|
||||
|
||||
## Fichiers modifiés
|
||||
- `/home/eric/smart-city-digital-twin-martinique/telegraf.conf` — noms containers corrigés + BunkerM commenté
|
||||
- `/home/eric/openremote/docker-compose.yml` — image PG changée pour timescaledb-ha:pg15
|
||||
- `/home/eric/TODO.md` — à mettre à jour
|
||||
- `/home/eric/smart-city-digital-twin-martinique/TODO.md` — à mettre à jour
|
||||
|
||||
## Containers critiques actuels
|
||||
- `openremote-postgresql` — RECREÉ avec image timescaledb-ha:pg15 (health: starting)
|
||||
- `openremote-keycloak` — Up 25h (healthy)
|
||||
- `openremote-manager` — Up mais health: starting (attendre PG ready)
|
||||
- `smart-city-telegraf` — UP, connecté à EMQX + Mosquitto
|
||||
- `smart-city-simulator` — UP, publie 60 capteurs (MQTT OK: 1/2)
|
||||
|
||||
## Prochaines étapes
|
||||
1. Reprendre OpenRemote : vérifier que le PG est healthy puis le Manager
|
||||
2. Vérifier Telegraf → InfluxDB : `docker exec smart-city-influxdb influx query 'from(bucket:"smartcity") |> range(start:-5m) |> limit(n:5)' --token my-super-token --org digitribe`
|
||||
3. Vérifier Grafana dashboard smart city
|
||||
4. BunkerM : vérifier le port (1883 vs 1900) et réactiver dans Telegraf
|
||||
5. Commit Gitea + push
|
||||
68
session_resume_2026-05-26.md
Normal file
68
session_resume_2026-05-26.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# Session Resume - 2026-05-26
|
||||
|
||||
## Résumé de la session
|
||||
|
||||
### Problème initial
|
||||
- La gateway avait planté, reprise du projet Smart City Digital Twin Martinique
|
||||
|
||||
### Tâches réalisées
|
||||
|
||||
#### 1. Dashboard Grafana GeoMap en temps réel ✅
|
||||
- **URL** : `https://grafana-sct.digitribe.fr/d/geosmart-city-2026/smart-city-geomap-temps-reel`
|
||||
- **Dashboard UID** : `geosmart-city-2026`
|
||||
- **Composants** :
|
||||
- Panel **Geomap** (carte des capteurs Martinique) via PostGIS
|
||||
- Panel **Time-series** NO₂ et humidité via InfluxDB
|
||||
- Panels **Gauge** pour batterie, température, O₃, CO
|
||||
- Rafraîchissement : 10s
|
||||
|
||||
#### 2. Sources de données Grafana configurées ✅
|
||||
- **PostGIS-SmartCity** (ID=30, UID=`a9b60854-60c5-4c86-bb0b-d98852df0c89`)
|
||||
- Hôte : `postgis-smartcity:5432`
|
||||
- Base : `smartcity`
|
||||
- User : `grafana` (accès SELECT uniquement, trust auth depuis réseau Docker)
|
||||
- Connecté au réseau `smartcity-shared`
|
||||
- **InfluxDB-SmartCity-Correct** (UID=`dd1bfc24-de9d-4c23-8a3c-151d153f8169`)
|
||||
- Bucket : `smartcity`, Org : `digitribe`
|
||||
- Données : `mqtt_consumer` mesure avec champs `no2_ugm3`, `co_mgm3`, `humidity_percent`, `o3_ugm3`, `battery_level`, `temperature_c`
|
||||
- Topics : `smartcity/airquality/1` à `smartcity/airquality/10`
|
||||
|
||||
#### 3. PostGIS - Configuration ✅
|
||||
- Utilisateur `grafana` créé avec accès SELECT sur toutes les tables
|
||||
- `pg_hba.conf` modifié pour accepter les connexions `trust` depuis les réseaux Docker
|
||||
- Réseau `connecté au container Grafana (`docker network connect smartcity-shared grafana_stack-grafana-1`)
|
||||
- Table `public.sensors` contient 30+ capteurs avec coordonnées (lat/lon en SRID 4326)
|
||||
|
||||
#### 4. Geomap Plugin ✅
|
||||
- Plugin `geomap` déjà installé et activé dans Grafana
|
||||
- Carte centrée sur Fort-de-France (lat=14.6164, lon=-61.07, zoom=12)
|
||||
|
||||
#### 5. ChirpStack - Préparation ⚠️
|
||||
- REST API : ajouté flag `--cors-origins="*"` dans docker-compose
|
||||
- Broker MQTT de ChirpStack (`chirpstack-mosquitto-1:1883`) accessible depuis le simulateur
|
||||
- **À faire** : Créer application/devices via UI ChirpStack + configurer le simulateur
|
||||
|
||||
#### 6. Git ✅
|
||||
- Commit `7643d88` : "Add GeoMap dashboard + ChirpStack REST API config"
|
||||
- Push en attente (Gitea 502)
|
||||
|
||||
### Prochaines étapes
|
||||
1. **ChirpStack** : Créer application et devices via UI (`https://chirpstack.digitribe.fr`)
|
||||
2. **Simulateur** : Configurer l'envoi de données vers ChirpStack (MQTT ou API REST)
|
||||
3. **Gitea** : Pusher le commit quand le serveur sera accessible
|
||||
4. **BemServer** : Déployer via docker-compose (repo déjà cloné dans `~/smart-city-digital-twin-martinique/bemserver/`)
|
||||
|
||||
### Commandes utiles
|
||||
```bash
|
||||
# Accéder au dashboard Grafana
|
||||
open https://grafana-sct.digitribe.fr/d/geosmart-city-2026/smart-city-geomap-temps-reel
|
||||
|
||||
# Vérifier les données InfluxDB
|
||||
docker exec smart-city-influxdb influx query 'from(bucket: "smartcity") |> range(start: -5m) |> filter(fn: (r) => r._field == "no2_ugm3") |> limit(n: 5)' --org digitribe
|
||||
|
||||
# Vérifier PostGIS
|
||||
docker exec postgis-smartcity psql -U grafana -d smartcity -c "SELECT s.name, ST_Y(s.location::geometry), ST_X(s.location::geometry) FROM public.sensors s LIMIT 5;"
|
||||
|
||||
# Pousser le commit quand Gitea est up
|
||||
cd ~/smart-city-digital-twin-martinique && git push
|
||||
```
|
||||
106
simulator.py
106
simulator.py
@@ -646,7 +646,7 @@ def publish_bunkerm(sid: str, sensor: dict, values: dict) -> bool:
|
||||
import base64, http.cookiejar, urllib.request, json
|
||||
from datetime import datetime, timezone
|
||||
|
||||
host = "bunkerm_bunkerm_1:2000"
|
||||
host = "bunkerm-bunkerm-1:2000"
|
||||
login_url = f"http://{host}/login"
|
||||
data_url = f"http://{host}/api/sensors/data"
|
||||
|
||||
@@ -1083,8 +1083,9 @@ def main():
|
||||
print("║ Smart City Simulator — Martinique ║")
|
||||
print("╚══════════════════════════════════════════════════╝")
|
||||
print(f"[CFG] Capteurs: {len(SENSORS)} | Intervalle: {INTERVAL}s")
|
||||
# print(f"[CFG] Orion-LD: {ENABLE_ORION} | Stellio: {ENABLE_STELLIO} | FROST: {ENABLE_FROST}")
|
||||
print(f"[CFG] InfluxDB: {ENABLE_INFLUX} | Pulsar: {ENABLE_PULSAR} | Redpanda: {ENABLE_REDPANDA}")
|
||||
print(f"[CFG] FROST: {ENABLE_FROST} | OpenRemote: {ENABLE_OPENREMOTE}")
|
||||
print(f"[CFG] MQTT brokers: EMQX={os.getenv('ENABLE_EMQX','1')} Mosquitto={os.getenv('ENABLE_MOSQUITTO','1')}")
|
||||
|
||||
# --- Démarrer le serveur Prometheus ---
|
||||
_start_metrics_server()
|
||||
@@ -1094,16 +1095,17 @@ def main():
|
||||
sensors_total.labels(sensor_type=stype).set(count)
|
||||
up.set(1)
|
||||
|
||||
# Init connectivity checks
|
||||
# Init connectivity checks (only if enabled)
|
||||
if ENABLE_PULSAR:
|
||||
_init_pulsar()
|
||||
# Test immédiat
|
||||
print(f" 🌪️ DEBUG: Test Pulsar direct...", flush=True)
|
||||
test_payload = {"type": "test", "value": 123}
|
||||
test_result = publish_pulsar("test_001", {"type": "air-quality"}, test_payload)
|
||||
print(f" 🌪️ DEBUG: Test Pulsar result: {test_result}", flush=True)
|
||||
try:
|
||||
_init_pulsar()
|
||||
except Exception as e:
|
||||
print(f"[PULSAR] ⚠️ Init failed: {e}")
|
||||
if ENABLE_REDPANDA:
|
||||
_init_redpanda()
|
||||
try:
|
||||
_init_redpanda()
|
||||
except Exception as e:
|
||||
print(f"[REDPANDA] ⚠️ Init failed: {e}")
|
||||
|
||||
mqtt_client = MultiMQTT()
|
||||
|
||||
@@ -1124,19 +1126,13 @@ def main():
|
||||
|
||||
for sid, sensor in SENSORS.items():
|
||||
stype = sensor["type"]
|
||||
# Utiliser l'index du capteur dans FIXED_LOCATIONS (1-5) pour correspondre aux agents OpenRemote
|
||||
# Le sid est formaté comme {stype}_{counter:03d} avec counter global
|
||||
# On extrait l'index du capteur depuis le sid (derniers chiffres)
|
||||
sensor_num = int(sid.split("_")[1])
|
||||
# Calculer l'index 1-5 basé sur la position dans le type
|
||||
# traffic: 0-9, airquality: 10-19, parking: 20-29, noise: 30-39, weather: 40-49, light: 50-59
|
||||
type_offsets = {"traffic": 0, "airquality": 10, "parking": 20, "noise": 30, "weather": 40, "light": 50}
|
||||
type_offset = type_offsets.get(stype, 0)
|
||||
sensor_index = sensor_num - type_offset + 1 # 1-indexed
|
||||
sensor_index = sensor_num - type_offset + 1
|
||||
topic = f"smartcity/{stype}/{sensor_index}"
|
||||
|
||||
# --- Payload MQTT (ATTRIBUTES ONLY - pas de id/type/lat/lon !)
|
||||
# # L'IoT Agent n'attend que les readings, pas le body complet
|
||||
# --- Payload MQTT ---
|
||||
ranges = SENSOR_RANGES.get(stype, {})
|
||||
payload_mqtt = {
|
||||
"timestamp": datetime.now(timezone.utc).isoformat(),
|
||||
@@ -1158,77 +1154,19 @@ def main():
|
||||
if ok_mqtt:
|
||||
print(f" 📤 {topic} → {','.join(ok_mqtt)}")
|
||||
|
||||
# # --- IoT-Agent (via EMQX) ---
|
||||
# if ENABLE_IOT_AGENT:
|
||||
# ok_iot = mqtt_client.publish_iot_agent(sid, payload_mqtt, sensor_type=stype)
|
||||
# print(f" 🤖 IoT-Agent: {'✅' if ok_iot else '❌'}")
|
||||
|
||||
# Extraire les valeurs pour OpenRemote
|
||||
or_values = {}
|
||||
for field, val_range in ranges.items():
|
||||
if isinstance(val_range, tuple) and len(val_range) == 2:
|
||||
lo, hi = val_range
|
||||
if isinstance(lo, (int, float)):
|
||||
or_values[field] = round(random.uniform(lo, hi), 1)
|
||||
|
||||
# --- OpenRemote REST (round-robin: seulement quelques assets/itération) ---
|
||||
# --- OpenRemote REST (round-robin) ---
|
||||
if ENABLE_OPENREMOTE:
|
||||
# Mettre à jour seulement ~5 assets par itération pour éviter timeups
|
||||
# sensor_num % 12 == iteration % 12 → chaque asset est mis à jour toutes les ~60s
|
||||
if sensor_num % 12 == iteration % 12:
|
||||
or_values = {}
|
||||
for field, val_range in ranges.items():
|
||||
if isinstance(val_range, tuple) and len(val_range) == 2:
|
||||
lo, hi = val_range
|
||||
if isinstance(lo, (int, float)):
|
||||
or_values[field] = round(random.uniform(lo, hi), 1)
|
||||
ok_or = publish_openremote(sid, sensor, or_values)
|
||||
print(f" 🏠 OpenRemote: {'✅' if ok_or else '⚠️ skipped'}")
|
||||
# else: skip OR update this iteration (asset updated in previous cycle)
|
||||
|
||||
# # --- Orion-LD --- (DÉSACTIVÉ: tout passe par les IoT-Agents MQTT)
|
||||
# # if ENABLE_ORION:
|
||||
# # ok_or = publish_orion(sid, sensor)
|
||||
# # print(f" 🌐 Orion-LD: {'✅' if ok_or else '⚠️ skipped'}")
|
||||
|
||||
# # --- Stellio --- (DÉSACTIVÉ: tout passe par les IoT-Agents MQTT)
|
||||
# # if ENABLE_STELLIO:
|
||||
# # ok_st = publish_stellio(sid, sensor)
|
||||
# # print(f" 🏢 Stellio: {'✅' if ok_st else '❌'}")
|
||||
|
||||
# --- FROST ---
|
||||
if ENABLE_FROST:
|
||||
ranges2 = SENSOR_RANGES.get(stype, {})
|
||||
for field, val_range in ranges2.items():
|
||||
if isinstance(val_range, tuple) and len(val_range) == 2:
|
||||
lo, hi = val_range
|
||||
if isinstance(lo, (int, float)):
|
||||
val = round(random.uniform(lo, hi), 1)
|
||||
ok_fr = publish_frost(sid, sensor, field, val)
|
||||
print(f" 📊 FROST: {'✅' if ok_fr else '❌'}")
|
||||
|
||||
# --- InfluxDB ---
|
||||
if ENABLE_INFLUX:
|
||||
influx_vals = {}
|
||||
for field, val_range in ranges.items():
|
||||
if isinstance(val_range, tuple) and len(val_range) == 2:
|
||||
lo, hi = val_range
|
||||
if isinstance(lo, (int, float)):
|
||||
influx_vals[field] = round(random.uniform(lo, hi), 1)
|
||||
ok_influx = publish_influx(sid, sensor, influx_vals)
|
||||
print(f" 📈 InfluxDB: {'✅' if ok_influx else '❌'}")
|
||||
|
||||
# --- Pulsar (HTTP REST) ---
|
||||
if ENABLE_PULSAR:
|
||||
print(f" 🌪️ DEBUG: calling publish_pulsar for {sid}, payload_mqtt exists: {bool(locals().get('payload_mqtt'))}", flush=True)
|
||||
ok_pulsar = publish_pulsar(sid, sensor, payload_mqtt)
|
||||
print(f" 🌪️ Pulsar: {'✅' if ok_pulsar else '❌'}")
|
||||
|
||||
# --- Redpanda (Kafka REST Proxy) ---
|
||||
if ENABLE_REDPANDA:
|
||||
ok_redpanda = publish_redpanda(sid, sensor, payload_mqtt)
|
||||
print(f" 🐟 Redpanda: {'✅' if ok_redpanda else '❌'}")
|
||||
|
||||
# --- BunkerM HTTP ---
|
||||
if os.getenv("BUNKERM_HTTP", "0") == "1":
|
||||
ok_bunkerm = publish_bunkerm(sid, sensor, payload_mqtt)
|
||||
print(f" 📦 BunkerM: {'✅' if ok_bunkerm else '❌'}")
|
||||
|
||||
print(f"[SIM] ✅ {len(SENSORS)} capteurs | MQTT OK: {sum(mqtt_client.ok.values())}/{len(mqtt_client.clients)} | OR: {ENABLE_OPENREMOTE}")
|
||||
print(f"[SIM] ✅ {len(SENSORS)} capteurs | MQTT OK: {sum(mqtt_client.ok.values())}/{len(mqtt_client.clients)}")
|
||||
|
||||
try:
|
||||
time.sleep(INTERVAL)
|
||||
|
||||
264
snapshots/2026-05-23/ARCHITECTURE.md
Normal file
264
snapshots/2026-05-23/ARCHITECTURE.md
Normal file
@@ -0,0 +1,264 @@
|
||||
# Smart City Digital Twin Martinique — Architecture des Stacks
|
||||
|
||||
> Snapshot: 2026-05-23 12:00
|
||||
> Total: 117 containers / 26 stacks
|
||||
|
||||
## 🌐 Infrastructure Réseau
|
||||
|
||||
| Réseau | Driver | Usage |
|
||||
|--------|--------|-------|
|
||||
| traefik | bridge | Reverse proxy principal |
|
||||
| traefik-public | bridge |Services exposés |
|
||||
| smartcity-shared | bridge | Réseau partagé smart city |
|
||||
| mainflux-network | bridge | Stack Mainflux |
|
||||
| emqx_default | bridge | Broker EMQX |
|
||||
| contexus-iot-network | bridge | Stack Contexus |
|
||||
| fiware-gis-quickstart_fiware | bridge | FIWARE |
|
||||
| mapstore2_mapstore-network | bridge | MapStore |
|
||||
| honcho_default | bridge | Honcho |
|
||||
| digital-twin_digital-twin | bridge | NodeRed + Connector |
|
||||
| openremote_default | bridge | OpenRemote (actuellement DOWN) |
|
||||
| docker_default | bridge | Stack principale |
|
||||
| bridge | bridge | Défaut Docker |
|
||||
|
||||
---
|
||||
|
||||
## 📦 Stacks Détaillées
|
||||
|
||||
### 1. TRAFICKO (1 container)
|
||||
| Service | Image | Ports |
|
||||
|---------|-------|-------|
|
||||
| traefik | traefik:v3.1 | 80, 443, 8404 |
|
||||
|
||||
### 2. SMART-CITY-CORE (17 containers) ⚠️ 7 issues
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| smart-city-simulator | smart-city-digital-twin-martinique-simulator | 🔴 CRASH (exit 137, 896 restarts) | 8081 |
|
||||
| smart-city-telegraf | telegraf:1.28 | 🔴 Restart boucle | - |
|
||||
| smart-city-influxdb | influxdb:2.7-alpine | ✅ Healthy | 8086 |
|
||||
| smart-city-grafana | grafana/grafana:10.2.0 | ✅ Up | 3001 |
|
||||
| smart-city-loki | grafana/loki:latest | ✅ Up | 3100 |
|
||||
| smart-city-promtail | grafana/promtail:latest | ✅ Up | - |
|
||||
| smart-city-kepler | smart-city-kepler:latest | ✅ Up | 80, 8080 |
|
||||
| smart-city-redpanda-console | redpandadata/console:v2.5.0 | ❌ Restart | - |
|
||||
|
||||
### 3. SMART-CITY-IOT (5 containers)
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| smart-city-ditto-gateway | eclipse/ditto-gateway:latest | ✅ Up | 8080 |
|
||||
| smart-city-ditto-policies | eclipse/ditto-policies:latest | ✅ Up | 8080 |
|
||||
| smart-city-ditto-mongodb | mongo:6 | ✅ Up | 27017 |
|
||||
| smart-city-digital-twin-martinique-mosquitto-1 | eclipse-mosquitto:2 | ✅ Up | 1883 |
|
||||
| smart-city-digital-twin-martinique-redis-1 | redis:7-alpine | ✅ Up | 6379 |
|
||||
|
||||
### 4. MAINFLUX (39 containers) ⚠️ 1 issue
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| mainfluxlabs-ui | mainfluxlabs/ui:v0.36.1 | ✅ Up | 3000 |
|
||||
| mainfluxlabs-users | mainfluxlabs/users:v0.36.1 | ✅ Up | 8180, 8184 |
|
||||
| mainfluxlabs-auth | mainfluxlabs/auth:v0.36.1 | ✅ Up | 8181, 8189 |
|
||||
| mainfluxlabs-things | mainfluxlabs/things:v0.36.1 | ✅ Up | 8182-8183, 8989 |
|
||||
| mainfluxlabs-mqtt | mainfluxlabs/mqtt:v0.36.1 | ✅ Up | - |
|
||||
| mainfluxlabs-http | mainfluxlabs/http:v0.36.1 | ✅ Up | 8185 |
|
||||
| mainfluxlabs-ws | mainfluxlabs/ws:v0.36.1 | ✅ Up | 8190 |
|
||||
| mainfluxlabs-coap | mainfluxlabs/coap:v0.36.1 | ✅ Up | 5683 |
|
||||
| mainfluxlabs-modbus | mainfluxlabs/modbus:v0.36.1 | ✅ Up | 9028 |
|
||||
| mainfluxlabs-broker | nats:2.2.4-alpine | ✅ Up | 4222, 8222 |
|
||||
| mainfluxlabs-mosquitto | eclipse-mosquitto:2.0 | ✅ Up | 1883 |
|
||||
| + 28 autres services DB/writer/reader/notifier | | ✅ Up | |
|
||||
|
||||
### 5. THINGSBOARD (14 containers) ⚠️ 7 issues
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| docker_tb-web-ui1_1 | thingsboard/tb-web-ui:latest | ✅ Up | 32769→8080 |
|
||||
| docker_tb-web-ui2_1 | thingsboard/tb-web-ui:latest | ✅ Up | 32770→8080 |
|
||||
| docker_tb-js-executor_1-10 | thingsboard/tb-js-executor:latest | ⚠️ Redémarrages | - |
|
||||
| docker_zookeeper_1 | zookeeper:3.8.1 | ✅ Up | 2181, 32768 |
|
||||
| docker_tb-rule-engine1_1 | - | ⚠️ Created (pas démarré) | - |
|
||||
| docker_tb-rule-engine2_1 | - | ⚠️ Created (pas démarré) | - |
|
||||
| thingsboard-rabbitmq | rabbitmq:3.12-management | ✅ Healthy | 4369, 5671-5672 |
|
||||
| thingsboard-postgres | postgres:15-alpine | ✅ Healthy | 5432 |
|
||||
|
||||
### 6. MAPSTORE (3 containers) ⚠️ 502 via Traefik
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| mapstore-proxy | nginx | ✅ Up | 80 |
|
||||
| mapstore-app | geosolutionsit/mapstore2:latest | ✅ Up | 8080 |
|
||||
| mapstore-postgres | geosolutions-mapstore/postgis | ✅ Healthy | 5432 |
|
||||
|
||||
### 7. GEOSERVER (1 container)
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| geoserver_stack-geoserver-1 | oscarfonts/geoserver:2.25.2 | ✅ Healthy | 8080 |
|
||||
|
||||
PostGIS dédié :
|
||||
| postgis-smartcity | postgis/postgis:15-3.4 | ✅ Healthy | 5433 |
|
||||
|
||||
### 8. CONTXUS (3 containers) ⚠️ unhealthy
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| contexus-app | contexusio/contexus:latest | ⚠️ Unhealthy | 15000 |
|
||||
| contexus-postgres | postgres:16 | ✅ Healthy | 5432 |
|
||||
| contexus-redis | redis:7-alpine | ✅ Healthy | 6379 |
|
||||
|
||||
### 9. CHIRPSTACK (3 containers)
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| smart-city-digital-twin-martinique-chirpstack-1 | chirpstack/chirpstack:latest | ✅ Up | - |
|
||||
| chirpstack/chirpstack-rest-api:4 | chirpstack/chirpstack-rest-api:4 | ✅ Up | - |
|
||||
| chirpstack/chirpstack-gateway-bridge:4 | chirpstack/chirpstack-gateway-bridge:4 | ✅ Up | 1700/udp |
|
||||
| chirpstack-mosquitto | eclipse-mosquitto:2 | ✅ Up | 1883 |
|
||||
| chirpstack-redis | redis:7-alpine | ✅ Up | 6379 |
|
||||
| chirpstack-postgres | postgres:14-alpine | ✅ Up | 5432 |
|
||||
|
||||
### 10. FIWARE (3 containers)
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| fiware-gis-quickstart-orion-1 | quay.io/fiware/orion-ld | ✅ Healthy | 2026→1026 |
|
||||
| fiware-gis-quickstart-orionproxy-1 | fiware-gis-quickstart-orionproxy | ✅ Up | 1026→80 |
|
||||
| fiware-gis-quickstart-mongo-db-1 | mongo:4.2 | ✅ Up | 27017 |
|
||||
|
||||
### 11. FROST (2 containers)
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| frost_allinone-web-1 | fraunhoferiosb/frost-server:latest | ✅ Up | 1883, 8089, 8090→8080 |
|
||||
| frost_http-web-1 | fraunhoferiosb/frost-server-http:latest | ✅ Up | 8080 |
|
||||
|
||||
### 12. EMQX (1 container)
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| emqx_emqx_1 | emqx/emqx:latest | ✅ Up | 1883, 8883, 18083, 8081, 8083-8084, 11883, 38083 |
|
||||
|
||||
### 13. STELLIO (5 containers) ⚠️ 4 down
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| stellio-api-gateway | stellio/stellio-api-gateway:latest-dev | ✅ Up | 8080 |
|
||||
| stellio-search-service | - | ❌ Exited | - |
|
||||
| stellio-subscription-service | - | ❌ Exited | - |
|
||||
| stellio-kafka | - | ❌ Exited | - |
|
||||
| stellio-postgres | - | ❌ Exited | - |
|
||||
|
||||
### 14. DIGITAL-TWIN (2 containers)
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| digital-twin-nodered | nodered/node-red:3.1 | ✅ Healthy | 1880 |
|
||||
| digital-twin-connector | python:3.11-slim | ✅ Up | - |
|
||||
|
||||
### 15. HONCHO (4 containers) ⚠️ API restart
|
||||
| Service | Image | Status | Ports |
|
||||
|---------|-------|--------|-------|
|
||||
| honcho-api-1 | honcho:latest | ⚠️ Restart | - |
|
||||
| honcho-deriver-1 | honcho-deriver | ✅ Healthy | 8000 |
|
||||
| honcho-grafana-1 | grafana/grafana:11.4.0 | ✅ Healthy | 3088 |
|
||||
| honcho-prometheus-1 | prom/prometheus:v3.2.1 | ✅ Healthy | 9091 |
|
||||
|
||||
### 16. Autres stacks
|
||||
| Stack | Containers | Statut |
|
||||
|-------|------------|--------|
|
||||
| bunkerm | 1 | ⚠️ Unhealthy |
|
||||
| phpipam | 2 | ✅ Up |
|
||||
| gitea | 1 | ✅ Up |
|
||||
| localai | 2 | ⚠️ Orphaned duplicate |
|
||||
| agent-gateway | 1 | ✅ Up |
|
||||
| yaade | 1 | ✅ Up |
|
||||
| community-tools (docker-exporter) | 1 | ✅ Up |
|
||||
|
||||
---
|
||||
|
||||
## 🔌 Brokers MQTT (identifiés)
|
||||
|
||||
| Broker | Container | Port | Stack |
|
||||
|--------|-----------|------|-------|
|
||||
| Mosquitto (principal) | smart-city-digital-twin-martinique-mosquitto-1 | 1883 | smart-city-iot |
|
||||
| Mosquitto (ChirpStack) | chirpstack-mosquitto-1 | 1883 | chirpstack |
|
||||
| Mosquitto (Mainflux) | mainfluxlabs-mosquitto | 1883 | mainflux |
|
||||
| MQTT Bridge (Mainflux) | mainfluxlabs-mqtt | - | mainflux |
|
||||
| EMQX | emqx_emqx_1 | 1883, 8883, 11883 | emqx |
|
||||
| RabbitMQ | thingsboard-rabbitmq | 5672 | thingsboard |
|
||||
| RabbitMQ (OpenRemote) | (dans stack openremote - DOWN) | 5672 | openremote |
|
||||
| NATS | mainfluxlabs-broker | 4222 | mainflux |
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Flux de Données Validés
|
||||
|
||||
```
|
||||
Simulateur IoT
|
||||
│
|
||||
├──► Mosquitto (principal:1883)
|
||||
│ │
|
||||
│ ├──► Telegraf ──► InfluxDB (8086) ──► Grafana (3001)
|
||||
│ │
|
||||
│ ├──► Mainflux MQTT ──► Mainflux Broker (NATS) ──► Things/Users/Auth
|
||||
│ │
|
||||
│ └──► IoT-Agent FIWARE ──► Orion-LD (1026) ──► QuantumLeap ──► CrateDB
|
||||
│ │
|
||||
│ ▼
|
||||
│ Grafana
|
||||
│
|
||||
├──► EMQX (1883)
|
||||
│ │
|
||||
│ └──► Contexus MQTT Driver ──► Contexus Devices
|
||||
│
|
||||
└──► ChirpStack Mosquitto (1883)
|
||||
│
|
||||
└──► ChirpStack ──► ChirpStack REST API
|
||||
|
||||
OpenRemote Internal Artemis MQTT
|
||||
│
|
||||
└──► Agent MQTT ──► Assets (sensors) ──► Map Display
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Problèmes Connus (2026-05-23)
|
||||
|
||||
| Priorité | Problème | Impact |
|
||||
|----------|----------|--------|
|
||||
| 🔴 CRITIQUE | Simulator crash boucle (exit 137, 896 restarts) | Plus de données IoT |
|
||||
| 🔴 CRITIQUE | OpenRemote Manager 502 | Pas de carte |
|
||||
| 🟠 HAUTE | Telegraf restart boucle | Pas de données InfluxDB |
|
||||
| 🟠 HAUTE | ThingsBoard executors instables | TB partiellement fonctionnel |
|
||||
| 🟠 HAUTE | MapStore 502 via Traefik | Pas d'accès web |
|
||||
| 🟡 MOYENNE | Contexus unhealthy | API fonctionnelle mais healthcheck KO |
|
||||
| 🟡 MOYENNE | Stellio 4 services arrêtés | Search/Sub/Kafka/Postgres down |
|
||||
| 🟡 MOYENNE | Ditto gateway UP mais pas de HTTP | API inaccessible |
|
||||
| 🟡 MOYENNE | Bunkerm unhealthy | Monitoring down |
|
||||
| 🔵 BASSE | Honcho API restartant | Mémoire/agentiel intermittent |
|
||||
| 🔵 BASSE | Redpanda console restart | Console indisponible |
|
||||
|
||||
---
|
||||
|
||||
## 📝 Snapshots & Restauration
|
||||
|
||||
### Créer un snapshot
|
||||
```bash
|
||||
# État des containers
|
||||
docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" > snapshots/DATE/containers-state.txt
|
||||
|
||||
# Sauvegarder les images d'une stack
|
||||
docker save -o snapshots/DATE/simulator.tar smart-city-digital-twin-martinique-simulator
|
||||
docker save -o snapshots/DATE/openremote-manager.tar openremote/manager
|
||||
|
||||
# Sauvegarder les volumes
|
||||
docker run --rm -v smart-city_simulator_data:/data -v $(pwd)/snapshots/DATE:/backup alpine tar czf /backup/simulator-data.tar.gz -C /data .
|
||||
```
|
||||
|
||||
### Restaurer un snapshot
|
||||
```bash
|
||||
# Restaurer une image
|
||||
docker load -i snapshots/DATE/simulator.tar
|
||||
|
||||
# Redémarrer une stack
|
||||
docker-compose up -d --force-recreate simulator
|
||||
|
||||
# Restaurer un volume
|
||||
docker run --rm -v smart-city_simulator_data:/data -v $(pwd)/snapshots/DATE:/backup alpine tar xzf /backup/simulator-data.tar.gz -C /data
|
||||
```
|
||||
|
||||
### Stables stacks à snapshoter en priorité
|
||||
1. **smart-city-core** (simulator, telegraf, influxdb)
|
||||
2. **openremote** (manager, keycloak, artemis, postgres)
|
||||
3. **mapstore** (proxy, app, postgres)
|
||||
4. **geoserver** (geoserver, postgis)
|
||||
5. **mainflux** (ensemble de la stack)
|
||||
105
snapshots/2026-05-23/containers-state.txt
Normal file
105
snapshots/2026-05-23/containers-state.txt
Normal file
@@ -0,0 +1,105 @@
|
||||
NAMES IMAGE STATUS PORTS
|
||||
traefik traefik:v3.1 Up 33 hours 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:8404->8404/tcp, [::]:8404->8404/tcp
|
||||
smart-city-simulator smart-city-digital-twin-martinique-simulator Up 59 seconds 8081/tcp
|
||||
smart-city-loki grafana/loki:latest Up 2 days 0.0.0.0:3100->3100/tcp, [::]:3100->3100/tcp
|
||||
smart-city-promtail grafana/promtail:latest Up 2 days
|
||||
localai-api localai/localai:latest Up 2 days (healthy) 8080/tcp
|
||||
mainfluxlabs-mqtt mainfluxlabs/mqtt:v0.36.1 Up 2 days
|
||||
docker_tb-js-executor_10 thingsboard/tb-js-executor:latest Up 26 seconds
|
||||
docker_tb-js-executor_8 thingsboard/tb-js-executor:latest Restarting (0) 5 seconds ago
|
||||
docker_tb-js-executor_9 thingsboard/tb-js-executor:latest Up 30 seconds
|
||||
docker_tb-web-ui1_1 thingsboard/tb-web-ui:latest Up 2 days 0.0.0.0:32769->8080/tcp, [::]:32769->8080/tcp
|
||||
docker_tb-js-executor_6 thingsboard/tb-js-executor:latest Up 24 seconds
|
||||
docker_zookeeper_1 zookeeper:3.8.1 Up 2 days 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, [::]:2181->2181/tcp, 8080/tcp, 0.0.0.0:32768->2181/tcp, [::]:32768->2181/tcp
|
||||
docker_tb-js-executor_7 thingsboard/tb-js-executor:latest Up 21 seconds
|
||||
docker_tb-js-executor_4 thingsboard/tb-js-executor:latest Up 26 seconds
|
||||
docker_tb-js-executor_5 thingsboard/tb-js-executor:latest Up 20 seconds
|
||||
docker_tb-js-executor_2 thingsboard/tb-js-executor:latest Restarting (0) 8 seconds ago
|
||||
docker_tb-js-executor_1 thingsboard/tb-js-executor:latest Restarting (0) 9 seconds ago
|
||||
docker_tb-js-executor_3 thingsboard/tb-js-executor:latest Restarting (137) 20 seconds ago
|
||||
docker_tb-web-ui2_1 thingsboard/tb-web-ui:latest Up 2 days 0.0.0.0:32770->8080/tcp, [::]:32770->8080/tcp
|
||||
contexus-app contexusio/contexus:latest Up 19 hours (unhealthy) 15000/tcp
|
||||
contexus-postgres postgres:16 Up 2 days (healthy) 5432/tcp
|
||||
contexus-redis redis:7-alpine Up 2 days (healthy) 6379/tcp
|
||||
smart-city-kepler smart-city-kepler:latest Up 2 days 80/tcp, 8080/tcp
|
||||
postgis-smartcity postgis/postgis:15-3.4 Up 2 days (healthy) 0.0.0.0:5433->5432/tcp, [::]:5433->5432/tcp
|
||||
smart-city-ditto-policies eclipse/ditto-policies:latest Up 2 days 8080/tcp
|
||||
smart-city-ditto-gateway eclipse/ditto-gateway:latest Up 19 hours 8080/tcp
|
||||
smart-city-ditto-mongodb mongo:6 Up 2 days 27017/tcp
|
||||
smart-city-digital-twin-martinique-chirpstack-rest-api-1 chirpstack/chirpstack-rest-api:4 Up 2 days
|
||||
smart-city-digital-twin-martinique-chirpstack-1 chirpstack/chirpstack:latest Up 2 days
|
||||
agentgateway cr.agentgateway.dev/agentgateway:latest Up 2 days 3000/tcp, 15000/tcp
|
||||
smart-city-digital-twin-martinique-chirpstack-gateway-bridge-basicstation-1 chirpstack/chirpstack-gateway-bridge:4 Up 2 days
|
||||
smart-city-digital-twin-martinique-chirpstack-gateway-bridge-1 chirpstack/chirpstack-gateway-bridge:4 Up 2 days 0.0.0.0:1700->1700/udp, [::]:1700->1700/udp
|
||||
smart-city-digital-twin-martinique-mosquitto-1 eclipse-mosquitto:2 Up 2 days 1883/tcp
|
||||
smart-city-digital-twin-martinique-redis-1 redis:7-alpine Up 2 days 6379/tcp
|
||||
bunkerm-bunkerm-1 bunkeriot/bunkerm:latest Up 2 days (unhealthy) 0.0.0.0:1900->1900/tcp, [::]:1900->1900/tcp, 0.0.0.0:2000->2000/tcp, [::]:2000->2000/tcp
|
||||
chirpstack-redis-1 redis:7-alpine Up 2 days 6379/tcp
|
||||
chirpstack-mosquitto-1 eclipse-mosquitto:2 Up 2 days 1883/tcp
|
||||
chirpstack-postgres-1 postgres:14-alpine Up 2 days 5432/tcp
|
||||
fiware-gis-quickstart-orionproxy-1 fiware-gis-quickstart-orionproxy Up 2 days 127.0.0.1:1026->80/tcp
|
||||
fiware-gis-quickstart-orion-1 quay.io/fiware/orion-ld Up 2 days (healthy) 127.0.0.1:2026->1026/tcp
|
||||
fiware-gis-quickstart-mongo-db-1 mongo:4.2 Up 2 days 127.0.0.1:27017->27017/tcp
|
||||
smart-city-influxdb influxdb:2.7-alpine Up 2 days (healthy) 0.0.0.0:8086->8086/tcp, [::]:8086->8086/tcp
|
||||
smart-city-telegraf telegraf:1.28 Restarting (1) 11 seconds ago
|
||||
smart-city-grafana grafana/grafana:10.2.0 Up 2 days 0.0.0.0:3001->3000/tcp, [::]:3001->3000/tcp
|
||||
docker-exporter docker-exporter:latest Up 2 days 0.0.0.0:8005->8005/tcp, [::]:8005->8005/tcp
|
||||
mainfluxlabs-http mainfluxlabs/http:v0.36.1 Up 2 days 0.0.0.0:8185->8185/tcp, [::]:8185->8185/tcp
|
||||
mainfluxlabs-rules mainfluxlabs/rules:v0.36.1 Up 2 days 0.0.0.0:9027->9027/tcp, [::]:9027->9027/tcp
|
||||
mainfluxlabs-converters mainfluxlabs/converters:v0.36.1 Up 2 days 0.0.0.0:8195->8195/tcp, [::]:8195->8195/tcp
|
||||
mainfluxlabs-smtp-notifier mainfluxlabs/smtp-notifier:v0.36.1 Up 2 days 0.0.0.0:9023->9023/tcp, [::]:9023->9023/tcp
|
||||
mainfluxlabs-modbus mainfluxlabs/modbus:v0.36.1 Up 2 days 0.0.0.0:9028->9028/tcp, [::]:9028->9028/tcp
|
||||
mainfluxlabs-ws mainfluxlabs/ws:v0.36.1 Up 2 days 0.0.0.0:8190->8190/tcp, [::]:8190->8190/tcp
|
||||
mainfluxlabs-webhooks mainfluxlabs/webhooks:v0.36.1 Up 2 days 0.0.0.0:9021->9021/tcp, [::]:9021->9021/tcp
|
||||
mainfluxlabs-downlinks mainfluxlabs/downlinks:v0.36.1 Up 2 days 0.0.0.0:9025->9025/tcp, [::]:9025->9025/tcp
|
||||
mainfluxlabs-alarms mainfluxlabs/alarms:v0.36.1 Up 2 days 0.0.0.0:9026->9026/tcp, [::]:9026->9026/tcp
|
||||
mainfluxlabs-filestore mainfluxlabs/filestore:v0.36.1 Up 2 days 0.0.0.0:9022->9022/tcp, [::]:9022->9022/tcp
|
||||
mainfluxlabs-coap mainfluxlabs/coap:v0.36.1 Up 2 days 0.0.0.0:5683->5683/tcp, 0.0.0.0:5683->5683/udp, [::]:5683->5683/tcp, [::]:5683->5683/udp
|
||||
mainfluxlabs-things mainfluxlabs/things:v0.36.1 Up 2 days 0.0.0.0:8182-8183->8182-8183/tcp, [::]:8182-8183->8182-8183/tcp, 0.0.0.0:8989->8989/tcp, [::]:8989->8989/tcp
|
||||
mainfluxlabs-users mainfluxlabs/users:v0.36.1 Up 2 days 0.0.0.0:8180->8180/tcp, [::]:8180->8180/tcp, 0.0.0.0:8184->8184/tcp, [::]:8184->8184/tcp
|
||||
mainfluxlabs-auth mainfluxlabs/auth:v0.36.1 Up 2 days 0.0.0.0:8181->8181/tcp, [::]:8181->8181/tcp, 0.0.0.0:8189->8189/tcp, [::]:8189->8189/tcp
|
||||
mainfluxlabs-certs mainfluxlabs/certs:v0.36.1 Up 2 days 0.0.0.0:8204->8204/tcp, [::]:8204->8204/tcp
|
||||
mainfluxlabs-postgres-writer mainfluxlabs/postgres-writer:v0.36.1 Up 2 days 0.0.0.0:8900->8900/tcp, [::]:8900->8900/tcp
|
||||
mainfluxlabs-uiconfigs mainfluxlabs/uiconfigs:v0.36.1 Up 2 days 0.0.0.0:9029->9029/tcp, [::]:9029->9029/tcp
|
||||
mainfluxlabs-mqtt-db postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-es-redis redis:6.2.2-alpine Up 2 days 6379/tcp
|
||||
mainfluxlabs-downlinks-db postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-things-db postgres:13.3-alpine Up 2 days (healthy) 5432/tcp
|
||||
mainfluxlabs-rules-db postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-filestore-db postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-users-db postgres:13.3-alpine Up 2 days (healthy) 5432/tcp
|
||||
mainfluxlabs-mosquitto eclipse-mosquitto:2.0 Up 2 days 1883/tcp
|
||||
mainfluxlabs-alarms-db postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-auth-redis redis:6.2.2-alpine Up 2 days 6379/tcp
|
||||
mainfluxlabs-modbus-db postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-broker nats:2.2.4-alpine Up 2 days 6222/tcp, 0.0.0.0:4222->4222/tcp, [::]:4222->4222/tcp, 8222/tcp
|
||||
mainfluxlabs-webhooks-db postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-postgres postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-smtp-notifier-db postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-certs-db postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-postgres-reader mainfluxlabs/postgres-reader:v0.36.1 Up 2 days 0.0.0.0:8905->8905/tcp, [::]:8905->8905/tcp
|
||||
mainfluxlabs-auth-db postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-uiconfigs-db postgres:13.3-alpine Up 2 days 5432/tcp
|
||||
mainfluxlabs-ui mainfluxlabs/ui:v0.36.1 Up 2 days 80/tcp, 0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp
|
||||
thingsboard-rabbitmq rabbitmq:3.12-management Up 2 days (healthy) 4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 15691-15692/tcp, 25672/tcp
|
||||
thingsboard-postgres postgres:15-alpine Up 2 days (healthy) 5432/tcp
|
||||
mapstore-proxy nginx Up 2 days 80/tcp
|
||||
mapstore-app geosolutionsit/mapstore2:latest Up 2 days 8080/tcp
|
||||
mapstore-postgres geosolutions-mapstore/postgis Up 2 days (healthy) 5432/tcp
|
||||
emqx_emqx_1 emqx/emqx:latest Up 2 days 4370/tcp, 5369/tcp, 8083-8084/tcp, 0.0.0.0:11883->1883/tcp, [::]:11883->1883/tcp, 0.0.0.0:18081->8081/tcp, [::]:18081->8081/tcp, 0.0.0.0:18883->8883/tcp, [::]:18883->8883/tcp, 0.0.0.0:38083->18083/tcp, [::]:38083->18083/tcp
|
||||
smart-city-redpanda-console docker.redpanda.com/redpandadata/console:v2.5.0 Restarting (1) 1 second ago
|
||||
stellio-api-gateway stellio/stellio-api-gateway:latest-dev Up 13 hours 8080/tcp
|
||||
frost_allinone-web-1 fraunhoferiosb/frost-server:latest Up 2 days 1883/tcp, 8089/tcp, 127.0.0.1:8090->8080/tcp
|
||||
geoserver_stack-geoserver-1 oscarfonts/geoserver:2.25.2 Up 2 days (healthy) 8080/tcp
|
||||
grafana_stack-grafana-1 grafana/grafana:latest Up 2 days 3000/tcp
|
||||
frost_http-web-1 fraunhoferiosb/frost-server-http:latest Up 2 days 8080/tcp
|
||||
esperotech esperotech/yaade:latest Up 2 days 0.0.0.0:9339->9339/tcp, [::]:9339->9339/tcp
|
||||
digital-twin-nodered nodered/node-red:3.1 Up 2 days (healthy) 0.0.0.0:1880->1880/tcp, [::]:1880->1880/tcp
|
||||
digital-twin-connector python:3.11-slim Up About an hour
|
||||
gitea gitea/gitea:latest Up 2 days 22/tcp, 3000/tcp
|
||||
honcho-grafana-1 grafana/grafana:11.4.0 Up 2 days (healthy) 127.0.0.1:3088->3000/tcp
|
||||
honcho-prometheus-1 prom/prometheus:v3.2.1 Up 2 days (healthy) 127.0.0.1:9091->9090/tcp
|
||||
honcho-api-1 honcho:latest Restarting (1) 12 seconds ago
|
||||
honcho-deriver-1 honcho-deriver Up 2 days (healthy) 8000/tcp
|
||||
phpipam-phpipam-web-1 phpipam/phpipam-www:latest Up 2 days 127.0.0.1:8085->80/tcp
|
||||
phpipam-phpipam-cron-1 phpipam/phpipam-cron:latest Up 2 days 80/tcp
|
||||
762
snapshots/2026-05-23/full-snapshot.json
Normal file
762
snapshots/2026-05-23/full-snapshot.json
Normal file
@@ -0,0 +1,762 @@
|
||||
{
|
||||
"timestamp": "2026-05-23T08:23:31.144199",
|
||||
"total": 117,
|
||||
"stacks": {
|
||||
"agent-gateway": [
|
||||
{
|
||||
"name": "agentgateway",
|
||||
"image": "cr.agentgateway.dev/agentgateway:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "3000/tcp, 15000/tcp"
|
||||
}
|
||||
],
|
||||
"bunkerm": [
|
||||
{
|
||||
"name": "bunkerm-bunkerm-1",
|
||||
"image": "bunkeriot/bunkerm:latest",
|
||||
"status": "Up 2 days (unhealthy)",
|
||||
"ports": "0.0.0.0:1900->1900/tcp, [::]:1900->1900/tcp, 0.0.0.0:2000->2000/tcp, [::]:2000->2000/tcp"
|
||||
}
|
||||
],
|
||||
"chirpstack": [
|
||||
{
|
||||
"name": "chirpstack-mosquitto-1",
|
||||
"image": "eclipse-mosquitto:2",
|
||||
"status": "Up 2 days",
|
||||
"ports": "1883/tcp"
|
||||
},
|
||||
{
|
||||
"name": "chirpstack-postgres-1",
|
||||
"image": "postgres:14-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "chirpstack-redis-1",
|
||||
"image": "redis:7-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "6379/tcp"
|
||||
}
|
||||
],
|
||||
"community-tools": [
|
||||
{
|
||||
"name": "docker-exporter",
|
||||
"image": "docker-exporter:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:8005->8005/tcp, [::]:8005->8005/tcp"
|
||||
}
|
||||
],
|
||||
"contexus": [
|
||||
{
|
||||
"name": "contexus-app",
|
||||
"image": "contexusio/contexus:latest",
|
||||
"status": "Up 19 hours (unhealthy)",
|
||||
"ports": "15000/tcp"
|
||||
},
|
||||
{
|
||||
"name": "contexus-postgres",
|
||||
"image": "postgres:16",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "contexus-redis",
|
||||
"image": "redis:7-alpine",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "6379/tcp"
|
||||
}
|
||||
],
|
||||
"digital-twin": [
|
||||
{
|
||||
"name": "digital-twin-connector",
|
||||
"image": "python:3.11-slim",
|
||||
"status": "Up About an hour",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "digital-twin-nodered",
|
||||
"image": "nodered/node-red:3.1",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "0.0.0.0:1880->1880/tcp, [::]:1880->1880/tcp"
|
||||
}
|
||||
],
|
||||
"docker_zookeeper_1": [
|
||||
{
|
||||
"name": "docker_zookeeper_1",
|
||||
"image": "zookeeper:3.8.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, [::]:2181->2181/tcp, 8080/tcp, 0.0.0.0:32768->2181/tcp, [::]:32768->2181/tcp"
|
||||
}
|
||||
],
|
||||
"emqx": [
|
||||
{
|
||||
"name": "emqx_emqx_1",
|
||||
"image": "emqx/emqx:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "4370/tcp, 5369/tcp, 8083-8084/tcp, 0.0.0.0:11883->1883/tcp, [::]:11883->1883/tcp, 0.0.0.0:18081->8081/tcp, [::]:18081->8081/tcp, 0.0.0.0:18883->8883/tcp, [::]:18883->8883/tcp, 0.0.0.0:38083->18083/tcp, [::]:38083->18083/tcp"
|
||||
}
|
||||
],
|
||||
"fiware": [
|
||||
{
|
||||
"name": "fiware-gis-quickstart-mongo-db-1",
|
||||
"image": "mongo:4.2",
|
||||
"status": "Up 2 days",
|
||||
"ports": "127.0.0.1:27017->27017/tcp"
|
||||
},
|
||||
{
|
||||
"name": "fiware-gis-quickstart-orion-1",
|
||||
"image": "quay.io/fiware/orion-ld",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "127.0.0.1:2026->1026/tcp"
|
||||
},
|
||||
{
|
||||
"name": "fiware-gis-quickstart-orionproxy-1",
|
||||
"image": "fiware-gis-quickstart-orionproxy",
|
||||
"status": "Up 2 days",
|
||||
"ports": "127.0.0.1:1026->80/tcp"
|
||||
}
|
||||
],
|
||||
"frost": [
|
||||
{
|
||||
"name": "frost_allinone-web-1",
|
||||
"image": "fraunhoferiosb/frost-server:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "1883/tcp, 8089/tcp, 127.0.0.1:8090->8080/tcp"
|
||||
},
|
||||
{
|
||||
"name": "frost_http-web-1",
|
||||
"image": "fraunhoferiosb/frost-server-http:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "8080/tcp"
|
||||
}
|
||||
],
|
||||
"geoserver": [
|
||||
{
|
||||
"name": "geoserver_stack-geoserver-1",
|
||||
"image": "oscarfonts/geoserver:2.25.2",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "8080/tcp"
|
||||
}
|
||||
],
|
||||
"gitea": [
|
||||
{
|
||||
"name": "gitea",
|
||||
"image": "gitea/gitea:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "22/tcp, 3000/tcp"
|
||||
}
|
||||
],
|
||||
"grafana-stack": [
|
||||
{
|
||||
"name": "grafana_stack-grafana-1",
|
||||
"image": "grafana/grafana:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "3000/tcp"
|
||||
}
|
||||
],
|
||||
"honcho": [
|
||||
{
|
||||
"name": "honcho-api-1",
|
||||
"image": "honcho:latest",
|
||||
"status": "Restarting (1) 12 seconds ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "honcho-deriver-1",
|
||||
"image": "honcho-deriver",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "8000/tcp"
|
||||
},
|
||||
{
|
||||
"name": "honcho-grafana-1",
|
||||
"image": "grafana/grafana:11.4.0",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "127.0.0.1:3088->3000/tcp"
|
||||
},
|
||||
{
|
||||
"name": "honcho-prometheus-1",
|
||||
"image": "prom/prometheus:v3.2.1",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "127.0.0.1:9091->9090/tcp"
|
||||
}
|
||||
],
|
||||
"localai": [
|
||||
{
|
||||
"name": "8a0cce6d1940_localai-api-1",
|
||||
"image": "localai/localai:latest",
|
||||
"status": "Exited (0) 2 days ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "localai-api",
|
||||
"image": "localai/localai:latest",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "8080/tcp"
|
||||
}
|
||||
],
|
||||
"mainflux": [
|
||||
{
|
||||
"name": "mainfluxlabs-alarms-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-alarms",
|
||||
"image": "mainfluxlabs/alarms:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:9026->9026/tcp, [::]:9026->9026/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-auth-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-auth-redis",
|
||||
"image": "redis:6.2.2-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "6379/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-auth",
|
||||
"image": "mainfluxlabs/auth:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:8181->8181/tcp, [::]:8181->8181/tcp, 0.0.0.0:8189->8189/tcp, [::]:8189->8189/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-broker",
|
||||
"image": "nats:2.2.4-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "6222/tcp, 0.0.0.0:4222->4222/tcp, [::]:4222->4222/tcp, 8222/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-certs-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-certs",
|
||||
"image": "mainfluxlabs/certs:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:8204->8204/tcp, [::]:8204->8204/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-coap",
|
||||
"image": "mainfluxlabs/coap:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:5683->5683/tcp, 0.0.0.0:5683->5683/udp, [::]:5683->5683/tcp, [::]:5683->5683/udp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-converters",
|
||||
"image": "mainfluxlabs/converters:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:8195->8195/tcp, [::]:8195->8195/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-downlinks-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-downlinks",
|
||||
"image": "mainfluxlabs/downlinks:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:9025->9025/tcp, [::]:9025->9025/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-es-redis",
|
||||
"image": "redis:6.2.2-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "6379/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-filestore-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-filestore",
|
||||
"image": "mainfluxlabs/filestore:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:9022->9022/tcp, [::]:9022->9022/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-http",
|
||||
"image": "mainfluxlabs/http:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:8185->8185/tcp, [::]:8185->8185/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-jaeger",
|
||||
"image": "jaegertracing/all-in-one:1.53",
|
||||
"status": "Exited (255) 2 days ago",
|
||||
"ports": "5775/udp, 4317-4318/tcp, 9411/tcp, 0.0.0.0:5778->5778/tcp, [::]:5778->5778/tcp, 0.0.0.0:14268->14268/tcp, [::]:14268->14268/tcp, 14250/tcp, 6832/udp, 0.0.0.0:16686->16686/tcp, [::]:16686->16686/tcp, 0.0.0.0:6831->6831/udp, [::]:6831->6831/udp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-modbus-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-modbus",
|
||||
"image": "mainfluxlabs/modbus:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:9028->9028/tcp, [::]:9028->9028/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-mosquitto",
|
||||
"image": "eclipse-mosquitto:2.0",
|
||||
"status": "Up 2 days",
|
||||
"ports": "1883/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-mqtt-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-mqtt",
|
||||
"image": "mainfluxlabs/mqtt:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-postgres-reader",
|
||||
"image": "mainfluxlabs/postgres-reader:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:8905->8905/tcp, [::]:8905->8905/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-postgres-writer",
|
||||
"image": "mainfluxlabs/postgres-writer:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:8900->8900/tcp, [::]:8900->8900/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-postgres",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-rules-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-rules",
|
||||
"image": "mainfluxlabs/rules:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:9027->9027/tcp, [::]:9027->9027/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-smtp-notifier-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-smtp-notifier",
|
||||
"image": "mainfluxlabs/smtp-notifier:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:9023->9023/tcp, [::]:9023->9023/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-things-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-things",
|
||||
"image": "mainfluxlabs/things:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:8182-8183->8182-8183/tcp, [::]:8182-8183->8182-8183/tcp, 0.0.0.0:8989->8989/tcp, [::]:8989->8989/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-uiconfigs-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-uiconfigs",
|
||||
"image": "mainfluxlabs/uiconfigs:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:9029->9029/tcp, [::]:9029->9029/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-ui",
|
||||
"image": "mainfluxlabs/ui:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "80/tcp, 0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-users-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-users",
|
||||
"image": "mainfluxlabs/users:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:8180->8180/tcp, [::]:8180->8180/tcp, 0.0.0.0:8184->8184/tcp, [::]:8184->8184/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-webhooks-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-webhooks",
|
||||
"image": "mainfluxlabs/webhooks:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:9021->9021/tcp, [::]:9021->9021/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-ws",
|
||||
"image": "mainfluxlabs/ws:v0.36.1",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:8190->8190/tcp, [::]:8190->8190/tcp"
|
||||
}
|
||||
],
|
||||
"mapstore": [
|
||||
{
|
||||
"name": "mapstore-app",
|
||||
"image": "geosolutionsit/mapstore2:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "8080/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mapstore-postgres",
|
||||
"image": "geosolutions-mapstore/postgis",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "mapstore-proxy",
|
||||
"image": "nginx",
|
||||
"status": "Up 2 days",
|
||||
"ports": "80/tcp"
|
||||
}
|
||||
],
|
||||
"phpipam": [
|
||||
{
|
||||
"name": "phpipam-phpipam-cron-1",
|
||||
"image": "phpipam/phpipam-cron:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "80/tcp"
|
||||
},
|
||||
{
|
||||
"name": "phpipam-phpipam-web-1",
|
||||
"image": "phpipam/phpipam-www:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "127.0.0.1:8085->80/tcp"
|
||||
}
|
||||
],
|
||||
"postgis-smartcity": [
|
||||
{
|
||||
"name": "postgis-smartcity",
|
||||
"image": "postgis/postgis:15-3.4",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "0.0.0.0:5433->5432/tcp, [::]:5433->5432/tcp"
|
||||
}
|
||||
],
|
||||
"smart-city-core": [
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-chirpstack-1",
|
||||
"image": "chirpstack/chirpstack:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-chirpstack-gateway-bridge-1",
|
||||
"image": "chirpstack/chirpstack-gateway-bridge:4",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:1700->1700/udp, [::]:1700->1700/udp"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-chirpstack-gateway-bridge-basicstation-1",
|
||||
"image": "chirpstack/chirpstack-gateway-bridge:4",
|
||||
"status": "Up 2 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-chirpstack-rest-api-1",
|
||||
"image": "chirpstack/chirpstack-rest-api:4",
|
||||
"status": "Up 2 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "smart-city-grafana",
|
||||
"image": "grafana/grafana:10.2.0",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:3001->3000/tcp, [::]:3001->3000/tcp"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-influxdb",
|
||||
"image": "influxdb:2.7-alpine",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "0.0.0.0:8086->8086/tcp, [::]:8086->8086/tcp"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-kepler",
|
||||
"image": "smart-city-kepler:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "80/tcp, 8080/tcp"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-loki",
|
||||
"image": "grafana/loki:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:3100->3100/tcp, [::]:3100->3100/tcp"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-prometheus-brokers",
|
||||
"image": "prom/prometheus:latest",
|
||||
"status": "Exited (255) 2 days ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "smart-city-promtail",
|
||||
"image": "grafana/promtail:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "smart-city-pulsar-manager-db",
|
||||
"image": "postgres:15-alpine",
|
||||
"status": "Exited (0) 2 days ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "smart-city-pulsar-manager",
|
||||
"image": "apachepulsar/pulsar-manager:v0.2.0",
|
||||
"status": "Exited (137) 2 days ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "smart-city-pulsar",
|
||||
"image": "apachepulsar/pulsar:3.2.0",
|
||||
"status": "Exited (137) 2 days ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "smart-city-redpanda-console",
|
||||
"image": "docker.redpanda.com/redpandadata/console:v2.5.0",
|
||||
"status": "Restarting (1) 9 seconds ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "smart-city-redpanda",
|
||||
"image": "redpandadata/redpanda:v24.3.14",
|
||||
"status": "Exited (255) 2 days ago",
|
||||
"ports": "8081/tcp, 127.0.0.1:8082->8082/tcp, 0.0.0.0:19092->9092/tcp, [::]:19092->9092/tcp, 0.0.0.0:19644->9644/tcp, [::]:19644->9644/tcp"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-simulator",
|
||||
"image": "smart-city-digital-twin-martinique-simulator",
|
||||
"status": "Up 55 seconds",
|
||||
"ports": "8081/tcp"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-telegraf",
|
||||
"image": "telegraf:1.28",
|
||||
"status": "Restarting (1) 6 seconds ago",
|
||||
"ports": ""
|
||||
}
|
||||
],
|
||||
"smart-city-iot": [
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-mosquitto-1",
|
||||
"image": "eclipse-mosquitto:2",
|
||||
"status": "Up 2 days",
|
||||
"ports": "1883/tcp"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-redis-1",
|
||||
"image": "redis:7-alpine",
|
||||
"status": "Up 2 days",
|
||||
"ports": "6379/tcp"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-ditto-gateway",
|
||||
"image": "eclipse/ditto-gateway:latest",
|
||||
"status": "Up 20 hours",
|
||||
"ports": "8080/tcp"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-ditto-mongodb",
|
||||
"image": "mongo:6",
|
||||
"status": "Up 2 days",
|
||||
"ports": "27017/tcp"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-ditto-policies",
|
||||
"image": "eclipse/ditto-policies:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "8080/tcp"
|
||||
}
|
||||
],
|
||||
"stellio": [
|
||||
{
|
||||
"name": "stellio-api-gateway",
|
||||
"image": "stellio/stellio-api-gateway:latest-dev",
|
||||
"status": "Up 13 hours",
|
||||
"ports": "8080/tcp"
|
||||
},
|
||||
{
|
||||
"name": "stellio-kafka",
|
||||
"image": "confluentinc/cp-kafka:8.1.0",
|
||||
"status": "Exited (255) 2 days ago",
|
||||
"ports": "9092/tcp, 0.0.0.0:29092->29092/tcp, [::]:29092->29092/tcp"
|
||||
},
|
||||
{
|
||||
"name": "stellio-postgres",
|
||||
"image": "stellio/stellio-timescale-postgis:16-2.24.0-3.6",
|
||||
"status": "Exited (255) 2 days ago",
|
||||
"ports": "5432/tcp"
|
||||
},
|
||||
{
|
||||
"name": "stellio-search-service",
|
||||
"image": "stellio/stellio-search-service:latest-dev",
|
||||
"status": "Exited (255) 2 days ago",
|
||||
"ports": "8083/tcp"
|
||||
},
|
||||
{
|
||||
"name": "stellio-subscription-service",
|
||||
"image": "stellio/stellio-subscription-service:latest-dev",
|
||||
"status": "Exited (255) 2 days ago",
|
||||
"ports": "8084/tcp"
|
||||
}
|
||||
],
|
||||
"thingsboard": [
|
||||
{
|
||||
"name": "docker_tb-js-executor_10",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Restarting (0) 15 seconds ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_1",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Up 24 seconds",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_2",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Restarting (0) 23 seconds ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_3",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Restarting (0) 23 seconds ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_4",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Restarting (137) 15 seconds ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_5",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Up 26 seconds",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_6",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Restarting (0) Less than a second ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_7",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Up 29 seconds",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_8",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Restarting (0) 22 seconds ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_9",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Restarting (137) 13 seconds ago",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-rule-engine1_1",
|
||||
"image": "thingsboard/tb-node:latest",
|
||||
"status": "Created",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-rule-engine2_1",
|
||||
"image": "thingsboard/tb-node:latest",
|
||||
"status": "Created",
|
||||
"ports": ""
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-web-ui1_1",
|
||||
"image": "thingsboard/tb-web-ui:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:32769->8080/tcp, [::]:32769->8080/tcp"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-web-ui2_1",
|
||||
"image": "thingsboard/tb-web-ui:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:32770->8080/tcp, [::]:32770->8080/tcp"
|
||||
}
|
||||
],
|
||||
"thingsboard-postgres": [
|
||||
{
|
||||
"name": "thingsboard-postgres",
|
||||
"image": "postgres:15-alpine",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "5432/tcp"
|
||||
}
|
||||
],
|
||||
"thingsboard-rabbitmq": [
|
||||
{
|
||||
"name": "thingsboard-rabbitmq",
|
||||
"image": "rabbitmq:3.12-management",
|
||||
"status": "Up 2 days (healthy)",
|
||||
"ports": "4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 15691-15692/tcp, 25672/tcp"
|
||||
}
|
||||
],
|
||||
"traefik": [
|
||||
{
|
||||
"name": "traefik",
|
||||
"image": "traefik:v3.1",
|
||||
"status": "Up 33 hours",
|
||||
"ports": "0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:8404->8404/tcp, [::]:8404->8404/tcp"
|
||||
}
|
||||
],
|
||||
"yaade": [
|
||||
{
|
||||
"name": "esperotech",
|
||||
"image": "esperotech/yaade:latest",
|
||||
"status": "Up 2 days",
|
||||
"ports": "0.0.0.0:9339->9339/tcp, [::]:9339->9339/tcp"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
49
snapshots/2026-05-25/ARCHITECTURE.md
Normal file
49
snapshots/2026-05-25/ARCHITECTURE.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# Smart City Digital Twin — Architecture État Actuel (snapshot)
|
||||
|
||||
> **Date**: 2026-05-25 ~18:45 UTC
|
||||
> **Total containers**: 117
|
||||
|
||||
## 📡 Pipeline Données (IOT → Stockage → Visualisation)
|
||||
|
||||
```
|
||||
┌──────────────┐ MQTT topics: ┌──────────┐ ┌───────────┐ ┌────────────┐
|
||||
│ Simulator │──── smartcity/●/● ──▶│ EMQX │────▶│ Telegraf ────▶│ InfluxDB │
|
||||
│ (60 sensors)│ " │ (v5.0) │ │ (mqtt_ │ │ (v2.7) │
|
||||
│ │──── smartcity/●/● ──▶│ │ │ consumer)│ │ │
|
||||
│ ENABLE_BUNKER│ " │ │ │ influxdb │────▶│ bucket: │
|
||||
│ =0 (off) │ │ │ │ _v2) │ │ "smartcity"│
|
||||
└──────────────┘ └──────────┘ └───────────┘ └─────┬──────┘
|
||||
│
|
||||
Mosquitto (chirpstack) ◀── allow_anonymous=true ── config mosquitto.conf │
|
||||
(no data visible in logs yet) │
|
||||
▼
|
||||
┌────────────┐
|
||||
│ Grafana │
|
||||
│ Dashboard │
|
||||
│ Smart City │
|
||||
└────────────┘
|
||||
```
|
||||
|
||||
## 🏗️ Stacks actives (principales)
|
||||
|
||||
| Stack | Containers | État | Réseau |
|
||||
|-------|-----------|------|--------|
|
||||
| **OpenRemote** | postgresql (timescaledb-ha), keycloak, manager | PG: starting, KC: healthy, Manager: starting | smartcity-shared + openremote_default |
|
||||
| **Smart City Core** | simulator, telegraf, grafana, influxdb, prometheus | UP | smartcity-shared |
|
||||
| **FIWARE GIS** | orion-ld, orionproxy | healthy | smartcity-shared |
|
||||
| **ChirpStack** | chirpstack, mosquitto, postgres, redis | UP | dédié + smartcity-shared |
|
||||
| **Ditto** | gateway, policies, mongodb | UP/restarting | dédié |
|
||||
| **Contexus** | app (unhealthy), postgres (healthy), redis (healthy) | mixed | smartcity-shared |
|
||||
| **Mainflux** | 15+ microservices, mqtt, jaeger (exited) | mixed | dédié |
|
||||
| **Stellio** | api-gateway (UP), search+subscription+kafka+postgres (exited) | broken | dédié |
|
||||
| **Traefik** | traefik:v3.1 | UP | traefik-public |
|
||||
|
||||
## ⚠️ Points connus
|
||||
|
||||
- **OpenRemote** : crash loop corrigé (image PG changée), à redémarrer
|
||||
- **Telegraf** : fixé (noms containers + BunkerM désactivé)
|
||||
- **Stellio** : cassé (kafka + postgres exited) — NGSI-LD lowest priority
|
||||
- **Contexus** : app unhealthy
|
||||
- **Pulsar/Redpanda** : arrêtés (stabilité CPU)
|
||||
- **BunkerM** : unhealthy, port 1900 (port MQTT originel)
|
||||
- **Simulator** : MQTT OK 1/2 — un seul broker sur deux (Mosquitto?)
|
||||
825
snapshots/2026-05-25/full-snapshot.json
Normal file
825
snapshots/2026-05-25/full-snapshot.json
Normal file
@@ -0,0 +1,825 @@
|
||||
{
|
||||
"timestamp": "2026-05-25T18:09:53.673741+00:00",
|
||||
"total": 117,
|
||||
"containers": [
|
||||
{
|
||||
"name": "openremote-postgresql",
|
||||
"image": "timescale/timescaledb-ha:pg15",
|
||||
"status": "Created",
|
||||
"ports": "",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "openremote-manager",
|
||||
"image": "openremote/manager:latest",
|
||||
"status": "Up 3 minutes (health: starting)",
|
||||
"ports": "1883/tcp, 8080/tcp, 8443/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "openremote-keycloak",
|
||||
"image": "quay.io/keycloak/keycloak:24.0",
|
||||
"status": "Up 27 hours (healthy)",
|
||||
"ports": "8080/tcp, 8443/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-simulator",
|
||||
"image": "smart-city-simulator",
|
||||
"status": "Up 2 days",
|
||||
"ports": "8081/tcp",
|
||||
"networks": "traefik-public,openremote_default,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "traefik",
|
||||
"image": "traefik:v3.1",
|
||||
"status": "Up 3 days",
|
||||
"ports": "0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:8404->8404/tcp, [::]:8404->8404/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-loki",
|
||||
"image": "grafana/loki:latest",
|
||||
"status": "Up 4 days",
|
||||
"ports": "0.0.0.0:3100->3100/tcp, [::]:3100->3100/tcp",
|
||||
"networks": "traefik-public,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-promtail",
|
||||
"image": "grafana/promtail:latest",
|
||||
"status": "Up 4 days",
|
||||
"ports": "",
|
||||
"networks": "smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "localai-api",
|
||||
"image": "localai/localai:latest",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "8080/tcp",
|
||||
"networks": "traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-mqtt",
|
||||
"image": "mainfluxlabs/mqtt:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "",
|
||||
"networks": "mainflux-network,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_10",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Up 36 seconds",
|
||||
"ports": "",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_8",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Up 30 seconds",
|
||||
"ports": "",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_9",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Restarting (0) 9 seconds ago",
|
||||
"ports": "",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-web-ui1_1",
|
||||
"image": "thingsboard/tb-web-ui:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:32769->8080/tcp, [::]:32769->8080/tcp",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_6",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Up 19 seconds",
|
||||
"ports": "",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_zookeeper_1",
|
||||
"image": "zookeeper:3.8.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, [::]:2181->2181/tcp, 8080/tcp, 0.0.0.0:32768->2181/tcp, [::]:32768->2181/tcp",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_7",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Up 10 seconds",
|
||||
"ports": "",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_4",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Restarting (0) 1 second ago",
|
||||
"ports": "",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_5",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Restarting (0) 11 seconds ago",
|
||||
"ports": "",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_2",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Up 15 seconds",
|
||||
"ports": "",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_1",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Up 22 seconds",
|
||||
"ports": "",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-js-executor_3",
|
||||
"image": "thingsboard/tb-js-executor:latest",
|
||||
"status": "Restarting (0) 6 seconds ago",
|
||||
"ports": "",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "docker_tb-web-ui2_1",
|
||||
"image": "thingsboard/tb-web-ui:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:32770->8080/tcp, [::]:32770->8080/tcp",
|
||||
"networks": "docker_default"
|
||||
},
|
||||
{
|
||||
"name": "contexus-app",
|
||||
"image": "contexusio/contexus:latest",
|
||||
"status": "Up 3 days (unhealthy)",
|
||||
"ports": "15000/tcp",
|
||||
"networks": "contexus-iot-network,smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "contexus-postgres",
|
||||
"image": "postgres:16",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "contexus-iot-network"
|
||||
},
|
||||
{
|
||||
"name": "contexus-redis",
|
||||
"image": "redis:7-alpine",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "6379/tcp",
|
||||
"networks": "contexus-iot-network"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-kepler",
|
||||
"image": "smart-city-kepler:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "80/tcp, 8080/tcp",
|
||||
"networks": "smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "postgis-smartcity",
|
||||
"image": "postgis/postgis:15-3.4",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "0.0.0.0:5433->5432/tcp, [::]:5433->5432/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-ditto-policies",
|
||||
"image": "eclipse/ditto-policies:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "8080/tcp",
|
||||
"networks": "traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-ditto-gateway",
|
||||
"image": "eclipse/ditto-gateway:latest",
|
||||
"status": "Up 3 days",
|
||||
"ports": "8080/tcp",
|
||||
"networks": "traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-ditto-mongodb",
|
||||
"image": "mongo:6",
|
||||
"status": "Up 5 days",
|
||||
"ports": "27017/tcp",
|
||||
"networks": "traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-chirpstack-rest-api-1",
|
||||
"image": "chirpstack/chirpstack-rest-api:4",
|
||||
"status": "Up 5 days",
|
||||
"ports": "",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-chirpstack-1",
|
||||
"image": "chirpstack/chirpstack:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "agentgateway",
|
||||
"image": "cr.agentgateway.dev/agentgateway:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "3000/tcp, 15000/tcp",
|
||||
"networks": "traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-chirpstack-gateway-bridge-basicstation-1",
|
||||
"image": "chirpstack/chirpstack-gateway-bridge:4",
|
||||
"status": "Up 5 days",
|
||||
"ports": "",
|
||||
"networks": "traefik-public,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-chirpstack-gateway-bridge-1",
|
||||
"image": "chirpstack/chirpstack-gateway-bridge:4",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:1700->1700/udp, [::]:1700->1700/udp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-mosquitto-1",
|
||||
"image": "eclipse-mosquitto:2",
|
||||
"status": "Up 5 days",
|
||||
"ports": "1883/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-digital-twin-martinique-redis-1",
|
||||
"image": "redis:7-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "6379/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "bunkerm-bunkerm-1",
|
||||
"image": "bunkeriot/bunkerm:latest",
|
||||
"status": "Up 5 days (unhealthy)",
|
||||
"ports": "0.0.0.0:1900->1900/tcp, [::]:1900->1900/tcp, 0.0.0.0:2000->2000/tcp, [::]:2000->2000/tcp",
|
||||
"networks": "smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "chirpstack-redis-1",
|
||||
"image": "redis:7-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "6379/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "chirpstack-mosquitto-1",
|
||||
"image": "eclipse-mosquitto:2",
|
||||
"status": "Up 5 days",
|
||||
"ports": "1883/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "chirpstack-postgres-1",
|
||||
"image": "postgres:14-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-prometheus-brokers",
|
||||
"image": "prom/prometheus:latest",
|
||||
"status": "Up 14 hours",
|
||||
"ports": "",
|
||||
"networks": ""
|
||||
},
|
||||
{
|
||||
"name": "fiware-gis-quickstart-orionproxy-1",
|
||||
"image": "fiware-gis-quickstart-orionproxy",
|
||||
"status": "Up 5 days",
|
||||
"ports": "127.0.0.1:1026->80/tcp",
|
||||
"networks": "fiware-gis-quickstart_fiware"
|
||||
},
|
||||
{
|
||||
"name": "fiware-gis-quickstart-orion-1",
|
||||
"image": "quay.io/fiware/orion-ld",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "127.0.0.1:2026->1026/tcp",
|
||||
"networks": "fiware-gis-quickstart_fiware,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "fiware-gis-quickstart-mongo-db-1",
|
||||
"image": "mongo:4.2",
|
||||
"status": "Up 5 days",
|
||||
"ports": "127.0.0.1:27017->27017/tcp",
|
||||
"networks": "fiware-gis-quickstart_fiware"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-influxdb",
|
||||
"image": "influxdb:2.7-alpine",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "0.0.0.0:8086->8086/tcp, [::]:8086->8086/tcp",
|
||||
"networks": "smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-telegraf",
|
||||
"image": "telegraf:1.28",
|
||||
"status": "Up 2 hours",
|
||||
"ports": "8092/udp, 8125/udp, 8094/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-grafana",
|
||||
"image": "grafana/grafana:10.2.0",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:3001->3000/tcp, [::]:3001->3000/tcp",
|
||||
"networks": "smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "docker-exporter",
|
||||
"image": "docker-exporter:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:8005->8005/tcp, [::]:8005->8005/tcp",
|
||||
"networks": "bridge"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-http",
|
||||
"image": "mainfluxlabs/http:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:8185->8185/tcp, [::]:8185->8185/tcp",
|
||||
"networks": "mainflux-network,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-rules",
|
||||
"image": "mainfluxlabs/rules:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:9027->9027/tcp, [::]:9027->9027/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-converters",
|
||||
"image": "mainfluxlabs/converters:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:8195->8195/tcp, [::]:8195->8195/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-smtp-notifier",
|
||||
"image": "mainfluxlabs/smtp-notifier:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:9023->9023/tcp, [::]:9023->9023/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-modbus",
|
||||
"image": "mainfluxlabs/modbus:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:9028->9028/tcp, [::]:9028->9028/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-ws",
|
||||
"image": "mainfluxlabs/ws:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:8190->8190/tcp, [::]:8190->8190/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-webhooks",
|
||||
"image": "mainfluxlabs/webhooks:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:9021->9021/tcp, [::]:9021->9021/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-downlinks",
|
||||
"image": "mainfluxlabs/downlinks:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:9025->9025/tcp, [::]:9025->9025/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-alarms",
|
||||
"image": "mainfluxlabs/alarms:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:9026->9026/tcp, [::]:9026->9026/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-filestore",
|
||||
"image": "mainfluxlabs/filestore:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:9022->9022/tcp, [::]:9022->9022/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-coap",
|
||||
"image": "mainfluxlabs/coap:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:5683->5683/tcp, 0.0.0.0:5683->5683/udp, [::]:5683->5683/tcp, [::]:5683->5683/udp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-things",
|
||||
"image": "mainfluxlabs/things:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:8182-8183->8182-8183/tcp, [::]:8182-8183->8182-8183/tcp, 0.0.0.0:8989->8989/tcp, [::]:8989->8989/tcp",
|
||||
"networks": "mainflux-network,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-users",
|
||||
"image": "mainfluxlabs/users:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:8180->8180/tcp, [::]:8180->8180/tcp, 0.0.0.0:8184->8184/tcp, [::]:8184->8184/tcp",
|
||||
"networks": "mainflux-network,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-auth",
|
||||
"image": "mainfluxlabs/auth:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:8181->8181/tcp, [::]:8181->8181/tcp, 0.0.0.0:8189->8189/tcp, [::]:8189->8189/tcp",
|
||||
"networks": "mainflux-network,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-certs",
|
||||
"image": "mainfluxlabs/certs:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:8204->8204/tcp, [::]:8204->8204/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-postgres-writer",
|
||||
"image": "mainfluxlabs/postgres-writer:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:8900->8900/tcp, [::]:8900->8900/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-uiconfigs",
|
||||
"image": "mainfluxlabs/uiconfigs:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:9029->9029/tcp, [::]:9029->9029/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-mqtt-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-es-redis",
|
||||
"image": "redis:6.2.2-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "6379/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-downlinks-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-things-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-rules-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-filestore-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-users-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-jaeger",
|
||||
"image": "jaegertracing/all-in-one:1.53",
|
||||
"status": "Exited (255) 5 days ago",
|
||||
"ports": "5775/udp, 4317-4318/tcp, 9411/tcp, 0.0.0.0:5778->5778/tcp, [::]:5778->5778/tcp, 0.0.0.0:14268->14268/tcp, [::]:14268->14268/tcp, 14250/tcp, 6832/udp, 0.0.0.0:16686->16686/tcp, [::]:16686->16686/tcp, 0.0.0.0:6831->6831/udp, [::]:6831->6831/udp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-mosquitto",
|
||||
"image": "eclipse-mosquitto:2.0",
|
||||
"status": "Up 5 days",
|
||||
"ports": "1883/tcp",
|
||||
"networks": "mainflux-network,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-alarms-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-auth-redis",
|
||||
"image": "redis:6.2.2-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "6379/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-modbus-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-broker",
|
||||
"image": "nats:2.2.4-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "6222/tcp, 0.0.0.0:4222->4222/tcp, [::]:4222->4222/tcp, 8222/tcp",
|
||||
"networks": "mainflux-network,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-webhooks-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-postgres",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-smtp-notifier-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-certs-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-postgres-reader",
|
||||
"image": "mainfluxlabs/postgres-reader:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:8905->8905/tcp, [::]:8905->8905/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-auth-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-uiconfigs-db",
|
||||
"image": "postgres:13.3-alpine",
|
||||
"status": "Up 5 days",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mainflux-network"
|
||||
},
|
||||
{
|
||||
"name": "mainfluxlabs-ui",
|
||||
"image": "mainfluxlabs/ui:v0.36.1",
|
||||
"status": "Up 5 days",
|
||||
"ports": "80/tcp, 0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp",
|
||||
"networks": "mainflux-network,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-pulsar-manager",
|
||||
"image": "apachepulsar/pulsar-manager:v0.2.0",
|
||||
"status": "Exited (137) 5 days ago",
|
||||
"ports": "",
|
||||
"networks": "smartcity-shared,traefik-public,pulsar-manager-net"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-pulsar-manager-db",
|
||||
"image": "postgres:15-alpine",
|
||||
"status": "Exited (0) 5 days ago",
|
||||
"ports": "",
|
||||
"networks": "pulsar-manager-net"
|
||||
},
|
||||
{
|
||||
"name": "thingsboard-rabbitmq",
|
||||
"image": "rabbitmq:3.12-management",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 15691-15692/tcp, 25672/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "thingsboard-postgres",
|
||||
"image": "postgres:15-alpine",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "mapstore-proxy",
|
||||
"image": "nginx",
|
||||
"status": "Up 5 days",
|
||||
"ports": "80/tcp",
|
||||
"networks": "mapstore2_mapstore-network,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "mapstore-app",
|
||||
"image": "geosolutionsit/mapstore2:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "8080/tcp",
|
||||
"networks": "mapstore2_mapstore-network,smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "mapstore-postgres",
|
||||
"image": "geosolutions-mapstore/postgis",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "mapstore2_mapstore-network"
|
||||
},
|
||||
{
|
||||
"name": "emqx_emqx_1",
|
||||
"image": "emqx/emqx:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "4370/tcp, 5369/tcp, 8083-8084/tcp, 0.0.0.0:11883->1883/tcp, [::]:11883->1883/tcp, 0.0.0.0:18081->8081/tcp, [::]:18081->8081/tcp, 0.0.0.0:18883->8883/tcp, [::]:18883->8883/tcp, 0.0.0.0:38083->18083/tcp, [::]:38083->18083/tcp",
|
||||
"networks": "emqx_default,smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-pulsar",
|
||||
"image": "apachepulsar/pulsar:3.2.0",
|
||||
"status": "Exited (137) 5 days ago",
|
||||
"ports": "",
|
||||
"networks": "smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-redpanda",
|
||||
"image": "redpandadata/redpanda:v24.3.14",
|
||||
"status": "Exited (255) 5 days ago",
|
||||
"ports": "8081/tcp, 127.0.0.1:8082->8082/tcp, 0.0.0.0:19092->9092/tcp, [::]:19092->9092/tcp, 0.0.0.0:19644->9644/tcp, [::]:19644->9644/tcp",
|
||||
"networks": "smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "smart-city-redpanda-console",
|
||||
"image": "docker.redpanda.com/redpandadata/console:v2.5.0",
|
||||
"status": "Up 46 seconds (health: starting)",
|
||||
"ports": "0.0.0.0:28080->8080/tcp, [::]:28080->8080/tcp",
|
||||
"networks": "smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "stellio-api-gateway",
|
||||
"image": "stellio/stellio-api-gateway:latest-dev",
|
||||
"status": "Up 2 days",
|
||||
"ports": "8080/tcp",
|
||||
"networks": "stellio-context-broker_default,traefik-public,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "frost_allinone-web-1",
|
||||
"image": "fraunhoferiosb/frost-server:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "1883/tcp, 8089/tcp, 127.0.0.1:8090->8080/tcp",
|
||||
"networks": "frost_allinone_default,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "geoserver_stack-geoserver-1",
|
||||
"image": "oscarfonts/geoserver:2.25.2",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "8080/tcp",
|
||||
"networks": "frost_http_default,smartcity-shared,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "grafana_stack-grafana-1",
|
||||
"image": "grafana/grafana:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "3000/tcp",
|
||||
"networks": "traefik-public,frost_http_default"
|
||||
},
|
||||
{
|
||||
"name": "frost_http-web-1",
|
||||
"image": "fraunhoferiosb/frost-server-http:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "8080/tcp",
|
||||
"networks": "frost_http_default,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "esperotech",
|
||||
"image": "esperotech/yaade:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "0.0.0.0:9339->9339/tcp, [::]:9339->9339/tcp",
|
||||
"networks": "yaade_default"
|
||||
},
|
||||
{
|
||||
"name": "stellio-search-service",
|
||||
"image": "stellio/stellio-search-service:latest-dev",
|
||||
"status": "Exited (255) 5 days ago",
|
||||
"ports": "8083/tcp",
|
||||
"networks": "traefik-public,smartcity-shared,stellio-context-broker_default"
|
||||
},
|
||||
{
|
||||
"name": "stellio-subscription-service",
|
||||
"image": "stellio/stellio-subscription-service:latest-dev",
|
||||
"status": "Exited (255) 5 days ago",
|
||||
"ports": "8084/tcp",
|
||||
"networks": "smartcity-shared,stellio-context-broker_default,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "stellio-kafka",
|
||||
"image": "confluentinc/cp-kafka:8.1.0",
|
||||
"status": "Exited (255) 5 days ago",
|
||||
"ports": "9092/tcp, 0.0.0.0:29092->29092/tcp, [::]:29092->29092/tcp",
|
||||
"networks": "smartcity-shared,stellio-context-broker_default"
|
||||
},
|
||||
{
|
||||
"name": "stellio-postgres",
|
||||
"image": "stellio/stellio-timescale-postgis:16-2.24.0-3.6",
|
||||
"status": "Exited (255) 5 days ago",
|
||||
"ports": "5432/tcp",
|
||||
"networks": "smartcity-shared,stellio-context-broker_default"
|
||||
},
|
||||
{
|
||||
"name": "digital-twin-nodered",
|
||||
"image": "nodered/node-red:3.1",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "0.0.0.0:1880->1880/tcp, [::]:1880->1880/tcp",
|
||||
"networks": "traefik,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "digital-twin-connector",
|
||||
"image": "python:3.11-slim",
|
||||
"status": "Up 30 minutes",
|
||||
"ports": "",
|
||||
"networks": "digital-twin_digital-twin,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "gitea",
|
||||
"image": "gitea/gitea:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "22/tcp, 3000/tcp",
|
||||
"networks": "gitea_default,traefik,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "honcho-grafana-1",
|
||||
"image": "grafana/grafana:11.4.0",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "127.0.0.1:3088->3000/tcp",
|
||||
"networks": "honcho_default"
|
||||
},
|
||||
{
|
||||
"name": "honcho-prometheus-1",
|
||||
"image": "prom/prometheus:v3.2.1",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "127.0.0.1:9091->9090/tcp",
|
||||
"networks": "honcho_default,smartcity-shared"
|
||||
},
|
||||
{
|
||||
"name": "honcho-api-1",
|
||||
"image": "honcho:latest",
|
||||
"status": "Up 31 seconds (health: starting)",
|
||||
"ports": "127.0.0.1:8088->8000/tcp",
|
||||
"networks": "traefik-public,honcho_default"
|
||||
},
|
||||
{
|
||||
"name": "honcho-deriver-1",
|
||||
"image": "honcho-deriver",
|
||||
"status": "Up 5 days (healthy)",
|
||||
"ports": "8000/tcp",
|
||||
"networks": "honcho_default"
|
||||
},
|
||||
{
|
||||
"name": "phpipam-phpipam-web-1",
|
||||
"image": "phpipam/phpipam-www:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "127.0.0.1:8085->80/tcp",
|
||||
"networks": "phpipam_default,traefik-public"
|
||||
},
|
||||
{
|
||||
"name": "phpipam-phpipam-cron-1",
|
||||
"image": "phpipam/phpipam-cron:latest",
|
||||
"status": "Up 5 days",
|
||||
"ports": "80/tcp",
|
||||
"networks": "phpipam_default"
|
||||
}
|
||||
]
|
||||
}
|
||||
57
snapshots/2026-05-26/ARCHITECTURE.md
Normal file
57
snapshots/2026-05-26/ARCHITECTURE.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# Snapshot 2026-05-26 — Smart City Digital Twin Martinique
|
||||
|
||||
## État des services
|
||||
|
||||
### Pipeline de données ✅ FONCTIONNEL
|
||||
```
|
||||
Simulateur (60 capteurs) → EMQX + Mosquitto → Telegraf → InfluxDB → Grafana
|
||||
```
|
||||
|
||||
### Containers UP
|
||||
| Container | Status | Notes |
|
||||
|-----------|--------|-------|
|
||||
| smart-city-simulator | ✅ Up 2j | 60 capteurs, MQTT OK |
|
||||
| smart-city-telegraf | ✅ Up | Connecté EMQX + Mosquitto |
|
||||
| smart-city-influxdb | ✅ Up healthy | Bucket `smartcity` with data |
|
||||
| smart-city-grafana | ✅ Up | Dashboard v3, datasource corrigé |
|
||||
| openremote-postgresql | ✅ Up healthy | timescaledb-ha:pg15 |
|
||||
| openremote-keycloak | ✅ Up | Recréé manuellement |
|
||||
| openremote-manager | ❌ Crash loop | Flyway corrigé mais PG recréé |
|
||||
| contexus-app | ⚠️ Unhealthy | Postgres/Redis OK |
|
||||
| contexus-postgres | ✅ Up healthy | |
|
||||
| contexus-redis | ✅ Up healthy | |
|
||||
|
||||
### Containers DOWN (intentionnel pour CPU)
|
||||
- ThingsBoard, Pulsar, Redpanda, FROST, Stellio, Orion-LD
|
||||
|
||||
## Données InfluxDB confirmées
|
||||
- Bucket: `smartcity`
|
||||
- Measurement: `mqtt_consumer`
|
||||
- Tag `topic`: `smartcity/{type}/{id}` (ex: `smartcity/airquality/1`)
|
||||
- Types: airquality(20), parking(20), traffic(10), weather(10), light(5), noise(5)
|
||||
|
||||
## Grafana Dashboard
|
||||
- UID: `smartcity-martinique-complete`
|
||||
- URL: https://grafana.digitribe.fr/d/smartcity-martinique-complete/smart-city-digital-twin-martinique-complet
|
||||
- Version: 3 (15 panels, requêtes Flux corrigées)
|
||||
- Datasource: InfluxDB-SmartCity-Correct (uid: dd1bfc24-...)
|
||||
|
||||
## Fichiers modifiés cette session
|
||||
- `grafana-datasources.yml`
|
||||
- `grafana-dashboard-smartcity.json`
|
||||
- `grafana/provisioning/dashboards/smart-city-dashboards.json`
|
||||
- `grafana/provisioning/datasources/datasources.yml`
|
||||
- `openremote/docker-compose.yml` (OR_SETUP_TYPE: "default")
|
||||
- `TODO.md` (home + projet)
|
||||
- `session_resume_2026-05-26.md` (nouveau)
|
||||
|
||||
## Commit
|
||||
- `5bbd5a6` — "fix: Grafana dashboard 'no data' — datasource + Flux queries"
|
||||
- Push Gitea: ❌ (502 Bad Gateway)
|
||||
|
||||
## Prochaines étapes
|
||||
1. Recloner le répertoire (décision utilisateur)
|
||||
2. Relancer OpenRemote après reclonage
|
||||
3. Push Gitea quand le serveur sera accessible
|
||||
4. Configurer les 60 devices Contexus
|
||||
5. Activer BunkerM dans Telegraf
|
||||
109
snapshots/2026-05-26/containers.txt
Normal file
109
snapshots/2026-05-26/containers.txt
Normal file
@@ -0,0 +1,109 @@
|
||||
metabase-app metabase/metabase:latest Up 15 hours (healthy)
|
||||
metabase-postgres postgres:15-alpine Up 15 hours (healthy)
|
||||
smart-city-telegraf telegraf:1.28 Up 17 hours
|
||||
smart-city-simulator smart-city-simulator Up 17 hours
|
||||
bunkerm-bunkerm-1 bunkeriot/bunkerm:latest Up 18 hours (healthy)
|
||||
openremote-keycloak quay.io/keycloak/keycloak:24.0 Up 21 hours
|
||||
gracious_mestorf openremote/manager:latest Up 22 hours (unhealthy)
|
||||
traefik traefik:v3.1 Up 4 days
|
||||
smart-city-loki grafana/loki:latest Up 5 days
|
||||
smart-city-promtail grafana/promtail:latest Up 5 days
|
||||
localai-api localai/localai:latest Up 6 days (healthy)
|
||||
mainfluxlabs-mqtt mainfluxlabs/mqtt:v0.36.1 Up 6 days
|
||||
docker_tb-js-executor_10 thingsboard/tb-js-executor:latest Restarting (0) 1 second ago
|
||||
docker_tb-js-executor_8 thingsboard/tb-js-executor:latest Restarting (0) 1 second ago
|
||||
docker_tb-js-executor_9 thingsboard/tb-js-executor:latest Up 28 seconds
|
||||
docker_tb-web-ui1_1 thingsboard/tb-web-ui:latest Up 6 days
|
||||
docker_tb-js-executor_6 thingsboard/tb-js-executor:latest Restarting (0) 11 seconds ago
|
||||
docker_zookeeper_1 zookeeper:3.8.1 Up 6 days
|
||||
docker_tb-js-executor_7 thingsboard/tb-js-executor:latest Up 24 seconds
|
||||
docker_tb-js-executor_4 thingsboard/tb-js-executor:latest Restarting (0) 20 seconds ago
|
||||
docker_tb-js-executor_5 thingsboard/tb-js-executor:latest Up 33 seconds
|
||||
docker_tb-js-executor_2 thingsboard/tb-js-executor:latest Up 27 seconds
|
||||
docker_tb-js-executor_1 thingsboard/tb-js-executor:latest Up 28 seconds
|
||||
docker_tb-js-executor_3 thingsboard/tb-js-executor:latest Up 34 seconds
|
||||
docker_tb-web-ui2_1 thingsboard/tb-web-ui:latest Up 6 days
|
||||
contexus-app contexusio/contexus:latest Up 4 days (unhealthy)
|
||||
contexus-postgres postgres:16 Up 6 days (healthy)
|
||||
contexus-redis redis:7-alpine Up 6 days (healthy)
|
||||
smart-city-kepler smart-city-kepler:latest Up 6 days
|
||||
postgis-smartcity postgis/postgis:15-3.4 Up 6 days (healthy)
|
||||
smart-city-ditto-policies eclipse/ditto-policies:latest Up 6 days
|
||||
smart-city-ditto-gateway eclipse/ditto-gateway:latest Up 4 days
|
||||
smart-city-ditto-mongodb mongo:6 Up 6 days
|
||||
smart-city-digital-twin-martinique-chirpstack-rest-api-1 chirpstack/chirpstack-rest-api:4 Up 6 days
|
||||
smart-city-digital-twin-martinique-chirpstack-1 chirpstack/chirpstack:latest Up 6 days
|
||||
agentgateway cr.agentgateway.dev/agentgateway:latest Up 6 days
|
||||
smart-city-digital-twin-martinique-chirpstack-gateway-bridge-basicstation-1 chirpstack/chirpstack-gateway-bridge:4 Up 6 days
|
||||
smart-city-digital-twin-martinique-chirpstack-gateway-bridge-1 chirpstack/chirpstack-gateway-bridge:4 Up 6 days
|
||||
smart-city-digital-twin-martinique-mosquitto-1 eclipse-mosquitto:2 Up 6 days
|
||||
smart-city-digital-twin-martinique-redis-1 redis:7-alpine Up 6 days
|
||||
chirpstack-redis-1 redis:7-alpine Up 6 days
|
||||
chirpstack-mosquitto-1 eclipse-mosquitto:2 Up 6 days
|
||||
chirpstack-postgres-1 postgres:14-alpine Up 6 days
|
||||
smart-city-prometheus-brokers prom/prometheus:latest Up 37 hours
|
||||
fiware-gis-quickstart-orionproxy-1 fiware-gis-quickstart-orionproxy Up 6 days
|
||||
fiware-gis-quickstart-orion-1 quay.io/fiware/orion-ld Up 6 days (healthy)
|
||||
fiware-gis-quickstart-mongo-db-1 mongo:4.2 Up 6 days
|
||||
smart-city-influxdb influxdb:2.7-alpine Up 6 days (healthy)
|
||||
smart-city-grafana grafana/grafana:10.2.0 Up 21 hours
|
||||
docker-exporter docker-exporter:latest Up 5 days
|
||||
mainfluxlabs-http mainfluxlabs/http:v0.36.1 Up 6 days
|
||||
mainfluxlabs-rules mainfluxlabs/rules:v0.36.1 Up 6 days
|
||||
mainfluxlabs-converters mainfluxlabs/converters:v0.36.1 Up 6 days
|
||||
mainfluxlabs-smtp-notifier mainfluxlabs/smtp-notifier:v0.36.1 Up 6 days
|
||||
mainfluxlabs-modbus mainfluxlabs/modbus:v0.36.1 Up 6 days
|
||||
mainfluxlabs-ws mainfluxlabs/ws:v0.36.1 Up 6 days
|
||||
mainfluxlabs-webhooks mainfluxlabs/webhooks:v0.36.1 Up 6 days
|
||||
mainfluxlabs-downlinks mainfluxlabs/downlinks:v0.36.1 Up 6 days
|
||||
mainfluxlabs-alarms mainfluxlabs/alarms:v0.36.1 Up 6 days
|
||||
mainfluxlabs-filestore mainfluxlabs/filestore:v0.36.1 Up 6 days
|
||||
mainfluxlabs-coap mainfluxlabs/coap:v0.36.1 Up 6 days
|
||||
mainfluxlabs-things mainfluxlabs/things:v0.36.1 Up 6 days
|
||||
mainfluxlabs-users mainfluxlabs/users:v0.36.1 Up 6 days
|
||||
mainfluxlabs-auth mainfluxlabs/auth:v0.36.1 Up 6 days
|
||||
mainfluxlabs-certs mainfluxlabs/certs:v0.36.1 Up 6 days
|
||||
mainfluxlabs-postgres-writer mainfluxlabs/postgres-writer:v0.36.1 Up 6 days
|
||||
mainfluxlabs-uiconfigs mainfluxlabs/uiconfigs:v0.36.1 Up 6 days
|
||||
mainfluxlabs-mqtt-db postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-es-redis redis:6.2.2-alpine Up 6 days
|
||||
mainfluxlabs-downlinks-db postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-things-db postgres:13.3-alpine Up 6 days (healthy)
|
||||
mainfluxlabs-rules-db postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-filestore-db postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-users-db postgres:13.3-alpine Up 6 days (healthy)
|
||||
mainfluxlabs-mosquitto eclipse-mosquitto:2.0 Up 6 days
|
||||
mainfluxlabs-alarms-db postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-auth-redis redis:6.2.2-alpine Up 6 days
|
||||
mainfluxlabs-modbus-db postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-broker nats:2.2.4-alpine Up 6 days
|
||||
mainfluxlabs-webhooks-db postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-postgres postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-smtp-notifier-db postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-certs-db postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-postgres-reader mainfluxlabs/postgres-reader:v0.36.1 Up 6 days
|
||||
mainfluxlabs-auth-db postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-uiconfigs-db postgres:13.3-alpine Up 6 days
|
||||
mainfluxlabs-ui mainfluxlabs/ui:v0.36.1 Up 6 days
|
||||
thingsboard-rabbitmq rabbitmq:3.12-management Up 6 days (healthy)
|
||||
thingsboard-postgres postgres:15-alpine Up 6 days (healthy)
|
||||
mapstore-proxy nginx Up 6 days
|
||||
mapstore-app geosolutionsit/mapstore2:latest Up 6 days
|
||||
mapstore-postgres geosolutions-mapstore/postgis Up 6 days (healthy)
|
||||
emqx_emqx_1 emqx/emqx:latest Up 6 days
|
||||
smart-city-redpanda-console docker.redpanda.com/redpandadata/console:v2.5.0 Up About a minute (health: starting)
|
||||
stellio-api-gateway stellio/stellio-api-gateway:latest-dev Up 3 days
|
||||
frost_allinone-web-1 fraunhoferiosb/frost-server:latest Up 6 days
|
||||
geoserver_stack-geoserver-1 oscarfonts/geoserver:2.25.2 Up 6 days (healthy)
|
||||
grafana_stack-grafana-1 grafana/grafana:latest Up 6 days
|
||||
frost_http-web-1 fraunhoferiosb/frost-server-http:latest Up 6 days
|
||||
esperotech esperotech/yaade:latest Up 6 days
|
||||
digital-twin-nodered nodered/node-red:3.1 Up 6 days (healthy)
|
||||
digital-twin-connector python:3.11-slim Up About an hour
|
||||
gitea gitea/gitea:latest Up 6 days
|
||||
honcho-grafana-1 grafana/grafana:11.4.0 Up 6 days (healthy)
|
||||
honcho-prometheus-1 prom/prometheus:v3.2.1 Up 5 days (healthy)
|
||||
honcho-api-1 honcho:latest Restarting (1) 11 seconds ago
|
||||
honcho-deriver-1 honcho-deriver Up 6 days (healthy)
|
||||
phpipam-phpipam-web-1 phpipam/phpipam-www:latest Up 6 days
|
||||
phpipam-phpipam-cron-1 phpipam/phpipam-cron:latest Up 6 days
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
# Input: MQTT Consumer - Mosquitto
|
||||
[[inputs.mqtt_consumer]]
|
||||
servers = ["tcp://smart-city-mosquitto:1883"]
|
||||
servers = ["tcp://smart-city-digital-twin-martinique-mosquitto-1:1883"]
|
||||
topics = [
|
||||
"airquality/#",
|
||||
"traffic/#",
|
||||
@@ -41,9 +41,9 @@
|
||||
data_format = "json"
|
||||
qos = 0
|
||||
|
||||
# Input: MQTT Consumer - BunkerM (with auth)
|
||||
# Input: MQTT Consumer - BunkerM
|
||||
[[inputs.mqtt_consumer]]
|
||||
servers = ["tcp://bunkerm_bunkerm_1:1900"]
|
||||
servers = ["tcp://bunkerm-bunkerm-1:1900"]
|
||||
topics = [
|
||||
"airquality/#",
|
||||
"traffic/#",
|
||||
|
||||
Reference in New Issue
Block a user