Comment exécuter une méthode à partir d'un script dans majordomo. Majordome

De nombreux débutants ne parviennent pas à se lier d'amitié avec MajorDoMo, car ce système, à première vue, leur semble assez compliqué. En fait, la structure de MajorDoMo est très simple. Toute sa « complexité » n’est rien d’autre qu’une duplication d’emplacements de stockage de code, mise en œuvre uniquement pour des raisons de commodité.

Essayons d'y regarder de plus près. Tout ce que nous faisons est implémenté, pour la plupart, à l’aide de code PHP. Il comprend à son tour à la fois des fonctions de base et un petit nombre de commandes propres à MajorDoMo.

Pour faciliter la compréhension et la mise en œuvre, vous pouvez placer le code dans différents lieux. Pour comprendre, je vais donner un exemple simple de cette approche. Disons que nous devons exécuter un code absolument identique, à la fois en appuyant sur un bouton dans le menu et par commande vocale. Nous pouvons écrire ce code directement dans le bouton de menu et dans la commande vocale. Encombrant, n'est-ce pas ? Ou nous pouvons le mettre dans un script, puis appeler ce script depuis absolument n'importe où avec une seule ligne. C’est d’ailleurs là tout le secret de cette apparente complexité. 🙂

D'où la formule simple. Si un code doit être exécuté à partir d'un seul endroit, nous l'écrivons directement à partir de là et l'exécuterons. Si vous avez besoin d'y accéder depuis au moins deux endroits, vous devriez déjà penser au script.

Où sont ces emplacements pour le code ?

  • Eh bien, bien sûr, ce sont des scénarios. (Menu Administration/OBJETS/Scripts ).
  • Méthodes (Menu Administration/OBJETS/Objets ), j’y reviendrai en détail plus tard.
  • Menu (Menu Administration/OBJETS/Menu Contrôle ).
  • Commande vocale (Menu Administration/OBJETS/Modèles de comportement ).
  • Contrôle visuel sur le plan du bâtiment (Menu Administration/OBJETS/Scènes ).
  • Extraction de données à partir de pages Web (analyse) (Menu Administration/OBJETS/Variables Web ).

En fait, pour l’essentiel, c’est tout ce qu’il y a à faire. Tout le reste est intuitif et saisi à la volée.

Scripts.

Tout est clair avec les scripts. Nous y écrivons le code que nous voulons exécuter à partir de différents endroits.

Menu, commande vocale et scènes.

Nous y inscrivons ces précieux indicateurs, boutons, interrupteurs, régulateurs...

Ils peuvent contenir :

  1. Tout le code.
  2. Transition directe vers le scénario (en sélectionnant un scénario pré-préparé dans la liste).
  3. Type mixte (par exemple, lorsque l'on élabore un morceau de code directement dans un bouton, par exemple son indication, alors on va dans le script et on exécute ce qui y est écrit).

Analyse.

Pour l'essentiel, l'analyse ici consiste à extraire des données des pages d'autres personnes présentées sur Internet, en spécifiant le début et la fin du morceau de texte requis. PHP joue ici davantage un rôle de support et est relativement rarement utilisé.

Voici un exemple. Disons que vous avez besoin d'obtenir la température à partir d'un site Web, disons « Prévisionniste ». Avec des caractères spéciaux, nous indiquons le début et la fin du morceau de texte dont nous avons besoin (que ce soit la température actuelle). Ensuite, à une certaine fréquence que nous fixons, ce numéro est lu et écrit dans la propriété. Plus d'informations sur les propriétés un peu plus tard. Pour l'instant, sachez simplement que le chiffre lu est stocké dans notre Un certain endroit jusqu'à ce que ça change. Dès que cela se produit, le numéro changera à cet endroit (propriété). Nous traitons le paramètre (numéro de température) enregistré dans la propriété de la manière dont nous avons besoin. Disons que pour un menu, on ajoute les mots avant le numéro affiché : «Dans la rue: " et puis "°C » .

Voici à quoi cela ressemble dans le code :Extérieur : %ThisComputer.Sinoptik_temp%°C

Dans la rue: Et°C c'est juste du texte.

UN:ThisComputer.Sinoptik_temp c'est précisément notre propriété, oùCet ordinateur c'est la classe etSinoptique_temp c'est une propriété de cette classe et le point est utilisé comme séparateur. En lisant ci-dessous, vous comprendrez tout cela. Oh oui, les % sont des délimiteurs pour le menu ; les guillemets sont généralement utilisés dans le code.

Par conséquent, dans notre menu, nous voyons toujours la température actuelle du site Web.

Objets.

Et finalement, il nous reste des objets, l'endroit même où se trouvent nos propriétés et bien plus encore. Les objets aussi, à première vue, semblent être une chose complexe. Mais ce n’est qu’un premier coup d’œil. 🙂

Un objet c'est une représentation de n'importe quoi, par exemple : un ordinateur (comme dans l'exemple ci-dessus), ou un réveil, ou une minuterie, ou même Skype... En général, n'importe quoi.

Il peut y avoir plusieurs objets identiques. Eh bien, par exemple. Rappelez-vous que lorsque j'ai écrit comment je voyais le système, j'ai dit que nous aurions une station météorologique avec des pâtés de maisons et des rues. Ainsi, les deux blocs sont assemblés sur des modules ESP-12 absolument identiques. Chacun d'eux est un objet et leur totalité estClasse . Ici, tout est également fait pour plus de commodité et pour éliminer les écritures inutiles, vous comprendrez plus loin.

La structure ici est la suivante :

1. Classe appareils identiques, appelons-le ESP (puisque nous avons pris les modules ESP comme exemple).

1.1. Ceclasse peut être mis en placepropriétés (si c'est simple, en demandantclasse ESP propriététempérature il apparaîtra automatiquement en chacun de nousobjets de classe ESP , c'est-à-dire qu'il ne sera pas nécessaire de créerpropriété , pour chaqueobjet ).

1.2 Ceciclasse , vous pouvez également définirméthodes (c'est-à-dire exécuter du code, cesméthodes de la même manièrepropriétés apparaîtra dans tous nosobjets ).

1.3. Et enfin, bien sûr, dansclasse Il y aobjets . Il s'agit directement de nos ESP physiques : ESP-12 n°1, ESP-12 n°2, etc.

Chaqueun objet (ESP-12 n°1, ESP-12 n°2, etc.), à son tour, a son proprepropriétés Etméthodes .

Il existe deux types de propriétés Propriétés de classe Et Propriétés de l'objet leur différence est que les propriétés enregistrées dans une classe apparaissent automatiquement dans tous les nouveaux objets et que les propriétés ajoutées à un objet n'apparaissent que dans celui-ci. Ceci est fait afin, d'une part, de se débarrasser des écrits inutiles et, d'autre part, de fournir des propriétés. Méthodes sont créés uniquement dans la classe et sont enregistrés uniquement dans l'objet.

Je vais vous expliquer avec un exemple :

Disons que nous avons l'ESP-12 n°1 et l'ESP-12 n°2. Nous devons mesurer la température sur les deux, mais en plus de cela, nous devons également mesurer l'humidité sur le premier et utiliser le second pour contrôler le relais.

FaisonsClasse ESP , on y écritpropriété Température . Il apparaîtra automatiquement dans les propriétés de l'ESP-12 n° 1 et de l'ESP-12 n° 2. Plus directement, pour l'ESP-12 n°1, déjà dans sapropriétés , nous nous inscrivonsHumidité . DANSpropriétés même, ESP-12 n°2 nous enregistrons le relais. En conséquence, nous avons l'ESP-12 n° 1 avec des propriétés dans lesquelles le système enregistrera pour nous les valeurs de température et d'humidité, et l'ESP-12 n° 2 avec des propriétés dans lesquelles le système enregistrera la valeur de température. et l'état du relais pour nous (0-Off, 1-On). Eh bien, en conséquence, méthodes ce qui nous aidera à traiter ces mêmes données, si cela est nécessaire, nous les créerons en classe ESP, et nous y écrirons personnellement le code pour chaque objet.

Il convient de noter que les méthodes peuvent être appelées de n'importe où callMethod("Object.Method", $params); ou alternative cm cm("Objet.Méthode", $params);. Les propriétés sont également mondiales et peuvent être appelées de n'importe où. C'est exactement ce que font les fonctions sg(setGlobal) et gg (getGlobal). Par exemple la ligne :getURL(gg('AlarmOne.UrlAlarmRing'),0); ouvrira le lien qui est stocké dans la propriétéAlarmOne.UrlAlarmRing

Maintenant, c’est sûr, vous avez tout pour comprendre le fonctionnement de MajorDoMo.

Renforçons cela avec un exemple concret :

Nous avons flashé le firmware de wifi-iot.com sur nos modules ESP-12 n°1 et n°2. Le premier lit la température et l'humidité, et le second lit la température et contrôle le relais. Les deux ESP-12 envoient des données à MajorDoMo à certains intervalles, où elles sont reçues par un script qui trie les données reçues en propriétés. Et enfin, nous récupérons ces données des propriétés et les utilisons à notre propre discrétion, c'est-à-dire que nous insérons la propriété nécessaire là où elle doit être affichée ou appliquée.

Par exemple, nous prenons les températures de la rue et de la pièce, les traitons dans un certain scénario, obtenant ainsi un thermostat intelligent.

De plus, à partir des mêmes propriétés, nous prenons la même température et l'affichons dans le menu ou sur scène pour une représentation visuelle.

Et le matin, la méthode lancée depuis l'objet Réveil lancera pour nous un script qui, après que nous nous serons enfin réveillés et éteint la mélodie, nous lira vocalement la météo actuelle. Et d’où pensez-vous qu’il obtiendra les chiffres de température et d’humidité ? Exactement, des propriétés !

Et vous pouvez créer autant de ces options que vous le souhaitez, à condition d’avoir suffisamment d’imagination, c’est la flexibilité que je vous ai promise.

Et après?

Eh bien, maintenant que vous comprenez déjà la structure de MajorDoMo, je vais vous parler de la matrice HDMI, où nous verrons déjà l'interaction des appareils dans MajorDoMo. Bon, enfin, je vais passer à une présentation plus sérieuse, avec du code, des images, des schémas et autres délices... En général, la simple théorie suffit, maintenant il y aura surtout de la pratique.

Donc, matrice HDMI 4x2 4K x 2K 3D.

    Je dirai tout de suite que j'essaie de réduire au maximum les images pour qu'elles puissent être visualisées même sur un smartphone en orientation page, mais cela ne fonctionne pas toujours :) Si vous constatez que le texte des commentaires dépasse les limites, tournez simplement votre smartphone sur le côté (orientation Paysage), les smartphones sont différents.

    En analysant mon blog, je suis tombé sur plusieurs requêtes de recherche, telles que : — Où se trouve le fichier menu.html ou scene.html ? et ainsi de suite.
    Les réponses à ces questions sont trop simples pour leur consacrer un blog séparé. C’est pourquoi j’y répondrai dans les commentaires.
    Par défaut, tous les fichiers formant apparence terminal se trouvent dans le dossier : /templates, mais si un skin tiers est déjà installé, ces fichiers doivent être recherchés dans le dossier /templates_alt. Le dossier /templates_alt a une priorité plus élevée que /templates et tout ce qu'il contient est traité en premier. S'il manque quelque chose, le moteur va dans le dossier /templates pour trouver ce qui manque. Eh bien, probablement sur la base de ce qui précède, il convient de noter que si vous souhaitez mettre votre propre modèle (skin) sur MajorDoMo, vous devez créer un dossier /templates_alt (s'il n'a pas déjà été créé) et effectuer toutes les expériences dans il. Cela vous évitera de perdre tout ce que vous avez reçu par défaut en cas de panne.

    Il y avait aussi cette demande : -MajorDoMo n'accepte pas les données...
    MajorDoMo reçoit des données, en règle générale, en exécutant un script qui reçoit ces données ou les lit, puis le script les place dans les propriétés que vous avez préparées à cet effet, à partir desquelles les données dont vous avez besoin sont ensuite lues et utilisées. Ces scripts sont généralement exécutés ; Ou de l'extérieur, depuis un serveur tiers (enfin, disons, comme dans le cas de l'ESP8266, qui envoie des données et exécute un script données espion), c'est ainsi que nous on a données (d'ailleurs, dans un futur proche, je vous raconterai tout cela plus en détail dans mon article sur la station météo). Ou sur une minuterie pour compter des données de quelque part. Il existe déjà des mécanismes prêts à l'emploi, par exemple, un mécanisme similaire est intégré aux variables Web qui interrogent la page cible à une certaine fréquence. Dans le cas décrit, la fréquence est précisée dans le champ Vérifier l'intervalle, une variable Web spécifique. Par exemple, c’est ainsi que nous obtenons les heures de lever et de coucher du soleil. La variable Web prend la valeur temporelle d'un site météorologique, l'écrit dans une propriété, puis, dans la méthode, nous effectuons un traitement (en d'autres termes, nous vérifions l'heure actuelle avec l'heure du coucher du soleil), à la suite de quoi Alice , exactement au bon moment, nous dit - Le soleil se couche. et, si nécessaire, effectue des actions, ou 🙂 lance le script dont nous avons besoin.
    Ainsi, si MajorDoMo n'accepte pas certaines données, vous devez tout d'abord trouver un script ou une source (par exemple, comme dans le cas d'une variable Web) qui en est responsable et vérifier sa fonctionnalité. Pour cela, tous les mécanismes sont prévus, depuis le lancement élémentaire d'un script, directement depuis ses paramètres, en suivant le lien fourni sur la page des paramètres, et jusqu'à l'analyse des logs, comme par exemple dans les variables web.

    Et enfin, la troisième demande que j'ai vue : -Objets simples MajorDoMo
    Il convient de noter ici que la requête a été construite de manière un peu incorrecte. Bien que objet Cela peut être n'importe quoi, récemment un concept supplémentaire a été introduit dans le système : Appareils simples. Cela a été fait pour faciliter la vie des débutants. Pour être honnête, je ne l’ai pas encore utilisé, car je travaille précisément au niveau de ces mêmes objets. Mais pour guider un petit homme sur le bon chemin : (Simple Devices) pourrait, littéralement, en quelques secondes. Alors n'hésitez pas à vous inscrire et à demander dans les commentaires. En tout cas, je les regarde bien plus souvent que j’analyse les requêtes de recherche.

    Je suis assis, en train d'écrire tranquillement un article sur la bouilloire, mais je suis tenté de regarder les mesures. J'ai abandonné et j'ai décidé d'y jeter un œil. Et je vois une autre requête de recherche : — Structure de la base de données MajorDoMo
    Il est difficile de répondre immédiatement cette question, sans savoir au départ ce que la personne voulait spécifiquement. La structure, au fur et à mesure que le système se remplit, sera différente pour chacun, certains installeront tel ou tel module, telle ou telle application, et certains n'en auront pas besoin... Les tableaux, en conséquence, ont aussi des champs loin d'être standards. Par conséquent, à ce stade, je vais donner ma liste, puis si quelqu'un est intéressé par quelque chose de spécifique, demandez-le et nous examinerons.

    Demande: Comment écrire une valeur à une propriété ?
    Réponse : Dans la plupart des cas, la valeur d'une propriété est écrite automatiquement, mais elle peut également être écrite manuellement. Lisez l'article sur le socket Broadlink SP3 et vous n'aurez plus jamais de questions comme celle-ci.

    Demande: MajorDoMo, température variable web ?
    Réponse : Un article séparé sera probablement consacré aux variables Web pour donner une idée de ce qui, à première vue, est le plus complexe qui existe là-bas, à savoir le filtrage. Pour l’instant, une réponse précise à une question précise.
    Nous prendrons la température actuelle du site Web Forecaster en raison de sa stabilité et de sa constance.
    Créez une variable Web avec Nom: Sinoptique_temp
    DANS Lien écrire: https://sinoptik.com.ru/weather-Volgograd Dans votre cas, nous changeons Volgograd en votre ville.
    DANS Modèle de recherche :

    Objet associé : Cet ordinateur
    Propriété: Sinoptique_temp cette propriété doit être créée dans l'objet This Compuer (lire cet article et l'article sur le socket SP3).
    Intervalle de vérification : 600
    C'est tout, maintenant toutes les 10 minutes, Mzhor lira, à partir du Forecaster, la température actuelle de votre ville et l'écrira dans la propriété Sinoptik_temp, avec laquelle vous pourrez faire ce que vous voulez, l'afficher, l'utiliser dans des scripts, etc. .

    Demande: MajorDoMo, le soleil se couche-t-il ?
    Réponse : Dans MajorDoMo, il existe deux modes, à savoir le mode Nuit et le mode Sombre. Le mode nuit est activé par l'horloge, par défaut de 20h00 à 8h00. Ce mode est très pratique, par exemple pour désactiver les notifications vocales. Le mode Sombre s'allume au coucher du soleil et s'éteint au lever du soleil ; ce mode est pratique, par exemple, pour contrôler l'éclairage public. Les données pour un emplacement spécifique sont obtenues à l'aide de variables Web. Qui sont ensuite stockés dans les propriétés ThisComputer.SunRiseTime et ThisComputer.SunSetTime et traités dans la méthode onNewMinute de la classe Timer.

    Demande: Variables globales MajorDoMo ?
    Réponse : Les fonctions gg (getGlobal) et sg(setGlobal) parlent d'elles-mêmes, mais nos propriétés, du fait qu'elles ont tendance à changer, sont ces mêmes variables globales. Disons que nous avons un certain scénario et que nous devons faire quelque chose avec une propriété, disons, modifier le seuil de température du thermostat. À l'aide de la fonction getGlobal, nous prenons la valeur de la propriété dans notre script et l'écrivons dans une variable locale, soit : $temp_term. Avec cette variable locale dans notre script, nous effectuons déjà les transformations dont nous avons besoin, et enfin écrivons l'état modifié de $temp_term, à l'aide de la fonction setGlobal, dans la propriété. Eh bien, avec la propriété, comme nous le savons déjà, nous pouvons faire ce que nous voulons. Par exemple, affichez sa valeur sur l'écran, envoyez-la à un thermostat physique ou même parlez-la via les haut-parleurs du système... À propos, en parlant de variables globales, il convient de noter les fonctions intégrées du système. Nous devons nous rappeler qu'il existe un certain ensemble de fonctions et de variables qui sont implémentées uniquement pour le système. Vous vous souvenez quand j'ai mentionné que nous travaillons principalement avec PHP, mais qu'il y a aussi des éléments intégrés ? Vous pouvez afficher les fonctions intégrées. Et quand vous regardez, faites attention à l'élément « Gérer les cycles (services) », vous y rencontrerez une variable globale intégrée et comprendrez que la méthodologie est la même partout.

    Demande: Le bloc HTML MajorDoMo utilise la valeur de la variable ?
    Réponse : Par exemple, je fais comme ceci : Extérieur : %ESP8266003b5df7.dhtt1%°C(c'est-à-dire que j'écris le symbole ° depuis le clavier) et puis la mise en page est folle. Le symbole du degré est réglé sur ALT+0176, les chiffres sont tapés sur la partie numérique du clavier (LIEN VERS WIKEPEDIA).
    Certaines personnes font comme ça :
    %KitchenMain.dhtt1%°C et ensuite tu dois mettre C exclusivement en mise en page anglaise. Personnellement, je ne l'ai pas essayé, mais cela a été mentionné : (LIEN VERS FORUM).
    Attention! Si quelqu'un décide de copier et coller : %KitchenMain.dhtt1%°C gardez à l'esprit qu'il n'est pas affiché ici sur le blog comme symbole de diplôme, mais comme &de g; J'ai remplacé le symbole dans le code lettre anglaise e en russe, n'oubliez pas de le changer !
    Et ainsi de suite... Bla, bla, bla : %OBJECT.PROPERTY% bla, bla, bla. Bla, bla, bla dans n'importe quelle langue, même en chinois.
    Si vous avez besoin, par exemple, d'afficher l'humidité, procédez comme suit : %ESP8266003b5df7.dhth1%% le deuxième signe % sera juste un symbole.

    Demande: Pour que le script majordomo s'exécute toutes les heures ?
    Réponse : Allez dans la méthode : OBJECTS/Objects/Timer/onNewMinute et à la toute fin ajoutez :

    Si ($m=="10") (
    runScript("NOM DU SCRIPT");
    }

    N'oubliez pas de cliquer sur le bouton "Mettre à jour"
    Le script sera exécuté toutes les dix minutes de l'heure.

    Demande: MajorDoMo comment définir le chemin vers d'autres pages ?
    Répondre:
    1. Si vous souhaitez que votre page ressemble à un onglet, alors vous devez accéder à : Menu administratif principal/PARAMÈTRES/Pages d'accueil, cliquez sur le bouton "Nouvelle page", Sur le terrain Nom(*) entrez le nom de l'onglet dans la liste Taper choisir URL, dans le champ Lien, saisissez l'adresse de la page. Pour les pages locales, il suffit de préciser le chemin local, par exemple : /Template_alt/page name.html. Si vous avez une page dans son propre dossier et qu'elle contient un fichier d'index, il suffit de spécifier uniquement le dossier, par exemple : /Kinoteatr/

    2. Disons que vous vouliez insérer une sorte de site Internet dans MajorDoMo afin de pouvoir l'utiliser en permanence. C'est très simple. Pour ce faire, vous devez utiliser l'application « Liens envoyés » ( Lis le sur le marché des modules complémentaires).
    Exemple. Vous disposez d'un navigateur au travail. Créer un signet de navigateur avec Titre: Envoyer à MJD et sur le terrain URL nous écrivons:

    javascript:(fonction())(var hôte=" Votre adresse MajorDoMo"; var title=prompt("Titre:", document.title); if (title!="" && title!=null) (location.href="http://"+host+"/popup/app_readit.html ?ajax=1&op=add&url="+encodeURIComponent (location.href)+"&title="+encodeURIComponent(title);))());

    N'OUBLIEZ PAS DE CHANGER : Votre adresse MajorDoMo !!!
    On le met à un endroit visible, par exemple dans la barre de favoris (qui, bien entendu, doit d'abord être affichée).
    Désormais, quelle que soit la page sur laquelle vous vous trouvez, cliquez simplement sur ce signet et la page apparaîtra dans votre MajorDoMo, dans l'onglet Liens. Là (dans l'onglet Liens ouvert) faites attention à la petite icône dans le coin supérieur gauche, en cliquant dessus vous ouvrirez un menu où vous pourrez : Sélectionner une page qui sera affichée en permanence dans le cadre (dans l'onglet), Ajoutez une nouvelle page manuellement (si pour une raison quelconque vous ne souhaitez pas utiliser le signet), et enfin, prenez ce même lien pour créer un signet (Attention ! Si vous prenez un lien à partir de là, faites attention à : host="mycomp" !} mon ordinateur il s'agit d'un lien vers votre MajorDoMo, en règle générale il peut y avoir une IP locale, il faudra la changer soit en IP externe, soit en nom de domaine. En général, je vous recommanderais d'utiliser un nom de domaine, c'est plus pratique à tous égards. Ainsi, par exemple, en ayant un nom de domaine à l'extérieur et en enregistrant son association sur le réseau local, vous n'aurez qu'un seul lien que vous pourrez utiliser partout, c'est très pratique lorsque l'on travaille avec Applications mobiles, Taskeur, etc. il n'est pas nécessaire de changer quelque chose lorsque vous êtes à la maison puis à l'extérieur).

    3. Et enfin, si vous le souhaitez, vous pouvez insérer votre page directement dans la scène. C'est bien, par exemple, si vous avez une certaine page prête à l'emploi avec un groupe de boutons, etc. Vous pouvez consulter les opportunités ici : (LIEN)

    Demande: MajorDoMo exécutant une méthode objet ?
    Réponse : La méthode est appelée avec la ligne :

    callMethod("Object.Method", $params);

    Plus tôt, dans un commentaire sur les variables globales, j'ai écrit sur les fonctions internes et fourni (LIEN), dans la section « Travailler avec des objets », vous trouverez également des méthodes.

    Demande: Comment écrire une valeur d’une propriété d’un objet dans une propriété d’un autre ?
    Réponse : Tout d’abord, il convient de déterminer pourquoi cela est nécessaire. Ceci est nécessaire, par exemple, lorsque vous devez créer Appareil simple , disons un capteur de température, mais physiquement vous disposez d'un appareil complexe, par exemple un module ESP, auquel sont connectés de nombreux capteurs, dont un capteur de température. Mais, du fait que l'ESP n'est pas un appareil simple et que le script pour enregistrer tous ses capteurs est composite (c'est-à-dire que la valeur est écrite dans la propriété en combinant un identifiant en tant qu'objet et, en fait, une propriété. Dans bref, le code est le même et les données sont écrites dans les propriétés des différents ESP), son utilisation directe dans des appareils simples est impossible.
    La façon de procéder?
    1. Créons Appareil simple , capteur de température. En sortie, nous obtiendrons une paire Object.Property, par exemple : Sensor_temp01.value souvenons-nous de lui.
    2. Découvrez le nom du capteur de température de l'ESP qui nous intéresse (disons que nous souhaitons utiliser un capteur de température du BME-280, qui est connecté au premier module ESP que nous avons dans le hall), allez aux propriétés du hall ESP et voyez que nous avons un capteur de température appelé : ESP8256007b5b6d.bmet, rappelons-le.
    3. Créons un script qui écrira chaque minute la valeur de la propriété de température ESP dans la propriété de température d'un appareil simple. Appelons-le : Association de capteurs
    Et donnons-lui le code :

    //Écrit les données de ESP8256007b5b6d.bmet dans Sensor_temp01.value chaque minute
    $templ = getGlobal("ESP8256007b5b6d.bmet");
    setGlobal(("Sensor_temp01.value"),$templ);

    Sauvons notre script !

    4. Et enfin, plaçons le script à exécuter toutes les minutes dans la méthode timer : surNouvelleMinute

    Demande: Indicateurs MajorDoMo ?
    Réponse : De nombreux débutants restent souvent bloqués sur cette question. Oui, en effet, sans une connaissance approfondie de la structure, et en particulier des modèles, les indicateurs ne sont pas si faciles à trouver, mais connaissant l'endroit exact où ils se trouvent, cela ne posera absolument aucun problème. La première chose que je voudrais dire, c'est que les indicateurs font partie du modèle, c'est-à-dire soi-disant Des muselières Web ou (front-end, si vous préférez), est-ce pour cela ? c'est là qu'il faut les chercher. Ainsi, notre muselière Web peut être située à deux endroits. 1. Si vous utilisez un modèle standard, vous devriez probablement le rechercher ici : /www/templates/default.html 2. Si, comme moi, vous avez utilisé un modèle alternatif et en même temps suivi les règles, nobles webmasters, ne faites pas de conneries sur le modèle par défaut (ce que l'auteur donne par défaut), on ne sait jamais, et si vous deviez le refaire davantage magnifiquement. Alors, bien sûr, vous devriez chercher dans un modèle alternatif : /www/templates_alt/default.html. Nous avons choisi le modèle, ouvrez le fichier dans un éditeur de texte : default.html et pour ne pas avoir à vous promener dans le texte lourd à la recherche de ce dont vous avez besoin, cherchez la ligne dans le fichier : Système.IndicatorColor Il s'agit d'une propriété (dans laquelle la valeur est une image) de l'état du système, indicateur numéro un ! Il est toujours présent, en ajoutant à sa ressemblance les propriétés dans lesquelles se déroulent les images, vous obtiendrez autant d'indicateurs nécessaires que vous le souhaitez sur la page principale.

    Mais ce n'est pas tout. Ici, sur ma page (LIEN), mon modèle est présenté comme illustration principale, et si vous regardez attentivement, vous remarquerez que les indicateurs se trouvent non seulement sur le côté droit du modèle principal, mais également dans le menu. . Ce n'est pas un caprice ou une absurdité, car, par défaut, ce que j'utilise dans MajorDroid, vous ne pouvez pas voir la page principale, la page principale il y a le menu (je vais faire une réservation, c'est dans mon cas , car si vous le souhaitez, vous pouvez y afficher la scène par défaut !) Par conséquent, vous pouvez également voir des indicateurs en double dans le menu.
    Où les chercher ? C'est simple, vous devrez les fabriquer vous-même si vous en avez vraiment besoin.
    Alors comment le faites vous?
    Créer un élément de menu avec Titre: État et placez-le tout en haut de votre menu ( Une priorité: 100000 ), Élément parent : naturellement il devrait y avoir RACINE.
    DANS Taper: choisissons Bloc HTML.
    Dans le champ Données :, écrivez le code suivant :

    C'est mon option, vous pouvez le modifier à votre guise ; vous pouvez facilement comprendre quoi, comment et où il se trouve. Et désolé pour l’image, c’est juste que mon système est conçu de telle manière qu’il capte ce code. Vous devrez donc le réécrire à la main. Attention : Liquid_Crystal est une police qui imite une horloge LCD, c'est dans ce style qu'est réalisé mon modèle, si vous voulez la même chose, vous devrez la télécharger, si cela ne vous dérange pas, puis si vous ne le faites pas Si vous ne trouvez pas Liquid_Crystal, le système connectera Arial et l'écrira en haut.
    Et enfin, au point : Période de mise à jour automatique : nous l'écrirons 10 seconde.
    Nous économisons et obtenons ce que nous voulions.

dire($ph,$level)-- dit une phrase (utilise les variables globales $voicemode [à savoir parler] et $commandLine [convertit la réponse en echo utf2win(), sinon juste echo]). $level indique le niveau d'importance de la phrase (en fonction des paramètres actuels du niveau de prononciation minimum, la phrase peut être soit prononcée vocalement, soit simplement enregistrée dans l'historique des messages).

processusCommand($commande)-- envoie une commande texte pour exécution (par exemple, « dites-moi quelle heure il est »). Les commandes elles-mêmes sont configurées à l'aide de la méthode ThisComputer->commandReceived.

getGlobal($nomvar);-- obtenir la valeur d'une propriété globale

setGlobal($varname,$value);-- définition d'une propriété globale

processusLigne($ligne);-- lancer le script de synchronisation

getRandomLine ($ nom de fichier);-- prendre une chaîne aléatoire à partir d'un fichier texte. $filename peut être raccourci, par exemple file1 et le fichier sera alors pris./texts/file1.txt

playSound ($ nom de fichier);-- lecture de fichiers (mp3,wav,etc.). $filename peut être raccourci, par exemple file1, puis le fichier sera pris./sounds/file1.mp3

playMedia($chemin);-- lire de la musique à partir du répertoire $path. Exemple

runScript($id,$data);-- exécute le script avec l'identifiant donné. Le nom peut être utilisé comme identifiant

getLogger($context = null);-- renvoie un objet enregistreur. Exemples d'utilisation d'un enregistreur

Travailler avec des objets

$obj=getObject($nom);-- obtient l'objet nommé $name. vous pouvez travailler avec l'objet résultant en utilisant les méthodes suivantes :
$obj->callMethod("nom_méthode",$params);
$obj->setProperty("property_name",$value);
$obj->getProperty("nom_propriété");

callMethod("Object.Method", $params);-- appelle une méthode d'un objet avec les paramètres donnés (ces derniers sont facultatifs)

$command="Quelle heure est-il"; callMethod("ThisComputer.commandReceived",array("command"=>$command));

cm

$value=getGlobal("Object.Property");-- obtenir la valeur d'une propriété d'objet

gg-- nom alternatif pour la fonction précédente

setGlobal("Object.Property",$value);-- définition de la valeur d'une propriété d'objet

sg-- nom alternatif pour la fonction précédente

$objects=getObjectsByClass("nom_classe");-- renvoie un tableau d'objets de la classe spécifiée sous le nom du formulaire. Un exemple d'itération d'objets dans une boucle et de définition des valeurs de propriété : $objects=getObjectsByClass("class_name"); foreach($objets comme $obj) ( setGlobal($obj["TITLE"]..property_name",1); )

Intervalles de temps

temps()-- renvoie l'heure actuelle au format horodatage.

timeConvert($tm)-- convertit l'heure du format hh:mm au format time() pour la date d'aujourd'hui

heureMaintenant($tm)-- renvoie l'heure sous forme de texte comme "16 heures 40 minutes". Si $tm n'est pas spécifié, renvoie l'heure actuelle. $tm au format heure.

estWeekEnd()-- jour de congé oui/non = 1/0 estJourSemaine()-- jour de la semaine oui/non = 1/0

le tempsEst($tm)-- vérifie si l'heure actuelle correspond à celle transmise au format hh:mm

heureAvant($tm)-- compare l'heure $tm (hh:mm) et l'heure actuelle. Si le courant est inférieur, alors 1 sinon 0

heureAprès($tm)-- compare l'heure $tm (hh:mm) et l'heure actuelle. Si le courant est plus grand, alors 1 sinon 0

tempsEntre ($tm1, $tm2)-- vérifie si l'heure actuelle se situe dans l'intervalle spécifié (chaque hh:mm, et $tm1 peut être supérieur à $tm2, par exemple 23h00 05h00)

reconnaître l'heure ($ texte)-- la fonction essaie d'extraire une heure/date spécifique d'une phrase. Par exemple, $text pourrait être "demain à 9h30" ou "dans 5 minutes".

Lors de l'appel d'une méthode (mais pas d'un script !), les variables suivantes sont disponibles :

$prevExécuter-- heure du dernier appel (au format horodatage)

$prevRunPassed-- combien de secondes se sont écoulées depuis le dernier appel

$ ceci-- Pointeur vers soi. Utilisé dans les méthodes de classe. Par exemple:

$this->setProperty("statut",1); // définit la propriété status sur 1, l'objet pour lequel elle est appelée

Tâches et événements planifiés

AddScheduledJob("title","commandes",$datetime, $expire=60);-- $ expire en quelques secondes

ClearScheduledJob("titre");-- un masque comme "title%" peut être utilisé

SetTimeOut("titre","commandes", $timeout);-- $timeout en secondes (similaire à AddScheduledJob("title","commands",time()+$timeout));

ClearTimeOut("titre");-- analogue à ClearScheduledJob("titre");

timeOutExists("titre");-- renvoie l'identifiant de la tâche planifiée (ou 0 si absente)

registerEvent($eventName, $details="",$expire_in=365);-- enregistrer l'événement $eventName

RegisteredEventTime($eventName);-- renvoie l'heure de la dernière inscription de l'événement $eventName (-1 s'il n'y a pas encore eu un tel événement)

Envoi de mail

SendMail($from, $to, $subject, $body);-- envoie un e-mail à l'adresse spécifiée dans $to

SendMail_html($from, $to, $subject, $body);-- similaire à la fonction précédente, mais le corps de la lettre est supposé être au format HTML

Il y a quelque temps, les activités du partenariat dit à but non lucratif « Association des associations de propriétaires (HCB) et de propriétaires de logements de Vologda » ont attiré l'attention de nos rédacteurs.

Comme le disent les dirigeants de l'Association des propriétaires, les objectifs de la création et des activités du partenariat à but non lucratif « Association des associations de propriétaires (HSB) et des propriétaires de logements de Vologda » sont de former un système de coordination, d'information mutuelle et d'interaction de les propriétaires, ainsi que la représentation et la protection de leurs intérêts auprès des organismes gouvernementaux, des collectivités locales et des tribunaux


Mais en réalité, comme dans la plupart des cas, tout n’est pas si simple.

Selon des données ouvertes, les fondateurs du NP « Association des associations de propriétaires de Vologda (ZHSK) et des propriétaires de logements » sont 2 personnes: Sukhikh Artyom Vladimirovitch et Ivanov Nikolaï Léonidovitch.


L'Association des propriétaires est également impliquée dans la politique, promouvant ses candidats aux élections en dépensant de l'argent.

Ces individus incitent depuis plusieurs années les propriétaires fonciers à passer à l’autogestion de leurs propriétés. L'objectif principal des fondateurs de l'association HOA sont les immeubles d'habitation dans lesquels les propriétaires de biens immobiliers (appartements) rêvent de créer leur propre partenariat.

Dans un premier temps, l'Association HOA offre aux propriétaires une assistance complète pour préparer les documents nécessaires à l'enregistrement d'un HOA. En règle générale, les membres du conseil d'administration de ces HOA sont des personnes éloignées du domaine du logement et des services communaux et de la gestion des immeubles à appartements qui, en raison de leur intérêt matériel, deviennent entièrement contrôlées par l'association HOA.

Le résultat d'une telle coopération est toujours le même : le manque d'indépendance de la HOA dans le choix des entrepreneurs, la réalisation de travaux à des prix gonflés, le retrait des fonds alloués à la réparation et à l'entretien des logements aux organismes contrôlés par l'Association HOA.

Schéma de NP "Association HOA"

Que sait-on de ces organisations ?

1. Société de gestion LLC "Sokol".

Le directeur général et unique fondateur de l'organisation est Bajenov Alexander Nikolaevich. Adresse légale : rue Vologda. Mira, 17 ans. 211. Selon des informations provenant de sources ouvertes, cette adresse est le lieu d'enregistrement de six autres organisations, dont certaines sont en cours de liquidation.

Le représentant de Sokol LLC est Artem Vladimirovich Sukhikh, avec une procuration délivrée pour dix ans, le même A.V. Sukhikh. qui, avec Ivanov, est co-fondateur de l'Association des propriétaires.

En avril 2019, nous avons reçu des informations concernant des plaintes de résidents de la maison n°9 de la rue Lavrov dans la ville de Vologda concernant la saisie illégale de la maison sous la direction de Sokol Management Company LLC.

Plus tôt dans ce immeuble initiative citoyenne a créé une association de propriétaires qui gérait des immeubles d'habitation.

Dès que la société de gestion LLC "Sokol" a commencé à gérer, les propriétaires se sont sentis, comme on dit, pour eux-mêmes. À la suite du lavage de l'échangeur de chaleur, du liquide de refroidissement est entré dans l'eau fournie aux résidents de la maison, ce qui a rendu l'eau verte. La moitié de la maison n’a toujours pas d’eau chaude. Les canalisations du sous-sol fuient constamment. La société de gestion LLC "Sokol" ne prend aucune mesure pour retourner eau chaude dans les appartements des propriétaires et ne prend pas non plus de mesures pour réparer ou remplacer l'échangeur de chaleur. Le nettoyage des parties communes de la maison est de mauvaise qualité, voire parfois pas du tout. La seule chose que la société de gestion Sokol LLC fait en temps opportun et de manière qualitative est de distribuer les reçus de paiement des services dans les boîtes aux lettres, et Artem Sukhikh se rend chez les propriétaires et exige le paiement. Les gens sont indignés qu’on leur demande de payer pour des travaux qui ne sont pas réellement terminés.

En outre, la société de gestion LLC "Sokol" tente de retirer des fonds, soi-disant pour la réparation de l'un des ascenseurs du bâtiment, bien que, sur la base des résultats d'un examen technique, il soit conclu que l'ascenseur est en bon état et ne ne nécessite pas de réparations.

Sur ce moment mauvaise gestion du bâtiment n°9 sur rue. Lavrov, Vologda, confirmé par un rapport d'inspection effectué contre la société de gestion Sokol LLC. Le 28 juin 2019, le Département des services municipaux de l'administration municipale de Vologda a émis un ordre à la société de gestion Sokol LLC d'éliminer les violations des exigences de licence pour la gestion. organisations.

On ne sait pas pourquoi le partenariat « à but non lucratif » de l'association des propriétaires, dont le but est d'aider les résidents à créer une association de propriétaires, agit dans la direction opposée, en déplaçant les maisons de l'association des propriétaires vers des organisations contrôlées, ce qui est Société de gestion Sokol LLC.

Le chef de la société de gestion LLC Sokol est le directeur Bajenov Alexander, contrôlé par Ivanov N. et Sukhikh A.

Il convient de noter que, grâce aux résidents attentionnés, la décision des propriétaires de choisir Sokol Management Company LLC a été déclarée illégale par le tribunal municipal de Vologda et complètement annulée.

2. SARL "SU-35"

Les participants de SU-35 LLC sont Ulyana Pavlovna Borodii et Maxim Alekseevich Dobrelya. Artem entretient des relations commerciales constantes avec ce dernier Sukhikh.

À l'heure actuelle, par décision du tribunal d'arbitrage de la région de Vologda, SU-35 LLC a été déclarée insolvable (en faillite) et une procédure de faillite a été ouverte.

Initialement, le 10 avril 2017 entre Sukhikh A.V. et SU-35 LLC ont conclu un contrat de travail selon lequel Sukhikh a assumé les fonctions de directeur adjoint des affaires juridiques.

Puis, après l'introduction d'une procédure de surveillance concernant SU-35 LLC, Sukhoi, en collaboration avec la direction de Su-35 LLC, A FAIT UNE TENTATIVE DE RETIRER DE L'ARGENT DES COMPTES COURANTS. Pour mettre en œuvre cette tentative, sans le consentement du gestionnaire temporaire, un accord a été conclu entre SU-35 LLC et Sukhoi pour modifier les termes existants du contrat.

En effet, en plus du salaire mensuel préalablement convenu de 30 000 roubles 00 kopecks, en plus des versements spécifiés, pour les mêmes fonctions qui ont été attribués à Sukhikh A.V. contrat de travail, parties une augmentation a été convenue salaires pour 270 500 roublesmensuel. (811 500 roubles pour la période du 28 avril 2018 au 17 juillet 2018)

Afin de donner l'impression que le retrait de fonds est légal, le 20 novembre 2018, A.V. déposé déclaration de sinistre sur le recouvrement des arriérés de salaires de SU-35 LLC d'un montant de 1 082 229 roubles 99 kopecks. Cependant, le tribunal municipal de Vologda a satisfait aux demandes d'A.V. Sukhikh. seulement partiellement, après avoir récupéré auprès de SU-35 LLC une dette d'un montant 70 117 roubles 46 kopecks.

Plus tard, le tribunal d'arbitrage de la région de Vologda a déclaré invalide l'accord visant à modifier les termes existants du contrat de travail. La décision de justice a établi le comportement malhonnête d'A.V. Sukhikh. , exprimé dans la conclusion de l'accord dans les conditions du fait d'insolvabilité (faillite) de SU-35 LLC établies par le tribunal (dans la procédure de contrôle), et l'accord sur les conditions d'augmentation des salaires pour l'exercice des fonctions de travail précédemment affecté à Sukhoi par Contrat de travail, indiquant la présence de signes de nullité de la transaction établie par l'article 10 Code civil RF (une transaction effectuée en contournant la loi dans le but de causer un préjudice)

3. SARL "Metprom"

Le directeur de Metroprom LLC est Artem Vladimirovich Sukhikh. À l'heure actuelle, Metrprom LLC a été liquidée par décision du Service fédéral des impôts. Le registre des personnes morales concernant Metprom LLC contient des informations sur le manque de fiabilité des données sur l'adresse de la personne morale.

Une adresse légale peu fiable est l’un des signes d’une organisation clandestine.

Que sait-on d'autre d'Artyom Vladimirovitch Sukhikh ?


En tant que fondateur et avocat de la NP « HOA Association », Sukhikh fournit des services juridiques aux associations de propriétaires.

Comme nous l'avons appris auprès du HOA à l'adresse Vologda, Tekhnichesky Lane, 56, l'association HOA représentée par A.V. Sukhoikh. un accord a été conclu pour la fourniture de services de recouvrement de créances auprès des propriétaires immobiliers qui devaient de l'argent pour des services de réparation et d'entretien avec locaux non résidentiels. Le coût d'un tel service était estimé à vingt mille roubles. (par rapport au prix du marché, il est 10 fois surévalué), cependant, selon le président de l'Association des propriétaires, les services de recouvrement de créances n'ont pas été fournis pour une raison farfelue par A.V. Sukhikh. Les tentatives pour restituer l'argent ont échoué, puisque le président de l'association HOA, Nikolai Ivanov, a nié de toutes les manières possibles son lien avec Sukhikh, bien qu'en fait le lien soit évident, puisque Sukhikh est co-fondateur de l'association. L'argent n'a jamais été restitué au président.

Nous connaissons également un autre cas de services de mauvaise qualité. services juridiques association de propriétaires.

En décembre 2016, Sukhikh A.V. au nom de la HOA, a déposé une réclamation contre l'un des promoteurs pour récupérer le coût des travaux nécessaires pour éliminer les défauts constatés lors de la construction de la maison. En décembre 2018, le tribunal d'arbitrage de la région de Vologda a rejeté l'intégralité des demandes. Dans sa décision, le tribunal a déclaré ce qui suit :

«Le tribunal a également pris en compte et reconnu comme justifiée la déclaration de tous les défendeurs concernant l'abus de droit du demandeur, qui, sachant qu'au moment du dépôt de la réclamation, le promoteur avait entamé le processus de liquidation, et pendant le procès, le représentant de ce défendeur a immédiatement notifié au tribunal l'acceptation du dossier de faillite de la société, n'a déposé aucune demande d'inscription au registre des créances, n'a pas fait usage de ses droits de créancier dans le cadre de la procédure du défendeur cas de faillite, n'a pas participé à l'assemblée des créanciers, n'a pas exigé la responsabilité subsidiaire des participants de la société, si certains n'ont déclaré aucun motif, c'est-à-dire qu'il a volontairement refusé d'exercer les droits qui lui sont accordés par la loi.

Le résultat d'un tel procès était triste pour le HOA. Croire aux promesses de l'association HOA et espérer les hautes qualifications d'A.V. Sukhoi. En échange de fonds pour éliminer les défauts de construction, la HOA n'a reçu que des frais juridiques sous la forme de frais d'État d'un montant de 43 003 roubles, d'énormes dépenses pour mener un examen de construction, dont le coût dépassait 100 000 roubles, des dépenses pour payer le les services d'un « spécialiste de haut niveau » A.V. Sukhikh. , ainsi qu'une bataille juridique de deux ans avec un résultat prédéterminé. De ce fait, seul le Partenariat à but non lucratif de l'Association des Propriétaires a été enrichi

Refus du HOA, représenté par le représentant de A.V. Sukhikh. , l'exercice de leurs droits suggère une composante de corruption chez le développeur en faillite. En conséquence, les seules victimes sont celles qui vivent dans la maison du promoteur présentant des défauts de construction, lorsque Sukhikh A.V. reçoit de l'argent pour ses services et le promoteur est liquidé avec succès sans rencontrer le moindre obstacle.

Le résultat du travail de l'association HOA est prévisible et très triste. Les propriétaires reçoivent une indépendance imaginaire et un pouvoir imaginaire sur leur propriété, et l'Association des propriétaires et les organisations qu'elle contrôle s'enrichissent aux dépens des propriétaires. La responsabilité de toutes les actions dans cette affaire, en vertu de la législation en vigueur, incombe à la HOA elle-même, et l'association n'assume en aucune manière la responsabilité de ses actions.

À suivre.

J'exprimerai mon avis sur le produit, peut-être que cela sera utile à quelqu'un.
Les spécialistes, principalement les intégrateurs, ne seront probablement pas intéressés par MajorDoMo, tant qu'il n'y aura pas de produit en boîte normal, pas de documentation technique normale, pas de support 7/24, pas de réseau de revendeurs, pas de bonus.

Il est également peu probable que les autoconstructeurs s'y intéressent ; il n'y a pas de différences globales par rapport, par exemple, à OpenHab ou à ioBroker.

Mais pour ceux qui sont sur le point de construire un système de maison intelligente et qui veulent comprendre ce qu’ils veulent vraiment et ce qu’une maison intelligente peut faire, il est probablement logique de bricoler le système pendant un certain temps. Personnellement, j’ai déjà rendu plusieurs dizaines de mes amis accros à MajorDoMo.

Tout se passe de manière banale, le soir les invités viennent faire un barbecue - réservation. Lorsque le crépuscule tombe, MajorDoMo allume automatiquement la lumière de la véranda, pour renforcer l'effet, je donne une commande vocale à l'UD pour allumer la radio ou la musique. J'utilise ma voix pour contrôler le niveau sonore ou passer à une autre station ou piste de radio.

Ensuite, j'amène des invités dans la maison et, toujours avec ma voix, je demande à la maison intelligente de parler d'elle-même. (J'ai configuré ce mode démo). L'UD commence à allumer et éteindre les lumières, indique la météo, allume les téléviseurs, fait le grand écart et une douzaine d'autres frimeurs.

Après avoir répondu à la question, combien ça coûte ? gratuitement. Considérez que le client est mature.

Rien qu'en consacrant quelques heures à ces cours, sans notions de base en programmation, sans comprendre la logique, la structure et d'autres choses, en répétant bêtement toutes les actions de la vidéo, vous pouvez.

Réglez un réveil sur votre ordinateur à l'aide de votre voix et jouez lorsque la musique ou la radio se déclenche
Utilisez votre voix pour contrôler le lecteur multimédia sur votre ordinateur
Organisez la vidéosurveillance à l'aide de n'importe quel smartphone ou tablette
Surveiller les mouvements et la localisation des enfants, par exemple à l'aide du GPS
Contrôlez les stations de radio en ligne sur votre ordinateur avec votre voix
Obtenez une liste de courses intelligente
Écoutez la météo sur votre ordinateur avec votre voix
Posez des questions vocalement et recevez des réponses du wiki
Ajoutez et supprimez des tâches de votre agenda vocalement.
Rappels vocaux.
Recevez les taux de change actuels par voix sur demande
Lire les SMS entrants vocalement
Éteindre l'ordinateur à distance
Surveillez la charge de la batterie sur votre smartphone et recevez des messages lorsque la charge est extrêmement faible
Écoutez les gros titres de l'actualité ou les actualités elles-mêmes et les résumés de films par la voix

Bon sang, j'en ai marre d'écrire, et bien il y en a beaucoup plus...

Et tout cela n'est pas écrit une seule ligne de code (tout le code est posté sous la vidéo)

Depuis un an et demi, de plus en plus d’intégrateurs et de personnes du secteur de la construction frappent à notre porte pour nous demander d’enseigner comment travailler avec des logiciels et « créer une maison intelligente ».
Actuellement, plusieurs dizaines d'intégrateurs (dans toute la CEI) mettent en œuvre des maisons intelligentes sur Majordomo. Nous ne leur payons rien (pas de bonus, pas de remises chez les concessionnaires) - c'est vrai. MAIS leurs clients n’ont pas non plus à payer pour les logiciels. Et avec l'aide de Majordomo, utilisez un équipement plus économique.
Tout cela réduit considérablement le coût final pour les clients

Selon la documentation, nous avons créé une base de connaissances et la mettons à jour tranquillement

Concernant Openhab/ioBroker vs Majordomo - je connais beaucoup de cas où des gars sont passés d'Openhab/ioBroker à nous - pour la même raison : il n'y a pas de différence importante, et il y a beaucoup plus d'utilisateurs russophones, et il y a quelqu'un à qui parler à