@jjlmoya/utils-hardware 1.24.0 → 1.26.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/webBluetoothBleScanner/bibliography.astro +14 -0
  32. package/src/tool/webBluetoothBleScanner/bibliography.ts +16 -0
  33. package/src/tool/webBluetoothBleScanner/component.astro +339 -0
  34. package/src/tool/webBluetoothBleScanner/entry.ts +29 -0
  35. package/src/tool/webBluetoothBleScanner/i18n/de.ts +233 -0
  36. package/src/tool/webBluetoothBleScanner/i18n/en.ts +233 -0
  37. package/src/tool/webBluetoothBleScanner/i18n/es.ts +233 -0
  38. package/src/tool/webBluetoothBleScanner/i18n/fr.ts +233 -0
  39. package/src/tool/webBluetoothBleScanner/i18n/id.ts +233 -0
  40. package/src/tool/webBluetoothBleScanner/i18n/it.ts +233 -0
  41. package/src/tool/webBluetoothBleScanner/i18n/ja.ts +233 -0
  42. package/src/tool/webBluetoothBleScanner/i18n/ko.ts +233 -0
  43. package/src/tool/webBluetoothBleScanner/i18n/nl.ts +233 -0
  44. package/src/tool/webBluetoothBleScanner/i18n/pl.ts +233 -0
  45. package/src/tool/webBluetoothBleScanner/i18n/pt.ts +233 -0
  46. package/src/tool/webBluetoothBleScanner/i18n/ru.ts +233 -0
  47. package/src/tool/webBluetoothBleScanner/i18n/sv.ts +233 -0
  48. package/src/tool/webBluetoothBleScanner/i18n/tr.ts +233 -0
  49. package/src/tool/webBluetoothBleScanner/i18n/zh.ts +233 -0
  50. package/src/tool/webBluetoothBleScanner/index.ts +11 -0
  51. package/src/tool/webBluetoothBleScanner/logic.ts +79 -0
  52. package/src/tool/webBluetoothBleScanner/seo.astro +15 -0
  53. package/src/tool/webBluetoothBleScanner/ui.ts +41 -0
  54. package/src/tool/webBluetoothBleScanner/web-bluetooth-ble-scanner.css +406 -0
  55. package/src/tool/webUsbSerialMonitor/bibliography.astro +15 -0
  56. package/src/tool/webUsbSerialMonitor/bibliography.ts +18 -0
  57. package/src/tool/webUsbSerialMonitor/component.astro +356 -0
  58. package/src/tool/webUsbSerialMonitor/entry.ts +30 -0
  59. package/src/tool/webUsbSerialMonitor/i18n/de.ts +241 -0
  60. package/src/tool/webUsbSerialMonitor/i18n/en.ts +241 -0
  61. package/src/tool/webUsbSerialMonitor/i18n/es.ts +241 -0
  62. package/src/tool/webUsbSerialMonitor/i18n/fr.ts +241 -0
  63. package/src/tool/webUsbSerialMonitor/i18n/id.ts +241 -0
  64. package/src/tool/webUsbSerialMonitor/i18n/it.ts +241 -0
  65. package/src/tool/webUsbSerialMonitor/i18n/ja.ts +241 -0
  66. package/src/tool/webUsbSerialMonitor/i18n/ko.ts +241 -0
  67. package/src/tool/webUsbSerialMonitor/i18n/nl.ts +241 -0
  68. package/src/tool/webUsbSerialMonitor/i18n/pl.ts +241 -0
  69. package/src/tool/webUsbSerialMonitor/i18n/pt.ts +241 -0
  70. package/src/tool/webUsbSerialMonitor/i18n/ru.ts +241 -0
  71. package/src/tool/webUsbSerialMonitor/i18n/sv.ts +241 -0
  72. package/src/tool/webUsbSerialMonitor/i18n/tr.ts +241 -0
  73. package/src/tool/webUsbSerialMonitor/i18n/zh.ts +241 -0
  74. package/src/tool/webUsbSerialMonitor/index.ts +12 -0
  75. package/src/tool/webUsbSerialMonitor/logic.ts +44 -0
  76. package/src/tool/webUsbSerialMonitor/seo.astro +16 -0
  77. package/src/tool/webUsbSerialMonitor/ui.ts +51 -0
  78. package/src/tool/webUsbSerialMonitor/web-usb-serial-monitor.css +415 -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 = 'scanner-ble-web-bluetooth';
7
+ const title = 'Scanner Web Bluetooth BLE';
8
+ const description = 'Scannez les appareils Bluetooth Low Energy à proximité depuis le navigateur, inspectez les UUIDs de services GATT exposés et testez si votre matériel IoT ou wearable est détectable.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Un site web peut-il scanner des appareils Bluetooth sans autorisation ?',
13
+ answer: 'Non. Web Bluetooth nécessite toujours un geste de l\'utilisateur et un sélecteur de permission du navigateur. Cet outil ne voit que l\'appareil que vous sélectionnez explicitement et ne stocke ni les adresses MAC, ni les identifiants d\'appareil, ni les résultats de scan.',
14
+ },
15
+ {
16
+ question: 'Pourquoi le scanner n\'affiche-t-il pas tous les appareils BLE à proximité ?',
17
+ answer: 'Les navigateurs exposent intentionnellement le Bluetooth via un sélecteur de permission, pas comme un scanner silencieux en arrière-plan. Certains appareils cessent également d\'émettre, masquent leur nom, nécessitent un appairage ou n\'exposent leurs services qu\'après connexion.',
18
+ },
19
+ {
20
+ question: 'Quels navigateurs prennent en charge Web Bluetooth ?',
21
+ answer: 'Web Bluetooth est le mieux pris en charge dans les navigateurs de bureau basés sur Chromium comme Chrome et Edge. Il nécessite généralement HTTPS ou localhost et n\'est pas disponible dans de nombreuses configurations de Firefox, Safari et des navigateurs iOS.',
22
+ },
23
+ {
24
+ question: 'Peut-il lire les données privées des capteurs d\'un wearable ?',
25
+ answer: 'Uniquement si l\'appareil expose des services GATT compatibles et que le navigateur accorde l\'accès. De nombreux wearables commerciaux nécessitent des applications du fabricant, un chiffrement, un appairage ou des caractéristiques propriétaires qu\'un scanner de navigateur générique ne peut pas décoder.',
26
+ },
27
+ {
28
+ question: 'Que sont les UUIDs de service GATT ?',
29
+ answer: 'Un UUID de service GATT identifie un groupe de fonctionnalités Bluetooth Low Energy, telles que le Service Batterie, la Fréquence Cardiaque, les Informations sur l\'Appareil ou un service personnalisé du fabricant utilisé par le matériel maker et IoT.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Utilisez un navigateur compatible',
36
+ text: 'Ouvrez l\'outil dans Chrome ou Edge via HTTPS ou localhost, puis assurez-vous que le Bluetooth est activé sur l\'ordinateur ou le téléphone.',
37
+ },
38
+ {
39
+ name: 'Mettez le matériel en mode diffusion',
40
+ text: 'Activez l\'appareil BLE, éteignez-le et rallumez-le, appuyez sur son bouton d\'appairage ou ouvrez son mode diffusion pour qu\'il apparaisse dans le sélecteur de permission du navigateur.',
41
+ },
42
+ {
43
+ name: 'Scannez l\'environnement',
44
+ text: 'Cliquez sur Scanner l\'environnement et sélectionnez l\'appareil BLE que vous souhaitez inspecter. La boîte de dialogue de permission du navigateur contrôle exactement quel appareil devient visible pour la page.',
45
+ },
46
+ {
47
+ name: 'Lisez les services GATT',
48
+ text: 'Après la connexion, examinez les cartes d\'UUID de service pour identifier les profils Bluetooth standard, les services de firmware personnalisés et si l\'appareil expose le chemin de données attendu.',
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: 'fr',
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: 'Testeur BLE en ligne pour l\'IoT, les wearables et le matériel maker',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'Ce scanner Web Bluetooth vous permet de tester si un appareil Bluetooth Low Energy à proximité est détectable depuis un navigateur et quels services GATT il expose après avoir accordé la permission. Il est utile pour déboguer le firmware ESP32, les sketches Arduino BLE, les capteurs intelligents, les wearables de fitness, les claviers, les balises personnalisées, les moniteurs environnementaux et le matériel prototype avant de créer une application mobile native.',
103
+ },
104
+ {
105
+ type: 'message',
106
+ title: 'Modèle de confidentialité',
107
+ html: 'GameBob ne stocke ni les adresses MAC, ni les identifiants d\'appareil, ni les noms, ni les UUIDs, ni les données de signal, ni l\'historique des scans. Le sélecteur de permission du navigateur détermine quel appareil unique la page peut consulter et les résultats restent dans votre session de navigateur actuelle.',
108
+ },
109
+ {
110
+ type: 'table',
111
+ headers: ['Ce que vous voyez', 'Ce que cela signifie', 'Ce qu\'il faut vérifier ensuite'],
112
+ rows: [
113
+ ['Nom de l\'appareil', 'Le nom Bluetooth diffusé, si le matériel en émet un.', 'S\'il est vide, vérifiez les données publicitaires du firmware ou utilisez un préfixe de nom connu pendant les tests.'],
114
+ ['ID de l\'appareil', 'Un identifiant limité au navigateur, pas l\'adresse MAC publique réelle.', 'Utilisez-le uniquement pour cette session du navigateur ; ne le traitez pas comme un numéro de série matériel universel.'],
115
+ ['UUIDs de service GATT', 'Les groupes de services exposés après acceptation de la connexion.', 'Comparez les UUIDs standard avec la liste Bluetooth SIG ou votre table de services du firmware.'],
116
+ ['Service personnalisé', 'Un UUID spécifique au fabricant ou au projet.', 'Ouvrez votre firmware, le profil de l\'application mobile ou la documentation BLE pour mapper les caractéristiques et les autorisations.'],
117
+ ],
118
+ },
119
+ {
120
+ type: 'title',
121
+ text: 'Pourquoi le scan Bluetooth du navigateur est différent',
122
+ level: 3,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Les applications de scanner BLE natives affichent souvent des diffusions continues de nombreux appareils à proximité. Web Bluetooth est délibérément plus strict: la page doit être ouverte dans un contexte sécurisé, le scan doit démarrer par un clic utilisateur et le navigateur affiche un sélecteur de permission. Cela protège les utilisateurs contre le pistage silencieux tout en offrant aux développeurs un moyen pratique de se connecter au matériel BLE sélectionné depuis JavaScript.',
127
+ },
128
+ {
129
+ type: 'comparative',
130
+ items: [
131
+ {
132
+ title: 'Scanner Web Bluetooth',
133
+ description: 'Idéal pour la validation rapide du firmware, les démos, les flux d\'assistance, les laboratoires pédagogiques et les diagnostics basés navigateur où la friction d\'installation est importante.',
134
+ },
135
+ {
136
+ title: 'Application BLE native',
137
+ description: 'Meilleure pour le scan en arrière-plan, la journalisation RSSI, les flux d\'appairage, les protocoles chiffrés du fabricant, les grands arbres de caractéristiques et les diagnostics terrain à long terme.',
138
+ },
139
+ ],
140
+ },
141
+ {
142
+ type: 'title',
143
+ text: 'Raisons courantes pour lesquelles un appareil BLE n\'apparaît pas',
144
+ level: 3,
145
+ },
146
+ {
147
+ type: 'list',
148
+ items: [
149
+ 'Le Bluetooth est désactivé au niveau du système d\'exploitation ou le navigateur n\'a pas la permission Bluetooth.',
150
+ 'L\'appareil est connecté à un autre téléphone, ordinateur portable, application du fabricant ou passerelle et a cessé d\'émettre.',
151
+ 'Le matériel n\'émet que pendant une courte fenêtre après le démarrage ou après avoir appuyé sur un bouton d\'appairage.',
152
+ 'Le navigateur n\'est pas basé sur Chromium, la page n\'est pas servie via HTTPS ou la plateforme bloque Web Bluetooth.',
153
+ 'Le firmware diffuse des données du fabricant mais masque le nom local, le sélecteur peut donc afficher un appareil sans nom.',
154
+ 'L\'appareil nécessite un appairage, un chiffrement ou une authentification propriétaire avant que les services ne deviennent lisibles.',
155
+ ],
156
+ },
157
+ {
158
+ type: 'title',
159
+ text: 'Comment utiliser les UUIDs GATT pendant le débogage',
160
+ level: 3,
161
+ },
162
+ {
163
+ type: 'paragraph',
164
+ html: 'Une connexion réussie avec des UUIDs de service vous indique que le navigateur peut atteindre le périphérique et que le périphérique expose au moins une partie de sa table GATT. Les services standard tels que Service Batterie, Informations sur l\'Appareil, Fréquence Cardiaque, Dispositif d\'Interface Humaine et Détection Environnementale sont faciles à reconnaître. Les UUIDs personnalisés pointent généralement vers des fonctionnalités spécifiques au firmware et nécessitent la carte des caractéristiques de votre code source ou de la documentation du fabricant.',
165
+ },
166
+ {
167
+ type: 'table',
168
+ headers: ['Symptôme', 'Cause probable', 'Solution pratique'],
169
+ rows: [
170
+ ['Le sélecteur de permission est vide', 'L\'appareil n\'émet pas ou le support du navigateur est absent.', 'Redémarrez l\'appareil, activez le mode appairage, rapprochez-vous ou réessayez dans Chrome/Edge.'],
171
+ ['La connexion échoue immédiatement', 'L\'appareil est occupé, hors de portée ou refuse la connexion du navigateur.', 'Déconnectez les applications du fabricant et gardez le périphérique près de l\'ordinateur.'],
172
+ ['Aucun service n\'est listé', 'GATT est indisponible, les services sont masqués ou l\'accès n\'a pas été accordé pour ces UUIDs.', 'Ajoutez des services optionnels connus dans les tests de firmware ou inspectez avec un outil BLE natif.'],
173
+ ['Seuls les UUIDs personnalisés apparaissent', 'Le matériel utilise des services de firmware spécifiques au fabricant.', 'Mappez les UUIDs aux constantes du code source et documentez les autorisations de lecture/écriture des caractéristiques.'],
174
+ ],
175
+ },
176
+ {
177
+ type: 'title',
178
+ text: 'Limites de sécurité et de confidentialité',
179
+ level: 3,
180
+ },
181
+ {
182
+ type: 'list',
183
+ items: [
184
+ 'La page ne peut pas collecter silencieusement les appareils Bluetooth à proximité en arrière-plan.',
185
+ 'Le navigateur peut masquer les adresses MAC réelles et fournir à la place un ID d\'appareil limité.',
186
+ 'L\'accès ne commence qu\'après que l\'utilisateur a cliqué sur le bouton de scan et choisi un appareil.',
187
+ 'Les résultats ne sont ni téléchargés ni stockés par GameBob.',
188
+ 'Les appareils commerciaux sensibles peuvent nécessiter un chiffrement ou un flux d\'appairage du fabricant que ce scanner générique ne peut pas contourner.',
189
+ ],
190
+ },
191
+ ],
192
+ ui: {
193
+ unsupportedTitle: 'Web Bluetooth n\'est pas disponible',
194
+ unsupportedBody: 'Essayez Chrome ou Edge sur ordinateur ou Android, activez le Bluetooth et ouvrez la page via HTTPS ou localhost.',
195
+ secureContext: 'Web Bluetooth nécessite une page HTTPS sécurisée ou localhost. Rechargez l\'outil depuis une origine sécurisée et réessayez.',
196
+ scanButton: 'Scanner l\'environnement',
197
+ scanning: 'Scan en cours',
198
+ reconnect: 'Scanner à nouveau',
199
+ disconnect: 'Déconnecter',
200
+ privacyTitle: 'Confidentialité dès la conception',
201
+ privacyBody: 'GameBob ne stocke ni les adresses MAC, ni les identifiants d\'appareil, ni les noms, ni les UUIDs, ni l\'historique des scans. Le navigateur n\'expose que l\'appareil que vous choisissez.',
202
+ deviceLabel: 'Appareil sélectionné',
203
+ nameFallback: 'Appareil BLE sans nom',
204
+ idLabel: 'ID appareil du navigateur',
205
+ servicesLabel: 'Services GATT',
206
+ noServices: 'Aucun service primaire lisible n\'a été retourné pour cette connexion.',
207
+ statusIdle: 'Prêt à scanner le matériel BLE à proximité',
208
+ statusPermission: 'En attente du sélecteur de permission du navigateur',
209
+ statusConnecting: 'Connexion à l\'appareil BLE sélectionné',
210
+ statusConnected: 'Connecté et services chargés',
211
+ statusDisconnected: 'Appareil déconnecté',
212
+ statusCancelled: 'Aucun appareil BLE n\'a été sélectionné ou le Bluetooth est désactivé/indisponible sur cet appareil.',
213
+ statusUnavailable: 'Le Bluetooth semble être désactivé, bloqué ou absent sur cet appareil. Activez le Bluetooth ou essayez depuis un matériel disposant d\'un adaptateur BLE.',
214
+ statusError: 'Échec du scan Bluetooth',
215
+ signalUnknown: 'La force du signal est contrôlée par le sélecteur du navigateur',
216
+ gattUnavailable: 'Cet appareil n\'a pas exposé de serveur GATT au navigateur',
217
+ customServiceName: 'Service personnalisé ou spécifique au fabricant',
218
+ serviceGenericAccess: 'Accès Générique',
219
+ serviceGenericAttribute: 'Attribut Générique',
220
+ serviceDeviceInformation: 'Informations sur l\'Appareil',
221
+ serviceHeartRate: 'Fréquence Cardiaque',
222
+ serviceBattery: 'Service Batterie',
223
+ serviceHumanInterfaceDevice: 'Dispositif d\'Interface Humaine',
224
+ serviceCyclingSpeedCadence: 'Vitesse et Cadence de Cyclisme',
225
+ serviceEnvironmentalSensing: 'Détection Environnementale',
226
+ serviceUserData: 'Données Utilisateur',
227
+ serviceFitnessMachine: 'Appareil de Fitness',
228
+ uuidHelp: 'Les UUIDs identifient les services Bluetooth. Les services standard sont nommés automatiquement ; les UUIDs spécifiques au fabricant nécessitent la documentation de votre firmware ou appareil.',
229
+ compatibilityHint: 'Fonctionne le mieux dans les navigateurs basés sur Chromium avec le Bluetooth activé. Web Bluetooth est intentionnellement limité par les permissions et peut ne pas afficher tous les émetteurs à proximité.',
230
+ serviceCountSingular: 'service',
231
+ serviceCountPlural: 'services',
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 = 'pemindai-ble-web-bluetooth';
7
+ const title = 'Pemindai Web Bluetooth BLE';
8
+ const description = 'Pindai perangkat Bluetooth Low Energy di sekitar dari browser, periksa UUID layanan GATT yang terbuka, dan uji apakah perangkat keras IoT atau wearable Anda dapat ditemukan.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Bisakah situs web memindai perangkat Bluetooth tanpa izin?',
13
+ answer: 'Tidak. Web Bluetooth selalu memerlukan gestur pengguna dan pemilih izin browser. Alat ini hanya melihat perangkat yang Anda pilih secara eksplisit dan tidak menyimpan alamat MAC, ID perangkat, atau hasil pemindaian.',
14
+ },
15
+ {
16
+ question: 'Mengapa pemindai tidak menampilkan setiap perangkat BLE di sekitar?',
17
+ answer: 'Browser sengaja mengekspos Bluetooth melalui pemilih izin, bukan sebagai pemindai latar belakang senyap. Beberapa perangkat juga berhenti mengiklankan, menyembunyikan nama, memerlukan pairing, atau mengekspos layanan hanya setelah koneksi.',
18
+ },
19
+ {
20
+ question: 'Browser mana yang mendukung Web Bluetooth?',
21
+ answer: 'Web Bluetooth paling baik didukung di browser desktop berbasis Chromium seperti Chrome dan Edge. Biasanya memerlukan HTTPS atau localhost dan tidak tersedia di banyak konfigurasi Firefox, Safari, dan browser iOS.',
22
+ },
23
+ {
24
+ question: 'Bisakah ini membaca data sensor pribadi dari wearable?',
25
+ answer: 'Hanya jika perangkat mengekspos layanan GATT yang kompatibel dan browser memberikan akses. Banyak wearable komersial memerlukan aplikasi vendor, enkripsi, bonding, atau karakteristik proprietary yang tidak dapat didekode oleh pemindai browser generik.',
26
+ },
27
+ {
28
+ question: 'Apa itu UUID layanan GATT?',
29
+ answer: 'UUID layanan GATT mengidentifikasi sekelompok fitur Bluetooth Low Energy, seperti Layanan Baterai, Detak Jantung, Informasi Perangkat, atau layanan kustom vendor yang digunakan oleh perangkat keras maker dan IoT.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Gunakan browser yang kompatibel',
36
+ text: 'Buka alat ini di Chrome atau Edge melalui HTTPS atau localhost, lalu pastikan Bluetooth diaktifkan di komputer atau ponsel.',
37
+ },
38
+ {
39
+ name: 'Masukkan perangkat keras ke mode iklan',
40
+ text: 'Bangunkan perangkat BLE, matikan dan nyalakan kembali, tekan tombol pairing, atau buka mode iklannya agar muncul di pemilih izin browser.',
41
+ },
42
+ {
43
+ name: 'Pindai lingkungan',
44
+ text: 'Tekan Pindai Lingkungan dan pilih perangkat BLE yang ingin Anda periksa. Dialog izin browser mengontrol dengan tepat perangkat mana yang terlihat oleh halaman.',
45
+ },
46
+ {
47
+ name: 'Baca layanan GATT',
48
+ text: 'Setelah koneksi, tinjau kartu UUID layanan untuk mengidentifikasi profil Bluetooth standar, layanan firmware kustom, dan apakah perangkat mengekspos jalur data yang Anda harapkan.',
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: 'id',
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: 'Penguji BLE Online untuk IoT, Wearable, dan Perangkat Keras Maker',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'Pemindai Web Bluetooth ini memungkinkan Anda menguji apakah perangkat Bluetooth Low Energy di sekitar dapat ditemukan dari browser dan layanan GATT mana yang diekspos setelah izin diberikan. Berguna saat men-debug firmware ESP32, sketsa Arduino BLE, sensor pintar, wearable kebugaran, keyboard, beacon kustom, monitor lingkungan, dan perangkat keras prototipe sebelum membuat aplikasi seluler native.',
103
+ },
104
+ {
105
+ type: 'message',
106
+ title: 'Model privasi',
107
+ html: 'GameBob tidak menyimpan alamat MAC, ID perangkat, nama, UUID, data sinyal, atau riwayat pemindaian. Pemilih izin browser memutuskan perangkat tunggal mana yang dapat diakses halaman, dan hasil tetap berada di sesi browser Anda saat ini.',
108
+ },
109
+ {
110
+ type: 'table',
111
+ headers: ['Apa yang Anda lihat', 'Artinya', 'Yang perlu diperiksa selanjutnya'],
112
+ rows: [
113
+ ['Nama perangkat', 'Nama Bluetooth yang diiklankan, jika perangkat keras menyiarkannya.', 'Jika kosong, periksa data iklan firmware atau gunakan awalan nama yang dikenal selama pengujian.'],
114
+ ['ID perangkat', 'Pengenal terbatas browser, bukan alamat MAC publik mentah.', 'Gunakan hanya untuk sesi browser ini; jangan perlakukan sebagai nomor seri perangkat keras universal.'],
115
+ ['UUID layanan GATT', 'Kelompok layanan yang diekspos setelah koneksi diterima.', 'Bandingkan UUID standar dengan daftar Bluetooth SIG atau tabel layanan firmware Anda.'],
116
+ ['Layanan kustom', 'UUID spesifik vendor atau spesifik proyek.', 'Buka firmware Anda, profil aplikasi seluler, atau dokumentasi BLE untuk memetakan karakteristik dan izin.'],
117
+ ],
118
+ },
119
+ {
120
+ type: 'title',
121
+ text: 'Mengapa Pemindaian Bluetooth Browser Berbeda',
122
+ level: 3,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Aplikasi pemindai BLE native sering menampilkan iklan berkelanjutan dari banyak perangkat di sekitar. Web Bluetooth sengaja lebih ketat: halaman harus dibuka dalam konteks aman, pemindaian harus dimulai dari klik pengguna, dan browser menampilkan pemilih izin. Ini melindungi pengguna dari pelacakan senyap sambil tetap memberi pengembang cara praktis untuk terhubung ke perangkat keras BLE yang dipilih dari JavaScript.',
127
+ },
128
+ {
129
+ type: 'comparative',
130
+ items: [
131
+ {
132
+ title: 'Pemindai Web Bluetooth',
133
+ description: 'Terbaik untuk validasi firmware cepat, demo, alur dukungan, laboratorium kelas, dan diagnostik berbasis browser di mana friksi instalasi penting.',
134
+ },
135
+ {
136
+ title: 'Aplikasi BLE native',
137
+ description: 'Lebih baik untuk pemindaian latar belakang, pencatatan RSSI, alur pairing, protokol vendor terenkripsi, pohon karakteristik besar, dan diagnostik lapangan jangka panjang.',
138
+ },
139
+ ],
140
+ },
141
+ {
142
+ type: 'title',
143
+ text: 'Alasan Umum Perangkat BLE Tidak Muncul',
144
+ level: 3,
145
+ },
146
+ {
147
+ type: 'list',
148
+ items: [
149
+ 'Bluetooth dinonaktifkan di tingkat sistem operasi atau browser tidak memiliki izin Bluetooth.',
150
+ 'Perangkat terhubung ke ponsel, laptop, aplikasi vendor, atau gateway lain dan telah berhenti mengiklankan.',
151
+ 'Perangkat keras hanya mengiklankan untuk jendela singkat setelah boot atau setelah menekan tombol pairing.',
152
+ 'Browser tidak berbasis Chromium, halaman tidak disajikan melalui HTTPS, atau platform memblokir Web Bluetooth.',
153
+ 'Firmware mengiklankan data pabrikan tetapi menyembunyikan nama lokal, sehingga pemilih mungkin menampilkan perangkat tanpa nama.',
154
+ 'Perangkat memerlukan bonding, enkripsi, atau otentikasi proprietary sebelum layanan dapat dibaca.',
155
+ ],
156
+ },
157
+ {
158
+ type: 'title',
159
+ text: 'Cara Menggunakan UUID GATT Selama Debugging',
160
+ level: 3,
161
+ },
162
+ {
163
+ type: 'paragraph',
164
+ html: 'Koneksi berhasil dengan UUID layanan memberi tahu Anda bahwa browser dapat menjangkau periferal dan periferal mengekspos setidaknya sebagian dari tabel GATT-nya. Layanan standar seperti Layanan Baterai, Informasi Perangkat, Detak Jantung, Perangkat Antarmuka Manusia, dan Penginderaan Lingkungan mudah dikenali. UUID kustom biasanya mengarah ke fitur spesifik firmware dan memerlukan peta karakteristik dari kode sumber atau dokumentasi vendor Anda.',
165
+ },
166
+ {
167
+ type: 'table',
168
+ headers: ['Gejala', 'Kemungkinan penyebab', 'Solusi praktis'],
169
+ rows: [
170
+ ['Pemilih izin kosong', 'Perangkat tidak mengiklankan atau dukungan browser tidak ada.', 'Mulai ulang perangkat, aktifkan mode pairing, dekati, atau coba lagi di Chrome/Edge.'],
171
+ ['Koneksi langsung gagal', 'Perangkat sibuk, di luar jangkauan, atau menolak koneksi browser.', 'Putuskan aplikasi vendor dan jaga periferal dekat dengan komputer.'],
172
+ ['Tidak ada layanan yang tercantum', 'GATT tidak tersedia, layanan disembunyikan, atau akses tidak diberikan untuk UUID tersebut.', 'Tambahkan layanan opsional yang dikenal dalam uji firmware atau periksa dengan alat BLE native.'],
173
+ ['Hanya UUID kustom yang muncul', 'Perangkat keras menggunakan layanan firmware spesifik vendor.', 'Petakan UUID ke konstanta kode sumber dan dokumentasikan izin baca/tulis karakteristik.'],
174
+ ],
175
+ },
176
+ {
177
+ type: 'title',
178
+ text: 'Batas Keamanan dan Privasi',
179
+ level: 3,
180
+ },
181
+ {
182
+ type: 'list',
183
+ items: [
184
+ 'Halaman tidak dapat diam-diam mengumpulkan perangkat Bluetooth di sekitar di latar belakang.',
185
+ 'Browser dapat menyembunyikan alamat MAC asli dan memberikan ID perangkat terbatas sebagai gantinya.',
186
+ 'Akses hanya dimulai setelah pengguna mengklik tombol pindai dan memilih perangkat.',
187
+ 'Hasil tidak diunggah atau disimpan oleh GameBob.',
188
+ 'Perangkat komersial sensitif mungkin memerlukan enkripsi atau alur pairing vendor yang tidak dapat dilewati oleh pemindai generik ini.',
189
+ ],
190
+ },
191
+ ],
192
+ ui: {
193
+ unsupportedTitle: 'Web Bluetooth tidak tersedia',
194
+ unsupportedBody: 'Coba Chrome atau Edge di desktop atau Android, aktifkan Bluetooth, dan buka halaman melalui HTTPS atau localhost.',
195
+ secureContext: 'Web Bluetooth memerlukan halaman HTTPS aman atau localhost. Muat ulang alat dari asal yang aman dan coba lagi.',
196
+ scanButton: 'Pindai Lingkungan',
197
+ scanning: 'Memindai',
198
+ reconnect: 'Pindai lagi',
199
+ disconnect: 'Putuskan',
200
+ privacyTitle: 'Privasi berdasarkan desain',
201
+ privacyBody: 'GameBob tidak menyimpan alamat MAC, ID perangkat, nama, UUID, atau riwayat pemindaian. Browser hanya mengekspos perangkat yang Anda pilih.',
202
+ deviceLabel: 'Perangkat dipilih',
203
+ nameFallback: 'Perangkat BLE tanpa nama',
204
+ idLabel: 'ID perangkat browser',
205
+ servicesLabel: 'Layanan GATT',
206
+ noServices: 'Tidak ada layanan primer yang dapat dibaca yang dikembalikan untuk koneksi ini.',
207
+ statusIdle: 'Siap memindai perangkat keras BLE di sekitar',
208
+ statusPermission: 'Menunggu pemilih izin browser',
209
+ statusConnecting: 'Menghubungkan ke perangkat BLE yang dipilih',
210
+ statusConnected: 'Terhubung dan layanan dimuat',
211
+ statusDisconnected: 'Perangkat terputus',
212
+ statusCancelled: 'Tidak ada perangkat BLE yang dipilih, atau Bluetooth dimatikan/tidak tersedia di perangkat ini.',
213
+ statusUnavailable: 'Bluetooth tampaknya dimatikan, diblokir, atau tidak ada di perangkat ini. Aktifkan Bluetooth atau coba dari perangkat keras yang memiliki adaptor BLE.',
214
+ statusError: 'Pemindaian Bluetooth gagal',
215
+ signalUnknown: 'Kekuatan sinyal dikendalikan oleh pemilih browser',
216
+ gattUnavailable: 'Perangkat ini tidak mengekspos server GATT ke browser',
217
+ customServiceName: 'Layanan kustom atau spesifik vendor',
218
+ serviceGenericAccess: 'Akses Generik',
219
+ serviceGenericAttribute: 'Atribut Generik',
220
+ serviceDeviceInformation: 'Informasi Perangkat',
221
+ serviceHeartRate: 'Detak Jantung',
222
+ serviceBattery: 'Layanan Baterai',
223
+ serviceHumanInterfaceDevice: 'Perangkat Antarmuka Manusia',
224
+ serviceCyclingSpeedCadence: 'Kecepatan dan Irama Bersepeda',
225
+ serviceEnvironmentalSensing: 'Penginderaan Lingkungan',
226
+ serviceUserData: 'Data Pengguna',
227
+ serviceFitnessMachine: 'Mesin Kebugaran',
228
+ uuidHelp: 'UUID mengidentifikasi layanan Bluetooth. Layanan standar dinamai secara otomatis; UUID spesifik vendor memerlukan dokumentasi firmware atau perangkat Anda.',
229
+ compatibilityHint: 'Bekerja paling baik di browser berbasis Chromium dengan Bluetooth diaktifkan. Web Bluetooth sengaja dibatasi izin dan mungkin tidak menampilkan setiap pengiklan di sekitar.',
230
+ serviceCountSingular: 'layanan',
231
+ serviceCountPlural: 'layanan',
232
+ },
233
+ };