Les cellules disent desormais si le module chargeait
Le proprietaire veut « dans Grafana le detail de chaque cellule pendant la charge ». Le detail existait deja ; ce qui manquait etait le « pendant la charge » — rien ne disait QUAND le module chargeait, et un ecart entre cellules ne veut rien dire hors de son courant : le 05/09 la cellule meneuse etait a 3555 mV sous 50 A et a 3496 mV sous 30 A, meme module, meme tension de parc. Le releve console porte le courant depuis le 17/09, mais l ingestion ecrivait `null` : elle ne lisait que les quinze tensions. Elle repere maintenant la colonne `courant_mA` PAR SON NOM — les US5000 et les US2000C n emettent pas les memes colonnes, et une position ferait lire la mauvaise grandeur des qu on deplace le cable d un pack a l autre. Absente des anciens fichiers, donc les lignes deja versees gardent leur courant inconnu. Deux panneaux au tableau « Les batteries ». « Sante des modules — tous, d un coup d oeil » : le resume qu on lit en premier, tous modules ensemble, la ou les autres panneaux demandent de choisir un module d avance. Ecart maintenant, ecart maximum sur la periode, cellule la plus haute et la plus basse, courant au moment du releve, date du dernier releve. Releve au deploiement : cinq modules vivants, ecarts de 1 a 3 mV — le parc restant est sain, les trois modules atteints sont sortis le 12/09. « Le module chargeait-il ? » : le courant du MODULE, lu dans la table des cellules et non dans celle du parc, ce qui permet de voir qu un module se charge moins que ses voisins. Verifie contre la base et pas seulement execute : 75/75 requetes valides ne prouve que l execution, donc les deux nouvelles ont ete rejouees avec la vraie fenetre et rendent bien les grandeurs voulues. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
@@ -73,6 +73,212 @@
|
||||
]
|
||||
},
|
||||
"panels": [
|
||||
{
|
||||
"type": "table",
|
||||
"title": "Sante des modules — tous, d'un coup d'oeil",
|
||||
"description": "Le resume qu'on lit en premier, tous modules ensemble — les autres panneaux demandent de choisir un module d'avance. L'ecart entre la cellule la plus haute et la plus basse est l'indicateur qui resume un module en un nombre : sous 20 mV il est sain, au-dela de 150 mV le BMS reduit le courant de charge de TOUT le parc. La colonne « Courant » dit si le module etait en charge au moment du releve : un ecart ne se compare qu'a courant comparable.",
|
||||
"datasource": {
|
||||
"type": "grafana-postgresql-datasource",
|
||||
"uid": "evcs-pg"
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"refId": "A",
|
||||
"datasource": {
|
||||
"type": "grafana-postgresql-datasource",
|
||||
"uid": "evcs-pg"
|
||||
},
|
||||
"format": "table",
|
||||
"rawQuery": true,
|
||||
"editorMode": "code",
|
||||
"rawSql": "WITH vivants AS (\n SELECT module FROM cellule GROUP BY module\n HAVING max(ts) > now() - interval '2 hours'),\ndernier AS (\n SELECT DISTINCT ON (module) module, ts FROM cellule\n WHERE module IN (SELECT module FROM vivants)\n ORDER BY module, ts DESC),\nmaintenant AS (\n SELECT c.module, max(c.mv) - min(c.mv) AS ecart,\n max(c.mv) AS haute, min(c.mv) AS basse,\n max(c.courant_ma) AS ma, d.ts\n FROM cellule c JOIN dernier d ON d.module = c.module AND d.ts = c.ts\n GROUP BY c.module, d.ts),\nperiode AS (\n SELECT module, max(ecart) AS ecart_max FROM (\n SELECT module, ts, max(mv) - min(mv) AS ecart\n FROM cellule WHERE $__timeFilter(ts) GROUP BY module, ts) x\n GROUP BY module)\nSELECT m.module AS \"Module\",\n m.ecart AS \"Ecart maintenant\",\n p.ecart_max AS \"Ecart max sur la periode\",\n m.haute AS \"Plus haute\", m.basse AS \"Plus basse\",\n round(m.ma / 1000.0, 1) AS \"Courant (A)\",\n to_char(m.ts, 'DD/MM HH24:MI') AS \"Dernier releve\"\n FROM maintenant m LEFT JOIN periode p USING (module)\n ORDER BY m.ecart DESC"
|
||||
}
|
||||
],
|
||||
"gridPos": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 24,
|
||||
"h": 8
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"custom": {
|
||||
"align": "left",
|
||||
"cellOptions": {
|
||||
"type": "auto"
|
||||
},
|
||||
"filterable": true
|
||||
}
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Ecart maintenant"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "unit",
|
||||
"value": "mvolt"
|
||||
},
|
||||
{
|
||||
"id": "custom.cellOptions",
|
||||
"value": {
|
||||
"type": "color-background"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "thresholds",
|
||||
"value": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "#EAB839",
|
||||
"value": 20
|
||||
},
|
||||
{
|
||||
"color": "orange",
|
||||
"value": 80
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 150
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Ecart max sur la periode"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "unit",
|
||||
"value": "mvolt"
|
||||
},
|
||||
{
|
||||
"id": "custom.cellOptions",
|
||||
"value": {
|
||||
"type": "color-text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "thresholds",
|
||||
"value": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "#EAB839",
|
||||
"value": 50
|
||||
},
|
||||
{
|
||||
"color": "orange",
|
||||
"value": 150
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 300
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Plus haute"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "unit",
|
||||
"value": "mvolt"
|
||||
},
|
||||
{
|
||||
"id": "thresholds",
|
||||
"value": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{
|
||||
"color": "green",
|
||||
"value": null
|
||||
},
|
||||
{
|
||||
"color": "#EAB839",
|
||||
"value": 3480
|
||||
},
|
||||
{
|
||||
"color": "orange",
|
||||
"value": 3520
|
||||
},
|
||||
{
|
||||
"color": "red",
|
||||
"value": 3550
|
||||
},
|
||||
{
|
||||
"color": "dark-red",
|
||||
"value": 3600
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "custom.cellOptions",
|
||||
"value": {
|
||||
"type": "color-text"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Plus basse"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "unit",
|
||||
"value": "mvolt"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": {
|
||||
"id": "byName",
|
||||
"options": "Courant (A)"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"id": "unit",
|
||||
"value": "amp"
|
||||
},
|
||||
{
|
||||
"id": "decimals",
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {
|
||||
"showHeader": true,
|
||||
"cellHeight": "sm",
|
||||
"footer": {
|
||||
"show": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "timeseries",
|
||||
"title": "Cellule par cellule — $module",
|
||||
@@ -96,7 +302,7 @@
|
||||
],
|
||||
"gridPos": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"y": 8,
|
||||
"w": 24,
|
||||
"h": 10
|
||||
},
|
||||
@@ -148,6 +354,59 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "timeseries",
|
||||
"title": "Le module chargeait-il ? — $module",
|
||||
"description": "Positif en charge, negatif en decharge. A lire en regard du panneau au-dessus : l'ecart entre cellules s'ouvre avec le courant, et une cellule abimee ne se trahit qu'en charge.",
|
||||
"datasource": {
|
||||
"type": "grafana-postgresql-datasource",
|
||||
"uid": "evcs-pg"
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"refId": "A",
|
||||
"datasource": {
|
||||
"type": "grafana-postgresql-datasource",
|
||||
"uid": "evcs-pg"
|
||||
},
|
||||
"format": "time_series",
|
||||
"rawQuery": true,
|
||||
"editorMode": "code",
|
||||
"rawSql": "SELECT ts AS time, 'courant du module' AS metric,\n courant_ma / 1000.0 AS a\nFROM cellule\nWHERE module = '$module' AND cellule = 1\n AND courant_ma IS NOT NULL AND $__timeFilter(ts)\nORDER BY 1"
|
||||
}
|
||||
],
|
||||
"gridPos": {
|
||||
"x": 0,
|
||||
"y": 18,
|
||||
"w": 24,
|
||||
"h": 5
|
||||
},
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"unit": "amp",
|
||||
"color": {
|
||||
"mode": "palette-classic"
|
||||
},
|
||||
"custom": {
|
||||
"fillOpacity": 15,
|
||||
"lineWidth": 1
|
||||
}
|
||||
},
|
||||
"overrides": []
|
||||
},
|
||||
"options": {
|
||||
"legend": {
|
||||
"displayMode": "list",
|
||||
"placement": "bottom",
|
||||
"showLegend": true,
|
||||
"calcs": []
|
||||
},
|
||||
"tooltip": {
|
||||
"mode": "multi",
|
||||
"sort": "desc"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "timeseries",
|
||||
"title": "Ecart entre la plus haute et la plus basse",
|
||||
@@ -171,7 +430,7 @@
|
||||
],
|
||||
"gridPos": {
|
||||
"x": 0,
|
||||
"y": 10,
|
||||
"y": 23,
|
||||
"w": 12,
|
||||
"h": 8
|
||||
},
|
||||
@@ -239,7 +498,7 @@
|
||||
],
|
||||
"gridPos": {
|
||||
"x": 12,
|
||||
"y": 10,
|
||||
"y": 23,
|
||||
"w": 12,
|
||||
"h": 8
|
||||
},
|
||||
@@ -308,7 +567,7 @@
|
||||
],
|
||||
"gridPos": {
|
||||
"x": 0,
|
||||
"y": 18,
|
||||
"y": 31,
|
||||
"w": 12,
|
||||
"h": 10
|
||||
},
|
||||
@@ -433,7 +692,7 @@
|
||||
],
|
||||
"gridPos": {
|
||||
"x": 12,
|
||||
"y": 18,
|
||||
"y": 31,
|
||||
"w": 12,
|
||||
"h": 10
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user