0 Votes

Code source wiki de News

Version 1.1 par john le 2026/09/26 16:33

Masquer les derniers auteurs
john 1.1 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]].
2
3 == En-tête et navigation ==
4
5 {{code language="yaml"}}
6 pageInfo:
7 title: News
8 description: Some RSS feed
9 navLinks:
10 - title: Home
11 path: /
12 pages:
13 - name: bookmarks
14 path: bookmark.yml
15 - name: cpu
16 path: cpu.yml
17 - name: news
18 path: news.yml
19 {{/code}}
20
21 == Sections ==
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##
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.
35
36 == Item ==
37
38 {{code language="yaml"}}
39 - title: Pico W
40 description: Interface Web LED + État
41 icon: hl-raspberry-pi
42 url: http://<IP_PICO>
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"}}
55 - type: embed
56 options:
57 html: |
58 <div id="pico-widget">
59 <div id="pico-content">
60 <p style="text-align:center;color:#888;">Chargement…</p>
61 </div>
62 </div>
63 css: |
64 #pico-widget { font-family: sans-serif; color: #e0e0e0; padding: 8px 4px; }
65 #pico-widget .pico-grid { display: flex; gap: 12px; justify-content: space-around; flex-wrap: wrap; }
66 #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; }
67 #pico-widget .pico-icon { font-size: 1.8em; margin-bottom: 6px; }
68 #pico-widget .pico-value { font-size: 1.5em; font-weight: bold; color: #fff; }
69 #pico-widget .pico-label { font-size: 0.72em; color: #aaa; margin-top: 4px; text-transform: uppercase; letter-spacing: 1px; }
70 #pico-widget .pico-footer { text-align: center; font-size: 0.68em; color: #666; margin-top: 10px; }
71 #pico-widget .pico-error { color: #ff6b6b; text-align: center; padding: 10px; font-size: 0.85em; }
72 script: |
73 (function() {
74 var API = 'http://<IP_PICO>/api';
75 function getColor(t) {
76 if (t < 10) return '#74b9ff';
77 if (t < 20) return '#55efc4';
78 if (t < 27) return '#fdcb6e';
79 return '#ff7675';
80 }
81 function render(d) {
82 var now = new Date().toLocaleTimeString('fr-FR', {hour:'2-digit',minute:'2-digit',second:'2-digit'});
83 document.getElementById('pico-content').innerHTML =
84 '<div class="pico-grid">' +
85 '<div class="pico-card"><div class="pico-icon">🌡️</div>' +
86 '<div class="pico-value" style="color:' + getColor(d.temperature) + '">' + d.temperature.toFixed(1) + '°C</div>' +
87 '<div class="pico-label">Température</div></div>' +
88 '<div class="pico-card"><div class="pico-icon">💧</div>' +
89 '<div class="pico-value">' + d.humidity.toFixed(1) + '%</div>' +
90 '<div class="pico-label">Humidité</div></div>' +
91 '<div class="pico-card"><div class="pico-icon">🔵</div>' +
92 '<div class="pico-value">' + d.pressure.toFixed(1) + '</div>' +
93 '<div class="pico-label">Pression hPa</div></div>' +
94 '<div class="pico-card"><div class="pico-icon">⛰️</div>' +
95 '<div class="pico-value">' + d.altitude.toFixed(1) + ' m</div>' +
96 '<div class="pico-label">Altitude</div></div>' +
97 '</div>' +
98 '<div class="pico-footer">Mis à jour à ' + now + '</div>';
99 }
100 function fetchData() {
101 fetch('/cors-proxy', { headers: { 'Target-URL': API } })
102 .then(function(r) { return r.json(); })
103 .then(render)
104 .catch(function() {
105 document.getElementById('pico-content').innerHTML =
106 '<p class="pico-error">⚠️ Impossible de joindre le Pico</p>';
107 });
108 }
109 fetchData();
110 setInterval(fetchData, 30000);
111 })();
112 {{/code}}
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.
117
118 === apod ===
119
120 Affiche l'image astronomique du jour de la NASA, avec son titre et sa description. Ni option ni identifiant.
121
122 {{code language="yaml"}}
123 - type: apod
124 {{/code}}
125
126 === rss-feed ===
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 {{code language="yaml"}}
131 - type: rss-feed
132 options:
133 rssUrl: <URL_FLUX_RSS>
134 limit: 2
135 {{/code}}
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é.
140
141 === flight-data ===
142
143 Affiche les prochains départs et arrivées d'un aéroport, via l'API AeroDataBox distribuée par RapidAPI.
144
145 {{code language="yaml"}}
146 - type: flight-data
147 options:
148 airport: <CODE_OACI>
149 apiKey: <CLE_API_RAPIDAPI>
150 limit: 12
151 direction: all
152 {{/code}}
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.
159
160 === news-headlines ===
161
162 Affiche les derniers titres d'actualité d'un pays et d'une langue, via Currents API.
163
164 {{code language="yaml"}}
165 - type: news-headlines
166 useProxy: true
167 options:
168 lang: fr
169 country: FR
170 count: 2
171 apiKey: <CLE_API_CURRENTS>
172 {{/code}}
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.
178
179 === crypto-watch-list ===
180
181 Affiche le cours, la variation et la capitalisation d'une liste de cryptomonnaies, via l'API publique CoinGecko. Aucun identifiant.
182
183 {{code language="yaml"}}
184 - type: crypto-watch-list
185 options:
186 currency: EUR
187 assets:
188 - ethereum
189 - bnb
190 - basic-attention-token
191 {{/code}}
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.
195
196 === wallet-balance ===
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.
199
200 {{code language="yaml"}}
201 - type: wallet-balance
202 options:
203 coin: eth
204 network: main
205 address: '<ADRESSE_WALLET>'
206 {{/code}}
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.