Page 20 sur 32

Re: Domotique Piscine

Posté : 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

Code : Tout sélectionner

local moyenne_idx = 87
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 :

Code : Tout sélectionner

UpdateDev(moyenne_idx , 0, val_TEau)

Re: Domotique Piscine

Posté : 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 :

Code : Tout sélectionner

UpdateDev(moyenne_idx , 0, val_TEau)
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

Posté : 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 :

Code : Tout sélectionner

UpdateDev(moyenne_idx , 0, val_TEau)
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 ?

Code : Tout sélectionner

UpdateDev('Non du capteur texte', 0, val_TEau)
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

Posté : 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

UpdateDev(moyenne_idx , 0, val_TEau)

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

Posté : 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&param=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

Posté : 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

Posté : 08 oct. 2019, 20:12
par samourai47
Merci ca a l'air de fonctionner

Re: Domotique Piscine

Posté : 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

Posté : 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

Posté : 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