Tutorial - Automate your washing machine with a smart plug

Bonjour à tous,

Je vais ici vous présenter comment simplement domotiser une machine à lavée avec seulement une prise et avoir un rendu comme ceci :

Attention ce tutoriel sera amené à évoluer ainsi que certaines copies d’écrans changées au fur et à mesure des corrections éventuelles de bugs ou ajout de fonctionnalités :slight_smile:
Le changelog sera dispo en fin de tutoriel

Je mettrai pas mal de copies d’écrans sans forcement l’accompagner de texte mais si vous avez des questions/remarques/suggestions n’hésitez pas :wink:

Je me suis fortement inspiré du tutoriel sur Domo-Blog que l’on retrouve ici :
https://www.domo-blog.fr/comment-connecter-et-monitorer-la-machine-a-laver-sous-la-domotique-home-assistant/


Pré-requis :

  • Intégration MQTT
  • Intégration Zigbee2Mqtt
  • Une prise connecté Zigbee (Dans mon cas celle-ci)
  • Avoir intégré sa prise connecté Zigbee à l’intégration Zigbee2Mqtt

1. Création de l’appareil lave linge sur l’intégration MQTT :


2. Création des fonctionnalités sur l’appareil MQTT lave linge :


3. Création de l’appareil edf sur l’intégration MQTT :


1. Création de l’appareil pour récupérer le dernier jour du mois :


4. Création de la fonctionnalité sur l’appareil MQTT edf :


5. Création de la scène pour edf afin d’indiquer le coût de votre abonnement :
Vous pouvez automatiser cette tâche avec le tutoriel suivant :
https://community.gladysassistant.com/t/tuto-recuperer-le-prix-de-son-abonnement-delectricite-via-le-site-data-gouv-fr/8838

image

Exécutez cette scène une fois manuellement et les prochaines fois que votre tarif changera si vous n’utilisez pas l’automatisation :wink:


6. Création de la scène lave linge en fonctionnement :

image

image


image


7. Création de la scène lave linge arrêté :

image

image

image


image

image

image

image

image

image

8. Création de la scène reset des valeurs mensuel :

image

9. Création de la scène refresh des valeurs statiques :

Si vous ne faites pas tourner votre machine pendant 48h certaines valeurs n’apparaissent plus sur le Dashboard, cette valeur est trouvable dans Paramètres → Système de Gladys :

image

J’ai donc créé une scène qui met à jour les valeurs par les mêmes valeurs toutes les 24h à un horaire ou je sais que ma machine ne tournera pas :slight_smile:

image

image


10. Création de la scène refresh des valeurs annuelles :

Petite précision sur cette scène, il faudra modifier cette date chaque année

image

image

image

11. Création du flux Node-Red pour récupérer le dernier jour du mois :

[
    {
        "id": "b7191a33c07d23e0",
        "type": "tab",
        "label": "Vérif dernier jour mois en cours",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "d0e045cb.9f4ef",
        "type": "http request",
        "z": "b7191a33c07d23e0",
        "name": "WorldTime API",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "http://worldtimeapi.org/api/ip",
        "tls": "",
        "persist": false,
        "proxy": "",
        "authType": "",
        "x": 260,
        "y": 200,
        "wires": [
            [
                "91df43f4.81a518"
            ]
        ]
    },
    {
        "id": "91df43f4.81a518",
        "type": "function",
        "z": "b7191a33c07d23e0",
        "name": "Extract Month",
        "func": "var mois_actuel = msg.payload.datetime.substring(5, 7);\nmsg.mois_actuel = parseInt(mois_actuel);\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 430,
        "y": 260,
        "wires": [
            [
                "7894f4e2.dcb4f4"
            ]
        ]
    },
    {
        "id": "7894f4e2.dcb4f4",
        "type": "function",
        "z": "b7191a33c07d23e0",
        "name": "Determine Last Day of Month",
        "func": "var mois_30_jours = [4, 6, 9, 11];\nvar mois_31_jours = [1, 3, 5, 7, 8, 10, 12];\n\nif (mois_30_jours.includes(msg.mois_actuel)) {\n    msg.payload = 30;\n} else if (mois_31_jours.includes(msg.mois_actuel)) {\n    msg.payload = 31;\n} else {\n    var annee_actuelle = parseInt(msg.payload.datetime.substring(0, 4));\n    if ((annee_actuelle % 4 == 0 && annee_actuelle % 100 != 0) || annee_actuelle % 400 == 0) {\n        msg.payload = 29; // Année bissextile\n    } else {\n        msg.payload = 28;\n    }\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 640,
        "y": 320,
        "wires": [
            [
                "b55312bdd26f4bda"
            ]
        ]
    },
    {
        "id": "fbac43b9673078da",
        "type": "mqtt out",
        "z": "b7191a33c07d23e0",
        "name": "",
        "topic": "gladys/master/device/mqtt:datetime/feature/mqtt:dernier-jour-moisencours/text",
        "qos": "2",
        "retain": "true",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "0ee77e0f90aa9681",
        "x": 1220,
        "y": 440,
        "wires": []
    },
    {
        "id": "b55312bdd26f4bda",
        "type": "function",
        "z": "b7191a33c07d23e0",
        "name": "Extraction jour",
        "func": "const payload = msg.payload;\nmsg.payload = payload;\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 860,
        "y": 380,
        "wires": [
            [
                "fbac43b9673078da"
            ]
        ]
    },
    {
        "id": "65287af29bc457b9",
        "type": "cronplus",
        "z": "b7191a33c07d23e0",
        "name": "",
        "outputField": "payload",
        "timeZone": "",
        "storeName": "",
        "commandResponseMsgOutput": "output1",
        "defaultLocation": "",
        "defaultLocationType": "default",
        "outputs": 1,
        "options": [
            {
                "name": "schedule1",
                "topic": "topic1",
                "payloadType": "default",
                "payload": "",
                "expressionType": "cron",
                "expression": "30 00 1 * *",
                "location": "",
                "offset": "0",
                "solarType": "all",
                "solarEvents": "sunrise,sunset"
            }
        ],
        "x": 100,
        "y": 160,
        "wires": [
            [
                "d0e045cb.9f4ef"
            ]
        ]
    },
    {
        "id": "0ee77e0f90aa9681",
        "type": "mqtt-broker",
        "name": "Gladys",
        "broker": "mqtt://192.168.0.248",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": true,
        "autoUnsubscribe": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthRetain": "false",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closeRetain": "false",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willRetain": "false",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]

12. Création de la scène pour le cout par mois graphique si la fin du mois est le 30 :

image

image

13. Création de la scène pour le cout par mois graphique si la fin du mois est le 31 :

image

image

14. Graphique sur le dashboard pour suivre mois par mois :


Juste une petite précision pour l’attente de 2 minutes sur la scène lave linge arrêté, j’ai du faire ceci car même à 1 minute avec mon lave ligne la scène se déclenchait car il devait avoir un moment où le lave linge passait à 0W et après 1 minute était à 0W, en tout cas je l’explique comme ceci… ^^
J’ai n’ai plus eu de problème après l’avoir passé à 2 minutes


Changelog à venir :

  • Aucun (A vos commentaires :slight_smile: )

Edit 10/04/2024 :

  • Modification de la valeur de déclenchement (Puissance prise) pour prendre en compte le départ différé
  • Ajout du calcul pour le coût sur 1 mois

Edit 12/04/2024 :

  • Correction de plusieurs bugs

Edit 16/04/2024 :

  • Ajout du lien pour automatisation récupération tarif électricité
  • Bug détecté et en cours de tentative de résolution concernant la scène « Lave linge arrêté » qui s’exécute plusieurs fois notamment en fin de cycle :frowning:

Edit 21/04/2024 :

  • Correction du bug sur la scène lave linge arrêté qui s’exécutait plusieurs fois en fin de cycle
  • Ajout d’une scène pour que les valeurs soit tout le temps affichées sur le Dashboard en fonction du paramètre « Délai avant expiration d’un état »
  • Mise en place de l’arrondi à 2 décimales sur le coût + 3 décimales sur la consommation dernière lessive
  • Ajout coût année

Edit 22/04/2024 :

  • Mea culpa, le bug n’était pas du tout corrigé, c’est chose faite maintenant :slight_smile:
  • Optimisation de la scène « Lave linge arrêté »

Edit 03/05/2024 :

  • Ajout d’un graphique pour suivre mois par mois le coût
9 Likes

Great tutorial, that’s what I already do at home (basically) but I never took the time to make a tutorial… So a big thank you!! :grin:

1 Like

Yes indeed, thanks, I just corrected it :slight_smile:

Great tutorial, thanks @prohand :slight_smile:

1 Like

Small change to account for the delayed start
The power draw is 3W from time to time when the machine is waiting to start during a delayed start

1 Like

I can’t be stopped anymore :sweat_smile:
I just added the calculation for the cost of the current month

1 Like

You’re on fire right now :grin:

1 Like

I hesitated to set the annual cost but I’ll wait to see if this part is already well worked out :slight_smile:

1 Like

Shared on Twitter:

1 Like

A big thank you :slight_smile:

Small mistake on the washing machine running scene regarding action 2 — it should be set to 0
I’ll fix the screenshot as soon as I can :wink:

Edit: It’s fixed

1 Like

@pierre-gilles I just realized that the calculations don’t work when used in « Send an MQTT message »:

The value in MQTT here is not replaced by the calculation performed.

Is this normal or is it a bug?

Edit: Solution found by using buffer features (MQTT topic to listen to)

Edit 2: The tutorial is up to date :slight_smile:

I have a quick question regarding the decimal places for the currency feature.

I see that in the MQTT broker the value is:

image

But the display shows:

We can see that for the power feature we do have multiple decimal places — is there a restriction somewhere? How can I change it for the currency to display 2 decimal places?

I would also like to ask how to change the number of decimal places for the power feature to 2 or 3 decimal places, for example?

I saw this but nothing else :frowning: : Dashboard - arrondi des données affichées - #4 par Kevin

I would have liked to vote for this feature request but I’ve reached the vote limit :frowning: : Dashboard - arrondi des données affichées

Thanks :slight_smile:

1 Like

Yes, it’s normal — it’s not meant to perform a calculation; it’s meant to concatenate the text, like in the « send a message » action.

For your information, I just fixed several bugs.
The tutorial is up to date :wink:

I just added a link to automate the rate via the following tutorial :

https://community.gladysassistant.com/t/tuto-recuperer-le-prix-de-son-abonnement-delectricite-via-le-site-data-gouv-fr/8838

I am trying to fix a bug where the « Washing machine stopped » scene is triggered multiple times in a row at the end of the cycle, I will let you know when I have updated the tutorial with the bug fixed

3 Likes

Tutorial update :slight_smile:
See the changelog in the first post.
Thanks :wink:

1 Like

Last-minute addition regarding the annual cost :slight_smile:
If you have suggestions for new features or bug reports, please don’t hesitate.

1 Like

Tutorial update :slight_smile:
See the changelog in the first post.
Thanks :wink:

1 Like

Tutorial update :slight_smile:
See the changelog in the first post.
Thanks :wink:

2 Likes