[LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par lost »

Le pb peut a mon sens se situer a 2 niveaux:

Cache... et là le serveur http de domoticz gère globalement et se fout même des directives qu'on peut indiquer dans une page custom. Pas trouvé de solution propre a ce pb, peut-être plus vaste/global.

Vu que c'est un script qui contrôle, cela peut aussi venir de l'event system de domoticz qui fait le scheduling: Par exemple la MAJ de compteurs d'énergie virtuels direct de Lua peut d'expérience poser des pb que l'on n'a pas avec la même action via l'api http/json et cette action directe peut elle même moins mal fonctionner si réalisée via un 'OpenURL' avec une commande "postée" classiquement à l'event system via le commandArray (=> va faire re-trigger immédiatement le script attaché au matos si de type device, ce qui ne sera pas voulu).

Si la commande HTTP/JSON est préparée au préalable dans une chaine cmd, par exemple, substituer l'OpenURL (ici commentée) par un appel à la commande curl (on peut faire un check du OK dans le JSON retourné sans même le parser précisément si on se fout du reste du résultat, ce qui est fait ici):

Code : Tout sélectionner

        -- OpenURL (being async) may trigger multiple events if base HW retriggers before API call is processed => use curl.
        -- table.insert (commandArray, { ['OpenURL'] = cmd } )

        config = assert(io.popen('curl --retry 1 --connect-timeout 1 -m 3 \"'..cmd..'\"'))
        result = config:read('*all')
        -- Returned JSON format : {"status" : "OK","title" : "Update Device"}
        config:close()

        if not string.find(tostring(result), "OK") then
            print('ERROR : '..cmd)
            print('ERROR : updateNum/useHttpApi returned '..tostring(result))
        end
Avec les timeout/temps global limite alloué à la commande curl et 1 seul retry, l'action étant ici faite dans le script directement et son résultat attendu/vérifié, il sera impossible de se retrouver avec un truc qui dépasse 10s en Lua et pose pb.
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par knasson »

Je n'ai ps touché au switch_icons.txt, j'appelle juste les icônes ajoutés dans Icônes personnalisées (en les comptant à partir de 100 : 101 pour la première, 102 etc ...).

@Keros tu comprends que si les icones sont doublées dans la liste déroulante il va y avoir un problème de numérotation en partant de la fenêtre des icones personnalisées. Selon moi la numérotation se fait a partir la liste déroulante.
switch_list.tx

Code : Tout sélectionner

JOURLight;Light/Switch;A Lamp or Switch
WallSocket;Wall Socket;Power Wall Socket
TV;Television;Television Screen
Harddisk;Hard disk;Hard disk drive
Printer;Printer;Printer
Amplifier;Amplifier;Device that controls audio
Computer;Computer Laptop;Personal Computer System
Fan;Fan;Airflow Producer
Speaker;Speaker;Audio Speaker
Generic;Generic;Generic On/Off switch
Fireplace;Fireplace;Fireplace
Water;Water;Water
Media;Media Player;Multi Media player
Alarm;Alarm;Alarm
ChristmasTree;Christmas Tree;Christmas Tree
Heating;Heating;Heating device
Cooling;Cooling;Cooling device
ComputerPC;Computer PC;Personal Computer System
Phone;Phone;Mobile Phone
Sun;Sun;Sun
Rain;Rain;Rain
clock;Clock;Chronological device
Irrigation;Irrigation;Irrigation Zone
Pluie3;Pluie3;Parapluie
PluvioMetre;PluvioMetre;pluviometre
MD_EDF-TEMPO-BLEU;JOURBLEU; tempoBleu
MD_EDF-TEMPO-BLANC;JOURBLANC; tempoBlanc
MD_EDF-TEMPO-ROUGE;JOURROUGE; tempoRouge
La j'ai 28 icones dans la switch_list.txt et 26 dans la fenêtre donc la numérotation n'est pas forcement la même. D'autre part dans quel ordre doit on les compter (horizontalement de gauche a droite ou verticalement de haut en bas ).
J'en ai compté 54 dans la liste déroulante (il y a ceux natifs de domoticz en plus des perso mais aussi les doublons...)

Bref je suis perdu...apparemment celles qui sont a la fois dans les icones perso de domoticsz et dans la switch_list.txt seraient doublées? dans la liste déroulante....
Pièces jointes
liste deroulante Icones.png
liste deroulante Icones.png (218.88 Kio) Consulté 2316 fois
icones_perso.png
icones_perso.png (284.47 Kio) Consulté 2316 fois
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par Keros »

Je ne connais pas ce fichier switch_icons.txt et je ne sais pas comment il fonctionne. Mais, à mon avis, ton problème de doublon provient de ce fichier. Tu peux retrouver la version de ce fichier avant que tu ne le modifies ?

Normalement, pour appeler ton icône personnalisée Heater, tu dois faire un item.seticon(102). C'est la deuxième icône personnalisée et on rajoute 100 pour être dans la liste des personnalisées.
Pour Garragedoor, ce serait 104. Sunscreen 106, etc.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par knasson »

OK je prends note ...Pour les explications sur l'usage du fichier switch_icons.txt qui se trouve dans le repertoire /domoticz/www je te propose de suivre le lien; https://easydomoticz.com/ajoutez-vos-pr ... -domoticz/.
Il n'est dit nulle part qu'il y a un risque de doublons, mais c'est tout a fait ce qui semble se passer pour ce qui me concerne.
Je vais investiguer..
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par Keros »

Je pense que ta réponse est dans le wiki :
Editing icon description file

!! ONLY NEEDED WHEN UPLOADING DIRECTLY IN domoticz/www/icons FOLDER !!
Je pense qu'en mettant une icône via le WebUI puis manuellement, tu te retrouves avec des doublons.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par knasson »

OUi Keros, tu as raison et en plus j'ai fait des tests qui le prouvent...
Mais pour la numérotation des icones j'ai adopté un truc infaillible ou il n'y a pas besoin de compter. C'est l'edition de la table custom image dans sqlite3.
sqlite3.png
sqlite3.png (158.78 Kio) Consulté 2282 fois
Finalement je suis arrivé a mes fins grâce aux scripts de Mathias.
Ca donne ca ....j'ai mes 2 icones couleur du jour et couleur J+1 (qui se met a jour vers 20h et qui est gris entre temps)
Domaison.png
Domaison.png (2.32 Mio) Consulté 2282 fois
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par Keros »

Le comptage des customs icônes est une solution simple.

Tu peux aussi les compter avec cette commande :

Code : Tout sélectionner

sudo sqlite3 -header DomoticZ.db " select id+100 id ,name from customimages"
Tu pourrais nous partager ton icône grise ? Je m'en suis fait une aussi, mais je suis très loin d'avoir des talents en graphisme :roll:

Tu as pu résoudre ton problème de rafraîchissement ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par knasson »

oui pour sqlite3 la commande en ligne c'est plus pratique et ca évite d'installer phplightadmin.php.
tout aussi efficace.
pour le rafraichissement en fait j'ai constaté qu'il y a un petit temps de réponse entre l'appui sur le bouton du selecteur et l'apparition de la bonne icone. donc je n'appuie plus a toute allure sur les boutons et ca a l'air de marcher.
l'icone grise a été déjà partagée par Mathias. Je la joints pour plus de facilité
MD_EDF-TEMPO-GRIS (1).zip
(8.5 Kio) Téléchargé 119 fois
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par Keros »

Merci, j'étais passé à côté de celle-là ;)
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Script pour connaitre la couleur du jour pour Tempo d'EDF et script pour la couleur Tempo du lendemain

Message par Keros »

Bonjour,

Je viens de m'apercevoir que j'avais des soucis pour récupérer les infos de jours restants à partir de l'API https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO" : les nombres de jours restants changent en fonction des appels que je passe.

J'ai essayé avec les types de commandes domoticz.openURL et domoticz.executeShellCommand et le résultat est le même :

Code : Tout sélectionner

        domoticz.openURL({
            url = 'http://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO',
            method = 'GET',
	    headers = {["User-Agent"]= "Wget/1.20.3 (linux-gnu)",["Content-Type"]="application/json"},
            callback = tempo-restant
        })

Code : Tout sélectionner

        domoticz.executeShellCommand({
            command = 'curl "https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO"',
            callback = tempo-restant,
            timeout = 9,
        })
Aujourd'hui, quand je mets cet appel dans un navigateur, j'obtiens :
{"PARAM_NB_J_BLANC":19,"PARAM_NB_J_ROUGE":9,"PARAM_NB_J_BLEU":181}
Mais avec les scripts, mon widget reste à 24 blancs et 9 rouges :roll:


J'ai pensé à un problème de cache. J'ai trouvé que la commande curl pouvait s'exécuter sans cache :

Code : Tout sélectionner

command = 'curl -H "Cache-Control: no-cache, no-store" "https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO"'
Résultat identique...


J'ai testé la commande Curl depuis le terminal et voici le résultat des essais :
:~ $ curl "https://particulier.edf.fr/services/res ... erte=TEMPO"
{"PARAM_NB_J_BLANC":19,"PARAM_NB_J_ROUGE":9,"PARAM_NB_J_BLEU":181}
:~ $ curl -H 'Cache-Control: no-cache, no-store' "https://particulier.edf.fr/services/res ... erte=TEMPO"
{"PARAM_NB_J_BLANC":19,"PARAM_NB_J_ROUGE":9,"PARAM_NB_J_BLEU":181}
~ $ curl -H 'Cache-Control: no-cache, no-store' "https://particulier.edf.fr/services/res ... erte=TEMPO"
{"PARAM_NB_J_BLANC":20,"PARAM_NB_J_ROUGE":9,"PARAM_NB_J_BLEU":183}
:~ $ curl -H 'Cache-Control: no-cache, no-store' "https://particulier.edf.fr/services/res ... erte=TEMPO"
{"PARAM_NB_J_BLANC":20,"PARAM_NB_J_ROUGE":9,"PARAM_NB_J_BLEU":183}
:~ $ curl -H 'Cache-Control: no-cache, no-store' "https://particulier.edf.fr/services/res ... erte=TEMPO"
{"PARAM_NB_J_BLANC":24,"PARAM_NB_J_ROUGE":9,"PARAM_NB_J_BLEU":184}

Cela ne vient donc pas de DomoticZ.

J'ai lancé la commande Curl sur un autre PC et pareil : les résultats sont différents (que ce soit avec le nocache ou pas). Pourtant, dans un navigateur, les résultats sont toujours les mêmes : {"PARAM_NB_J_BLANC":19,"PARAM_NB_J_ROUGE":9,"PARAM_NB_J_BLEU":181}

Votre nombre de jours restants est bien correct chez vous ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Répondre