Domotique Piscine

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
denis_brasseur
Messages : 559
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Domotique Piscine

Message 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)
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

samourai47
Messages : 125
Enregistré le : 04 déc. 2018, 19:44

Re: Domotique Piscine

Message 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.....

denis_brasseur
Messages : 559
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Domotique Piscine

Message 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")
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

samourai47
Messages : 125
Enregistré le : 04 déc. 2018, 19:44

Re: Domotique Piscine

Message 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

samourai47
Messages : 125
Enregistré le : 04 déc. 2018, 19:44

Re: Domotique Piscine

Message 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?

boum
Messages : 116
Enregistré le : 18 janv. 2019, 11:34
Localisation : France

Re: Domotique Piscine

Message 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}
Domoticz v4.10717 sur Pi³ / Z-Wave / RFXCom

samourai47
Messages : 125
Enregistré le : 04 déc. 2018, 19:44

Re: Domotique Piscine

Message par samourai47 »

Merci ca a l'air de fonctionner

ALP40
Messages : 10
Enregistré le : 25 oct. 2019, 13:32
Localisation : Landes (40)

Re: Domotique Piscine

Message 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

aleph0
Messages : 307
Enregistré le : 27 avr. 2016, 08:06
Localisation : Hérault (34)

Re: Domotique Piscine

Message 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 ;)

ALP40
Messages : 10
Enregistré le : 25 oct. 2019, 13:32
Localisation : Landes (40)

Re: Domotique Piscine

Message 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

Répondre