@jjlmoya/utils-hardware 1.23.0 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/package.json +2 -1
  2. package/src/category/index.ts +4 -1
  3. package/src/entries.ts +10 -1
  4. package/src/index.ts +3 -0
  5. package/src/tests/locale_completeness.test.ts +2 -2
  6. package/src/tests/tool_validation.test.ts +2 -2
  7. package/src/tool/keyboardChatterTest/bibliography.astro +15 -0
  8. package/src/tool/keyboardChatterTest/bibliography.ts +20 -0
  9. package/src/tool/keyboardChatterTest/component.astro +353 -0
  10. package/src/tool/keyboardChatterTest/entry.ts +30 -0
  11. package/src/tool/keyboardChatterTest/i18n/de.ts +232 -0
  12. package/src/tool/keyboardChatterTest/i18n/en.ts +232 -0
  13. package/src/tool/keyboardChatterTest/i18n/es.ts +232 -0
  14. package/src/tool/keyboardChatterTest/i18n/fr.ts +232 -0
  15. package/src/tool/keyboardChatterTest/i18n/id.ts +232 -0
  16. package/src/tool/keyboardChatterTest/i18n/it.ts +232 -0
  17. package/src/tool/keyboardChatterTest/i18n/ja.ts +232 -0
  18. package/src/tool/keyboardChatterTest/i18n/ko.ts +232 -0
  19. package/src/tool/keyboardChatterTest/i18n/nl.ts +232 -0
  20. package/src/tool/keyboardChatterTest/i18n/pl.ts +232 -0
  21. package/src/tool/keyboardChatterTest/i18n/pt.ts +232 -0
  22. package/src/tool/keyboardChatterTest/i18n/ru.ts +232 -0
  23. package/src/tool/keyboardChatterTest/i18n/sv.ts +232 -0
  24. package/src/tool/keyboardChatterTest/i18n/tr.ts +232 -0
  25. package/src/tool/keyboardChatterTest/i18n/zh.ts +232 -0
  26. package/src/tool/keyboardChatterTest/index.ts +12 -0
  27. package/src/tool/keyboardChatterTest/keyboard-chatter-test.css +512 -0
  28. package/src/tool/keyboardChatterTest/logic.ts +23 -0
  29. package/src/tool/keyboardChatterTest/seo.astro +16 -0
  30. package/src/tool/keyboardChatterTest/ui.ts +34 -0
  31. package/src/tool/stereoAudioTest/bibliography.astro +14 -0
  32. package/src/tool/stereoAudioTest/bibliography.ts +16 -0
  33. package/src/tool/stereoAudioTest/component.astro +251 -0
  34. package/src/tool/stereoAudioTest/entry.ts +29 -0
  35. package/src/tool/stereoAudioTest/i18n/de.ts +229 -0
  36. package/src/tool/stereoAudioTest/i18n/en.ts +229 -0
  37. package/src/tool/stereoAudioTest/i18n/es.ts +229 -0
  38. package/src/tool/stereoAudioTest/i18n/fr.ts +229 -0
  39. package/src/tool/stereoAudioTest/i18n/id.ts +229 -0
  40. package/src/tool/stereoAudioTest/i18n/it.ts +229 -0
  41. package/src/tool/stereoAudioTest/i18n/ja.ts +229 -0
  42. package/src/tool/stereoAudioTest/i18n/ko.ts +229 -0
  43. package/src/tool/stereoAudioTest/i18n/nl.ts +229 -0
  44. package/src/tool/stereoAudioTest/i18n/pl.ts +229 -0
  45. package/src/tool/stereoAudioTest/i18n/pt.ts +229 -0
  46. package/src/tool/stereoAudioTest/i18n/ru.ts +229 -0
  47. package/src/tool/stereoAudioTest/i18n/sv.ts +229 -0
  48. package/src/tool/stereoAudioTest/i18n/tr.ts +229 -0
  49. package/src/tool/stereoAudioTest/i18n/zh.ts +229 -0
  50. package/src/tool/stereoAudioTest/index.ts +11 -0
  51. package/src/tool/stereoAudioTest/logic.ts +22 -0
  52. package/src/tool/stereoAudioTest/seo.astro +15 -0
  53. package/src/tool/stereoAudioTest/stereo-audio-test.css +411 -0
  54. package/src/tool/stereoAudioTest/ui.ts +24 -0
  55. package/src/tool/webBluetoothBleScanner/bibliography.astro +14 -0
  56. package/src/tool/webBluetoothBleScanner/bibliography.ts +16 -0
  57. package/src/tool/webBluetoothBleScanner/component.astro +339 -0
  58. package/src/tool/webBluetoothBleScanner/entry.ts +29 -0
  59. package/src/tool/webBluetoothBleScanner/i18n/de.ts +233 -0
  60. package/src/tool/webBluetoothBleScanner/i18n/en.ts +233 -0
  61. package/src/tool/webBluetoothBleScanner/i18n/es.ts +233 -0
  62. package/src/tool/webBluetoothBleScanner/i18n/fr.ts +233 -0
  63. package/src/tool/webBluetoothBleScanner/i18n/id.ts +233 -0
  64. package/src/tool/webBluetoothBleScanner/i18n/it.ts +233 -0
  65. package/src/tool/webBluetoothBleScanner/i18n/ja.ts +233 -0
  66. package/src/tool/webBluetoothBleScanner/i18n/ko.ts +233 -0
  67. package/src/tool/webBluetoothBleScanner/i18n/nl.ts +233 -0
  68. package/src/tool/webBluetoothBleScanner/i18n/pl.ts +233 -0
  69. package/src/tool/webBluetoothBleScanner/i18n/pt.ts +233 -0
  70. package/src/tool/webBluetoothBleScanner/i18n/ru.ts +233 -0
  71. package/src/tool/webBluetoothBleScanner/i18n/sv.ts +233 -0
  72. package/src/tool/webBluetoothBleScanner/i18n/tr.ts +233 -0
  73. package/src/tool/webBluetoothBleScanner/i18n/zh.ts +233 -0
  74. package/src/tool/webBluetoothBleScanner/index.ts +11 -0
  75. package/src/tool/webBluetoothBleScanner/logic.ts +79 -0
  76. package/src/tool/webBluetoothBleScanner/seo.astro +15 -0
  77. package/src/tool/webBluetoothBleScanner/ui.ts +41 -0
  78. package/src/tool/webBluetoothBleScanner/web-bluetooth-ble-scanner.css +406 -0
  79. package/src/tools.ts +4 -1
@@ -0,0 +1,233 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { WebBluetoothBleScannerUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'scansione-ble-web-bluetooth';
7
+ const title = 'Scanner Web Bluetooth BLE';
8
+ const description = 'Scansiona i dispositivi Bluetooth Low Energy nelle vicinanze dal browser, ispeziona gli UUID dei servizi GATT esposti e verifica se il tuo hardware IoT o wearable è rilevabile.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Un sito web può scansionare dispositivi Bluetooth senza permesso?',
13
+ answer: 'No. Web Bluetooth richiede sempre un gesto dell\'utente e un selettore di permessi del browser. Questo strumento vede solo il dispositivo che selezioni esplicitamente e non memorizza indirizzi MAC, ID dispositivo né risultati della scansione.',
14
+ },
15
+ {
16
+ question: 'Perché lo scanner non mostra tutti i dispositivi BLE vicini?',
17
+ answer: 'I browser espongono intenzionalmente il Bluetooth tramite un selettore di permessi, non come uno scanner silenzioso in background. Alcuni dispositivi smettono anche di fare advertising, nascondono il nome, richiedono pairing o espongono servizi solo dopo la connessione.',
18
+ },
19
+ {
20
+ question: 'Quali browser supportano Web Bluetooth?',
21
+ answer: 'Web Bluetooth è meglio supportato nei browser desktop basati su Chromium come Chrome ed Edge. Di solito richiede HTTPS o localhost e non è disponibile in molte configurazioni di Firefox, Safari e browser iOS.',
22
+ },
23
+ {
24
+ question: 'Può leggere dati privati dei sensori da un wearable?',
25
+ answer: 'Solo se il dispositivo espone servizi GATT compatibili e il browser concede l\'accesso. Molti wearable commerciali richiedono app del produttore, crittografia, bonding o caratteristiche proprietarie che uno scanner browser generico non può decodificare.',
26
+ },
27
+ {
28
+ question: 'Cosa sono gli UUID dei servizi GATT?',
29
+ answer: 'Un UUID di servizio GATT identifica un gruppo di funzionalità Bluetooth Low Energy, come Servizio Batteria, Frequenza Cardiaca, Informazioni sul Dispositivo o un servizio personalizzato del produttore utilizzato da hardware maker e IoT.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Usa un browser compatibile',
36
+ text: 'Apri lo strumento in Chrome o Edge tramite HTTPS o localhost, quindi assicurati che il Bluetooth sia attivato sul computer o telefono.',
37
+ },
38
+ {
39
+ name: 'Metti l\'hardware in modalità advertising',
40
+ text: 'Attiva il dispositivo BLE, spegnilo e riaccendilo, premi il pulsante di pairing o apri la modalità advertising affinché appaia nel selettore di permessi del browser.',
41
+ },
42
+ {
43
+ name: 'Scansiona l\'ambiente',
44
+ text: 'Premi Scansiona Ambiente e seleziona il dispositivo BLE che vuoi ispezionare. La finestra di dialogo dei permessi del browser controlla esattamente quale dispositivo diventa visibile alla pagina.',
45
+ },
46
+ {
47
+ name: 'Leggi i servizi GATT',
48
+ text: 'Dopo la connessione, esamina le schede UUID dei servizi per identificare i profili Bluetooth standard, i servizi firmware personalizzati e se il dispositivo espone il percorso dati che ti aspettavi.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'DeveloperApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
83
+ inLanguage: 'it',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<WebBluetoothBleScannerUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faq: faqData,
91
+ bibliography,
92
+ howTo: howToData,
93
+ schemas: [faqSchema, howToSchema, appSchema],
94
+ seo: [
95
+ {
96
+ type: 'title',
97
+ text: 'Tester BLE online per IoT, Wearable e Hardware Maker',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'Questo scanner Web Bluetooth ti permette di testare se un dispositivo Bluetooth Low Energy nelle vicinanze è rilevabile da un browser e quali servizi GATT espone dopo aver concesso il permesso. È utile per il debug di firmware ESP32, sketch Arduino BLE, sensori intelligenti, wearable fitness, tastiere, beacon personalizzati, monitor ambientali e hardware prototipo prima di creare un\'app mobile nativa.',
103
+ },
104
+ {
105
+ type: 'message',
106
+ title: 'Modello di privacy',
107
+ html: 'GameBob non memorizza indirizzi MAC, ID dispositivo, nomi, UUID, dati del segnale né cronologia delle scansioni. Il selettore di permessi del browser decide quale singolo dispositivo la pagina può consultare e i risultati rimangono nella sessione corrente del browser.',
108
+ },
109
+ {
110
+ type: 'table',
111
+ headers: ['Cosa vedi', 'Cosa significa', 'Cosa controllare dopo'],
112
+ rows: [
113
+ ['Nome dispositivo', 'Il nome Bluetooth pubblicizzato, se l\'hardware ne trasmette uno.', 'Se è vuoto, controlla i dati pubblicitari del firmware o usa un prefisso di nome noto durante i test.'],
114
+ ['ID dispositivo', 'Un identificatore con ambito browser, non l\'indirizzo MAC pubblico reale.', 'Usalo solo per questa sessione del browser; non trattarlo come un numero di serie hardware universale.'],
115
+ ['UUID servizi GATT', 'I gruppi di servizi esposti dopo l\'accettazione della connessione.', 'Confronta gli UUID standard con l\'elenco Bluetooth SIG o la tua tabella dei servizi del firmware.'],
116
+ ['Servizio personalizzato', 'Un UUID specifico del produttore o del progetto.', 'Apri il tuo firmware, il profilo dell\'app mobile o la documentazione BLE per mappare caratteristiche e permessi.'],
117
+ ],
118
+ },
119
+ {
120
+ type: 'title',
121
+ text: 'Perché la scansione Bluetooth del browser è diversa',
122
+ level: 3,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Le app di scanner BLE native spesso mostrano pubblicità continue da molti dispositivi vicini. Web Bluetooth è deliberatamente più restrittivo: la pagina deve essere aperta in un contesto sicuro, la scansione deve partire da un clic dell\'utente e il browser mostra un selettore di permessi. Questo protegge gli utenti dal tracciamento silenzioso pur offrendo agli sviluppatori un modo pratico per connettersi all\'hardware BLE selezionato da JavaScript.',
127
+ },
128
+ {
129
+ type: 'comparative',
130
+ items: [
131
+ {
132
+ title: 'Scanner Web Bluetooth',
133
+ description: 'Ideale per validazione rapida del firmware, demo, flussi di supporto, laboratori didattici e diagnostica basata su browser dove l\'attrito di installazione è importante.',
134
+ },
135
+ {
136
+ title: 'App BLE nativa',
137
+ description: 'Migliore per scansione in background, registrazione RSSI, flussi di pairing, protocolli crittografati del produttore, grandi alberi di caratteristiche e diagnostica sul campo a lungo termine.',
138
+ },
139
+ ],
140
+ },
141
+ {
142
+ type: 'title',
143
+ text: 'Motivi comuni per cui un dispositivo BLE non appare',
144
+ level: 3,
145
+ },
146
+ {
147
+ type: 'list',
148
+ items: [
149
+ 'Il Bluetooth è disattivato a livello di sistema operativo o il browser non ha il permesso Bluetooth.',
150
+ 'Il dispositivo è connesso a un altro telefono, laptop, app del produttore o gateway e ha smesso di fare advertising.',
151
+ 'L\'hardware fa advertising solo per una breve finestra dopo l\'avvio o dopo aver premuto un pulsante di pairing.',
152
+ 'Il browser non è basato su Chromium, la pagina non è servita tramite HTTPS o la piattaforma blocca Web Bluetooth.',
153
+ 'Il firmware fa advertising dei dati del produttore ma nasconde il nome locale, quindi il selettore potrebbe mostrare un dispositivo senza nome.',
154
+ 'Il dispositivo richiede bonding, crittografia o autenticazione proprietaria prima che i servizi diventino leggibili.',
155
+ ],
156
+ },
157
+ {
158
+ type: 'title',
159
+ text: 'Come usare gli UUID GATT durante il debug',
160
+ level: 3,
161
+ },
162
+ {
163
+ type: 'paragraph',
164
+ html: 'Una connessione riuscita con UUID di servizio ti indica che il browser può raggiungere la periferica e che la periferica espone almeno parte della sua tabella GATT. I servizi standard come Servizio Batteria, Informazioni Dispositivo, Frequenza Cardiaca, Dispositivo di Interfaccia Umana e Rilevamento Ambientale sono facili da riconoscere. Gli UUID personalizzati di solito puntano a funzionalità specifiche del firmware e richiedono la mappa delle caratteristiche dal tuo codice sorgente o dalla documentazione del produttore.',
165
+ },
166
+ {
167
+ type: 'table',
168
+ headers: ['Sintomo', 'Causa probabile', 'Soluzione pratica'],
169
+ rows: [
170
+ ['Il selettore permessi è vuoto', 'Il dispositivo non fa advertising o manca il supporto del browser.', 'Riavvia il dispositivo, attiva la modalità pairing, avvicinati o riprova in Chrome/Edge.'],
171
+ ['La connessione fallisce immediatamente', 'Il dispositivo è occupato, fuori portata o rifiuta la connessione del browser.', 'Disconnetti le app del produttore e tieni la periferica vicino al computer.'],
172
+ ['Nessun servizio elencato', 'GATT non è disponibile, i servizi sono nascosti o l\'accesso non è stato concesso per quegli UUID.', 'Aggiungi servizi opzionali noti nei test firmware o ispeziona con uno strumento BLE nativo.'],
173
+ ['Compaiono solo UUID personalizzati', 'L\'hardware utilizza servizi firmware specifici del produttore.', 'Mappa gli UUID alle costanti del codice sorgente e documenta i permessi di lettura/scrittura delle caratteristiche.'],
174
+ ],
175
+ },
176
+ {
177
+ type: 'title',
178
+ text: 'Limiti di sicurezza e privacy',
179
+ level: 3,
180
+ },
181
+ {
182
+ type: 'list',
183
+ items: [
184
+ 'La pagina non può raccogliere silenziosamente i dispositivi Bluetooth vicini in background.',
185
+ 'Il browser può nascondere gli indirizzi MAC reali e fornire invece un ID dispositivo con ambito.',
186
+ 'L\'accesso inizia solo dopo che l\'utente fa clic sul pulsante di scansione e sceglie un dispositivo.',
187
+ 'I risultati non vengono caricati né memorizzati da GameBob.',
188
+ 'I dispositivi commerciali sensibili potrebbero richiedere crittografia o un flusso di pairing del produttore che questo scanner generico non può bypassare.',
189
+ ],
190
+ },
191
+ ],
192
+ ui: {
193
+ unsupportedTitle: 'Web Bluetooth non è disponibile',
194
+ unsupportedBody: 'Prova Chrome o Edge su desktop o Android, attiva il Bluetooth e apri la pagina tramite HTTPS o localhost.',
195
+ secureContext: 'Web Bluetooth richiede una pagina HTTPS sicura o localhost. Ricarica lo strumento da un\'origine sicura e riprova.',
196
+ scanButton: 'Scansiona Ambiente',
197
+ scanning: 'Scansione in corso',
198
+ reconnect: 'Scansiona di nuovo',
199
+ disconnect: 'Disconnetti',
200
+ privacyTitle: 'Privacy by design',
201
+ privacyBody: 'GameBob non memorizza indirizzi MAC, ID dispositivo, nomi, UUID né cronologia scansioni. Il browser espone solo il dispositivo che scegli.',
202
+ deviceLabel: 'Dispositivo selezionato',
203
+ nameFallback: 'Dispositivo BLE senza nome',
204
+ idLabel: 'ID dispositivo browser',
205
+ servicesLabel: 'Servizi GATT',
206
+ noServices: 'Nessun servizio primario leggibile è stato restituito per questa connessione.',
207
+ statusIdle: 'Pronto per scansionare hardware BLE vicino',
208
+ statusPermission: 'In attesa del selettore permessi del browser',
209
+ statusConnecting: 'Connessione al dispositivo BLE selezionato',
210
+ statusConnected: 'Connesso e servizi caricati',
211
+ statusDisconnected: 'Dispositivo disconnesso',
212
+ statusCancelled: 'Nessun dispositivo BLE è stato selezionato o il Bluetooth è spento/non disponibile su questo dispositivo.',
213
+ statusUnavailable: 'Il Bluetooth sembra essere spento, bloccato o assente su questo dispositivo. Attiva il Bluetooth o prova da un hardware che dispone di un adattatore BLE.',
214
+ statusError: 'Scansione Bluetooth fallita',
215
+ signalUnknown: 'La potenza del segnale è controllata dal selettore del browser',
216
+ gattUnavailable: 'Questo dispositivo non ha esposto un server GATT al browser',
217
+ customServiceName: 'Servizio personalizzato o specifico del produttore',
218
+ serviceGenericAccess: 'Accesso Generico',
219
+ serviceGenericAttribute: 'Attributo Generico',
220
+ serviceDeviceInformation: 'Informazioni Dispositivo',
221
+ serviceHeartRate: 'Frequenza Cardiaca',
222
+ serviceBattery: 'Servizio Batteria',
223
+ serviceHumanInterfaceDevice: 'Dispositivo di Interfaccia Umana',
224
+ serviceCyclingSpeedCadence: 'Velocità e Cadenza Ciclismo',
225
+ serviceEnvironmentalSensing: 'Rilevamento Ambientale',
226
+ serviceUserData: 'Dati Utente',
227
+ serviceFitnessMachine: 'Macchina Fitness',
228
+ uuidHelp: 'Gli UUID identificano i servizi Bluetooth. I servizi standard vengono nominati automaticamente; gli UUID specifici del produttore richiedono la documentazione del tuo firmware o dispositivo.',
229
+ compatibilityHint: 'Funziona meglio nei browser basati su Chromium con Bluetooth attivato. Web Bluetooth è intenzionalmente limitato dai permessi e potrebbe non mostrare tutti gli advertiser vicini.',
230
+ serviceCountSingular: 'servizio',
231
+ serviceCountPlural: 'servizi',
232
+ },
233
+ };
@@ -0,0 +1,233 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { WebBluetoothBleScannerUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'web-bluetooth-ble-scanner';
7
+ const title = 'Web Bluetooth BLEスキャナー';
8
+ const description = 'ブラウザから近くのBluetooth Low Energyデバイスをスキャンし、公開されたGATTサービスUUIDを検査し、IoTやウェアラブルハードウェアが検出可能かどうかをテストします。';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'ウェブサイトは許可なくBluetoothデバイスをスキャンできますか?',
13
+ answer: 'いいえ。Web Bluetoothは常にユーザージェスチャーとブラウザの許可選択を必要とします。このツールは明示的に選択したデバイスのみを表示し、MACアドレス、デバイスID、スキャン結果を保存しません。',
14
+ },
15
+ {
16
+ question: 'スキャナーが近くのすべてのBLEデバイスを表示しないのはなぜですか?',
17
+ answer: 'ブラウザは意図的にBluetoothを許可選択を通じて公開し、サイレントバックグラウンドスキャナーとしては機能しません。一部のデバイスはアドバタイズを停止したり、名前を隠したり、ペアリングを要求したり、接続後にのみサービスを公開したりします。',
18
+ },
19
+ {
20
+ question: 'どのブラウザがWeb Bluetoothをサポートしていますか?',
21
+ answer: 'Web BluetoothはChromeやEdgeなどのChromiumベースのデスクトップブラウザで最もよくサポートされています。通常HTTPSまたはlocalhostが必要で、多くのFirefox、Safari、iOSブラウザ構成では利用できません。',
22
+ },
23
+ {
24
+ question: 'ウェアラブルからプライベートセンサーデータを読み取れますか?',
25
+ answer: 'デバイスが互換性のあるGATTサービスを公開し、ブラウザがアクセスを許可した場合のみ可能です。多くの商用ウェアラブルは、汎用ブラウザスキャナーではデコードできないベンダーアプリ、暗号化、ボンディング、または独自の特性を必要とします。',
26
+ },
27
+ {
28
+ question: 'GATTサービスUUIDとは何ですか?',
29
+ answer: 'GATTサービスUUIDは、バッテリーサービス、心拍数、デバイス情報、またはメーカーやIoTハードウェアが使用するカスタムベンダーサービスなど、Bluetooth Low Energy機能のグループを識別します。',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: '互換性のあるブラウザを使用する',
36
+ text: 'ChromeまたはEdgeでHTTPSまたはlocalhost経由でツールを開き、コンピューターまたは電話でBluetoothが有効になっていることを確認します。',
37
+ },
38
+ {
39
+ name: 'ハードウェアをアドバタイズモードにする',
40
+ text: 'BLEデバイスを起動し、電源を入れ直すか、ペアリングボタンを押すか、アドバタイズモードを開いてブラウザの許可選択に表示されるようにします。',
41
+ },
42
+ {
43
+ name: '環境をスキャンする',
44
+ text: '環境をスキャンを押して、検査したいBLEデバイスを選択します。ブラウザの許可ダイアログが、ページに表示されるデバイスを正確に制御します。',
45
+ },
46
+ {
47
+ name: 'GATTサービスを読み取る',
48
+ text: '接続後、サービスUUIDカードを確認して、標準Bluetoothプロファイル、カスタムファームウェアサービス、およびデバイスが期待するデータパスを公開しているかどうかを識別します。',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'DeveloperApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
83
+ inLanguage: 'ja',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<WebBluetoothBleScannerUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faq: faqData,
91
+ bibliography,
92
+ howTo: howToData,
93
+ schemas: [faqSchema, howToSchema, appSchema],
94
+ seo: [
95
+ {
96
+ type: 'title',
97
+ text: 'IoT、ウェアラブル、メーカーハードウェア向けオンラインBLEテスター',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'このWeb Bluetoothスキャナーを使用すると、近くのBluetooth Low Energyデバイスがブラウザから検出可能かどうか、および許可が付与された後にどのGATTサービスを公開するかをテストできます。ESP32ファームウェア、Arduino BLEスケッチ、スマートセンサー、フィットネスウェアラブル、キーボード、カスタムビーコン、環境モニター、ネイティブモバイルアプリを構築する前のプロトタイプハードウェアのデバッグに役立ちます。',
103
+ },
104
+ {
105
+ type: 'message',
106
+ title: 'プライバシーモデル',
107
+ html: 'GameBobはMACアドレス、デバイスID、名前、UUID、信号データ、スキャン履歴を保存しません。ブラウザの許可選択がページがアクセスできる単一のデバイスを決定し、結果は現在のブラウザセッション内に留まります。',
108
+ },
109
+ {
110
+ type: 'table',
111
+ headers: ['表示内容', '意味', '次に確認すること'],
112
+ rows: [
113
+ ['デバイス名', 'ハードウェアがブロードキャストしている場合のアドバタイズされたBluetooth名。', '空白の場合は、ファームウェアのアドバタイズデータを確認するか、テスト中に既知の名前プレフィックスを使用します。'],
114
+ ['デバイスID', 'ブラウザスコープの識別子で、生の公開MACアドレスではありません。', 'このブラウザセッションでのみ使用し、ユニバーサルなハードウェアシリアル番号として扱わないでください。'],
115
+ ['GATTサービスUUID', '接続が受け入れられた後に公開されるサービスグループ。', '標準UUIDをBluetooth SIGリストまたはファームウェアサービステーブルと比較します。'],
116
+ ['カスタムサービス', 'ベンダー固有またはプロジェクト固有のUUID。', 'ファームウェア、モバイルアプリプロファイル、またはBLEドキュメントを開いて特性と権限をマッピングします。'],
117
+ ],
118
+ },
119
+ {
120
+ type: 'title',
121
+ text: 'ブラウザBluetoothスキャンが異なる理由',
122
+ level: 3,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'ネイティブBLEスキャナーアプリは、近くの多くのデバイスからの継続的なアドバタイズを表示することがよくあります。Web Bluetoothは意図的に厳格です:ページは安全なコンテキストで開かれなければならず、スキャンはユーザークリックから開始され、ブラウザは許可選択を表示します。これにより、サイレントトラッキングからユーザーを保護しながら、JavaScriptから選択したBLEハードウェアに接続する実用的な方法を開発者に提供します。',
127
+ },
128
+ {
129
+ type: 'comparative',
130
+ items: [
131
+ {
132
+ title: 'Web Bluetoothスキャナー',
133
+ description: '迅速なファームウェア検証、デモ、サポートフロー、教室ラボ、インストールの摩擦が重要なブラウザベースの診断に最適です。',
134
+ },
135
+ {
136
+ title: 'ネイティブBLEアプリ',
137
+ description: 'バックグラウンドスキャン、RSSIログ、ペアリングワークフロー、暗号化されたベンダープロトコル、大規模な特性ツリー、長期的なフィールド診断に適しています。',
138
+ },
139
+ ],
140
+ },
141
+ {
142
+ type: 'title',
143
+ text: 'BLEデバイスが表示されない一般的な理由',
144
+ level: 3,
145
+ },
146
+ {
147
+ type: 'list',
148
+ items: [
149
+ 'BluetoothがOSレベルで無効になっているか、ブラウザにBluetooth権限がありません。',
150
+ 'デバイスが別の電話、ラップトップ、ベンダーアプリ、またはゲートウェイに接続されていて、アドバタイズを停止しています。',
151
+ 'ハードウェアは起動後またはペアリングボタンを押した後の短い期間のみアドバタイズします。',
152
+ 'ブラウザがChromiumベースでない、ページがHTTPSで提供されていない、またはプラットフォームがWeb Bluetoothをブロックしています。',
153
+ 'ファームウェアがメーカーデータをアドバタイズしているがローカル名を隠しているため、選択に名前のないデバイスが表示される場合があります。',
154
+ 'デバイスはサービスが読み取り可能になる前にボンディング、暗号化、または独自の認証を必要とします。',
155
+ ],
156
+ },
157
+ {
158
+ type: 'title',
159
+ text: 'デバッグ中のGATT UUIDの使用方法',
160
+ level: 3,
161
+ },
162
+ {
163
+ type: 'paragraph',
164
+ html: 'サービスUUIDとの接続が成功すると、ブラウザがペリフェラルに到達でき、ペリフェラルが少なくともGATTテーブルの一部を公開していることがわかります。バッテリーサービス、デバイス情報、心拍数、ヒューマンインターフェースデバイス、環境センシングなどの標準サービスは簡単に認識できます。カスタムUUIDは通常、ファームウェア固有の機能を指し、ソースコードまたはベンダードキュメントの特性マップが必要です。',
165
+ },
166
+ {
167
+ type: 'table',
168
+ headers: ['症状', '考えられる原因', '実用的な解決策'],
169
+ rows: [
170
+ ['許可選択が空', 'デバイスがアドバタイズしていないか、ブラウザサポートが不足しています。', 'デバイスを再起動し、ペアリングモードを有効にして、近づくか、Chrome/Edgeで再試行します。'],
171
+ ['接続がすぐに失敗する', 'デバイスがビジー、範囲外、またはブラウザ接続を拒否しています。', 'ベンダーアプリを切断し、ペリフェラルをコンピューターの近くに保ちます。'],
172
+ ['サービスがリストされない', 'GATTが利用できない、サービスが非表示、またはこれらのUUIDのアクセスが許可されていません。', 'ファームウェアテストで既知のオプションサービスを追加するか、ネイティブBLEツールで検査します。'],
173
+ ['カスタムUUIDのみ表示', 'ハードウェアがベンダー固有のファームウェアサービスを使用しています。', 'UUIDをソースコード定数にマッピングし、特性の読み取り/書き込み権限を文書化します。'],
174
+ ],
175
+ },
176
+ {
177
+ type: 'title',
178
+ text: 'セキュリティとプライバシーの制限',
179
+ level: 3,
180
+ },
181
+ {
182
+ type: 'list',
183
+ items: [
184
+ 'ページはバックグラウンドで近くのBluetoothデバイスを密かに収集することはできません。',
185
+ 'ブラウザは実際のMACアドレスを隠し、代わりにスコープ付きデバイスIDを提供する場合があります。',
186
+ 'アクセスはユーザーがスキャンボタンをクリックしてデバイスを選択した後にのみ開始されます。',
187
+ '結果はGameBobによってアップロードまたは保存されません。',
188
+ '機密性の高い商用デバイスは、この汎用スキャナーではバイパスできない暗号化またはベンダーペアリングフローを必要とする場合があります。',
189
+ ],
190
+ },
191
+ ],
192
+ ui: {
193
+ unsupportedTitle: 'Web Bluetoothは利用できません',
194
+ unsupportedBody: 'デスクトップまたはAndroidでChromeまたはEdgeを試し、Bluetoothを有効にして、HTTPSまたはlocalhost経由でページを開きます。',
195
+ secureContext: 'Web Bluetoothには安全なHTTPSページまたはlocalhostが必要です。安全なオリジンからツールをリロードして再試行してください。',
196
+ scanButton: '環境をスキャン',
197
+ scanning: 'スキャン中',
198
+ reconnect: '再スキャン',
199
+ disconnect: '切断',
200
+ privacyTitle: '設計によるプライバシー',
201
+ privacyBody: 'GameBobはMACアドレス、デバイスID、名前、UUID、スキャン履歴を保存しません。ブラウザは選択したデバイスのみを公開します。',
202
+ deviceLabel: '選択されたデバイス',
203
+ nameFallback: '名前のないBLEデバイス',
204
+ idLabel: 'ブラウザデバイスID',
205
+ servicesLabel: 'GATTサービス',
206
+ noServices: 'この接続では読み取り可能なプライマリサービスが返されませんでした。',
207
+ statusIdle: '近くのBLEハードウェアをスキャンする準備ができました',
208
+ statusPermission: 'ブラウザの許可選択を待っています',
209
+ statusConnecting: '選択したBLEデバイスに接続中',
210
+ statusConnected: '接続済み、サービスがロードされました',
211
+ statusDisconnected: 'デバイスが切断されました',
212
+ statusCancelled: 'BLEデバイスが選択されていないか、このデバイスでBluetoothがオフ/利用不可です。',
213
+ statusUnavailable: 'このデバイスではBluetoothがオフ、ブロック、または存在しないようです。Bluetoothを有効にするか、BLEアダプターを搭載したハードウェアからお試しください。',
214
+ statusError: 'Bluetoothスキャンに失敗しました',
215
+ signalUnknown: '信号強度はブラウザ選択によって制御されます',
216
+ gattUnavailable: 'このデバイスはブラウザにGATTサーバーを公開しませんでした',
217
+ customServiceName: 'カスタムまたはベンダー固有のサービス',
218
+ serviceGenericAccess: '汎用アクセス',
219
+ serviceGenericAttribute: '汎用属性',
220
+ serviceDeviceInformation: 'デバイス情報',
221
+ serviceHeartRate: '心拍数',
222
+ serviceBattery: 'バッテリーサービス',
223
+ serviceHumanInterfaceDevice: 'ヒューマンインターフェースデバイス',
224
+ serviceCyclingSpeedCadence: 'サイクリング速度とケイデンス',
225
+ serviceEnvironmentalSensing: '環境センシング',
226
+ serviceUserData: 'ユーザーデータ',
227
+ serviceFitnessMachine: 'フィットネスマシン',
228
+ uuidHelp: 'UUIDはBluetoothサービスを識別します。標準サービスは自動的に名前が付けられ、ベンダー固有のUUIDはファームウェアまたはデバイスのドキュメントが必要です。',
229
+ compatibilityHint: 'Bluetoothが有効なChromiumベースのブラウザで最適に動作します。Web Bluetoothは意図的に権限制限されており、近くのすべてのアドバタイザーを表示しない場合があります。',
230
+ serviceCountSingular: 'サービス',
231
+ serviceCountPlural: 'サービス',
232
+ },
233
+ };