@jjlmoya/utils-hardware 1.24.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 (55) hide show
  1. package/package.json +2 -1
  2. package/src/category/index.ts +3 -1
  3. package/src/entries.ts +7 -1
  4. package/src/index.ts +2 -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/tools.ts +3 -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 = 'poisk-ble-ustroistv-web';
7
+ const title = 'Web Bluetooth BLE сканер';
8
+ const description = 'Сканируйте ближайшие устройства Bluetooth Low Energy из браузера, проверяйте открытые UUID служб GATT и тестируйте, обнаруживается ли ваше IoT- или носимое оборудование.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Может ли веб-сайт сканировать устройства Bluetooth без разрешения?',
13
+ answer: 'Нет. Web Bluetooth всегда требует действия пользователя и выбора разрешений в браузере. Этот инструмент видит только то устройство, которое вы явно выбрали, и не сохраняет MAC-адреса, идентификаторы устройств или результаты сканирования.',
14
+ },
15
+ {
16
+ question: 'Почему сканер не показывает все ближайшие BLE-устройства?',
17
+ answer: 'Браузеры намеренно предоставляют доступ к Bluetooth через выбор разрешений, а не как фоновый сканер. Некоторые устройства также прекращают вещание, скрывают имя, требуют сопряжения или предоставляют службы только после подключения.',
18
+ },
19
+ {
20
+ question: 'Какие браузеры поддерживают Web Bluetooth?',
21
+ answer: 'Web Bluetooth лучше всего поддерживается в настольных браузерах на базе Chromium, таких как Chrome и Edge. Обычно требуется HTTPS или localhost, и он недоступен во многих конфигурациях Firefox, Safari и браузеров iOS.',
22
+ },
23
+ {
24
+ question: 'Может ли это читать личные данные датчиков с носимого устройства?',
25
+ answer: 'Только если устройство предоставляет совместимые службы GATT, и браузер предоставляет доступ. Многие коммерческие носимые устройства требуют приложений производителя, шифрования, привязки или проприетарных характеристик, которые общий браузерный сканер не может декодировать.',
26
+ },
27
+ {
28
+ question: 'Что такое UUID служб GATT?',
29
+ answer: 'UUID службы GATT идентифицирует группу функций Bluetooth Low Energy, таких как Служба батареи, Частота пульса, Информация об устройстве или пользовательская служба производителя, используемая оборудованием для мейкеров и IoT.',
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: 'ru',
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: 'BLE тестер онлайн для IoT, носимых устройств и оборудования для мейкеров',
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-адреса, идентификаторы устройств, имена, UUID, данные сигнала или историю сканирования. Выбор разрешений браузера определяет, к какому отдельному устройству страница может получить доступ, а результаты остаются в вашей текущей сессии браузера.',
108
+ },
109
+ {
110
+ type: 'table',
111
+ headers: ['Что вы видите', 'Что это значит', 'Что проверить далее'],
112
+ rows: [
113
+ ['Имя устройства', 'Передаваемое имя Bluetooth, если оборудование его транслирует.', 'Если оно пустое, проверьте рекламные данные прошивки или используйте известный префикс имени во время тестирования.'],
114
+ ['ID устройства', 'Идентификатор в рамках браузера, а не настоящий публичный MAC-адрес.', 'Используйте его только для этой сессии браузера; не рассматривайте его как универсальный серийный номер оборудования.'],
115
+ ['UUID служб GATT', 'Группы служб, предоставляемые после принятия соединения.', 'Сравните стандартные 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 намеренно более строгий: страница должна быть открыта в безопасном контексте, сканирование должно начинаться с клика пользователя, и браузер показывает выбор разрешений. Это защищает пользователей от скрытого отслеживания, при этом давая разработчикам практический способ подключения к выбранному BLE-оборудованию из JavaScript.',
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 отключен на уровне операционной системы, или у браузера нет разрешения Bluetooth.',
150
+ 'Устройство подключено к другому телефону, ноутбуку, приложению производителя или шлюзу и прекратило вещание.',
151
+ 'Оборудование вещает только в течение короткого периода после загрузки или после нажатия кнопки сопряжения.',
152
+ 'Браузер не основан на Chromium, страница не обслуживается через HTTPS, или платформа блокирует Web Bluetooth.',
153
+ 'Прошивка вещает данные производителя, но скрывает локальное имя, поэтому выбор может показать безымянное устройство.',
154
+ 'Устройство требует привязки, шифрования или проприетарной аутентификации, прежде чем службы станут читаемыми.',
155
+ ],
156
+ },
157
+ {
158
+ type: 'title',
159
+ text: 'Как использовать UUID GATT во время отладки',
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-адреса и вместо этого предоставлять ограниченный идентификатор устройства.',
186
+ 'Доступ начинается только после того, как пользователь нажимает кнопку сканирования и выбирает устройство.',
187
+ 'Результаты не загружаются и не сохраняются GameBob.',
188
+ 'Чувствительные коммерческие устройства могут требовать шифрования или процесса сопряжения производителя, который этот общий сканер не может обойти.',
189
+ ],
190
+ },
191
+ ],
192
+ ui: {
193
+ unsupportedTitle: 'Web Bluetooth недоступен',
194
+ unsupportedBody: 'Попробуйте Chrome или Edge на настольном компьютере или Android, включите Bluetooth и откройте страницу через HTTPS или localhost.',
195
+ secureContext: 'Web Bluetooth требует безопасной страницы HTTPS или localhost. Перезагрузите инструмент из безопасного источника и попробуйте снова.',
196
+ scanButton: 'Сканировать окружение',
197
+ scanning: 'Сканирование',
198
+ reconnect: 'Сканировать снова',
199
+ disconnect: 'Отключить',
200
+ privacyTitle: 'Конфиденциальность по замыслу',
201
+ privacyBody: 'GameBob не хранит MAC-адреса, идентификаторы устройств, имена, 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: 'Лучше всего работает в браузерах на базе Chromium с включенным Bluetooth. Web Bluetooth намеренно ограничен разрешениями и может не показывать всех ближайших вещателей.',
230
+ serviceCountSingular: 'служба',
231
+ serviceCountPlural: 'служб',
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 = 'skanner-ble-web-bluetooth';
7
+ const title = 'Web Bluetooth BLE skanner';
8
+ const description = 'Skanna Bluetooth Low Energy enheter i närheten från webbläsaren, inspektera exponerade GATT tjänst UUIDer och testa om din IoT- eller wearable-hårdvara är upptäckbar.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Kan en webbplats skanna Bluetooth enheter utan tillstånd?',
13
+ answer: 'Nej. Web Bluetooth kräver alltid en användargest och en webbläsartillståndsväljare. Detta verktyg ser bara den enhet du uttryckligen väljer och lagrar inte MAC adresser, enhets-ID eller skanningsresultat.',
14
+ },
15
+ {
16
+ question: 'Varför visar inte skannern alla närliggande BLE enheter?',
17
+ answer: 'Webbläsare exponerar avsiktligt Bluetooth genom en tillståndsväljare, inte som en tyst bakgrundsskanner. Vissa enheter slutar också annonsera, döljer sitt namn, kräver parkoppling eller exponerar tjänster endast efter en anslutning.',
18
+ },
19
+ {
20
+ question: 'Vilka webbläsare stöder Web Bluetooth?',
21
+ answer: 'Web Bluetooth stöds bäst i Chromium-baserade skrivbordswebbläsare som Chrome och Edge. Det kräver vanligtvis HTTPS eller localhost och är inte tillgängligt i många Firefox-, Safari- och iOS-webbläsarkonfigurationer.',
22
+ },
23
+ {
24
+ question: 'Kan detta läsa privata sensordata från en wearable?',
25
+ answer: 'Endast om enheten exponerar kompatibla GATT tjänster och webbläsaren beviljar åtkomst. Många kommersiella wearables kräver leverantörsappar, kryptering, bindning eller proprietära egenskaper som en generisk webbläsarskanner inte kan avkoda.',
26
+ },
27
+ {
28
+ question: 'Vad är GATT tjänst UUIDer?',
29
+ answer: 'En GATT tjänst UUID identifierar en grupp Bluetooth Low Energy funktioner, såsom Batteritjänst, Puls, Enhetsinformation eller en anpassad leverantörstjänst som används av maker- och IoT-hårdvara.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Använd en kompatibel webbläsare',
36
+ text: 'Öppna verktyget i Chrome eller Edge via HTTPS eller localhost och se sedan till att Bluetooth är aktiverat på datorn eller telefonen.',
37
+ },
38
+ {
39
+ name: 'Sätt hårdvaran i annonseringsläge',
40
+ text: 'Väck BLE enheten, strömcykla den, tryck på dess parkopplingsknapp eller öppna dess annonseringsläge så att den visas i webbläsarens tillståndsväljare.',
41
+ },
42
+ {
43
+ name: 'Skanna omgivningen',
44
+ text: 'Tryck på Skanna omgivning och välj den BLE enhet du vill inspektera. Webbläsarens tillståndsdialog styr exakt vilken enhet som blir synlig för sidan.',
45
+ },
46
+ {
47
+ name: 'Läs GATT tjänsterna',
48
+ text: 'Efter anslutning, granska tjänst UUID korten för att identifiera standard Bluetooth profiler, anpassade firmwaretjänster och om enheten exponerar den dataväg du förväntade dig.',
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: 'sv',
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: 'BLE testare online för IoT, Wearables och Maker Hårdvara',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'Denna Web Bluetooth skanner låter dig testa om en närliggande Bluetooth Low Energy enhet är upptäckbar från en webbläsare och vilka GATT tjänster den exponerar efter att tillstånd har beviljats. Den är användbar vid felsökning av ESP32 firmware, Arduino BLE sketcher, smarta sensorer, fitnesswearables, tangentbord, anpassade beacons, miljömonitorer och prototyphårdvara innan du bygger en native mobilapp.',
103
+ },
104
+ {
105
+ type: 'message',
106
+ title: 'Integritetsmodell',
107
+ html: 'GameBob lagrar inte MAC adresser, enhets-ID, namn, UUIDer, signaldata eller skanningshistorik. Webbläsarens tillståndsväljare bestämmer vilken enskild enhet sidan kan komma åt, och resultaten stannar i din nuvarande webbläsarsession.',
108
+ },
109
+ {
110
+ type: 'table',
111
+ headers: ['Vad du ser', 'Vad det betyder', 'Vad du ska kontrollera härnäst'],
112
+ rows: [
113
+ ['Enhetsnamn', 'Det annonserade Bluetooth namnet, om hårdvaran sänder ett.', 'Om det är tomt, kontrollera firmwarens annonseringsdata eller använd ett känt namnprefix under testning.'],
114
+ ['Enhets-ID', 'En webbläsaromfattad identifierare, inte den faktiska offentliga MAC adressen.', 'Använd det endast för denna webbläsarsession; behandla det inte som ett universellt hårdvaruserienummer.'],
115
+ ['GATT tjänst UUIDer', 'Tjänstgrupperna som exponeras efter att anslutningen har accepterats.', 'Jämför standard UUIDer med Bluetooth SIG listan eller din firmware tjänsttabell.'],
116
+ ['Anpassad tjänst', 'En leverantörsspecifik eller projektspecifik UUID.', 'Öppna din firmware, mobilappsprofil eller BLE dokumentation för att mappa egenskaper och behörigheter.'],
117
+ ],
118
+ },
119
+ {
120
+ type: 'title',
121
+ text: 'Varför Webbläsarbaserad Bluetooth Skanning är Annorlunda',
122
+ level: 3,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Inbyggda BLE skannerappar visar ofta kontinuerliga annonser från många närliggande enheter. Web Bluetooth är avsiktligt strängare: sidan måste öppnas i ett säkert sammanhang, skanningen måste starta från ett användarklick och webbläsaren visar en tillståndsväljare. Detta skyddar användare från tyst spårning samtidigt som utvecklare får ett praktiskt sätt att ansluta till vald BLE hårdvara från JavaScript.',
127
+ },
128
+ {
129
+ type: 'comparative',
130
+ items: [
131
+ {
132
+ title: 'Web Bluetooth skanner',
133
+ description: 'Bäst för snabb firmwarevalidering, demos, supportflöden, klassrumslabb och webbläsarbaserad diagnostik där installationsfriktion spelar roll.',
134
+ },
135
+ {
136
+ title: 'Inbyggd BLE app',
137
+ description: 'Bättre för bakgrundsskanning, RSSI loggning, parkopplingsflöden, krypterade leverantörsprotokoll, stora egenskapsträd och långsiktig fältdiagnostik.',
138
+ },
139
+ ],
140
+ },
141
+ {
142
+ type: 'title',
143
+ text: 'Vanliga Anledningar till att en BLE Enhet inte Visas',
144
+ level: 3,
145
+ },
146
+ {
147
+ type: 'list',
148
+ items: [
149
+ 'Bluetooth är avaktiverat på operativsystemsnivå eller webbläsaren saknar Bluetooth tillstånd.',
150
+ 'Enheten är ansluten till en annan telefon, laptop, leverantörsapp eller gateway och har slutat annonsera.',
151
+ 'Hårdvaran annonserar endast under en kort period efter uppstart eller efter att ha tryckt på en parkopplingsknapp.',
152
+ 'Webbläsaren är inte Chromium-baserad, sidan serveras inte via HTTPS eller plattformen blockerar Web Bluetooth.',
153
+ 'Firmwaren annonserar tillverkardata men döljer det lokala namnet, så väljaren kan visa en namnlös enhet.',
154
+ 'Enheten kräver bindning, kryptering eller proprietär autentisering innan tjänster blir läsbara.',
155
+ ],
156
+ },
157
+ {
158
+ type: 'title',
159
+ text: 'Hur man Använder GATT UUIDer vid Felsökning',
160
+ level: 3,
161
+ },
162
+ {
163
+ type: 'paragraph',
164
+ html: 'En framgångsrik anslutning med tjänst UUIDer talar om att webbläsaren kan nå kringutrustningen och att kringutrustningen exponerar åtminstone en del av sin GATT tabell. Standardtjänster som Batteritjänst, Enhetsinformation, Puls, Mänskligt Gränssnitt och Miljöavkänning är lätta att känna igen. Anpassade UUIDer pekar vanligtvis på firmwarespecifika funktioner och behöver egenskapskartan från din källkod eller leverantörsdokumentation.',
165
+ },
166
+ {
167
+ type: 'table',
168
+ headers: ['Symptom', 'Trolig orsak', 'Praktisk lösning'],
169
+ rows: [
170
+ ['Tillståndsväljaren är tom', 'Enheten annonserar inte eller webbläsarstöd saknas.', 'Starta om enheten, aktivera parkopplingsläge, gå närmare eller försök igen i Chrome/Edge.'],
171
+ ['Anslutningen misslyckas omedelbart', 'Enheten är upptagen, utom räckhåll eller avvisar webbläsarens anslutning.', 'Koppla från leverantörsappar och håll kringutrustningen nära datorn.'],
172
+ ['Inga tjänster listas', 'GATT är inte tillgängligt, tjänster är dolda eller åtkomst beviljades inte för dessa UUIDer.', 'Lägg till kända valfria tjänster i firmwaretester eller inspektera med ett inbyggt BLE verktyg.'],
173
+ ['Endast anpassade UUIDer visas', 'Hårdvaran använder leverantörsspecifika firmwarertjänster.', 'Mappa UUIDer till källkods konstanter och dokumentera läs-/skrivbehörigheter för egenskaper.'],
174
+ ],
175
+ },
176
+ {
177
+ type: 'title',
178
+ text: 'Säkerhets- och Integritetsgränser',
179
+ level: 3,
180
+ },
181
+ {
182
+ type: 'list',
183
+ items: [
184
+ 'Sidan kan inte tyst samla in närliggande Bluetooth enheter i bakgrunden.',
185
+ 'Webbläsaren kan dölja verkliga MAC adresser och istället tillhandahålla ett omfattat enhets-ID.',
186
+ 'Åtkomst börjar först efter att användaren klickar på skanningsknappen och väljer en enhet.',
187
+ 'Resultaten laddas inte upp eller lagras av GameBob.',
188
+ 'Känsliga kommersiella enheter kan kräva kryptering eller ett leverantörsparkopplingsflöde som denna generiska skanner inte kan kringgå.',
189
+ ],
190
+ },
191
+ ],
192
+ ui: {
193
+ unsupportedTitle: 'Web Bluetooth är inte tillgängligt',
194
+ unsupportedBody: 'Prova Chrome eller Edge på skrivbord eller Android, aktivera Bluetooth och öppna sidan via HTTPS eller localhost.',
195
+ secureContext: 'Web Bluetooth kräver en säker HTTPS sida eller localhost. Ladda om verktyget från ett säkert ursprung och försök igen.',
196
+ scanButton: 'Skanna omgivning',
197
+ scanning: 'Skannar',
198
+ reconnect: 'Skanna igen',
199
+ disconnect: 'Koppla från',
200
+ privacyTitle: 'Integritet genom design',
201
+ privacyBody: 'GameBob lagrar inte MAC adresser, enhets-ID, namn, UUIDer eller skanningshistorik. Webbläsaren exponerar bara den enhet du väljer.',
202
+ deviceLabel: 'Vald enhet',
203
+ nameFallback: 'Namnlös BLE enhet',
204
+ idLabel: 'Webbläsarens enhets-ID',
205
+ servicesLabel: 'GATT tjänster',
206
+ noServices: 'Inga läsbara primära tjänster returnerades för denna anslutning.',
207
+ statusIdle: 'Redo att skanna närliggande BLE hårdvara',
208
+ statusPermission: 'Väntar på webbläsarens tillståndsväljare',
209
+ statusConnecting: 'Ansluter till den valda BLE enheten',
210
+ statusConnected: 'Ansluten och tjänster laddade',
211
+ statusDisconnected: 'Enhet frånkopplad',
212
+ statusCancelled: 'Ingen BLE enhet valdes eller Bluetooth är avstängt/inte tillgängligt på denna enhet.',
213
+ statusUnavailable: 'Bluetooth verkar vara avstängt, blockerat eller saknas på denna enhet. Aktivera Bluetooth eller försök från hårdvara som har en BLE adapter.',
214
+ statusError: 'Bluetooth skanning misslyckades',
215
+ signalUnknown: 'Signalstyrkan kontrolleras av webbläsarens väljare',
216
+ gattUnavailable: 'Denna enhet exponerade inte en GATT server för webbläsaren',
217
+ customServiceName: 'Anpassad eller leverantörsspecifik tjänst',
218
+ serviceGenericAccess: 'Generisk Åtkomst',
219
+ serviceGenericAttribute: 'Generiskt Attribut',
220
+ serviceDeviceInformation: 'Enhetsinformation',
221
+ serviceHeartRate: 'Puls',
222
+ serviceBattery: 'Batteritjänst',
223
+ serviceHumanInterfaceDevice: 'Mänskligt Gränssnitt',
224
+ serviceCyclingSpeedCadence: 'Cykelhastighet och Kadens',
225
+ serviceEnvironmentalSensing: 'Miljöavkänning',
226
+ serviceUserData: 'Användardata',
227
+ serviceFitnessMachine: 'Träningsmaskin',
228
+ uuidHelp: 'UUIDer identifierar Bluetooth tjänster. Standardtjänster namnges automatiskt; leverantörsspecifika UUIDer behöver din firmware- eller enhetsdokumentation.',
229
+ compatibilityHint: 'Fungerar bäst i Chromium-baserade webbläsare med Bluetooth aktiverat. Web Bluetooth är avsiktligt tillståndsbegränsat och visar kanske inte alla närliggande annonsörer.',
230
+ serviceCountSingular: 'tjänst',
231
+ serviceCountPlural: 'tjänster',
232
+ },
233
+ };