Page 2 sur 4
Re: probleme conso virtuel
Publié : 16 janv. 2016, 13:33
par AlexElectro
@vil1driver
Oui c'est ce que j'ai créé comme compteur.
Re: probleme conso virtuel
Publié : 16 janv. 2016, 13:47
par vil1driver
ah..
fais un script juste avec ceci
Code : Tout sélectionner
commandArray = {}
print('conso: '..otherdevices_svalues['Conso Evrard'])
return commandArray
que dit le log ?
Re: probleme conso virtuel
Publié : 16 janv. 2016, 14:57
par AlexElectro
j'ai une erreur:
Code : Tout sélectionner
Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_test.lua:2: attempt to concatenate field 'Conso Evrard' (a nil value)
Re: probleme conso virtuel
Publié : 16 janv. 2016, 14:59
par alexbi
Reboot domoticz pour voir
Re: probleme conso virtuel
Publié : 16 janv. 2016, 15:28
par vil1driver
ceci dans la barre d'adresse de ton navigateur donne quoi ?
(remplace IP par l'ip de ton domoticz)
http://IP:8080/json.htm?type=devices&rid=50
Re: probleme conso virtuel
Publié : 16 janv. 2016, 16:58
par AlexElectro
Ca avance!! Depuis le reboot, il n'y a plus l'erreur.
j'ai ça dans le log:
Code : Tout sélectionner
2016-01-16 16:55:00.188 LUA: Conso Evrard nulle
2016-01-16 16:55:00.191 EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_conso.lua
2016-01-16 16:55:00.210 LUA: conso: 0;83.333333333335
le lien de @vil1driver donne:
Code : Tout sélectionner
{
"ActTime" : 1452959614,
"ServerTime" : "2016-01-16 16:53:34",
"Sunrise" : "08:24",
"Sunset" : "17:11",
"result" : [
{
"AddjMulti" : 1.0,
"AddjMulti2" : 1.0,
"AddjValue" : 0.0,
"AddjValue2" : 0.0,
"BatteryLevel" : 255,
"CounterToday" : "0.083 kWh",
"CustomImage" : 0,
"Data" : "0.083 kWh",
"Description" : "",
"Favorite" : 0,
"HardwareID" : 9,
"HardwareName" : "Matériel virtuel",
"HardwareType" : "Dummy (Does nothing, use for virtual switches only)",
"HardwareTypeVal" : 15,
"HaveTimeout" : false,
"ID" : "00082049",
"LastUpdate" : "2016-01-16 16:53:00",
"Name" : "Conso Evrard",
"Notifications" : "false",
"PlanID" : "0",
"PlanIDs" : [ 0 ],
"Protected" : false,
"ShowNotifications" : true,
"SignalLevel" : "-",
"SubType" : "kWh",
"SwitchTypeVal" : 0,
"Timers" : "false",
"Type" : "General",
"TypeImg" : "current",
"Unit" : 1,
"Usage" : "0.0 Watt",
"Used" : 1,
"XOffset" : "0",
"YOffset" : "0",
"idx" : "50"
}
],
"status" : "OK",
"title" : "Devices"
Par contre je m'interroge:
Si j'ai bien compris, le script time s'exécute toute les minutes. Donc il envoi dans le compteur la valeur 'energy1'. Mais je ne comprend pas comment cette valeur est calculée.
Que signifie ces lignes:
Code : Tout sélectionner
npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
energy1 = tonumber(energy1) + (puissance1 / 60)
npower1 = tonumber(npower1)
Re: probleme conso virtuel
Publié : 16 janv. 2016, 17:11
par vil1driver
le code met dans les variables le contenu de ton compteur
npower1 = puissance actuelle = 0
energy1 = puissance cumulée = 83.333333333335
puis on ajoute au cumule ce que tu as consommé dans la minute
et on renvoie le tout
Re: probleme conso virtuel
Publié : 16 janv. 2016, 17:20
par AlexElectro
ok . Je te remercie pour ta patience et tes explications.
Mais je vais t'embéter encore un peu. Pourrais tu me dire ce que fait la commande 'string.match', car je ne trouve pas de doc sur internet
et que veulent dire les "(%d+%.*%d*);(%d+%.*%d*)" qui suivent ?
Re: probleme conso virtuel
Publié : 16 janv. 2016, 17:25
par vil1driver
cette commande
string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
sépare la chaine otherdevices_svalues[conso1] (0;83.333333333335) avec comme séparateur le ;
(%d+%.*%d*) est l'expression à chercher, en gos, tout et n'importe quoi

(pas exacte mais suffisamment explicite

)
tu retrouveras cette commande dans beaucoup de scripts qui travaillent avec des périphériques contenants plusieurs infos, comme les sondes de température/humidité/baromètre par exemple..
Code : Tout sélectionner
temp, hum, baro = string.match(otherdevices_svalues['meteo'], "(%d+%.*%d*);(%d+%.*%d*);(%d+%.*%d*)")
j'ai découvert lua il y a environs 18mois maintenant, en même temps que domoticz en fait, donc je n'ai pas toutes les explications, mais je comprends le principe. j'ai toujours cherché à comprendre à fin de modifier et créer mes scripts et avec google sous le coude on fini par piger à quoi sert telle ou telle commande et ses variantes..
et puis ici on parle d'un code que j'ai écris (extrait de mon script de chauffage) alors ce n'est pas trop dure de t'en parler

Re: probleme conso virtuel
Publié : 16 janv. 2016, 19:14
par AlexElectro
Merci de ces explications. J'essaye aussi de comprendre le code pour pouvoir le mettre à ma sauce. Le problème avec LUA c'est que tout est en Anglais et comme je ne suis ppas trop bilingue.... c'est pas facile.
J'ai trouvé ça:
string.match (s, pattern [, init])
Looks for the first match of pattern in the string s. If it finds one, then match returns the captures from the pattern; otherwise it returns nil. If pattern specifies no captures, then the whole match is returned. A third, optional numerical argument init specifies where to start the search; its default value is 1 and can be negative.
et aussi ça sur les paramètres:
%d: represents all digits.
.: (a dot) represents all characters.
source:
http://www.lua.org/manual/5.1/manual.html
Ca confirme ce que tu disais, string.match va chercher et séparer les deux valeurs de la sonde pour les enregistrer dans les variables energy1 et npower1.
je me demande aussi à quoi sert la variable npower dans cette partie du script:
Code : Tout sélectionner
npower1, energy1 = string.match(otherdevices_svalues[conso1], "(%d+%.*%d*);(%d+%.*%d*)")
energy1 = tonumber(energy1) + (puissance1 / 60)
npower1 = tonumber(npower1)
commandArray[1]={['UpdateDevice'] = conso_id1 .. '|0|' .. puissance1 .. ';' .. energy1}
print('Conso Evrard envoyée')
puisque dans le commande.array, on envoi dans le compteur la valeur des variables puissance1 et energy1. On ne semble pas utiliser npower1?