0 Votes

Modifications pour le document News

Modifié par john le 2026/09/26 17:02

Depuis la version 1.1
modifié par john
sur 2026/09/26 16:33
Commentaire de modification : Il n'y a aucun commentaire pour cette version
À la version 2.1
modifié par john
sur 2026/09/26 17:02
Commentaire de modification : Il n'y a aucun commentaire pour cette version

Résumé

Détails

Propriétés de la Page
Contenu
... ... @@ -1,7 +1,9 @@
1 -Page secondaire //news//, définie dans ##news.yml##. Elle regroupe des informations qui changent en continu : capteurs du Pico W, image astronomique du jour, flux RSS, vols d'un aéroport, actualités, cours et portefeuilles de cryptomonnaies. Configuration commune et déploiement : [[Dashy>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Dashy.WebHome]].
1 +Page //news// : capteurs du Pico W, image astronomique du jour, flux RSS, vols à Roissy, actualités, crypto-monnaies. Déploiement et configuration commune : [[Dashy>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Dashy.WebHome]].
2 2  
3 -== En-tête et navigation ==
3 +{{toc/}}
4 4  
5 +== pageInfo ==
6 +
5 5  {{code language="yaml"}}
6 6  pageInfo:
7 7   title: News
... ... @@ -9,6 +9,11 @@
9 9   navLinks:
10 10   - title: Home
11 11   path: /
14 +{{/code}}
15 +
16 +== pages ==
17 +
18 +{{code language="yaml"}}
12 12  pages:
13 13   - name: bookmarks
14 14   path: bookmark.yml
... ... @@ -18,40 +18,36 @@
18 18   path: news.yml
19 19  {{/code}}
20 20  
21 -== Sections ==
28 +== Widgets ==
22 22  
23 -|=Section|=Icône|=Items|=Widgets|=Affichage
24 -|IoT — Pico W|##hl-raspberry-pi##|Pico W|##embed##|##rows: 2##
25 -|NASA|##hl-nasa##|—|##apod##|—
26 -|Debian CVE|##hl-debian-linux##|—|##rss-feed##|—
27 -|Aeroport|##hl-flightaware##|—|##flight-data##|—
28 -|News|##fad fa-newspaper##|—|##rss-feed##|repliée (##collapsed: true##)
29 -|Medias|##hl-youtube##|—|##news-headlines##|repliée (##collapsed: true##)
30 -|Crypto market|##hl-bitcoin##|—|##crypto-watch-list##|—
31 -|Binance Wallets|##hl-gollum##|—|##wallet-balance##|##rows: 2##, ##cols: 2##
32 -|Uphold Wallets|favicon distant (URL complète)|—|##wallet-balance##|##rows: 2##, ##cols: 2##
30 +|=Widget|=Section|=Affiche|=Identifiants
31 +|##embed##|IoT — Pico W|Température, humidité, pression et altitude du Pico W|—
32 +|##apod##|NASA|Image astronomique du jour de la NASA|—
33 +|##rss-feed##|Debian CVE, News|Derniers articles d'un flux RSS|—
34 +|##flight-data##|Aeroport|Départs et arrivées d'un aéroport|Clé RapidAPI
35 +|##news-headlines##|Medias|Titres d'actualité par pays et langue|Clé Currents API
36 +|##crypto-watch-list##|Crypto market|Cours CoinGecko des monnaies listées|—
37 +|##wallet-balance##|Binance Wallets, Uphold Wallets|Solde et transactions d'une adresse Ethereum|—
33 33  
34 -Les sections Debian CVE et Aeroport portent ##useProxy: true## au niveau de la section : Dashy ne le lit pas à cet endroit, leurs widgets appellent donc leur API directement depuis le navigateur.
39 +== Sections ==
35 35  
36 -== Item ==
41 +=== IoT — Pico W ===
37 37  
38 38  {{code language="yaml"}}
44 +sections:
45 + - name: IoT — Pico W
46 + icon: hl-raspberry-pi
47 + displayData:
48 + cols: 1
49 + rows: 2
50 + items:
39 39   - title: Pico W
40 40   description: Interface Web LED + État
41 41   icon: hl-raspberry-pi
42 42   url: http://<IP_PICO>
43 43   statusCheck: true
44 -{{/code}}
45 -
46 -La vérification d'état est faite par le serveur de Dashy, qui doit pouvoir joindre ##<IP_PICO>## depuis le conteneur. Le lien ne fonctionne que depuis le LAN ; l'interface du Pico est aussi relayée par SWAG sous ##/pico/## sur le domaine de Dashy, derrière Authelia.
47 -
48 -== Widgets ==
49 -
50 -=== embed (capteurs du Pico W) ===
51 -
52 -Widget HTML libre : Dashy injecte le HTML, le CSS et le script fournis. Ici, le script lit toutes les 30 secondes l'API JSON du Pico W (température, humidité, pression, altitude) et affiche quatre cartes.
53 -
54 -{{code language="yaml"}}
56 + id: 0_268_picow
57 + widgets:
55 55   - type: embed
56 56   options:
57 57   html: |
... ... @@ -95,7 +95,7 @@
95 95   '<div class="pico-value">' + d.altitude.toFixed(1) + ' m</div>' +
96 96   '<div class="pico-label">Altitude</div></div>' +
97 97   '</div>' +
98 - '<div class="pico-footer">Mis à jour à ' + now + '</div>';
101 + '<div class="pico-footer">Mis à jour à ' + now + ' · Pico W <IP_PICO></div>';
99 99   }
100 100   function fetchData() {
101 101   fetch('/cors-proxy', { headers: { 'Target-URL': API } })
... ... @@ -103,84 +103,124 @@
103 103   .then(render)
104 104   .catch(function() {
105 105   document.getElementById('pico-content').innerHTML =
106 - '<p class="pico-error">⚠️ Impossible de joindre le Pico</p>';
109 + '<p class="pico-error">⚠️ Impossible de joindre le Pico (<IP_PICO>)</p>';
107 107   });
108 108   }
109 109   fetchData();
110 110   setInterval(fetchData, 30000);
111 111   })();
115 + id: 0_268_picow_sensor
112 112  {{/code}}
113 113  
114 -* Le script appelle lui-même ##/cors-proxy## avec l'en-tête ##Target-URL## : la page Dashy est en https et le Pico en http sur le LAN, un appel direct serait bloqué (contenu mixte et CORS). Derrière SWAG, ##<IP_PICO>## doit figurer dans ##allowed_internal##.
115 -* L'API du Pico doit renvoyer un objet JSON avec les champs numériques ##temperature##, ##humidity##, ##pressure## et ##altitude##.
116 -* Aucun identifiant.
118 +Le script du widget ##embed## appelle ##/cors-proxy## avec l'en-tête ##Target-URL##, car le Pico est en http sur le LAN. L'API du Pico renvoie un JSON avec ##temperature##, ##humidity##, ##pressure## et ##altitude##. ##<IP_PICO>## doit figurer dans ##allowed_internal## de SWAG.
117 117  
118 -=== apod ===
120 +=== NASA ===
119 119  
120 -Affiche l'image astronomique du jour de la NASA, avec son titre et sa description. Ni option ni identifiant.
121 -
122 122  {{code language="yaml"}}
123 +sections:
124 + - name: NASA
125 + icon: hl-nasa
126 + displayData:
127 + sortBy: default
128 + rows: 1
129 + cols: 1
130 + collapsed: false
131 + hideForGuests: false
132 + items: []
133 + widgets:
123 123   - type: apod
135 + id: 0_291_apod
124 124  {{/code}}
125 125  
126 -=== rss-feed ===
138 +=== Debian CVE ===
127 127  
128 -Affiche les derniers articles d'un flux RSS, converti en JSON par le service rss2json. Utilisé pour les avis de sécurité Debian et pour un site d'actualité Ubuntu.
129 -
130 130  {{code language="yaml"}}
141 +sections:
142 + - name: Debian CVE
143 + icon: hl-debian-linux
144 + useProxy: true
145 + widgets:
131 131   - type: rss-feed
132 132   options:
133 - rssUrl: <URL_FLUX_RSS>
134 - limit: 2
148 + rssUrl: https://www.debian.org/security/dsa
149 + id: 0_833_rssfeed
135 135  {{/code}}
136 136  
137 -* ##rssUrl## : adresse du flux (pour les avis de sécurité Debian : le flux DSA du site Debian).
138 -* ##limit## : nombre d'articles affichés.
139 -* Aucun identifiant : rss2json est utilisé en accès gratuit, avec un nombre de requêtes limité.
152 +##useProxy## est placé sur la section : il est ignoré, le widget appelle rss2json directement.
140 140  
141 -=== flight-data ===
154 +=== Aeroport ===
142 142  
143 -Affiche les prochains départs et arrivées d'un aéroport, via l'API AeroDataBox distribuée par RapidAPI.
144 -
145 145  {{code language="yaml"}}
157 +sections:
158 + - name: Aeroport
159 + icon: hl-flightaware
160 + useProxy: true
161 + widgets:
146 146   - type: flight-data
147 147   options:
148 - airport: <CODE_OACI>
164 + airport: LFPG
149 149   apiKey: <CLE_API_RAPIDAPI>
150 150   limit: 12
151 151   direction: all
168 + id: 0_844_flightdata
152 152  {{/code}}
153 153  
154 -* ##airport## : code OACI à quatre lettres de l'aéroport.
155 -* ##direction## : ##all##, ##departure## ou ##arrival##.
156 -* ##limit## : nombre de vols affichés.
157 -* ##apiKey## : clé RapidAPI. Créer un compte sur RapidAPI, s'abonner à l'API AeroDataBox (offre gratuite, quota mensuel limité), puis copier la clé ##X-RapidAPI-Key## de l'application par défaut. Elle est commune à toutes les API RapidAPI du compte.
158 -* La clé est envoyée dans l'en-tête ##x-rapidapi-key##. Le proxy de SWAG ne relaie pas cet en-tête : ne pas mettre ce widget en ##useProxy: true## derrière SWAG sans l'ajouter au bloc Lua. Dans la configuration actuelle, l'appel part directement du navigateur.
171 +* ##apiKey## : créer un compte RapidAPI, s'abonner à l'API AeroDataBox (offre gratuite) et copier la clé ##X-RapidAPI-Key##.
172 +* La clé est envoyée dans un en-tête que ##/cors-proxy## ne relaie pas : laisser ce widget sans ##useProxy##. Celui de la section est ignoré.
173 +* ##airport## : code OACI de l'aéroport.
159 159  
160 -=== news-headlines ===
175 +=== News ===
161 161  
162 -Affiche les derniers titres d'actualité d'un pays et d'une langue, via Currents API.
177 +{{code language="yaml"}}
178 +sections:
179 + - name: News
180 + icon: fad fa-newspaper
181 + displayData:
182 + rows: 1
183 + sortBy: random
184 + cols: 1
185 + collapsed: true
186 + hideForGuests: false
187 + widgets:
188 + - type: rss-feed
189 + options:
190 + limit: '2'
191 + rssUrl: https://omgubuntu.co.uk/feed
192 + id: 0_413_rssfeed
193 +{{/code}}
163 163  
195 +=== Medias ===
196 +
164 164  {{code language="yaml"}}
198 +sections:
199 + - name: Medias
200 + icon: hl-youtube
201 + displayData:
202 + rows: 1
203 + cols: 1
204 + sortBy: default
205 + collapsed: true
206 + hideForGuests: false
207 + widgets:
165 165   - type: news-headlines
166 166   useProxy: true
167 167   options:
168 168   lang: fr
169 169   country: FR
170 - count: 2
213 + count: '2'
171 171   apiKey: <CLE_API_CURRENTS>
215 + id: 0_595_newsheadlines
172 172  {{/code}}
173 173  
174 -* ##lang## / ##country## : langue et pays des articles.
175 -* ##count## : nombre de titres affichés.
176 -* ##apiKey## : clé Currents API, obtenue en créant un compte gratuit sur le site de Currents API, puis copiée depuis son tableau de bord. Quota quotidien limité.
177 -* La clé passe dans l'adresse de la requête (paramètre ##apiKey##) : elle traverse le proxy de SWAG sans réglage particulier.
218 +##apiKey## : clé obtenue en créant un compte gratuit sur Currents API. Elle passe dans l'URL et traverse ##/cors-proxy## sans réglage.
178 178  
179 -=== crypto-watch-list ===
220 +=== Crypto market ===
180 180  
181 -Affiche le cours, la variation et la capitalisation d'une liste de cryptomonnaies, via l'API publique CoinGecko. Aucun identifiant.
182 -
183 183  {{code language="yaml"}}
223 +sections:
224 + - name: Crypto market
225 + icon: hl-bitcoin
226 + widgets:
184 184   - type: crypto-watch-list
185 185   options:
186 186   currency: EUR
... ... @@ -187,23 +187,268 @@
187 187   assets:
188 188   - ethereum
189 189   - bnb
233 + - wrapped-beacon-eth
190 190   - basic-attention-token
235 + - paris-saint-germain-fan-token
236 + - fc-porto
237 + id: 0_1317_cryptowatchlist
238 + displayData:
239 + sortBy: default
240 + rows: 1
241 + cols: 1
242 + collapsed: false
243 + hideForGuests: false
191 191  {{/code}}
192 192  
193 -* ##assets## : identifiants CoinGecko des monnaies, tels qu'ils apparaissent dans l'adresse de leur page sur CoinGecko (pas le symbole boursier).
194 -* ##currency## : devise d'affichage.
246 +=== Binance Wallets ===
195 195  
196 -=== wallet-balance ===
248 +{{code language="yaml"}}
249 +sections:
250 + - name: Binance Wallets
251 + icon: hl-gollum
252 + widgets:
253 + - type: wallet-balance
254 + options:
255 + coin: eth
256 + network: main
257 + address: '<ADRESSE_WALLET_1>'
258 + id: 0_1452_walletbalance
259 + displayData:
260 + sortBy: default
261 + rows: 2
262 + cols: 2
263 + collapsed: false
264 + hideForGuests: false
265 +{{/code}}
197 197  
198 -Affiche le solde et les dernières transactions d'une adresse de portefeuille, via l'API publique BlockCypher. Utilisé deux fois, une adresse par section.
267 +=== Uphold Wallets ===
199 199  
200 200  {{code language="yaml"}}
270 +sections:
271 + - name: Uphold Wallets
272 + icon: https://uphold.com/favicon.ico
273 + widgets:
201 201   - type: wallet-balance
202 202   options:
203 203   coin: eth
204 204   network: main
205 - address: '<ADRESSE_WALLET>'
278 + address: '<ADRESSE_WALLET_2>'
279 + id: 0_1384_walletbalance
280 + displayData:
281 + sortBy: default
282 + rows: 2
283 + cols: 2
284 + collapsed: false
285 + hideForGuests: false
206 206  {{/code}}
207 207  
208 -* ##coin## / ##network## : chaîne interrogée (##eth## sur le réseau principal).
209 -* ##address## : adresse publique du portefeuille, entre guillemets pour qu'elle reste une chaîne. Ce n'est pas un secret d'accès, mais elle relie le tableau de bord aux fonds et à l'historique du portefeuille : une donnée personnelle, à ne pas publier.
288 +== Fichier complet ==
289 +
290 +Le fichier ##news.yml## en un seul bloc, à copier tel quel dans ##user-data##.
291 +
292 +{{html wiki="true"}}
293 +<details><summary>Afficher news.yml complet</summary>
294 +
295 +{{code language="yaml"}}
296 +pageInfo:
297 + title: News
298 + description: Some RSS feed
299 + navLinks:
300 + - title: Home
301 + path: /
302 +pages:
303 + - name: bookmarks
304 + path: bookmark.yml
305 + - name: cpu
306 + path: cpu.yml
307 + - name: news
308 + path: news.yml
309 +sections:
310 + - name: IoT — Pico W
311 + icon: hl-raspberry-pi
312 + displayData:
313 + cols: 1
314 + rows: 2
315 + items:
316 + - title: Pico W
317 + description: Interface Web LED + État
318 + icon: hl-raspberry-pi
319 + url: http://<IP_PICO>
320 + statusCheck: true
321 + id: 0_268_picow
322 + widgets:
323 + - type: embed
324 + options:
325 + html: |
326 + <div id="pico-widget">
327 + <div id="pico-content">
328 + <p style="text-align:center;color:#888;">Chargement…</p>
329 + </div>
330 + </div>
331 + css: |
332 + #pico-widget { font-family: sans-serif; color: #e0e0e0; padding: 8px 4px; }
333 + #pico-widget .pico-grid { display: flex; gap: 12px; justify-content: space-around; flex-wrap: wrap; }
334 + #pico-widget .pico-card { background: rgba(255,255,255,0.06); border-radius: 12px; padding: 14px 18px; text-align: center; min-width: 90px; flex: 1; }
335 + #pico-widget .pico-icon { font-size: 1.8em; margin-bottom: 6px; }
336 + #pico-widget .pico-value { font-size: 1.5em; font-weight: bold; color: #fff; }
337 + #pico-widget .pico-label { font-size: 0.72em; color: #aaa; margin-top: 4px; text-transform: uppercase; letter-spacing: 1px; }
338 + #pico-widget .pico-footer { text-align: center; font-size: 0.68em; color: #666; margin-top: 10px; }
339 + #pico-widget .pico-error { color: #ff6b6b; text-align: center; padding: 10px; font-size: 0.85em; }
340 + script: |
341 + (function() {
342 + var API = 'http://<IP_PICO>/api';
343 + function getColor(t) {
344 + if (t < 10) return '#74b9ff';
345 + if (t < 20) return '#55efc4';
346 + if (t < 27) return '#fdcb6e';
347 + return '#ff7675';
348 + }
349 + function render(d) {
350 + var now = new Date().toLocaleTimeString('fr-FR', {hour:'2-digit',minute:'2-digit',second:'2-digit'});
351 + document.getElementById('pico-content').innerHTML =
352 + '<div class="pico-grid">' +
353 + '<div class="pico-card"><div class="pico-icon">🌡️</div>' +
354 + '<div class="pico-value" style="color:' + getColor(d.temperature) + '">' + d.temperature.toFixed(1) + '°C</div>' +
355 + '<div class="pico-label">Température</div></div>' +
356 + '<div class="pico-card"><div class="pico-icon">💧</div>' +
357 + '<div class="pico-value">' + d.humidity.toFixed(1) + '%</div>' +
358 + '<div class="pico-label">Humidité</div></div>' +
359 + '<div class="pico-card"><div class="pico-icon">🔵</div>' +
360 + '<div class="pico-value">' + d.pressure.toFixed(1) + '</div>' +
361 + '<div class="pico-label">Pression hPa</div></div>' +
362 + '<div class="pico-card"><div class="pico-icon">⛰️</div>' +
363 + '<div class="pico-value">' + d.altitude.toFixed(1) + ' m</div>' +
364 + '<div class="pico-label">Altitude</div></div>' +
365 + '</div>' +
366 + '<div class="pico-footer">Mis à jour à ' + now + ' · Pico W <IP_PICO></div>';
367 + }
368 + function fetchData() {
369 + fetch('/cors-proxy', { headers: { 'Target-URL': API } })
370 + .then(function(r) { return r.json(); })
371 + .then(render)
372 + .catch(function() {
373 + document.getElementById('pico-content').innerHTML =
374 + '<p class="pico-error">⚠️ Impossible de joindre le Pico (<IP_PICO>)</p>';
375 + });
376 + }
377 + fetchData();
378 + setInterval(fetchData, 30000);
379 + })();
380 + id: 0_268_picow_sensor
381 + - name: NASA
382 + icon: hl-nasa
383 + displayData:
384 + sortBy: default
385 + rows: 1
386 + cols: 1
387 + collapsed: false
388 + hideForGuests: false
389 + items: []
390 + widgets:
391 + - type: apod
392 + id: 0_291_apod
393 + - name: Debian CVE
394 + icon: hl-debian-linux
395 + useProxy: true
396 + widgets:
397 + - type: rss-feed
398 + options:
399 + rssUrl: https://www.debian.org/security/dsa
400 + id: 0_833_rssfeed
401 + - name: Aeroport
402 + icon: hl-flightaware
403 + useProxy: true
404 + widgets:
405 + - type: flight-data
406 + options:
407 + airport: LFPG
408 + apiKey: <CLE_API_RAPIDAPI>
409 + limit: 12
410 + direction: all
411 + id: 0_844_flightdata
412 + - name: News
413 + icon: fad fa-newspaper
414 + displayData:
415 + rows: 1
416 + sortBy: random
417 + cols: 1
418 + collapsed: true
419 + hideForGuests: false
420 + widgets:
421 + - type: rss-feed
422 + options:
423 + limit: '2'
424 + rssUrl: https://omgubuntu.co.uk/feed
425 + id: 0_413_rssfeed
426 + - name: Medias
427 + icon: hl-youtube
428 + displayData:
429 + rows: 1
430 + cols: 1
431 + sortBy: default
432 + collapsed: true
433 + hideForGuests: false
434 + widgets:
435 + - type: news-headlines
436 + useProxy: true
437 + options:
438 + lang: fr
439 + country: FR
440 + count: '2'
441 + apiKey: <CLE_API_CURRENTS>
442 + id: 0_595_newsheadlines
443 + - name: Crypto market
444 + icon: hl-bitcoin
445 + widgets:
446 + - type: crypto-watch-list
447 + options:
448 + currency: EUR
449 + assets:
450 + - ethereum
451 + - bnb
452 + - wrapped-beacon-eth
453 + - basic-attention-token
454 + - paris-saint-germain-fan-token
455 + - fc-porto
456 + id: 0_1317_cryptowatchlist
457 + displayData:
458 + sortBy: default
459 + rows: 1
460 + cols: 1
461 + collapsed: false
462 + hideForGuests: false
463 + - name: Binance Wallets
464 + icon: hl-gollum
465 + widgets:
466 + - type: wallet-balance
467 + options:
468 + coin: eth
469 + network: main
470 + address: '<ADRESSE_WALLET_1>'
471 + id: 0_1452_walletbalance
472 + displayData:
473 + sortBy: default
474 + rows: 2
475 + cols: 2
476 + collapsed: false
477 + hideForGuests: false
478 + - name: Uphold Wallets
479 + icon: https://uphold.com/favicon.ico
480 + widgets:
481 + - type: wallet-balance
482 + options:
483 + coin: eth
484 + network: main
485 + address: '<ADRESSE_WALLET_2>'
486 + id: 0_1384_walletbalance
487 + displayData:
488 + sortBy: default
489 + rows: 2
490 + cols: 2
491 + collapsed: false
492 + hideForGuests: false
493 +{{/code}}
494 +
495 +</details>
496 +{{/html}}
497 +