Una UI de reacción básica para las fórmulas definidas en la Guía del diseñador de Modem Lora de Semtech (AN1200.13), que muestra el tiempo de aire para las tasas de datos utilizadas en los planes de frecuencia de la red Things (TTN), y que muestra las limitaciones que se aplican a la red pública TTN.
Véalo en acción en https://avbentem.github.io/airtime-calculator.
Las siguientes versiones pueden incluir:
Los planes de frecuencia de los que se muestran las tasas de datos son los de la red Things. Se basan en los planes de frecuencia y los parámetros regionales de Lorawan V1.0.2RB, y se definen en config.json.
Algunos planes de frecuencia tienen tasas de datos muy diferentes para enlaces ascendentes y enlaces descendentes; Para aquellas "regiones" distintas se definen en esta aplicación, como para US902 (enlace ascendente) y US902 DL (enlace descendente). Otros comparten (la mayoría) de las tasas de datos, como EU868.
Ambos países y las especificaciones de Lorawan pueden definir las limitaciones máximas de tiempo de trabajo o tiempo máximo de permanencia: cuando se puede utilizar algún plan de frecuencia en varios países, diferentes países aún pueden imponer limitaciones legales diferentes. Y:
Es importante tener en cuenta que las limitaciones del ciclo de trabajo descritas en las tablas de las especificaciones son limitaciones impuestas por Lorawan y no limitaciones legales. Si construye dispositivos comerciales y desea que sean certificados de Lorawan, deben cumplir con la especificación. Los dispositivos de desarrollo no tienen que cumplir con la especificación. Cualquier dispositivo (ya sea Lorawan o no, puerta de enlace o nodo, comercial o de desarrollo) debe cumplir con las limitaciones legales que se aplican en su país.
[...]
El ciclo de trabajo impuesto a Lorawan se aplica solo a los nodos. Las puertas de enlace son técnicamente solo dispositivos Lora, no Lorawan, por lo que la especificación de Lorawan no se aplica a ellos. Las limitaciones del ciclo de trabajo regulatorio generalmente se aplican a cualquier transmisor.
Como para AS923:
El ciclo de trabajo máximo del 1% de Lorawan solo se aplica a 923.20 y 923.40 MHz.
El tiempo de permanencia máxima de 400 ms puede no aplicarse para Australia.
La (s) especificación (s) de Lorawan define múltiples opciones para el tamaño máximo de la carga útil, como dependiendo de la configuración del tiempo de permanencia, y con o sin soporte para una posible encapsulación del repetidor.
En las primeras especificaciones, estas opciones son bastante confusas, ya que a menudo se enumeran los valores máximos más pequeños cuando no se aplican tiempos de permanencia máximos. Sin embargo, los parámetros regionales de Lorawan de febrero de 2020 RP002-1.0.1 establecen que ninguna MacPayLoad puede ser mayor de 230 bytes, independientemente de las limitaciones de tiempo de permanencia, y en esa versión también se han ajustado los números.
Esta calculadora utiliza los tamaños de carga útil máximos de RP002-1.0.1, que permiten una posible encapsulación del repetidor y no tienen en cuenta los tiempos de permanencia máximos. Si el dispositivo nunca funcionará bajo un repetidor, el tamaño máximo podría ser un poco más grande. Si se han definido los tiempos de permanencia, entonces estos generarán advertencias en la calculadora, independientemente del tamaño máximo de la carga útil, lo que permite a los usuarios a quienes esos tiempos de permanencia no se aplican para ver los tamaños de carga útiles correctos (más altos).
Cambiar el tamaño de la carga útil no siempre afecta la cantidad de símbolos que componen la carga y encabezado de paquetes Lora, o no para todas las tarifas de datos. Por ejemplo, esto es muy visible para los tamaños de carga útil de la aplicación de 12 versus 13 bytes. Este es el resultado esperado, causado por la modulación de radio Lora, el intercalación y la corrección de errores hacia adelante. El gráfico debajo de la cuadrícula visualiza esto.
La Guía del diseñador del módem Lora de Semtech (AN1200.13) define algunos parámetros más, especialmente la longitud del preámbulo (para detectar la señal), la velocidad de codificación (CR, para la corrección de errores de reenvío), el modo de encabezado (para incluir un encabezado Lora con detalles como la tasa de codificación, la longitud de la carga de pago y el CRC) y el modo de optimización de la tasa de datos baja (para evitar problemas con la deriva de la deriva del oscuro del oscuro de la temperatura de referencia). Para Lorawan, estos no son configurables, por lo que no están expuestos como una entrada del usuario (excepto CR, si se establece un valor no definitivo a través de la URL).
Para Lorawan, la longitud del preámbulo es siempre 8, CR siempre es 4/5, el encabezado de nivel Lora siempre se incluye y el modo de optimización de velocidad de datos de baja datos está activo para SF11 y SF12 en 125 kHz.
El evento de copia del navegador se asigna de la siguiente manera:
Si se selecciona algún texto, copie eso. Esto es manejado por el navegador.
De lo contrario, cuando una información sobre herramientas esté activa, copie su texto. Esto produce formatos de texto HTML y de texto sin formato. En un navegador de escritorio necesitará el teclado para copiar una información sobre herramientas.
O bien, copie los resultados. Esto solo admite HTML.
Para las salidas de línea en la cuadrícula de resultados, esto utiliza un formato que es muy específico para la conversión automática de HTML a la reducción del discurso, como como se usa en el foro TTN: el discurso reemplaza <br> con n pero luego rechaza n en las células de la tabla. Como solución, <br> se genera como <br> , que se maneja como se esperaba en el editor del discurso, pero necesita alguna edición cuando se pegan en otro lugar. Por supuesto, usar los resultados estáticos no es muy útil de todos modos.
Para text/plain no se agrega URL, ya que el discurso prefiere el contenido de texto plano si eso es más largo que el HTML.
Esta aplicación fue creada con URL compartibles en mente, por lo que casi todas las entradas de los usuarios producen una URL actualizada:
/<network>/<region>[/<parameters>] , por ejemplo /ttn/eu868 y /ttn/us902/6,14,cr48 .
<parameters> es una lista separada por comas y define:
cr45 , cr46 , cr47 , cr48LinkAdrReq Los valores predeterminados no están incluidos en el segmento <parameters> ; Esto se aplica actualmente a:
cr45 : como se fija para Lorawan Cuando todos los parámetros usan sus valores predeterminados, se excluyen el segmento <parameters> y su corte.
Para servir esta aplicación de una sola página de las páginas de GitHub, se necesita algunos trucos con una redirección de JavaScript en una página 404 personalizada. Desafortunadamente, algunos navegadores (como Brave) pueden tratar de ser útiles y mostrar una opción como "¿Desea verificar si una versión guardada está disponible en la máquina Wayback?" Incluso cuando se ejecuta correctamente la redirección esperada. No está claro por qué los 200 finales OK elimina el banner de algunos sitios en valiente, pero no para las páginas de GitHub.
Este proyecto fue arrancado con la aplicación Create React.
Para usar un paquete limitado para Plotly (eliminar aproximadamente 690 kb de la compilación), mientras se usa las tipificaciones del paquete completo, una configuración de alias de paths se usa en tsconfig.json . Sin embargo, durante las pruebas o la construcción, Crear aplicación React eliminaría audazmente eso:
> react-scripts build
The following changes are being made to your tsconfig.json file:
- compilerOptions.paths must not be set (aliased imports are not supported)
...
TypeScript error in /src/components/result/Graph.tsx(1,20):
Could not find a declaration file for module 'plotly.js-basic-dist'
Para mitigar eso, se usa algunos trucos con extends . Esto aún mostrará el mismo mensaje para npm test y npm run build , e incluso formateará bastante la base tsconfig.json , pero al final no tocará los extends y usará tsconfig-paths.json .
En el directorio del proyecto, ejecute:
npm install
Descarga todas las dependencias. Puede ignorar con seguridad las advertencias sobre las dependencias de pares faltantes.
npm start
Ejecuta la aplicación en el modo de desarrollo. Abra http: // localhost: 3000 para verlo en el navegador. La página se volverá a cargar si realiza ediciones. También verá errores de linta en la consola.
npm test
Inicia el corredor de prueba en el modo de reloj interactivo. Consulte la documentación de la aplicación Crear react en la ejecución de pruebas para obtener más detalles.
npm test -- --coverage
Prueba única ejecutada con cobertura.
npm run lint , npm run lint:es , npm run lint:style o npm run lint:pretty
Ejecute manualmente todas las revestimientos y más bonitas, o ejecute solo aquellas para código, styleheets o los archivos restantes. A diferencia del gancho previo al comercio (ver más abajo), esto no se limita a los archivos escenificados.
npm run build
Ejecuta las revestimientos y (solo) si todo éxito construye la aplicación con paquetes minimizados para la producción en la carpeta build .
Para garantizar que las URL como /ttn/eu868/1,2 se puedan cargar sin cargar primero el Bare / , consulte, por ejemplo, el archivo Apache .htaccess .
Para construir una subcarpeta, establezca "homepage": "/some/path/to/airtime-calculator" en package.json . Esto no afectará al servidor de desarrollo, que siempre se cargará desde la carpeta raíz. Para la implementación en la carpeta raíz, configúrelo en "/" o no lo configure en absoluto. Consulte también la documentación Crear aplicación React sobre implementación.
Un gancho previo al Comité asegura que los errores de pelusa y los errores de formato no puedan cometirse. Para permitir que las reglas más bonitas reemplazaran cualquier regla de formato que pueda definirse por un enlace, está configurado para ejecutarse como un complemento tanto para Eslint como para Stylelint, y para ejecutar explícitamente los pocos tipos de archivos no manejados por ninguno de ellos.
Tenga en cuenta que el gancho previo al comercio utiliza la pelusa, que oculta temporalmente los cambios no organizados a archivos parcialmente organizados. Esto puede hacer que su IDE muestre advertencias sobre archivos que se cambiaron fuera del IDE.
Tenga cuidado con que Sourcetree podría omitir silenciosamente el gancho previamente al Comité.
Habilitar Stylelint en idiomas y marcos | Hojas de estilo | Stylelint , y opcionalmente deshabilite las inspecciones estándar en el editor | Inspecciones | CSS . (Por ejemplo, a WebStorm no le gusta @import-normalize; en App.scss , sino usando // noinspection CssInvalidAtRule ya suprime esa inspección específica en este código).
La configuración más bonita en .prettierrc.yaml Define trailingComma: es5 . Después de que se le solicite "Use el estilo de código basado en más bonito para este proyecto?" En Webstorm, esto producirá un estilo de codificación | Puntuación | Coma de tardía: agregue cuando multiline . Desafortunadamente, esto también se aplica a los parámetros de la función, lo que agrega una coma excesiva al alcanzar el comando de opción-L para el código de reformato (pero no para el cambio de opción-Comando-P para el reformato con más bonito). Para evitar eso, establezca manualmente WebStorm para usar una coma - Keep .
La configuración del editor en .editorconfig define max_line_length , que se utiliza al presionar Opción Comando-L para el código de reformato, pero no cuando se usa opciones-shift-command-P para reformatear con Prettier.