[PYTHON] Mesurez la température et l'humidité intérieures et extérieures et affichez-les sur le tableau de bord

Objectif

Je souhaite utiliser un thermo-hygromètre pour vérifier les conditions intérieures et extérieures sur le tableau de bord.

Même lorsque j'ai acheté un thermo-hygromètre SwitchBot, j'ai senti qu'il n'était pas épuisé, mais j'ai été remarqué par cet article et j'ai proposé la production. Merci: arc: Acquérir des données de capteur dans la maison avec Raspberry Pi et réaliser une super maison IoT

Aperçu

De nombreux articles sont traités à l'aide de Raspeye, mais cette fois, j'utiliserai le serveur x86_64 à la maison qui est déjà en cours d'exécution. Pour obtenir la valeur du capteur, utilisez le programme Python publié par Wonder Labs. https://github.com/OpenWonderLabs/python-host La valeur acquise est enregistrée dans la feuille de calcul Google via le script Google Apps. Utilisez-le comme source de données et visualisez-la dans le portail de données Google.

Voilà le flux. Untitled.png

Préparation

procédure

Installation du thermo-hygromètre SwitchBot

Après l'achat, insérez la batterie et installez-la à l'endroit à mesurer. Lors de l'installation à l'extérieur, prenez des mesures d'étanchéité. Vous pouvez l'enfermer dans quelque chose, mais s'il est en métal, cela gênera la communication. Installez l'application SwitchBot pour connaître l'adresse MAC BLE dont vous aurez besoin à l'étape suivante.

Créer une feuille de calcul Google

Créez une feuille de calcul avec n'importe quel emplacement et nom. À ce stade, entrez la première ligne comme indiqué dans l'image ci-dessous. (Avant _t et _h est l'adresse MAC de BLE) Vous aurez besoin de l'URL à l'étape suivante. logs-Google-スプレッドシート.png

Créer un script Google Apps

Créez un script Google Apps avec n'importe quel emplacement et nom. Veuillez vous référer à d'autres articles pour savoir comment créer et préparer. https://qiita.com/tags/googleappsscript Réécrivez le script avec le contenu ci-dessous.

var SPREADSHEET_ID = "********"; //Voici l'URL de la feuille de calcul

// Compiled using ts2gas 3.6.3 (TypeScript 3.9.7)
var MySpreadsheet = /** @class */ (function () {
    function MySpreadsheet(id, sheetId) {
        if (sheetId === void 0) { sheetId = 0; }
        if (id.match(/^https:\/\//)) {
            this.ss = SpreadsheetApp.openByUrl(id);
        }
        else {
            this.ss = SpreadsheetApp.openById(id);
        }
        this.sheet = this.ss.getSheets()[sheetId];
    }
    MySpreadsheet.prototype.headers = function () {
        var range = this.sheet.getRange(1, 1, 1, this.sheet.getMaxColumns());
        return range.getValues()[0];
    };
    MySpreadsheet.prototype.appendRow = function (row) {
        var insertRow = [];
        this.headers().forEach(function (name, index) {
            insertRow.push((name && name in row) ? row[name] : "");
        });
        this.ss.appendRow(insertRow);
    };
    MySpreadsheet.prototype.unshiftRow = function (row) {
        this.sheet.insertRowAfter(1);
        var range = this.sheet.getRange(2, 1, 1, this.sheet.getMaxColumns());
        this.headers().forEach(function (name, index) {
            if (name) {
                range.getCell(1, index + 1).setValue(row[name]);
            }
        });
    };
    return MySpreadsheet;
}());
var MyResponse = /** @class */ (function () {
    function MyResponse(status, message) {
        this.status = status;
        this.message = message;
    }
    MyResponse.prototype.toJSON = function () {
        return {
            status: this.status,
            message: this.message
        };
    };
    MyResponse.prototype.create = function () {
        var output = ContentService.createTextOutput();
        output.setMimeType(ContentService.MimeType.JSON);
        output.setContent(JSON.stringify(this));
        return output;
    };
    return MyResponse;
}());
function doPost(e) {
    var data = JSON.parse(e.postData.contents);
    var response = new MyResponse("success", "ok");
    try {
        var ss = new MySpreadsheet(SPREADSHEET_ID);
        ss.unshiftRow(data);
    }
    catch (err) {
        console.error(err);
        console.log(data);
        response.status = "error";
        response.message = err.message;
    }
    return response.create();
}

Publication du script Google Apps

Après avoir enregistré le script, publiez-le. Menu> Publier> Introduit en tant qu'application Web ... Vous aurez besoin de l'URL à l'étape suivante.

Installation du programme serveur

Le conteneur Docker est ouvert au public jusqu'au point où les valeurs de capteur acquises par le programme Python sont POSTÉES vers une URL spécifique. Veuillez vous déplacer ici. https://hub.docker.com/repository/docker/kunikada/switchbot-meter-relay Pour POST_URL, spécifiez l'URL que vous avez publiée précédemment.

Veuillez vous référer à d'autres articles pour le processus d'exécution du conteneur Docker en premier lieu. https://qiita.com/tags/docker

À ce stade, vous devriez avoir accumulé des données dans votre feuille de calcul Google.

Paramètres du portail de données Google

SwitchBot温湿度計-›-PC用レイアウト.png Je vais omettre les étapes spécifiques, mais à la suite d'essais et d'erreurs, quelque chose comme une image a été créé. La température est affichée au-dessus, l'humidité est affichée en dessous, et les données intérieures / extérieures et les différences sont affichées en un. Le côté gauche est l'historique et le côté droit est la valeur actuelle. Il existe différents paramètres pour l'historique, mais vous pouvez le définir avec un graphique de série chronologique. La valeur actuelle est affichée en superposant deux graphiques en anneau et deux cartes de performance. La source de données crée également des données dédiées dans une feuille distincte de la feuille de calcul.

Si vous avez des questions, laissez un commentaire.

Remarques

référence

Spécifications de l'API du thermo-hygromètre https://github.com/OpenWonderLabs/python-host/wiki/Meter-BLE-open-API

Référence de script Google Apps https://developers.google.com/apps-script/reference

Référence du japonais Docker https://docs.docker.jp/index.html

Aide du portail de données Google https://support.google.com/datastudio/?hl=ja

Recommended Posts

Mesurez la température et l'humidité intérieures et extérieures et affichez-les sur le tableau de bord
Raspberry + am2302 Mesure la température et l'humidité avec un capteur de température et d'humidité
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Mesurez la température et l'humidité avec Raspberry Pi3 et visualisez avec Ambient
Installer matplotlib et afficher le graphique dans Jupyter Notebook
Erreur d'affichage dans wxPython (et traitsui) sur vscode
Afficher des images et lire des vidéos dans le terminal Neovim
Afficher la température du processeur toutes les 5 secondes sur Raspberry Pi 4
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi