Page 20 sur 35
Re: Domotique Piscine
Publié : 05 oct. 2019, 21:30
par denis_brasseur
samourai47 a écrit : 05 oct. 2019, 19:40
Alors j'ai créé un nouveau dummy capteru TXT qui porte le numéro 87
Dans le haut du script j'ai rajouté
local moyenne_idx = "87"
Il te faut écrire
sans les quotes.
Cette syntaxe est suffisante, pas besoin de tonumber :
Code : Tout sélectionner
commandArray[#commandArray+1] = {['UpdateDevice'] = moyenne_idx..'|0|'..val_TEau}
Tu as une fonction UpdateDev(device, nvalue, svalues) dans ton code, tu peux également utiliser ceci pour la mise à jour de ton device en lieu et place de la commande précédente :
Re: Domotique Piscine
Publié : 05 oct. 2019, 23:43
par samourai47
Il te faut écrire
code]local moyenne_idx = 87[/code]sans les quotes.
C'est fait. merci
Cette syntaxe est suffisante, pas besoin de tonumber :
Code : Tout sélectionner
commandArray[#commandArray+1] = {['UpdateDevice'] = moyenne_idx..'|0|'..val_TEau}
Comme avant ca ne change rien. Capteur imperturbable et pas d'erreur
Tu as une fonction UpdateDev(device, nvalue, svalues) dans ton code, tu peux également utiliser ceci pour la mise à jour de ton device en lieu et place de la commande précédente :
Avec cette ligne j'ai un msg d'erreur qui me renvoie en ligne 105...
Code : Tout sélectionner
2019-10-05 23:35:00.611 Error: EventSystem: in Filtration: [string "--[[ Script de gestion de la piscine..."]:105: attempt to concatenate field '?' (a nil value)
C'est quand meme extraordinaire cette histoire.....
Re: Domotique Piscine
Publié : 06 oct. 2019, 07:40
par denis_brasseur
samourai47 a écrit : 05 oct. 2019, 23:43
Tu as une fonction UpdateDev(device, nvalue, svalues) dans ton code, tu peux également utiliser ceci pour la mise à jour de ton device en lieu et place de la commande précédente :
Avec cette ligne j'ai un msg d'erreur qui me renvoie en ligne 105...
Code : Tout sélectionner
2019-10-05 23:35:00.611 Error: EventSystem: in Filtration: [string "--[[ Script de gestion de la piscine..."]:105: attempt to concatenate field '?' (a nil value)
C'est quand meme extraordinaire cette histoire.....
Ta fonction UpdateDev attend le nom du capteur, et non pas l'idx.
Essai ceci ?
Où 'Non du capteur texte' est le nom de ton capteur T° moyenne de l'eau.
AUtre chose curieuse dans ton code, probablement sans rapport avec ton anomalie d'affichage :
Code : Tout sélectionner
print("Script Piscine : Calcul de la filtration")
val_TEau=os.capture('sqlite3 '..dbPath..' "select temp_avg from temperature_calendar where devicerowid='..otherdevices_idx[dev_TEau]..' order by date desc limit 1"')
val_TEau=round(val_TEau,1)
val_TEau=tonumber(otherdevices_svalues[dev_TEau])
Tu affectes à val_TEau la valeur issue d'une requete SQL
Tu fais ensuite un arrondi (round)
Et tu affectes ensuite à val_TEau la valeur du device dev_TEau ("T° Piscine IN")
Re: Domotique Piscine
Publié : 06 oct. 2019, 09:56
par samourai47
Tu as une fonction UpdateDev(device, nvalue, svalues) dans ton code, tu peux également utiliser ceci pour la mise à jour de ton device en lieu et place de la commande précédente :
Code : Tout sélectionner
Essai ceci ?[/quote]
[code]UpdateDev('Non du capteur texte', 0, val_TEau)
Ca fonctionne, Ouf merci
AUtre chose curieuse dans ton code, probablement sans rapport avec ton anomalie d'affichage :
Code : Tout sélectionner
print("Script Piscine : Calcul de la filtration")
val_TEau=os.capture('sqlite3 '..dbPath..' "select temp_avg from temperature_calendar where devicerowid='..otherdevices_idx[dev_TEau]..' order by date desc limit 1"')
val_TEau=round(val_TEau,1)
val_TEau=tonumber(otherdevices_svalues[dev_TEau])
Tu affectes à val_TEau la valeur issue d'une requete SQL
Tu fais ensuite un arrondi (round)
Et tu affectes ensuite à val_TEau la valeur du device dev_TEau ("T° Piscine IN")
Alors la ca depasse mes compétences... C'est dans la version originale de aleph0, puis ca disparait dans certaines version.
J'ai supprimé la ligne ca fonctionne sans
Merci pour le coup de main
Re: Domotique Piscine
Publié : 08 oct. 2019, 17:15
par samourai47
Bonjour
Le script ronronne, tout va bien, Ouf
Du coup je souhaite ecrire dans le capteur txt virtuel sur 2 lignes ces données
Code : Tout sélectionner
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[tps_Fl]..'|0|'..'Début: '..HDebFilt..';'..' Fin: '..HFinFilt..';'..'%0A'..' Durée: '..Flh}
EN json je sais faire;;;
On rajoute le caractère utf8 : %0A qui correspond au saut de ligne. PAr exemple
Code : Tout sélectionner
curl -s "http://IP:port/json.htm?type=command¶m=udevice&idx=IDX&svalue=test%0Atest"
qui donne dans le capteur
test
test
MAis je n'y arrive pas a parti de cette base en LUA
Une idée?
Re: Domotique Piscine
Publié : 08 oct. 2019, 18:27
par boum
Normalement \n devrait marcher :
Code : Tout sélectionner
commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[tps_Fl]..'|0|'..'Début: '..HDebFilt..'; Fin: '..HFinFilt..';\n Durée: '..Flh}
Re: Domotique Piscine
Publié : 08 oct. 2019, 20:12
par samourai47
Merci ca a l'air de fonctionner
Re: Domotique Piscine
Publié : 14 nov. 2019, 20:44
par ALP40
Bonsoir
j'utilise le script de la page 16 et j'ai l"erreur suivante das le log :
2019-11-14 20:15:55.784 (Temperature Jardin) Temp + Humidity + Baro (Temp. Jardin)
2019-11-14 20:16:00.294 Status: LUA: Script Piscine : Gestion de la filtration
2019-11-14 20:16:00.295 Status: LUA: device => -Temp. Piscine-svalues dev_TEau => -20.7-
2019-11-14 20:16:00.295 Error: EventSystem: in Filtration: [string "--[[ Script de gestion de la piscine..."]:215: attempt to compare number with nil
2019-11-14 20:16:25.871 (Temperature Jardin) Temp + Humidity + Baro (Temp. Jardin)
la ligne en cause : if (val_TEau >= 12) then
print("Script Piscine : Gestion de la filtration")
PpeDuree=tonumber(uservariables[var_PPDuree])
if (otherdevices[dev_ModeFl] ~= "Manuel") and (otherdevices[dev_ModeFl] ~= "Off") then
val_TEau=tonumber(otherdevices_svalues[dev_Teau])
val_PpeFl=otherdevices[dev_PpeFl]
print('device => -'..dev_TEau.. '-svalues dev_TEau => -'..otherdevices_svalues[dev_TEau]..'-')
if (val_TEau >= 12) then
-- La témpérature d'eau est >=12°C : on utilise la temporisation
MinDuJour=60*time.hour+time.min
PpeStart=tonumber(string.sub(uservariables[var_PPStart],1,2))*60+tonumber(string.sub(uservariables[var_PPStart],4,5))
J"aurais besoin d'aide .... je ne comprend pas pourquoi cela ne fonctionne pas. Dans domoticz.db deux variables sont utilisés ;
sqlite> select * from UserVariables;
3|PPStart|4|00:00|2019-11-09 21:59:39
4|PPDuree|0|0|2019-11-09 21:59:52
Merci d'avance
Re: Domotique Piscine
Publié : 14 nov. 2019, 20:51
par aleph0
dans la ligne val_TEau=tonumber(otherdevices_svalues[dev_Teau]), dev_Teau a un e minuscule alors que dans le print, où ça marche, dev_TEau a un E majuscule

Re: Domotique Piscine
Publié : 14 nov. 2019, 21:10
par ALP40
Bonsoir aleph0 et merci pour cette réponse plus que très rapide
C'est corrigé et cela génère une autre erreur
2019-11-14 21:01:00.407 Status: LUA: Script Piscine : Gestion de la filtration
2019-11-14 21:01:00.408 Status: LUA: device => -Temp. Piscine-svalues dev_TEau => -20.9-
2019-11-14 21:01:00.408 Error: EventSystem: in Filtration: [string "--[[ Script de gestion de la piscine..."]:219: bad argument #1 to 'sub' (string expected, got nil)
dans la ligne suivant ;
PpeStart=tonumber(string.sub(uservariables[var_PPStart],1,2))*60+tonumber(string.sub(uservariables[var_PPStart],4,5))
Le script de la page 16 est-il correct ?
Merci d'avance