frugal-iot-client 2.0.2 → 2.0.4

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.
package/core.js CHANGED
@@ -118,6 +118,25 @@ function unshiftUnique(arr, v) {
118
118
  }
119
119
  */
120
120
 
121
+ /*
122
+ * Say what the broker made of a subscription.
123
+ *
124
+ * A broker that REFUSES one does not report an error: MQTT 3.1.1 answers with SUBACK return code
125
+ * 0x80, which mqtt.js hands back as granted qos 128 in the second argument. Checking only `err`
126
+ * therefore made a refusal completely silent - "Subscribing to X" and then nothing, for ever,
127
+ * looking exactly like a topic nobody publishes to. That is the difference between "no permission"
128
+ * and "no data", and it is the first thing you want to know.
129
+ */
130
+ function subscribeResult(topic, err, granted) {
131
+ if (err) { console.error("Subscribe failed", topic, err); return; }
132
+ const refused = (granted || []).filter((g) => g.qos === 128);
133
+ if (refused.length) {
134
+ console.error(`Subscribe REFUSED by the broker: ${topic} - this login's broker account has no `
135
+ + `permission for it. Its rights are set when it logs in; a permission added since then `
136
+ + `needs a fresh login, or "frugal-iot-rebuild-dynsec" on the server.`);
137
+ }
138
+ }
139
+
121
140
  /*
122
141
  * Subscribe to a topic. cb(topic, message, retained) - see mqtt_deliver, which passes all three.
123
142
  *
@@ -130,9 +149,7 @@ function mqtt_subscribe(topic, cb) { // cb(topic, message, retained)
130
149
  mqtt_subscriptions.push({topic, cb});
131
150
  // There may be no client yet - it only connects once it knows which organization's credentials to use
132
151
  if (mqtt_client && mqtt_client.connected) {
133
- mqtt_client.subscribe(topic, (err) => {
134
- if (err) console.error(err);
135
- })
152
+ mqtt_client.subscribe(topic, (err, granted) => subscribeResult(topic, err, granted))
136
153
  } else {
137
154
  console.log("Delaying till connected"); // It will resubscribe from "subscriptions"
138
155
  }
@@ -361,20 +378,25 @@ function isEditableTarget(e) {
361
378
  const languages = yaml.load(`
362
379
  #Language configuration - will be read from files at some point
363
380
  EN:
381
+ '"%s" already exists.': '"%s" already exists.'
364
382
  "+ matches one level, # matches the rest. Look before deleting.": "+ matches one level, # matches the rest. Look before deleting."
365
383
  _nameAndFlag: English 🇬🇧
366
384
  _thisLanguage: English
367
385
  (Max 4MB, .bin only, typically frugal-iot.ino.bin or firmware.bin): (Max 4MB, .bin only, typically frugal-iot.ino.bin or firmware.bin)
386
+ A bridge relays a Pi's readings to this server, so its nodes appear here too, while the Pi carries on recording and serving on its own whenever the link is down. "Bridge" is the broker's live view of the relay; "Last check-in" is when that Pi last collected this organization's logins, which it does over HTTP - so a Pi can be checking in while its bridge is down, and the two together say which half is broken.: A bridge relays a Pi's readings to this server, so its nodes appear here too, while the Pi carries on recording and serving on its own whenever the link is down. "Bridge" is the broker's live view of the relay; "Last check-in" is when that Pi last collected this organization's logins, which it does over HTTP - so a Pi can be checking in while its bridge is down, and the two together say which half is broken.
368
387
  Action: Action
369
388
  Action *: Action *
370
389
  Add: Add
390
+ Add a bridge: Add a bridge
371
391
  Add another enrolment secret: Add another enrolment secret
372
392
  Added: Added
393
+ Adding it again issues a new broker password and a new replica token, and the ones that Pi is using now stop working. It will stay disconnected until you put the new ones into its configuration and restart its broker.: Adding it again issues a new broker password and a new replica token, and the ones that Pi is using now stop working. It will stay disconnected until you put the new ones into its configuration and restart its broker.
373
394
  Admin: Admin
374
395
  Advanced: Advanced
375
396
  All: All
376
397
  Already have an account?: Already have an account?
377
398
  "And these two, if you are not building against the production server:": "And these two, if you are not building against the production server:"
399
+ Any node flashed with it that has not enrolled yet will be refused and will need reflashing. Nodes that have already enrolled are unaffected - they never present it again.: Any node flashed with it that has not enrolled yet will be refused and will need reflashing. Nodes that have already enrolled are unaffected - they never present it again.
378
400
  API: API
379
401
  Approved: Approved
380
402
  AQI: AQI
@@ -385,8 +407,13 @@ EN:
385
407
  Base URL: Base URL
386
408
  Battery: Battery
387
409
  Board: Board
410
+ Bridge: Bridge
411
+ Bridged Pis: Bridged Pis
412
+ Bridges: Bridges
388
413
  Brightness: Brightness
389
414
  Broker: Broker
415
+ Broker account: Broker account
416
+ Broker password: Broker password
390
417
  Built in LED: Built in LED
391
418
  buttons: buttons
392
419
  Choose a project to see its devices: Choose a project to see its devices
@@ -402,15 +429,20 @@ EN:
402
429
  connecting: connecting
403
430
  Control: Control
404
431
  Cookie Name: Cookie Name
432
+ Copy these now - they are not shown again: Copy these now - they are not shown again
405
433
  Could not read the board - assuming it is already provisioned: Could not read the board - assuming it is already provisioned
406
434
  Create an account: Create an account
407
435
  Dashboard: Dashboard
408
436
  Data: Data
409
437
  Delete these: Delete these
438
+ Delete this firmware: Delete this firmware
410
439
  Denied: Denied
440
+ Deny %s?: Deny %s?
411
441
  Description: Description
412
442
  Device: Device
413
443
  Display carousel: Display carousel
444
+ DOWN: DOWN
445
+ Download this firmware: Download this firmware
414
446
  Done: Done
415
447
  ds18b20: ds18b20
416
448
  e.g. LiteFarm: e.g. LiteFarm
@@ -440,6 +472,7 @@ EN:
440
472
  Flashing needs the Web Serial API - use Chrome, Edge or Opera on a desktop computer: Flashing needs the Web Serial API - use Chrome, Edge or Opera on a desktop computer
441
473
  for node: for node
442
474
  Forget: Forget
475
+ Forget %s?: Forget %s?
443
476
  Forget this node, so it is issued a new credential: Forget this node, so it is issued a new credential
444
477
  Forgot password?: Forgot password?
445
478
  From: From
@@ -447,6 +480,8 @@ EN:
447
480
  Frugal-IoT Username *: Frugal-IoT Username *
448
481
  Full provision - all configuration on the board will be erased: Full provision - all configuration on the board will be erased
449
482
  Gas Resistance: Gas Resistance
483
+ Give the Pi a short name - it becomes its broker account and cannot be changed later without reconfiguring that Pi. Lower-case letters, digits and hyphens.: Give the Pi a short name - it becomes its broker account and cannot be changed later without reconfiguring that Pi. Lower-case letters, digits and hyphens.
484
+ Give the Pi a short name first: Give the Pi a short name first
450
485
  Graph: Graph
451
486
  Greater Than: Greater Than
452
487
  Has its own broker credential. Click to deny it.: Has its own broker credential. Click to deny it.
@@ -456,7 +491,9 @@ EN:
456
491
  humidity: humidity
457
492
  Humidity control: Humidity control
458
493
  Hysteresis: Hysteresis
494
+ hysteresis: hysteresis
459
495
  Hysterisis: Hysteresis
496
+ hysterisis: hysteresis
460
497
  I have a code: I have a code
461
498
  id: id
462
499
  If that account exists we have emailed a reset code: If that account exists we have emailed a reset code
@@ -464,9 +501,12 @@ EN:
464
501
  Incorrect username or password: Incorrect username or password
465
502
  Info: Info
466
503
  Input: Input
504
+ It will be issued a new broker credential the next time it asks. A node that is running will be offline for a minute or two while it notices; a node whose filesystem was erased needs this before it can rejoin at all.: It will be issued a new broker credential the next time it asks. A node that is running will be offline for a minute or two while it notices; a node whose filesystem was erased needs this before it can rejoin at all.
505
+ Its broker account is deleted, so it stops being able to publish or subscribe, and it cannot enrol again until you clear this. Use it for a node sending bad readings.: Its broker account is deleted, so it stops being able to publish or subscribe, and it cannot enrol again until you clear this. Use it for a node sending bad readings.
467
506
  Its next request will be accepted. Click to deny it.: Its next request will be accepted. Click to deny it.
468
507
  Key: Key
469
508
  Last asked: Last asked
509
+ Last check-in: Last check-in
470
510
  Last Seen: Last Seen
471
511
  Last seen: Last seen
472
512
  LED: LED
@@ -497,9 +537,11 @@ EN:
497
537
  No organization: No organization
498
538
  No organization selected: No organization selected
499
539
  No OTA files uploaded yet.: No OTA files uploaded yet.
540
+ No Pi bridges to this server for this organization. A bridge relays a Pi's readings here while the Pi carries on working on its own - see INSTALLATION.md step 11.: No Pi bridges to this server for this organization. A bridge relays a Pi's readings here while the Pi carries on working on its own - see INSTALLATION.md step 11.
500
541
  No platforms registered yet.: No platforms registered yet.
501
542
  No projects added for this organization yet.: No projects added for this organization yet.
502
543
  No projects to display until organization selected: No projects to display until organization selected
544
+ No state received from the broker yet: No state received from the broker yet
503
545
  Nobody added for this organization yet.: Nobody added for this organization yet.
504
546
  Node: Node
505
547
  Node Actions: Node Actions
@@ -560,12 +602,14 @@ EN:
560
602
  Registration failed: Registration failed
561
603
  Registration successful - please login: Registration successful - please login
562
604
  Relay: Relay
605
+ Replica token: Replica token
563
606
  Reporting every: Reporting every
564
607
  Reset code: Reset code
565
608
  Reset password: Reset password
566
609
  Retain: Retain
567
610
  Retained: Retained
568
611
  Retained messages: Retained messages
612
+ Run this on the Pi, in the directory the server is installed in. Replace the placeholder with this server's fully-qualified name - the one on its certificate, which you can check by opening https:// that name in a browser. It will then ask for the broker password and for the replica token, in that order, so have both of the values below to hand.: Run this on the Pi, in the directory the server is installed in. Replace the placeholder with this server's fully-qualified name - the one on its certificate, which you can check by opening https:// that name in a browser. It will then ask for the broker password and for the replica token, in that order, so have both of the values below to hand.
569
613
  Schema: Schema
570
614
  Select: Select
571
615
  Select a farm above to see its nodes.: Select a farm above to see its nodes.
@@ -586,6 +630,7 @@ EN:
586
630
  SHT30: SHT30
587
631
  Sign In: Sign In
588
632
  Sign in: Sign in
633
+ Site: Site
589
634
  Soil: Soil
590
635
  Soil Moisture: Soil Moisture
591
636
  Soil Temperature: Soil Temperature
@@ -602,6 +647,8 @@ EN:
602
647
  Temperature: Temperature
603
648
  temperature: temperature
604
649
  That code is not valid or has expired: That code is not valid or has expired
650
+ The broker reports this bridge connected: The broker reports this bridge connected
651
+ The broker reports this bridge not connected: The broker reports this bridge not connected
605
652
  This field has no invocation URL (forms[0].href) in its schema: This field has no invocation URL (forms[0].href) in its schema
606
653
  This node has no actions in its schema.: This node has no actions in its schema.
607
654
  This node has no actions or writable properties in its schema.: This node has no actions or writable properties in its schema.
@@ -612,6 +659,7 @@ EN:
612
659
  Topic: Topic
613
660
  Topic and Value are required: Topic and Value are required
614
661
  TVOC: TVOC
662
+ 'Two credentials for two different connections: the password is what the MQTT bridge logs in with on port 8883, and the token is what lets that Pi pull this organization''s logins over HTTPS, so the same people can log in there too. The token can be skipped - press Enter at its prompt - and added later by doing this again. Neither is asked for on the command line, so that neither ends up in the Pi''s shell history.': 'Two credentials for two different connections: the password is what the MQTT bridge logs in with on port 8883, and the token is what lets that Pi pull this organization''s logins over HTTPS, so the same people can log in there too. The token can be skipped - press Enter at its prompt - and added later by doing this again. Neither is asked for on the command line, so that neither ends up in the Pi''s shell history.'
615
663
  Unable to find node: Unable to find node
616
664
  Unable to find project: Unable to find project
617
665
  Unauthorized: Unauthorized
@@ -619,9 +667,12 @@ EN:
619
667
  Unknown: Unknown
620
668
  Unsupported board: Unsupported board
621
669
  Unused: Unused
670
+ Up: Up
622
671
  Updating the app only: Updating the app only
623
672
  Updating the app only - the existing configuration will be preserved: Updating the app only - the existing configuration will be preserved
624
673
  Upload: Upload
674
+ Upload finished - check the list below: Upload finished - check the list below
675
+ Uploading: Uploading
625
676
  Username: Username
626
677
  Username or email: Username or email
627
678
  Value: Value
@@ -632,24 +683,30 @@ EN:
632
683
  We will email you a code and a link to choose a new password.: We will email you a code and a link to choose a new password.
633
684
  When: When
634
685
  WiFi: WiFi
686
+ Withdraw this enrolment secret?: Withdraw this enrolment secret?
635
687
  Withdrawn: Withdrawn
636
688
  Yes: Yes
637
689
  You do not have permission for this organization: You do not have permission for this organization
638
690
  FR:
691
+ '"%s" already exists.': « %s » existe déjà.
639
692
  "+ matches one level, # matches the rest. Look before deleting.": "+ correspond à un niveau, # au reste. Regardez avant de supprimer."
640
693
  _nameAndFlag: Français 🇫🇷
641
694
  _thisLanguage: Francaise
642
695
  (Max 4MB, .bin only, typically frugal-iot.ino.bin or firmware.bin): (Max 4 Mo, .bin uniquement, généralement frugal-iot.ino.bin ou firmware.bin)
696
+ A bridge relays a Pi's readings to this server, so its nodes appear here too, while the Pi carries on recording and serving on its own whenever the link is down. "Bridge" is the broker's live view of the relay; "Last check-in" is when that Pi last collected this organization's logins, which it does over HTTP - so a Pi can be checking in while its bridge is down, and the two together say which half is broken.: Une passerelle relaie les mesures d'un Pi vers ce serveur, de sorte que ses nœuds apparaissent ici aussi, tandis que le Pi continue d'enregistrer et de servir de son côté chaque fois que le lien est coupé. « Passerelle » est la vue en direct du relais par le courtier ; « Dernier contact » indique quand ce Pi a récupéré pour la dernière fois les comptes de cette organisation, ce qu'il fait en HTTP - un Pi peut donc prendre contact alors que sa passerelle est coupée, et les deux ensemble disent quelle moitié est en panne.
643
697
  Action: Action
644
698
  Action *: Action *
645
699
  Add: Ajouter
700
+ Add a bridge: Ajouter une passerelle
646
701
  Add another enrolment secret: Ajouter un autre secret d'enrôlement
647
702
  Added: Ajouté
703
+ Adding it again issues a new broker password and a new replica token, and the ones that Pi is using now stop working. It will stay disconnected until you put the new ones into its configuration and restart its broker.: Le refaire émet un nouveau mot de passe de courtier et un nouveau jeton de réplique, et ceux que ce Pi utilise actuellement cessent de fonctionner. Il restera déconnecté jusqu'à ce que vous mettiez les nouveaux dans sa configuration et redémarriez son courtier.
648
704
  Admin: Admin
649
705
  Advanced: Avancé
650
706
  All: Tous
651
707
  Already have an account?: Vous avez déjà un compte ?
652
708
  "And these two, if you are not building against the production server:": "Et ces deux-ci, si vous ne compilez pas pour le serveur de production :"
709
+ Any node flashed with it that has not enrolled yet will be refused and will need reflashing. Nodes that have already enrolled are unaffected - they never present it again.: Tout nœud flashé avec lui qui ne s'est pas encore enrôlé sera refusé et devra être reflashé. Les nœuds déjà enrôlés ne sont pas affectés - ils ne le présentent plus jamais.
653
710
  API: API
654
711
  Approved: Approuvé
655
712
  AQI: IQA
@@ -660,8 +717,13 @@ FR:
660
717
  Base URL: URL de base
661
718
  Battery: Batterie
662
719
  Board: Carte
720
+ Bridge: Passerelle
721
+ Bridged Pis: Pi reliés par passerelle
722
+ Bridges: Passerelles
663
723
  Brightness: Luminosité
664
724
  Broker: Courtier
725
+ Broker account: Compte du courtier
726
+ Broker password: Mot de passe du courtier
665
727
  Built in LED: LED intégrée
666
728
  buttons: boutons
667
729
  Choose a project to see its devices: Choisissez un projet pour voir ses appareils
@@ -677,15 +739,20 @@ FR:
677
739
  connecting: connexion
678
740
  Control: Contrôle
679
741
  Cookie Name: Nom du cookie
742
+ Copy these now - they are not shown again: Copiez-les maintenant - ils ne seront plus affichés
680
743
  Could not read the board - assuming it is already provisioned: Impossible de lire la carte - on suppose qu'elle est déjà provisionnée
681
744
  Create an account: Créer un compte
682
745
  Dashboard: Tableau de bord
683
746
  Data: Données
684
747
  Delete these: Supprimer ceux-ci
748
+ Delete this firmware: Supprimer ce micrologiciel
685
749
  Denied: Refusé
750
+ Deny %s?: Refuser %s ?
686
751
  Description: Description
687
752
  Device: Appareil
688
753
  Display carousel: Carrousel d'affichage
754
+ DOWN: HORS SERVICE
755
+ Download this firmware: Télécharger ce micrologiciel
689
756
  Done: Fait
690
757
  ds18b20: ds18b20
691
758
  e.g. LiteFarm: par ex. LiteFarm
@@ -715,6 +782,7 @@ FR:
715
782
  Flashing needs the Web Serial API - use Chrome, Edge or Opera on a desktop computer: Le flashage nécessite l'API Web Serial - utilisez Chrome, Edge ou Opera sur un ordinateur de bureau
716
783
  for node: pour le nœud
717
784
  Forget: Oublier
785
+ Forget %s?: Oublier %s ?
718
786
  Forget this node, so it is issued a new credential: Oublier ce nœud, pour qu'un nouvel identifiant lui soit délivré
719
787
  Forgot password?: Mot de passe oublié ?
720
788
  From: De
@@ -722,6 +790,8 @@ FR:
722
790
  Frugal-IoT Username *: Nom d'utilisateur Frugal-IoT *
723
791
  Full provision - all configuration on the board will be erased: Provisionnement complet - toute la configuration de la carte sera effacée
724
792
  Gas Resistance: Résistance du gaz
793
+ Give the Pi a short name - it becomes its broker account and cannot be changed later without reconfiguring that Pi. Lower-case letters, digits and hyphens.: Donnez au Pi un nom court - il devient son compte de courtier et ne peut plus être changé ensuite sans reconfigurer ce Pi. Lettres minuscules, chiffres et traits d'union.
794
+ Give the Pi a short name first: Donnez d'abord un nom court au Pi
725
795
  Graph: Graphique
726
796
  Greater Than: Supérieur à
727
797
  Has its own broker credential. Click to deny it.: Possède son propre identifiant de broker. Cliquez pour le refuser.
@@ -741,9 +811,12 @@ FR:
741
811
  Incorrect username or password: Nom d'utilisateur ou mot de passe incorrect
742
812
  Info: Infos
743
813
  Input: Entrée
814
+ It will be issued a new broker credential the next time it asks. A node that is running will be offline for a minute or two while it notices; a node whose filesystem was erased needs this before it can rejoin at all.: Un nouvel identifiant de courtier lui sera délivré la prochaine fois qu'il le demandera. Un nœud en fonctionnement sera hors ligne une minute ou deux le temps qu'il s'en aperçoive ; un nœud dont le système de fichiers a été effacé en a besoin pour pouvoir rejoindre.
815
+ Its broker account is deleted, so it stops being able to publish or subscribe, and it cannot enrol again until you clear this. Use it for a node sending bad readings.: Son compte de courtier est supprimé, il ne peut donc plus publier ni s'abonner, et il ne peut pas s'enrôler de nouveau tant que vous n'avez pas annulé ceci. À utiliser pour un nœud qui envoie de mauvaises mesures.
744
816
  Its next request will be accepted. Click to deny it.: Sa prochaine demande sera acceptée. Cliquez pour le refuser.
745
817
  Key: Clé
746
818
  Last asked: Dernière demande
819
+ Last check-in: Dernier contact
747
820
  Last Seen: Dernière activité
748
821
  Last seen: Vu pour la dernière fois
749
822
  LED: LED
@@ -774,13 +847,15 @@ FR:
774
847
  No organization: Aucune organisation
775
848
  No organization selected: Aucune organisation sélectionnée
776
849
  No OTA files uploaded yet.: Aucun fichier OTA téléversé pour l'instant.
850
+ No Pi bridges to this server for this organization. A bridge relays a Pi's readings here while the Pi carries on working on its own - see INSTALLATION.md step 11.: Aucune passerelle Pi vers ce serveur pour cette organisation. Une passerelle relaie ici les mesures d'un Pi pendant que celui-ci continue de fonctionner de son côté - voir INSTALLATION.md étape 11.
777
851
  No platforms registered yet.: Aucune plateforme enregistrée pour l'instant.
778
852
  No projects added for this organization yet.: Aucun projet ajouté pour cette organisation pour l'instant.
779
853
  No projects to display until organization selected: Aucun projet à afficher tant qu'une organisation n'est sélectionnée
854
+ No state received from the broker yet: Aucun état reçu du courtier pour l'instant
780
855
  Nobody added for this organization yet.: Personne n'a encore été ajouté pour cette organisation.
781
856
  Node: Nœud
782
857
  Node Actions: Actions du nœud
783
- Node Id: ID du nœud
858
+ Node ID: ID du nœud
784
859
  Node Name: Nom du nœud
785
860
  Nodes: Nœuds
786
861
  Nodes in Farm: Nœuds dans la ferme
@@ -837,12 +912,14 @@ FR:
837
912
  Registration failed: L'inscription a échoué
838
913
  Registration successful - please login: Inscription réussie - veuillez vous connecter
839
914
  Relay: Relais
915
+ Replica token: Jeton de réplique
840
916
  Reporting every: Transmet toutes les
841
917
  Reset code: Code de réinitialisation
842
918
  Reset password: Réinitialiser le mot de passe
843
919
  Retain: Conserver
844
920
  Retained: Conservés
845
921
  Retained messages: Messages conservés
922
+ Run this on the Pi, in the directory the server is installed in. Replace the placeholder with this server's fully-qualified name - the one on its certificate, which you can check by opening https:// that name in a browser. It will then ask for the broker password and for the replica token, in that order, so have both of the values below to hand.: Exécutez ceci sur le Pi, dans le répertoire où le serveur est installé. Remplacez l'espace réservé par le nom pleinement qualifié de ce serveur - celui qui figure sur son certificat, que vous pouvez vérifier en ouvrant https:// ce nom dans un navigateur. Il demandera ensuite le mot de passe du courtier puis le jeton de réplique, dans cet ordre, alors ayez les deux valeurs ci-dessous sous la main.
846
923
  Schema: Schéma
847
924
  Select: Sélectionner
848
925
  Select a farm above to see its nodes.: Sélectionnez une ferme ci-dessus pour voir ses nœuds.
@@ -863,6 +940,7 @@ FR:
863
940
  SHT30: SHT30
864
941
  Sign In: Se connecter
865
942
  Sign in: Se connecter
943
+ Site: Site
866
944
  Soil: Sol
867
945
  Soil Moisture: Humidité du sol
868
946
  Soil Temperature: Température du sol
@@ -879,6 +957,8 @@ FR:
879
957
  Temperature: Température
880
958
  temperature: température
881
959
  That code is not valid or has expired: Ce code n'est pas valide ou a expiré
960
+ The broker reports this bridge connected: Le courtier signale cette passerelle comme connectée
961
+ The broker reports this bridge not connected: Le courtier signale cette passerelle comme non connectée
882
962
  This field has no invocation URL (forms[0].href) in its schema: Ce champ n'a pas d'URL d'invocation (forms[0].href) dans son schéma
883
963
  This node has no actions in its schema.: Ce nœud n'a aucune action dans son schéma.
884
964
  This node has no actions or writable properties in its schema.: Ce nœud n'a aucune action ni propriété modifiable dans son schéma.
@@ -889,6 +969,7 @@ FR:
889
969
  Topic: Sujet
890
970
  Topic and Value are required: Le sujet et la valeur sont requis
891
971
  TVOC: COVT
972
+ 'Two credentials for two different connections: the password is what the MQTT bridge logs in with on port 8883, and the token is what lets that Pi pull this organization''s logins over HTTPS, so the same people can log in there too. The token can be skipped - press Enter at its prompt - and added later by doing this again. Neither is asked for on the command line, so that neither ends up in the Pi''s shell history.': 'Deux identifiants pour deux connexions différentes : le mot de passe est celui avec lequel la passerelle MQTT se connecte sur le port 8883, et le jeton est ce qui permet à ce Pi de récupérer les comptes de cette organisation en HTTPS, afin que les mêmes personnes puissent aussi s''y connecter. Le jeton peut être omis - appuyez sur Entrée à son invite - et ajouté plus tard en refaisant ceci. Ni l''un ni l''autre n''est demandé sur la ligne de commande, afin qu''aucun ne se retrouve dans l''historique du shell du Pi.'
892
973
  Unable to find node: Impossible de trouver le nœud
893
974
  Unable to find project: Impossible de trouver le projet
894
975
  Unauthorized: Non autorisé
@@ -896,9 +977,12 @@ FR:
896
977
  Unknown: Inconnu
897
978
  Unsupported board: Carte non prise en charge
898
979
  Unused: Inutilisé
980
+ Up: Actif
899
981
  Updating the app only: Mise à jour de l'application uniquement
900
982
  Updating the app only - the existing configuration will be preserved: Mise à jour de l'application uniquement - la configuration existante sera conservée
901
983
  Upload: Téléverser
984
+ Upload finished - check the list below: Téléversement terminé - vérifiez la liste ci-dessous
985
+ Uploading: Téléversement
902
986
  Username: Nom de User
903
987
  Username or email: Nom d'utilisateur ou e-mail
904
988
  Value: Valeur
@@ -909,24 +993,30 @@ FR:
909
993
  We will email you a code and a link to choose a new password.: Nous vous enverrons par e-mail un code et un lien pour choisir un nouveau mot de passe.
910
994
  When: Quand
911
995
  WiFi: WiFi
996
+ Withdraw this enrolment secret?: Retirer ce secret d'enrôlement ?
912
997
  Withdrawn: Retiré
913
998
  Yes: Oui
914
999
  You do not have permission for this organization: Vous n'avez pas la permission pour cette organisation
915
1000
  HI:
1001
+ '"%s" already exists.': '"%s" पहले से मौजूद है।'
916
1002
  "+ matches one level, # matches the rest. Look before deleting.": "+ एक स्तर से मेल खाता है, # बाकी सभी से। हटाने से पहले देख लें।"
917
1003
  _nameAndFlag: हिंदी 🇮🇳
918
1004
  _thisLanguage: हिंदी
919
1005
  (Max 4MB, .bin only, typically frugal-iot.ino.bin or firmware.bin): (अधिकतम 4MB, केवल .bin, सामान्यतः frugal-iot.ino.bin या firmware.bin)
1006
+ A bridge relays a Pi's readings to this server, so its nodes appear here too, while the Pi carries on recording and serving on its own whenever the link is down. "Bridge" is the broker's live view of the relay; "Last check-in" is when that Pi last collected this organization's logins, which it does over HTTP - so a Pi can be checking in while its bridge is down, and the two together say which half is broken.: एक ब्रिज किसी Pi की रीडिंग इस सर्वर तक पहुँचाता है, जिससे उसके नोड यहाँ भी दिखते हैं, जबकि लिंक टूटने पर Pi अपने आप रिकॉर्ड और सर्व करता रहता है। « ब्रिज » रिले का ब्रोकर द्वारा दिखाया गया सीधा दृश्य है; « अंतिम संपर्क » वह समय है जब उस Pi ने आखिरी बार इस संगठन के लॉगिन एकत्र किए, जो वह HTTP पर करता है - इसलिए कोई Pi संपर्क कर सकता है जबकि उसका ब्रिज बंद हो, और दोनों मिलकर बताते हैं कि कौन-सा हिस्सा खराब है।
920
1007
  Action: क्रिया
921
1008
  Action *: क्रिया *
922
1009
  Add: जोड़ें
1010
+ Add a bridge: ब्रिज जोड़ें
923
1011
  Add another enrolment secret: एक और पंजीकरण सीक्रेट जोड़ें
924
1012
  Added: जोड़ा गया
1013
+ Adding it again issues a new broker password and a new replica token, and the ones that Pi is using now stop working. It will stay disconnected until you put the new ones into its configuration and restart its broker.: इसे दोबारा जोड़ने पर नया ब्रोकर पासवर्ड और नया प्रतिकृति टोकन जारी होता है, और वह Pi अभी जिनका उपयोग कर रहा है वे काम करना बंद कर देते हैं। जब तक आप नए मान उसकी कॉन्फ़िगरेशन में नहीं डालते और उसका ब्रोकर पुनः आरंभ नहीं करते, वह डिस्कनेक्ट ही रहेगा।
925
1014
  Admin: एडमिन
926
1015
  Advanced: उन्नत
927
1016
  All: सभी
928
1017
  Already have an account?: पहले से खाता है?
929
1018
  "And these two, if you are not building against the production server:": "और ये दो, यदि आप उत्पादन सर्वर के लिए बिल्ड नहीं कर रहे हैं:"
1019
+ Any node flashed with it that has not enrolled yet will be refused and will need reflashing. Nodes that have already enrolled are unaffected - they never present it again.: इसके साथ फ्लैश किया गया कोई भी नोड जो अभी तक पंजीकृत नहीं हुआ है, अस्वीकार कर दिया जाएगा और उसे दोबारा फ्लैश करना होगा। जो नोड पहले ही पंजीकृत हो चुके हैं वे प्रभावित नहीं होते - वे इसे फिर कभी प्रस्तुत नहीं करते।
930
1020
  API: एपीआई
931
1021
  Approved: स्वीकृत
932
1022
  AQI: वायु गुणवत्ता सूचकांक
@@ -937,8 +1027,13 @@ HI:
937
1027
  Base URL: बेस यूआरएल
938
1028
  Battery: बैटरी
939
1029
  Board: बोर्ड
1030
+ Bridge: ब्रिज
1031
+ Bridged Pis: ब्रिज किए गए Pi
1032
+ Bridges: ब्रिज
940
1033
  Brightness: चमक
941
1034
  Broker: ब्रोकर
1035
+ Broker account: ब्रोकर खाता
1036
+ Broker password: ब्रोकर पासवर्ड
942
1037
  Built in LED: बिल्ट-इन एलईडी
943
1038
  buttons: बटन
944
1039
  Choose a project to see its devices: उपकरण देखने के लिए प्रोजेक्ट चुनें
@@ -954,15 +1049,20 @@ HI:
954
1049
  connecting: कनेक्ट हो रहा है
955
1050
  Control: नियंत्रण
956
1051
  Cookie Name: कुकी नाम
1052
+ Copy these now - they are not shown again: इन्हें अभी कॉपी करें - ये दोबारा नहीं दिखाए जाएंगे
957
1053
  Could not read the board - assuming it is already provisioned: बोर्ड पढ़ा नहीं जा सका - मान लिया गया कि यह पहले से प्रोविजन किया हुआ है
958
1054
  Create an account: खाता बनाएँ
959
1055
  Dashboard: डैशबोर्ड
960
1056
  Data: डेटा
961
1057
  Delete these: इन्हें हटाएँ
1058
+ Delete this firmware: इस फर्मवेयर को हटाएँ
962
1059
  Denied: अस्वीकृत
1060
+ Deny %s?: '%s को अस्वीकार करें?'
963
1061
  Description: विवरण
964
1062
  Device: उपकरण
965
1063
  Display carousel: डिस्प्ले कैरोसेल
1064
+ DOWN: बंद
1065
+ Download this firmware: इस फर्मवेयर को डाउनलोड करें
966
1066
  Done: पूर्ण
967
1067
  ds18b20: ds18b20
968
1068
  e.g. LiteFarm: उदाहरण के लिए LiteFarm
@@ -992,6 +1092,7 @@ HI:
992
1092
  Flashing needs the Web Serial API - use Chrome, Edge or Opera on a desktop computer: फ्लैश करने के लिए Web Serial API आवश्यक है - डेस्कटॉप कंप्यूटर पर Chrome, Edge या Opera का उपयोग करें
993
1093
  for node: नोड के लिए
994
1094
  Forget: भुलाएँ
1095
+ Forget %s?: '%s को भुला दें?'
995
1096
  Forget this node, so it is issued a new credential: इस नोड को भुला दें, ताकि इसे नया क्रेडेंशियल मिले
996
1097
  Forgot password?: पासवर्ड भूल गए?
997
1098
  From: से
@@ -999,6 +1100,8 @@ HI:
999
1100
  Frugal-IoT Username *: Frugal-IoT उपयोगकर्ता नाम *
1000
1101
  Full provision - all configuration on the board will be erased: पूर्ण प्रोविजनिंग - बोर्ड की सारी कॉन्फ़िगरेशन मिट जाएगी
1001
1102
  Gas Resistance: गैस प्रतिरोध
1103
+ Give the Pi a short name - it becomes its broker account and cannot be changed later without reconfiguring that Pi. Lower-case letters, digits and hyphens.: Pi को एक छोटा नाम दें - यही उसका ब्रोकर खाता बनता है और बाद में उस Pi को दोबारा कॉन्फ़िगर किए बिना इसे बदला नहीं जा सकता। छोटे अक्षर, अंक और हाइफ़न।
1104
+ Give the Pi a short name first: पहले Pi को एक छोटा नाम दें
1002
1105
  Graph: ग्राफ़
1003
1106
  Greater Than: इससे बड़ा
1004
1107
  Has its own broker credential. Click to deny it.: इसके पास अपना ब्रोकर क्रेडेंशियल है। अस्वीकार करने के लिए क्लिक करें।
@@ -1018,9 +1121,12 @@ HI:
1018
1121
  Incorrect username or password: उपयोगकर्ता नाम या पासवर्ड गलत है
1019
1122
  Info: जानकारी
1020
1123
  Input: इनपुट
1124
+ It will be issued a new broker credential the next time it asks. A node that is running will be offline for a minute or two while it notices; a node whose filesystem was erased needs this before it can rejoin at all.: अगली बार माँगने पर उसे नया ब्रोकर क्रेडेंशियल जारी किया जाएगा। चालू नोड एक-दो मिनट के लिए ऑफ़लाइन रहेगा जब तक उसे इसका पता चलता है; जिस नोड का फ़ाइल सिस्टम मिटा दिया गया है उसे दोबारा जुड़ने के लिए यही चाहिए।
1125
+ Its broker account is deleted, so it stops being able to publish or subscribe, and it cannot enrol again until you clear this. Use it for a node sending bad readings.: उसका ब्रोकर खाता हटा दिया जाता है, इसलिए वह न प्रकाशित कर पाता है न सब्सक्राइब, और जब तक आप इसे हटाते नहीं तब तक वह दोबारा पंजीकृत नहीं हो सकता। इसका उपयोग उस नोड के लिए करें जो गलत रीडिंग भेज रहा है।
1021
1126
  Its next request will be accepted. Click to deny it.: इसका अगला अनुरोध स्वीकार किया जाएगा। अस्वीकार करने के लिए क्लिक करें।
1022
1127
  Key: कुंजी
1023
1128
  Last asked: अंतिम अनुरोध
1129
+ Last check-in: अंतिम संपर्क
1024
1130
  Last Seen: अंतिम बार देखा गया
1025
1131
  Last seen: अंतिम बार देखा
1026
1132
  LED: एलईडी
@@ -1051,9 +1157,11 @@ HI:
1051
1157
  No organization: कोई संगठन नहीं
1052
1158
  No organization selected: कोई संगठन चयनित नहीं
1053
1159
  No OTA files uploaded yet.: अभी तक कोई OTA फ़ाइल अपलोड नहीं की गई है।
1160
+ No Pi bridges to this server for this organization. A bridge relays a Pi's readings here while the Pi carries on working on its own - see INSTALLATION.md step 11.: इस संगठन के लिए इस सर्वर से कोई Pi ब्रिज नहीं है। एक ब्रिज Pi की रीडिंग यहाँ पहुँचाता है जबकि Pi अपने आप काम करता रहता है - INSTALLATION.md चरण 11 देखें।
1054
1161
  No platforms registered yet.: अभी तक कोई प्लेटफ़ॉर्म पंजीकृत नहीं है।
1055
1162
  No projects added for this organization yet.: इस संगठन के लिए अभी तक कोई प्रोजेक्ट नहीं जोड़ा गया है।
1056
1163
  No projects to display until organization selected: संगठन चुने जाने तक कोई प्रोजेक्ट प्रदर्शित नहीं होगा
1164
+ No state received from the broker yet: ब्रोकर से अभी तक कोई स्थिति प्राप्त नहीं हुई
1057
1165
  Nobody added for this organization yet.: इस संगठन के लिए अभी तक कोई नहीं जोड़ा गया है।
1058
1166
  Node: नोड
1059
1167
  Node Actions: नोड क्रियाएँ
@@ -1114,12 +1222,14 @@ HI:
1114
1222
  Registration failed: पंजीकरण विफल
1115
1223
  Registration successful - please login: पंजीकरण सफल - कृपया लॉगिन करें
1116
1224
  Relay: रिले
1225
+ Replica token: प्रतिकृति टोकन
1117
1226
  Reporting every: हर बार रिपोर्ट
1118
1227
  Reset code: रीसेट कोड
1119
1228
  Reset password: पासवर्ड रीसेट करें
1120
1229
  Retain: बनाए रखें
1121
1230
  Retained: संचित
1122
1231
  Retained messages: संचित संदेश
1232
+ Run this on the Pi, in the directory the server is installed in. Replace the placeholder with this server's fully-qualified name - the one on its certificate, which you can check by opening https:// that name in a browser. It will then ask for the broker password and for the replica token, in that order, so have both of the values below to hand.: इसे Pi पर उसी डायरेक्टरी में चलाएँ जहाँ सर्वर इंस्टॉल है। प्लेसहोल्डर की जगह इस सर्वर का पूरा नाम डालें - वही जो उसके प्रमाणपत्र पर है, जिसे आप ब्राउज़र में https:// उस नाम को खोलकर जाँच सकते हैं। फिर यह ब्रोकर पासवर्ड और उसके बाद प्रतिकृति टोकन माँगेगा, इसी क्रम में, इसलिए नीचे दिए दोनों मान तैयार रखें।
1123
1233
  Schema: स्कीमा
1124
1234
  Select: चुनें
1125
1235
  Select a farm above to see its nodes.: इसके नोड्स देखने के लिए ऊपर एक फार्म चुनें।
@@ -1140,6 +1250,7 @@ HI:
1140
1250
  SHT30: एसएचटी30
1141
1251
  Sign In: साइन इन करें
1142
1252
  Sign in: साइन इन करें
1253
+ Site: साइट
1143
1254
  Soil: मिट्टी
1144
1255
  Soil Moisture: मिट्टी की नमी
1145
1256
  Soil Temperature: मिट्टी का तापमान
@@ -1156,6 +1267,8 @@ HI:
1156
1267
  Temperature: तापमान
1157
1268
  temperature: तापमान
1158
1269
  That code is not valid or has expired: यह कोड मान्य नहीं है या समाप्त हो गया है
1270
+ The broker reports this bridge connected: ब्रोकर बताता है कि यह ब्रिज जुड़ा हुआ है
1271
+ The broker reports this bridge not connected: ब्रोकर बताता है कि यह ब्रिज जुड़ा हुआ नहीं है
1159
1272
  This field has no invocation URL (forms[0].href) in its schema: इस फ़ील्ड के स्कीमा में कोई इनवोकेशन यूआरएल (forms[0].href) नहीं है
1160
1273
  This node has no actions in its schema.: इस नोड के स्कीमा में कोई क्रिया नहीं है।
1161
1274
  This node has no actions or writable properties in its schema.: इस नोड के स्कीमा में कोई क्रिया या लिखने योग्य गुण नहीं है।
@@ -1166,6 +1279,7 @@ HI:
1166
1279
  Topic: टॉपिक
1167
1280
  Topic and Value are required: टॉपिक और मान आवश्यक हैं
1168
1281
  TVOC: टीवीओसी
1282
+ 'Two credentials for two different connections: the password is what the MQTT bridge logs in with on port 8883, and the token is what lets that Pi pull this organization''s logins over HTTPS, so the same people can log in there too. The token can be skipped - press Enter at its prompt - and added later by doing this again. Neither is asked for on the command line, so that neither ends up in the Pi''s shell history.': 'दो अलग-अलग कनेक्शनों के लिए दो क्रेडेंशियल: पासवर्ड वह है जिससे MQTT ब्रिज पोर्ट 8883 पर लॉग इन करता है, और टोकन वह है जो उस Pi को इस संगठन के लॉगिन HTTPS पर लाने देता है, ताकि वही लोग वहाँ भी लॉग इन कर सकें। टोकन को छोड़ा जा सकता है - उसके प्रॉम्प्ट पर Enter दबाएँ - और बाद में यही दोबारा करके जोड़ा जा सकता है। इनमें से कोई भी कमांड लाइन पर नहीं पूछा जाता, ताकि कोई भी Pi के शेल इतिहास में न पहुँचे।'
1169
1283
  Unable to find node: नोड नहीं मिल सका
1170
1284
  Unable to find project: प्रोजेक्ट नहीं मिल सका
1171
1285
  Unauthorized: अनधिकृत
@@ -1173,9 +1287,12 @@ HI:
1173
1287
  Unknown: अज्ञात
1174
1288
  Unsupported board: असमर्थित बोर्ड
1175
1289
  Unused: अप्रयुक्त
1290
+ Up: चालू
1176
1291
  Updating the app only: केवल ऐप अपडेट हो रहा है
1177
1292
  Updating the app only - the existing configuration will be preserved: केवल ऐप अपडेट हो रहा है - मौजूदा कॉन्फ़िगरेशन सुरक्षित रहेगी
1178
1293
  Upload: अपलोड
1294
+ Upload finished - check the list below: अपलोड पूरा हुआ - नीचे दी गई सूची देखें
1295
+ Uploading: अपलोड हो रहा है
1179
1296
  Username: उपयोगकर्ता नाम
1180
1297
  Username or email: उपयोगकर्ता नाम या ईमेल
1181
1298
  Value: मान
@@ -1186,24 +1303,30 @@ HI:
1186
1303
  We will email you a code and a link to choose a new password.: हम आपको नया पासवर्ड चुनने के लिए एक कोड और एक लिंक ईमेल करेंगे।
1187
1304
  When: कब
1188
1305
  WiFi: वाई-फ़ाई
1306
+ Withdraw this enrolment secret?: क्या यह पंजीकरण सीक्रेट वापस लें?
1189
1307
  Withdrawn: वापस लिया गया
1190
1308
  Yes: हाँ
1191
1309
  You do not have permission for this organization: इस संगठन के लिए आपके पास अनुमति नहीं है
1192
1310
  ID:
1311
+ '"%s" already exists.': '"%s" sudah ada.'
1193
1312
  "+ matches one level, # matches the rest. Look before deleting.": "+ cocok dengan satu tingkat, # dengan sisanya. Lihat dulu sebelum menghapus."
1194
1313
  _nameAndFlag: Bahasa Indonesia 🇮🇩
1195
1314
  _thisLanguage: Bahasa Indonesia
1196
1315
  (Max 4MB, .bin only, typically frugal-iot.ino.bin or firmware.bin): (Maks 4MB, hanya .bin, biasanya frugal-iot.ino.bin atau firmware.bin)
1316
+ A bridge relays a Pi's readings to this server, so its nodes appear here too, while the Pi carries on recording and serving on its own whenever the link is down. "Bridge" is the broker's live view of the relay; "Last check-in" is when that Pi last collected this organization's logins, which it does over HTTP - so a Pi can be checking in while its bridge is down, and the two together say which half is broken.: Sebuah jembatan meneruskan pembacaan Pi ke server ini, sehingga node-nya muncul di sini juga, sementara Pi tetap merekam dan melayani sendiri setiap kali tautannya putus. « Jembatan » adalah tampilan langsung relai menurut broker; « Kontak terakhir » adalah saat Pi itu terakhir mengambil login organisasi ini, yang dilakukannya lewat HTTP - jadi sebuah Pi bisa berkontak sementara jembatannya mati, dan keduanya bersama-sama menunjukkan bagian mana yang rusak.
1197
1317
  Action: Aksi
1198
1318
  Action *: Aksi *
1199
1319
  Add: Tambah
1320
+ Add a bridge: Tambah jembatan
1200
1321
  Add another enrolment secret: Tambah rahasia pendaftaran lain
1201
1322
  Added: Ditambahkan
1323
+ Adding it again issues a new broker password and a new replica token, and the ones that Pi is using now stop working. It will stay disconnected until you put the new ones into its configuration and restart its broker.: Menambahkannya lagi menerbitkan kata sandi broker dan token replika yang baru, dan yang sedang dipakai Pi itu berhenti bekerja. Pi akan tetap terputus sampai Anda memasukkan yang baru ke konfigurasinya dan memulai ulang brokernya.
1202
1324
  Admin: Admin
1203
1325
  Advanced: Lanjutan
1204
1326
  All: Semua
1205
1327
  Already have an account?: Sudah punya akun?
1206
1328
  "And these two, if you are not building against the production server:": "Dan dua ini, jika Anda tidak membangun untuk server produksi:"
1329
+ Any node flashed with it that has not enrolled yet will be refused and will need reflashing. Nodes that have already enrolled are unaffected - they never present it again.: Node mana pun yang diflash dengannya dan belum terdaftar akan ditolak dan perlu diflash ulang. Node yang sudah terdaftar tidak terpengaruh - node itu tidak pernah menyajikannya lagi.
1207
1330
  API: API
1208
1331
  Approved: Disetujui
1209
1332
  AQI: Indeks Kualitas Udara
@@ -1214,8 +1337,13 @@ ID:
1214
1337
  Base URL: URL Dasar
1215
1338
  Battery: Baterai
1216
1339
  Board: Papan
1340
+ Bridge: Jembatan
1341
+ Bridged Pis: Pi yang dijembatani
1342
+ Bridges: Jembatan
1217
1343
  Brightness: Kecerahan
1218
1344
  Broker: Broker
1345
+ Broker account: Akun broker
1346
+ Broker password: Kata sandi broker
1219
1347
  Built in LED: LED bawaan
1220
1348
  buttons: tombol
1221
1349
  Choose a project to see its devices: Pilih proyek untuk melihat perangkatnya
@@ -1231,15 +1359,20 @@ ID:
1231
1359
  connecting: menghubungkan
1232
1360
  Control: Kontrol
1233
1361
  Cookie Name: Nama Cookie
1362
+ Copy these now - they are not shown again: Salin sekarang - ini tidak akan ditampilkan lagi
1234
1363
  Could not read the board - assuming it is already provisioned: Tidak dapat membaca papan - dianggap sudah diprovisioning
1235
1364
  Create an account: Buat akun
1236
1365
  Dashboard: Dasbor
1237
1366
  Data: Data
1238
1367
  Delete these: Hapus ini
1368
+ Delete this firmware: Hapus firmware ini
1239
1369
  Denied: Ditolak
1370
+ Deny %s?: Tolak %s?
1240
1371
  Description: Deskripsi
1241
1372
  Device: Perangkat
1242
1373
  Display carousel: Karosel tampilan
1374
+ DOWN: MATI
1375
+ Download this firmware: Unduh firmware ini
1243
1376
  Done: Selesai
1244
1377
  ds18b20: ds18b20
1245
1378
  e.g. LiteFarm: misalnya LiteFarm
@@ -1269,6 +1402,7 @@ ID:
1269
1402
  Flashing needs the Web Serial API - use Chrome, Edge or Opera on a desktop computer: Flashing memerlukan Web Serial API - gunakan Chrome, Edge atau Opera di komputer desktop
1270
1403
  for node: untuk node
1271
1404
  Forget: Lupakan
1405
+ Forget %s?: Lupakan %s?
1272
1406
  Forget this node, so it is issued a new credential: Lupakan node ini, agar diberi kredensial baru
1273
1407
  Forgot password?: Lupa kata sandi?
1274
1408
  From: Dari
@@ -1276,6 +1410,8 @@ ID:
1276
1410
  Frugal-IoT Username *: Nama Pengguna Frugal-IoT *
1277
1411
  Full provision - all configuration on the board will be erased: Provisioning penuh - semua konfigurasi pada papan akan dihapus
1278
1412
  Gas Resistance: Resistansi gas
1413
+ Give the Pi a short name - it becomes its broker account and cannot be changed later without reconfiguring that Pi. Lower-case letters, digits and hyphens.: Beri Pi nama pendek - nama itu menjadi akun brokernya dan tidak dapat diubah nanti tanpa mengonfigurasi ulang Pi tersebut. Huruf kecil, angka, dan tanda hubung.
1414
+ Give the Pi a short name first: Beri Pi nama pendek terlebih dahulu
1279
1415
  Graph: Grafik
1280
1416
  Greater Than: Lebih dari
1281
1417
  Has its own broker credential. Click to deny it.: Memiliki kredensial broker sendiri. Klik untuk menolaknya.
@@ -1295,9 +1431,12 @@ ID:
1295
1431
  Incorrect username or password: Nama pengguna atau kata sandi salah
1296
1432
  Info: Info
1297
1433
  Input: Masukan
1434
+ It will be issued a new broker credential the next time it asks. A node that is running will be offline for a minute or two while it notices; a node whose filesystem was erased needs this before it can rejoin at all.: Node itu akan diberi kredensial broker baru saat berikutnya meminta. Node yang sedang berjalan akan offline satu dua menit sampai menyadarinya; node yang sistem berkasnya terhapus memerlukan ini agar bisa bergabung kembali.
1435
+ Its broker account is deleted, so it stops being able to publish or subscribe, and it cannot enrol again until you clear this. Use it for a node sending bad readings.: Akun brokernya dihapus, sehingga ia berhenti dapat menerbitkan atau berlangganan, dan tidak bisa mendaftar lagi sampai Anda membatalkan ini. Gunakan untuk node yang mengirim pembacaan yang salah.
1298
1436
  Its next request will be accepted. Click to deny it.: Permintaan berikutnya akan diterima. Klik untuk menolaknya.
1299
1437
  Key: Kunci
1300
1438
  Last asked: Terakhir meminta
1439
+ Last check-in: Kontak terakhir
1301
1440
  Last Seen: Terakhir Dilihat
1302
1441
  Last seen: Terakhir terlihat
1303
1442
  LED: LED
@@ -1328,9 +1467,11 @@ ID:
1328
1467
  No organization: Tidak ada organisasi
1329
1468
  No organization selected: Tidak ada organisasi yang dipilih
1330
1469
  No OTA files uploaded yet.: Belum ada berkas OTA yang diunggah.
1470
+ No Pi bridges to this server for this organization. A bridge relays a Pi's readings here while the Pi carries on working on its own - see INSTALLATION.md step 11.: Tidak ada jembatan Pi ke server ini untuk organisasi ini. Sebuah jembatan meneruskan pembacaan Pi ke sini sementara Pi tetap bekerja sendiri - lihat INSTALLATION.md langkah 11.
1331
1471
  No platforms registered yet.: Belum ada platform yang terdaftar.
1332
1472
  No projects added for this organization yet.: Belum ada proyek yang ditambahkan untuk organisasi ini.
1333
1473
  No projects to display until organization selected: Tidak ada proyek untuk ditampilkan sampai organisasi dipilih
1474
+ No state received from the broker yet: Belum ada status yang diterima dari broker
1334
1475
  Nobody added for this organization yet.: Belum ada yang ditambahkan untuk organisasi ini.
1335
1476
  Node: Node
1336
1477
  Node Actions: Aksi Node
@@ -1391,12 +1532,14 @@ ID:
1391
1532
  Registration failed: Pendaftaran gagal
1392
1533
  Registration successful - please login: Pendaftaran berhasil - silakan masuk
1393
1534
  Relay: Relay
1535
+ Replica token: Token replika
1394
1536
  Reporting every: Melapor setiap
1395
1537
  Reset code: Kode reset
1396
1538
  Reset password: Setel ulang kata sandi
1397
1539
  Retain: Simpan
1398
1540
  Retained: Tersimpan
1399
1541
  Retained messages: Pesan tersimpan
1542
+ Run this on the Pi, in the directory the server is installed in. Replace the placeholder with this server's fully-qualified name - the one on its certificate, which you can check by opening https:// that name in a browser. It will then ask for the broker password and for the replica token, in that order, so have both of the values below to hand.: Jalankan ini di Pi, di direktori tempat server dipasang. Ganti placeholder dengan nama lengkap server ini - nama yang ada pada sertifikatnya, yang bisa Anda periksa dengan membuka https:// nama itu di peramban. Setelah itu akan diminta kata sandi broker lalu token replika, dalam urutan tersebut, jadi siapkan kedua nilai di bawah ini.
1400
1543
  Schema: Skema
1401
1544
  Select: Pilih
1402
1545
  Select a farm above to see its nodes.: Pilih farm di atas untuk melihat node-nodenya.
@@ -1417,6 +1560,7 @@ ID:
1417
1560
  SHT30: SHT30
1418
1561
  Sign In: Masuk
1419
1562
  Sign in: Masuk
1563
+ Site: Situs
1420
1564
  Soil: Tanah
1421
1565
  Soil Moisture: Kelembapan Tanah
1422
1566
  Soil Temperature: Suhu Tanah
@@ -1433,6 +1577,8 @@ ID:
1433
1577
  Temperature: Suhu
1434
1578
  temperature: suhu
1435
1579
  That code is not valid or has expired: Kode itu tidak valid atau sudah kedaluwarsa
1580
+ The broker reports this bridge connected: Broker melaporkan jembatan ini terhubung
1581
+ The broker reports this bridge not connected: Broker melaporkan jembatan ini tidak terhubung
1436
1582
  This field has no invocation URL (forms[0].href) in its schema: Bidang ini tidak memiliki URL pemanggilan (forms[0].href) dalam skemanya
1437
1583
  This node has no actions in its schema.: Node ini tidak memiliki aksi dalam skemanya.
1438
1584
  This node has no actions or writable properties in its schema.: Node ini tidak memiliki aksi atau properti yang dapat ditulis dalam skemanya.
@@ -1443,6 +1589,7 @@ ID:
1443
1589
  Topic: Topik
1444
1590
  Topic and Value are required: Topik dan Nilai wajib diisi
1445
1591
  TVOC: TVOC
1592
+ 'Two credentials for two different connections: the password is what the MQTT bridge logs in with on port 8883, and the token is what lets that Pi pull this organization''s logins over HTTPS, so the same people can log in there too. The token can be skipped - press Enter at its prompt - and added later by doing this again. Neither is asked for on the command line, so that neither ends up in the Pi''s shell history.': 'Dua kredensial untuk dua koneksi berbeda: kata sandi adalah yang dipakai jembatan MQTT untuk masuk di port 8883, dan token adalah yang memungkinkan Pi itu menarik login organisasi ini lewat HTTPS, sehingga orang yang sama bisa masuk di sana juga. Token boleh dilewati - tekan Enter pada promptnya - dan ditambahkan nanti dengan mengulangi langkah ini. Keduanya tidak diminta di baris perintah, agar tidak ada yang tersimpan di riwayat shell Pi.'
1446
1593
  Unable to find node: Tidak dapat menemukan node
1447
1594
  Unable to find project: Tidak dapat menemukan proyek
1448
1595
  Unauthorized: Tidak sah
@@ -1450,9 +1597,12 @@ ID:
1450
1597
  Unknown: Tidak diketahui
1451
1598
  Unsupported board: Papan tidak didukung
1452
1599
  Unused: Tidak digunakan
1600
+ Up: Aktif
1453
1601
  Updating the app only: Hanya memperbarui aplikasi
1454
1602
  Updating the app only - the existing configuration will be preserved: Hanya memperbarui aplikasi - konfigurasi yang ada akan dipertahankan
1455
1603
  Upload: Unggah
1604
+ Upload finished - check the list below: Unggahan selesai - periksa daftar di bawah
1605
+ Uploading: Mengunggah
1456
1606
  Username: Nama Pengguna
1457
1607
  Username or email: Nama pengguna atau email
1458
1608
  Value: Nilai
@@ -1463,6 +1613,7 @@ ID:
1463
1613
  We will email you a code and a link to choose a new password.: Kami akan mengirim kode dan tautan lewat email untuk memilih kata sandi baru.
1464
1614
  When: Ketika
1465
1615
  WiFi: WiFi
1616
+ Withdraw this enrolment secret?: Cabut rahasia pendaftaran ini?
1466
1617
 
1467
1618
  Withdrawn: Dicabut
1468
1619
  Yes: Ya
@@ -1507,6 +1658,11 @@ function getStringFrom(langs, tag) {
1507
1658
  function getString(tag) {
1508
1659
  return getStringFrom(languages, tag) || languages.EN[tag] || tag;
1509
1660
  }
1661
+ // A name dropped into translated prose. The placeholder rather than concatenation, because where
1662
+ // the name falls in the sentence is the translation's decision, not this caller's.
1663
+ function getStringWith(tag, value) {
1664
+ return getString(tag).replace('%s', value);
1665
+ }
1510
1666
 
1511
1667
  // server_config is assigned from /config.json in normal use; funnelled through here so a mock or
1512
1668
  // test can supply the same shape without a server.
@@ -2061,10 +2217,13 @@ class MqttTopic {
2061
2217
  type: this.type === 'exponential' ? 'logarithmic' : 'linear',
2062
2218
  display: this.type !== 'bool',
2063
2219
  title: {
2220
+ display: true, // Chart.js hides a scale title unless asked - without this the axis has no label at all
2064
2221
  // noinspection JSUnresolvedReference
2065
2222
  color: this.color, // The family colour; the per-line variation happens in MqttGraph.addDataset
2223
+ font: { size: 20 },
2224
+ // The unit is what tells two axes apart when both read as a number - "Temperature (°C)"
2066
2225
  // noinspection JSUnresolvedReference
2067
- text: getString(this.name.replace(/[0-9]+$/,'')),
2226
+ text: getString(this.name.replace(/[0-9]+$/,'')) + (unitSymbol(this.units) ? ` (${unitSymbol(this.units)})` : ''),
2068
2227
  },
2069
2228
  // 0 is not valid on a logarithmic axis, so fall back to auto-scaling (undefined) rather than 0
2070
2229
  // noinspection JSUnresolvedReference
@@ -2829,9 +2988,7 @@ class MqttClient extends HTMLElementExtended {
2829
2988
  mqtt_subscriptions.forEach((s) => {
2830
2989
  if (!mqtt_client._resubscribeTopics[s.topic]) { // Not really public interface but cleaner console as not needed
2831
2990
  console.log("Now connected, subscribing to", s.topic);
2832
- mqtt_client.subscribe(s.topic, (err) => {
2833
- if (err) console.error(err);
2834
- });
2991
+ mqtt_client.subscribe(s.topic, (err, granted) => subscribeResult(s.topic, err, granted));
2835
2992
  }
2836
2993
  })
2837
2994
  } else {
@@ -3162,6 +3319,7 @@ export {
3162
3319
  configSet,
3163
3320
  el,
3164
3321
  getString,
3322
+ getStringWith,
3165
3323
  getStringFrom,
3166
3324
  isEditableTarget,
3167
3325
  leafAttribute,