Utilisez Power BI pour afficher vos appareils Smartthings

Intro
Il s'agit davantage d'une preuve de concept pour montrer que vous pouvez lire des sources de données personnalisées et peu utilisées dans Power BI. Au fur et à mesure que vous parcourez cette petite vitrine / tutoriel, je vous encourage à réfléchir au type de données qui profiterait si vous pouviez les consulter dans un tableau de bord cohérent.
Cas d'utilisation
J'ai de nombreux appareils IoT dans mon à la maison et utilisent principalement Smartthings pour les gérer. Smartthings ne fournit pas d'interface Web conviviale et s'appuie à la place sur leur application téléphonique. Ce n'est pas un gros problème, mais nous utiliserons cette excuse pour extraire les données dans Power BI.
L'API Smartthings
Smartthings fournit une API REST. Nous allons l'utiliser pour extraire les données dans Power BI. Pour accéder à l'API, vous devrez créer un jeton. Pour ce faire, allez ici: https://account.smartthings.com/tokens
Cliquez sur Generate Token et sélectionnez l'accès aux périphériques de lecture. Notez votre token car vous ne pourrez pas le récupérer plus tard.

Le type d'autorisation est Bearer, nous y reviendrons plus tard. Voici les deux points de terminaison que nous utiliserons:
- https://api.smartthings.com/v1/devices
- https://api.smartthings.com/v1/devices/ {deviceId} / status [19659011] Pour en savoir plus, cliquez ici: https://smartthings.developer.samsung.com/docs/api-ref/st-api.html
Ensembles de données Power BI
Nous serons concevoir cela de telle manière que nous utiliserons deux ensembles de données. Un pour chaque endpoint.
Dataset # 1: Device List
Le premier jeu de données apportera une liste d'appareils dans notre compte smartthings. Ouvrez une nouvelle fenêtre PowerBI et sélectionnez Get Data -> Web .
Ensuite, sélectionnez Advanced
Saisissez les informations suivantes:
URL parts: https: // api.smartthings.com/v1/devices[19659018[19659018Cliquezavecleboutondroitetsélectionnez Dans le tableau.Cliquez ensuite sur Liste
Faites un clic droit sur l'en-tête et sélectionnez Vers le tableau puis cliquez sur Ok
Développer les colonnes en cliquant sur l'icône dans l'en-tête et en cliquant sur OK
Vous avez maintenant une liste de tous vos appareils. Cliquez sur Fermer et appliquer
Itération sur les périphériques
L'étape précédente jette les bases de la suivante, qui consiste à obtenir le statut de tous les périphériques par programme.
Créer une nouvelle requête vide à partir de Obtenir des données -> Requête vide
Dans cette requête, nous écrirons une fonction qui prend l'identifiant de l'appareil comme paramètre. Allez dans l'éditeur avancé et insérez le code suivant (attention à votre jeton d'autorisation).
(device as text) => laisser Source = Json.Document (Web.Contents ("https://api.smartthings.com/v1/devices/" & amp; périphérique & amp; "/ status", [Headers=[Authorization="Bearer ad6fcfdd-a47b-d3ab-9b7e-asdsdsd01b137"]])), # "Converted to Table" = Record.ToTable (Source) dans # "Converti en tableau"
Cliquez sur Done
Dataset # 2: Device Status
Créez un nouveau jeu de données dans l'éditeur avancé de façon à ce qu'il fasse référence au premier jeu de données, puis choisissez le deviceId à partir de celui-ci et appelle par la suite la fonction que nous venons de créer.
let Source = appareils, newTable = Table.SelectColumns (Source, {"Column1.deviceId"}), # "Invoked Custom Function" = Table.AddColumn (newTable, "Device", chaque Query1 (& # 91; Column1.deviceId])), # "Expanded Device" = Table.ExpandTableColumn (# "Invoked Custom Function", "Device", {"Name", "Value"}, {"Device.Name", "Device.Value"}), # "Expanded Device.Value" = Table.ExpandRecordColumn (# "Expanded Device", "Device.Value", {"main"}, {"Device.Value.main"}), # "Expanded Device.Value.main" = Table.ExpandRecordColumn (# "Expanded Device.Value", "Device.Value.main", {"actuator", "sensor", "switch", "configuration", "healthCheck" , "switchLevel", "refresh", "polling"}, {"Device.Value.main.actuator", "Device.Value.main.sensor", "Device.Value.main.switch", "Device.Value. main.configuration "," Device.Value.main.healthCheck "," Device.Value.main.switchLevel "," Device.Value.main.refresh "," Device.Value.main.polling "}), # "Expanded Device.Value.main.switch" = Table.ExpandRecordColumn (# "Expanded Device.Value.main", "Device.Value.main.switch", {"switch"}, {"Device.Value.main. switch.switch "}), # "Expanded Device.Value.main.switchLevel" = Table.ExpandRecordColumn (# "Expanded Device.Value.main.switch", "Device.Value.main.switchLevel", {"level"}, {"Device.Value. main.switchLevel.level "}), # "Expanded Device.Value.main.switchLevel.level" = Table.ExpandRecordColumn (# "Expanded Device.Value.main.switchLevel", "Device.Value.main.switchLevel.level", {"value", "unit" , "timestamp"}, {"Device.Value.main.switchLevel.level.value", "Device.Value.main.switchLevel.level.unit", "Device.Value.main.switchLevel.level.timestamp"}) , # "Expanded Device.Value.main.switch.switch" = Table.ExpandRecordColumn (# "Expanded Device.Value.main.switchLevel.level", "Device.Value.main.switch.switch", {"value", " horodatage "}, {" Device.Value.main.switch.switch.value "," Device.Value.main.switch.switch.timestamp "}), # "Renamed Columns" = Table.RenameColumns (# "Expanded Device.Value.main.switch.switch", {{"Device.Value.main.switch.switch.value", "Status"}, {"Device.Value .main.switchLevel.level.timestamp "," Dernière vérification "}}) dans # "Colonnes renommées"
Vous recevrez un message concernant le pare-feu. Vous pouvez désactiver cette option en accédant à Options -> Confidentialité -> Ignorer les paramètres de niveau de confidentialité.
Cliquez sur Fermer et appliquer
Vous pouvez désormais utiliser les ensembles de données pour créer votre propre tableau de bord Smartthings. Je l'ai personnellement utilisé pour vérifier l'état et les niveaux de gradation de tous mes smartlights.
Conclusion
C'était un projet amusant qui utilise Power BI pour s'intégrer dans une API de repos. Avez-vous d'autres utilisations ou idées? Que diriez-vous de créer une application d'alimentation pour modifier l'état et contrôler les appareils? Vous avez des questions ou des commentaires? Veuillez nous contacter. J'aimerais entendre vos idées.
Source link