Script LUA Charge VE

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
marcus_54
Messages : 150
Enregistré le : 28 févr. 2018, 12:15

Script LUA Charge VE

Message par marcus_54 »

Bonjour,

Je suis vraiment nul en programmation.... je n'arrive pas à faire tourner ce petit script :

La variable psolaire a deux champs celui qui m'intéresse est dans l'exemple ci-dessous 2228

Code : Tout sélectionner

722	2020-05-25 09:51:01	Solaire Production	2228 ;6543000.0	0/2228 ;6543000.0

Code : Tout sélectionner

-- Marc  - 2020
-- Ce script contrôle la charge de la voiture en fonction de la production solaire

--------------------------------
------ Variables à éditer ------
--------------------------------
local seuil = 2300  -- seuil de déclenchement de la charge
local controle = 894  --inter charge on off
local psolaire = 722 --Valeur de la production solaire format  puissance/total
local Charge = 654 --Nom de l interrupteur charge on/off  
--------------------------------
-- Fin des variables à éditer --
--------------------------------

commandArray = {}
-- d'exécution de ce script.
if (devicechanged[psolaire]) then
	local solaire = devicechanged[string.format('%s_solaire', psolaire)] --puissance solaire produite
    --On n'agit que si le "controle" est actif
    if (otherdevices[contrôle]=='On') then
        print('-- Gestion charge ACTIF --')

    	if (solaire > (seuil) ) then
            print('Mise en charge de la voiture')
            commandArray[Charge]='On'

	    elseif (solaire < (seuil)) then
	        print('Erret charge voiture')
            commandArray[Charge]='Off'

	    end
    end
end
return commandArray
Pouvez-vous me dire ce qui est faux

Merci d'avance
Domoticz 2020.2
Domoticz Maitre RPI 3B+ : RFlink DIY 433; Téléinfo ;Commande volets; Commande PAC ; 4 DS18B20 ;Capteur compteur eau, NanoLeaf.
Domoticz Esclave RPI 1B+ : Capteur 4 DS18B20; 3 Capteurs I2C

Neutrino
Messages : 1548
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)
Contact :

Re: Script LUA Charge VE

Message par Neutrino »

Bonjour,

Peut-être un truc comme ça

Code : Tout sélectionner

	
local solaire,truc,truc = devicechanged['svalues']:match("([^;]+);([^;]+);([^;]+)"):gsub(' ','') --puissance solaire produite
Tu as quoi comme erreur sinon ?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?

vil1driver
Messages : 5624
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Script LUA Charge VE

Message par vil1driver »

Salut,

Ta variable psolaire à un format anormal.
C'est venu d'un script maison ?
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien

marcus_54
Messages : 150
Enregistré le : 28 févr. 2018, 12:15

Re: Script LUA Charge VE

Message par marcus_54 »

Bonjour

J'ai essayé deux trois truc sans succès,

La variable psolaire vient d'un script lua que papoo m'avait fait pour récupérer la puissance et le total de la puissance produite.

Cette variable est mise à jour toutes les 5 minutes

Pour l'erreur j'ai ceci :

Code : Tout sélectionner

 Error: EventSystem: in controle_CH: [string "--------------------------------..."]:14: attempt to index a nil value (global 'devicechanged')
la ligne 14 est

Code : Tout sélectionner

if (devicechanged[psolaire]) then
j'ai cette erreur quand je mets trigger "all"
sinon en trigger sur "Device" je n'ai pas d'erreur, mais rien
Domoticz 2020.2
Domoticz Maitre RPI 3B+ : RFlink DIY 433; Téléinfo ;Commande volets; Commande PAC ; 4 DS18B20 ;Capteur compteur eau, NanoLeaf.
Domoticz Esclave RPI 1B+ : Capteur 4 DS18B20; 3 Capteurs I2C

vil1driver
Messages : 5624
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Script LUA Charge VE

Message par vil1driver »

Tu vas devoir retravailler le script de Papoo car ta variable est pas facile à utiliser en l'état.

C'est une variable pas un device donc script de type VARIABLE
Et usage de
uservariablechanged['ma variable'] pour détecter la maj
Et uservariables['ma variable'] pour la lire
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien

marcus_54
Messages : 150
Enregistré le : 28 févr. 2018, 12:15

Re: Script LUA Charge VE

Message par marcus_54 »

Bonsoir,

En faite non, ce n'est pas une variable, mais un capteur virtuel (désolé pour cette confusion) :?

Code : Tout sélectionner

local CmdIdx=1
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_temp.."|0|"..tempOnduleur}
                CmdIdx=CmdIdx+1
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_tension.."|0|"..tensionOnduleur}
                CmdIdx=CmdIdx+1                
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_puissance.."|0|"..Puissance..";"..EnergieTotale}
Si c'est mieux, je peux créer un capteur virtuel "psolaire" et ajouter :

Code : Tout sélectionner

    CmdIdx=CmdIdx+1
    commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_psolaire.."|0|"..Puissance}
Edite :

Plus de soleil pour tester ce soir Psolaire = 0W ;)

Code : Tout sélectionner

--------------------------------
------ Variables à éditer ------
--------------------------------
local seuil = 1500  -- seuil de déclenchement de la charge
local controle = 894  --inter charge on off
local Psolaire = 895 --Valeur de la production solaire format  puissance/total
local Charge = 654 --Nom de l interrupteur allumer/éteindre charge = 885
--------------------------------
-- Fin des variables à éditer --
--------------------------------

commandArray = {}
if (devicechanged[Psolaire]) then
    print("Puissance solaire = "..Psolaire)
    if (otherdevices[controle]=='On') then
        print('-- Gestion charge ACTIF --')

    	if (Psolaire > (seuil) ) then
            print('Mise en charge de la voiture')
            commandArray[Charge]='On'

	    elseif (Psolaire < (seuil)) then
	        print('Arret charge voiture')
            commandArray[Charge]='Off'

	    end
    end
end
return commandArray
Domoticz 2020.2
Domoticz Maitre RPI 3B+ : RFlink DIY 433; Téléinfo ;Commande volets; Commande PAC ; 4 DS18B20 ;Capteur compteur eau, NanoLeaf.
Domoticz Esclave RPI 1B+ : Capteur 4 DS18B20; 3 Capteurs I2C

marcus_54
Messages : 150
Enregistré le : 28 févr. 2018, 12:15

Re: Script LUA Charge VE

Message par marcus_54 »

Bonjour,

Rien ne fonctionne, c'est désespérant :(

Dans le script qui me donne Psolaire, j'ai ajouté

Code : Tout sélectionner

Isolaire=(Puissance/tensionOnduleur)
ou

Code : Tout sélectionner

Isolaire=(Puissance/230)
La valeur d'intensité Isolaire est égale à la puissance comme si 230=1

J'ai retenté le programme en Bloky
Image
dans le log j'ai : >1000 ou <1000 donne le même résultat :shock: :?

Code : Tout sélectionner

 2020-05-27 08:45:17.238 Status: User: Admin initiated a switch command (894/atester_inter/On)
2020-05-27 08:45:17.431 Status: Controle charge solaire
2020-05-27 08:45:17.431 Status: Controle charge VE ON
2020-05-27 08:45:17.431 Status: 1271
2020-05-27 08:45:17.431 Status: Controle charge VE OFF
2020-05-27 08:45:17.432 Status: 1271 
Domoticz 2020.2
Domoticz Maitre RPI 3B+ : RFlink DIY 433; Téléinfo ;Commande volets; Commande PAC ; 4 DS18B20 ;Capteur compteur eau, NanoLeaf.
Domoticz Esclave RPI 1B+ : Capteur 4 DS18B20; 3 Capteurs I2C

marcus_54
Messages : 150
Enregistré le : 28 févr. 2018, 12:15

Re: Script LUA Charge VE

Message par marcus_54 »

Bonjour,

j'ai un peu avancé et ça commence à fonctionner. :)

Je n'ai pas réussit à faite fonctionner avec trigger device avec ['Psolaire']
du coup j'ai mise un trigger time avec toutes les minutes.

Code : Tout sélectionner

--local debugging = true

    local seuil = 1500  -- seuil de declenchement de la charge
    local controle = otherdevices['atester_inter']  --inter charge on off
    local Puissance_solaire = tonumber(otherdevices['Psolaire'])
    local Charge = "Veranda guirlande Dio1" --Nom de l interrupteur allumer/?teindre charge = 885
    -----------------------
commandArray = {}
time=os.date("*t")
if (((time.min-1) % 2) == 0) then-- export des données toutes les 1 minutes en commençant par xx:01
    print("Puissance solaire = "..Puissance_solaire)
    if (controle=='On') then
        print('-- Gestion charge ACTIF --')
    	if (Puissance_solaire > seuil ) then
            print('Mise en charge de la voiture')
            commandArray[Charge]="On"
	    elseif (Puissance_solaire < seuil) then
	        print('Arret charge voiture')
            commandArray[Charge]="Off"
	    end
    elseif (controle=='Off') then
        print('-- Gestion charge INACTIF Arret charge voiture--')
        commandArray[Charge]="Off"
    end
end
return commandArray
Domoticz 2020.2
Domoticz Maitre RPI 3B+ : RFlink DIY 433; Téléinfo ;Commande volets; Commande PAC ; 4 DS18B20 ;Capteur compteur eau, NanoLeaf.
Domoticz Esclave RPI 1B+ : Capteur 4 DS18B20; 3 Capteurs I2C

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

Re: Script LUA Charge VE

Message par denis_brasseur »

marcus_54 a écrit :
26 mai 2020, 21:08

Code : Tout sélectionner

--------------------------------
------ Variables à éditer ------
--------------------------------
local seuil = 1500  -- seuil de déclenchement de la charge
local controle = 894  --inter charge on off
local Psolaire = 895 --Valeur de la production solaire format  puissance/total
local Charge = 654 --Nom de l interrupteur allumer/éteindre charge = 885
--------------------------------
-- Fin des variables à éditer --
--------------------------------

commandArray = {}
if (devicechanged[Psolaire]) then
    print("Puissance solaire = "..Psolaire)
    if (otherdevices[controle]=='On') then
        print('-- Gestion charge ACTIF --')

    	if (Psolaire > (seuil) ) then
            print('Mise en charge de la voiture')
            commandArray[Charge]='On'

	    elseif (Psolaire < (seuil)) then
	        print('Arret charge voiture')
            commandArray[Charge]='Off'

	    end
    end
end
return commandArray

Code : Tout sélectionner

local controle = 894  --inter charge on off
if (otherdevices[controle]=='On') then
otherdevices[controle] ne fonctionne pas avec l'idx, mais avec le nom du device.
Idem pour devicechanged[Psolaire], équivalent dans ton code à devicechanged[895].

Essaie avec le nom des devices, et pas leur idx.
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"

marcus_54
Messages : 150
Enregistré le : 28 févr. 2018, 12:15

Re: Script LUA Charge VE

Message par marcus_54 »

Oui tout à fait c'est ce que j'ai découvert :)

Code : Tout sélectionner

 local controle = otherdevices['atester_inter']
 local Puissance_solaire = tonumber(otherdevices['Psolaire'])
il ne me reste plus que le problème du "trigger sur device"
Je n'ai pas réussit à faite fonctionner avec trigger device avec ['Psolaire']
du coup j'ai mise un trigger time avec toutes les minutes.
Domoticz 2020.2
Domoticz Maitre RPI 3B+ : RFlink DIY 433; Téléinfo ;Commande volets; Commande PAC ; 4 DS18B20 ;Capteur compteur eau, NanoLeaf.
Domoticz Esclave RPI 1B+ : Capteur 4 DS18B20; 3 Capteurs I2C

Répondre