Une IA en C++ sur windows pour chapeauter Domoticz

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
DanSteph
Messages : 4
Inscription : 29 juil. 2017, 01:38

Une IA en C++ sur windows pour chapeauter Domoticz

Message par DanSteph »

Bonjour tous,

Ça intéressera éventuellement ceux qui touchent un peu de C++, j'explique plus bas comment faire.

J'ai implémenté très rapidement une "IA" qui s'interface avec Domoticz et S.A.R.A.H en C++.
C'est très réactif (instantané), regroupe tous les "scripts" en un seul endroit et permet tous les callbacks timers ou event en plus d'avoir le TTS intégré (l'IA peut parler).

Ça tourne dans une console win32 et ça mange 0% processeur sur un mini PC fanless windows 10.
Image

-Reçoit ou envoie des commandes à Domoticz ou S.A.R.A.H via UN seul script dans chacun.
-Instantané, robuste, simple : en cas de problème on ne perd aucun script et ils sont tous au même endroit: dans votre projet C++.
-TTS avec la voix courante de Windows (Hélène sur Windows 10 dans mon cas)

Comment faire:

Je suis parti du code de Miniweb, un serveur http minimal : https://sourceforge.net/projects/miniweb/
J'ai fait quelques modifs pour que les appels entrants donnent sur un callback à nous et pour intégrer wunderground (météo) et le TTS. Ensuite c'est trivial, toute la puissance du C++ est à disposition: thread, timers, callbacks, c'est la liberté totale. Vous traitez les commandes entrantes et sortantes comme vous voulez.

Si quelqu'un est intéressé, je peux donner des bouts de code pour démarrer et aider un peu. (Mais pas niveau débutant, si vous ne savez pas comment compiler le Miniweb ou utiliser visual studio par exemple)

A++

Dan
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Une IA en C++ sur windows pour chapeauter Domoticz

Message par deennoo »

Merci du taf ! Peux tu nous faire une vidéo explicative stp ?

Peut être devrais tu contacter le dev de Domoticz avec ton boulot, cela pourrait l'interesser pour intégration
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
DanSteph
Messages : 4
Inscription : 29 juil. 2017, 01:38

Re: Une IA en C++ sur windows pour chapeauter Domoticz

Message par DanSteph »

Je peux éventuellement faire mieux: une fois le miniweb copié de sourceforge, je fournis ici un zip avec les fichiers modifiés à décompresser dans le projet miniweb et deux trois autres "template" vide pour démarrer "clé en main" de manière propre.

En bref le zip contiendrait par exemple:

-IaSetting.cpp qui contient le réglage IP/ports, déclaration des matériels (pour polling matos au démarrage) etc. etc.
-IaDeviceCallback.cpp qui contient le callback de réception des ordres (avec un exemple pratique)
-IaTimersCallback.cpp qui contient un callback 1 seconde qui peut appeler pleins d'autres (Je poll chaque pièce toutes les dix minutes perso)
-IaCommon.cpp qui contient les fonctions helper pour allumer/éteindre les divers dispositifs, écrire à l'écran, faire parler le TTS, jouer des wavs etc etc.

Dans ce style:

Code : Tout sélectionner

         
 	BOOL GetDeviceState(char *cName);
	void SetDeviceState(char *cName,BOOL bState);
	void SwitchDeviceState(char *cName);
	int GetDeviceLuxValue(char *cName);
	float GetDeviceTempValue(char *cName);
	int GetPlanteHumidityValue(char *cName);
	void SetRGBLightState(char *cName,BOOL bState,DWORD dwColor);
	void SetDimmerLightState(char *cName,int iValue);
	void SpeakTTSLocal(char *c);
	void PlayWave(char*cname);
+Les deux scripts Lua et Json à placer dans domoticz et s.a.r.a.h.

Par contre je suis débordé de boulot (prog indépendant), donc je ne me lance qui s'il y a des demandes et c'est du "dirty job", fonctionnel, clair mais très vite fait. En partant de ça, un type modérément débrouillard en C++ devrait s'en sortir parfaitement. C'est trivial on déclare/manipule quelques variables et on envoie/réceptionne des commandes http.

A++

Dan
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Une IA en C++ sur windows pour chapeauter Domoticz

Message par vil1driver »

Merci mais en gros ça fait quoi ?

C'est une sorte de client yana ou jarvis ?
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
DanSteph
Messages : 4
Inscription : 29 juil. 2017, 01:38

Re: Une IA en C++ sur windows pour chapeauter Domoticz

Message par DanSteph »

C'est ça en gros, mais pas que.

Premièrement il remplace tous les scripts utilisateurs de pilotage des matériels, l'avantage étant la rapidité (C++ compilé), la clarté (tous regroupés dans un seul source/projet), et la sécurité/robustesse (indépendant des installations).

Ensuite il peux très facilement s'interfacer avec n'importe quoi (domoticz, sarah mais aussi d'autres), il accepte les requêtes http et peut en envoyer, peut jouer une voix TTS, des sons, des médias et faire tout ce qu'un programme Windows permet. (Je vais pas exemple rajouter l'upload ftp pour la partie "vacance-simulation de présence, rapports sur une page web externe")

Avec toutes ces ressources et la puissance et la souplesse du C++ à disposition, il devient facile de faire une "IA" qui chapeaute tout les autres programmes et qui n'est pas explosée avec des bouts de scripts en langage interprété un peu partout. L'écriture est aussi facilitée par la présences des outils puissants Visual (debug pas-à-pas, etc).

--------------
Principe de fonctionnement avec DomoticZ:

Le programme à évidemment accès à l'API Json https://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s

Sinon, UN seul script lua dans DomoticZ fait que toutes les notifications de matériels dont le nom commence par exemple par un "*" sont envoyées au programme C++: Switch, lampes, températures, le programme peut donc y réagir et envoyer lui-même des commandes json en retour.

Exemples:
-Le senseur couloir détecte une présence, le programme allume une lumière dimmée différemment en fonction de l'heure, du jour, etc etc.
-La porte d'entrée est ouverte depuis 5mn, le programme "parle" en donnant des avertissements toutes les minutes et finalement allume toutes les RGB de la maison au rouge clignotant si aucune réaction et finalement envoie un mail ou un sms.
-Le programme détecte les senseurs de chambre->couloir->bureau et peut donc savoir qui arrive dans le bureau, ma femme a ainsi un bienvenu parlé, la météo du jour et un conseil d'habillement pour la journée. (Et lui souhaite joyeux anniversaire en musique et fait clignoter les RGB en prime :) )
-Une fois par jour il teste toutes les batteries de tous les matériels et la voix m’avertit si un remplacement est nécessaire.
-Coté sécurité il peut redémarrer SARAH ou DomoticZ voir le PC en cas de non-réponse.

Principe de fonctionnement avec SARAH:

Les commandes vocales choisies sont relayée depuis UN plug-in vers le programme, on peut y réagir avec tous les outils à disposition comme plus haut. (A noter que le programme a accès à l'API "speech recognition" comme SARAH, il pourrait donc se passer de SARAH en théorie, mais je n'ai pas le temps d'implémenter ça)

Exemple: "donne-moi la météo", "allume la lampe du salon" "ferme les volets du salon", "ajoute du lait à la liste des courses", etc. etc.

-----------------------------------------
Ce que je peut fournir ici c'est un template de démarrage avec les fonctions essentielles, parce qu'une telle IA est forcément très personnalisée.
Même vite fait j'ai l'habitude de fournir des trucs "carré" cf mon site: http://orbiter.dansteph.com/forum/index ... e=download

A++

Dan
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Une IA en C++ sur windows pour chapeauter Domoticz

Message par vil1driver »

D'accord..

je ne suis pas client, déjà parce que je n'ai pas de windows à dédier à cela..

(Bon je sais, tu vas me dire que ça doit également pouvoir se faire sous linux... )

et puis je ne suis pas à l'aise avec le c++, lua me convient très bien et niveau rapidité également, on parle de 100èm de seconde tout de même..

en fait, tous les exemples que tu donnes, je le fait déjà en lua ;)

mais joli travail, qui servira certainement à quelques amateurs de c++


Encore merci pour le partage
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
DanSteph
Messages : 4
Inscription : 29 juil. 2017, 01:38

Re: Une IA en C++ sur windows pour chapeauter Domoticz

Message par DanSteph »

Si on est déjà bien avancé et peu confortable en C++, aucun avantage à tout changer effectivement. ;)
jisse
Messages : 8
Inscription : 28 sept. 2019, 09:23

Re: Une IA en C++ sur windows pour chapeauter Domoticz

Message par jisse »

je déterre le topic...mais moi je suis super impressionné par le taff...mon message ne fera pas avancer le chmilblik..mais respect pour le boulot
cordialement
Répondre