[LUA] Repartition Consommation HC / HP...

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Repartition Consommation HC / HP...

Message par Keros »

La différence ne serait pas que tu as un graphique en courbe et un graphique en barres (histogramme) ? J'ai l'impression qu'il y a bien les deux utilisations 1 et 2 correspondants à HP et HC.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Re: [LUA] Repartition Consommation HC / HP...

Message par bartras »

Oui mais c'est le cas aussi pour la mesure en wifi.
Et je n'ai pourtant pas changé les paramètres dans le code.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Repartition Consommation HC / HP...

Message par Keros »

Les widgets que tu as créés ont le même type ?
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Re: [LUA] Repartition Consommation HC / HP...

Message par bartras »

Oui il me semble.
J'ai aussi été regardé les informations en JSON de chacun des devices pour voir s'il y avait des écarts.
Mais je n'ai rien trouvé...

Capteur mesure 79 WIFI
json.htm?type=command&param=getdevices&rid=79

Code : Tout sélectionner

{
	"ActTime" : 1705002655,
	"AstrTwilightEnd" : "19:07",
	"AstrTwilightStart" : "06:35",
	"CivTwilightEnd" : "17:54",
	"CivTwilightStart" : "07:48",
	"DayLength" : "09:00",
	"NautTwilightEnd" : "18:31",
	"NautTwilightStart" : "07:11",
	"ServerTime" : "2024-01-11 20:50:55",
	"SunAtSouth" : "12:51",
	"Sunrise" : "08:21",
	"Sunset" : "17:21",
	"app_version" : "2024.1",
	"result" : 
	[
		{
			"AddjMulti" : 1.0,
			"AddjMulti2" : 1.0,
			"AddjValue" : 0.0,
			"AddjValue2" : 0.0,
			"BatteryLevel" : 100,
			"CounterToday" : "3.098 kWh",
			"CustomImage" : 0,
			"Data" : "14114.021 kWh",
			"Description" : "",
			"EnergyMeterMode" : "0",
			"Favorite" : 0,
			"HardwareDisabled" : false,
			"HardwareID" : 3,
			"HardwareName" : "Dummy",
			"HardwareType" : "Dummy (Does nothing, use for virtual switches only)",
			"HardwareTypeVal" : 15,
			"HaveTimeout" : false,
			"ID" : "00082079",
			"LastUpdate" : "2024-01-11 20:50:38",
			"Name" : "Puissance r\u00e9seau",
			"Notifications" : "false",
			"PlanID" : "0",
			"PlanIDs" : 
			[
				0
			],
			"Protected" : false,
			"ShowNotifications" : true,
			"SignalLevel" : 10,
			"SubType" : "kWh",
			"SwitchTypeVal" : 0,
			"Timers" : "false",
			"Type" : "General",
			"TypeImg" : "current",
			"Unit" : 1,
			"Usage" : "168 Watt",
			"Used" : 1,
			"XOffset" : "0",
			"YOffset" : "0",
			"idx" : "79"
		}
	],
	"status" : "OK",
	"title" : "Devices"
}
Capteur mesure 162 ZIGBEE
json.htm?type=command&param=getdevices&rid=162

Code : Tout sélectionner

{
	"ActTime" : 1705002638,
	"AstrTwilightEnd" : "19:07",
	"AstrTwilightStart" : "06:35",
	"CivTwilightEnd" : "17:54",
	"CivTwilightStart" : "07:48",
	"DayLength" : "09:00",
	"NautTwilightEnd" : "18:31",
	"NautTwilightStart" : "07:11",
	"ServerTime" : "2024-01-11 20:50:38",
	"SunAtSouth" : "12:51",
	"Sunrise" : "08:21",
	"Sunset" : "17:21",
	"app_version" : "2024.1",
	"result" : 
	[
		{
			"AddjMulti" : 1.0,
			"AddjMulti2" : 1.0,
			"AddjValue" : 0.0,
			"AddjValue2" : 0.0,
			"BatteryLevel" : 255,
			"CounterToday" : "2.951 kWh",
			"CustomImage" : 0,
			"Data" : "81.310 kWh",
			"Description" : "",
			"EnergyMeterMode" : "0",
			"Favorite" : 1,
			"HardwareDisabled" : false,
			"HardwareID" : 2,
			"HardwareName" : "ZigbeeForDomoticz",
			"HardwareType" : "Zigbee for domoticz plugin (zigpy enabled)",
			"HardwareTypeVal" : 94,
			"HaveTimeout" : false,
			"ID" : "28dba7fffea61169",
			"LastUpdate" : "2024-01-11 20:50:33",
			"Name" : "Puissance zigbee",
			"Notifications" : "true",
			"PlanID" : "0",
			"PlanIDs" : 
			[
				0
			],
			"Protected" : false,
			"ShowNotifications" : true,
			"SignalLevel" : 4,
			"SubType" : "kWh",
			"SwitchTypeVal" : 0,
			"Timers" : "false",
			"Type" : "General",
			"TypeImg" : "current",
			"Unit" : 43,
			"Usage" : "160 Watt",
			"Used" : 1,
			"XOffset" : "0",
			"YOffset" : "0",
			"idx" : "162"
		}
	],
	"status" : "OK",
	"title" : "Devices"
}
Capteur virtuel 81 WIFI
json.htm?type=command&param=getdevices&rid=81

Code : Tout sélectionner

{
	"ActTime" : 1705002658,
	"AstrTwilightEnd" : "19:07",
	"AstrTwilightStart" : "06:35",
	"CivTwilightEnd" : "17:54",
	"CivTwilightStart" : "07:48",
	"DayLength" : "09:00",
	"NautTwilightEnd" : "18:31",
	"NautTwilightStart" : "07:11",
	"ServerTime" : "2024-01-11 20:50:58",
	"SunAtSouth" : "12:51",
	"Sunrise" : "08:21",
	"Sunset" : "17:21",
	"app_version" : "2024.1",
	"result" : 
	[
		{
			"AddjMulti" : 1.0,
			"AddjMulti2" : 1.0,
			"AddjValue" : 0.0,
			"AddjValue2" : 0.0,
			"BatteryLevel" : 255,
			"Counter" : "14114.021",
			"CounterDeliv" : "0.000",
			"CounterDelivToday" : "0.000 kWh",
			"CounterToday" : "3.098 kWh",
			"CustomImage" : 0,
			"Data" : "1669479.0;12444542.0;0;0;168;0",
			"Description" : "",
			"Favorite" : 1,
			"HardwareDisabled" : false,
			"HardwareID" : 3,
			"HardwareName" : "Dummy",
			"HardwareType" : "Dummy (Does nothing, use for virtual switches only)",
			"HardwareTypeVal" : 15,
			"HaveTimeout" : false,
			"ID" : "140A1",
			"LastUpdate" : "2024-01-11 20:50:38",
			"Name" : "Compteur r\u00e9seau",
			"Notifications" : "false",
			"PlanID" : "0",
			"PlanIDs" : 
			[
				0
			],
			"Protected" : false,
			"ShowNotifications" : true,
			"SignalLevel" : "-",
			"SubType" : "Energy",
			"SwitchTypeVal" : 0,
			"Timers" : "false",
			"Type" : "P1 Smart Meter",
			"TypeImg" : "counter",
			"Unit" : 1,
			"Usage" : "168 Watt",
			"UsageDeliv" : "0 Watt",
			"Used" : 1,
			"XOffset" : "0",
			"YOffset" : "0",
			"idx" : "81"
		}
	],
	"status" : "OK",
	"title" : "Devices"
}
Capteur virtuel 167 ZIGBEE
json.htm?type=command&param=getdevices&rid=167

Code : Tout sélectionner

{
	"ActTime" : 1705002646,
	"AstrTwilightEnd" : "19:07",
	"AstrTwilightStart" : "06:35",
	"CivTwilightEnd" : "17:54",
	"CivTwilightStart" : "07:48",
	"DayLength" : "09:00",
	"NautTwilightEnd" : "18:31",
	"NautTwilightStart" : "07:11",
	"ServerTime" : "2024-01-11 20:50:46",
	"SunAtSouth" : "12:51",
	"Sunrise" : "08:21",
	"Sunset" : "17:21",
	"app_version" : "2024.1",
	"result" : 
	[
		{
			"AddjMulti" : 1.0,
			"AddjMulti2" : 1.0,
			"AddjValue" : 0.0,
			"AddjValue2" : 0.0,
			"BatteryLevel" : 255,
			"Counter" : "81.310",
			"CounterDeliv" : "0.000",
			"CounterDelivToday" : "0.000 kWh",
			"CounterToday" : "2.951 kWh",
			"CustomImage" : 0,
			"Data" : "57214.0;24096.0;0;0;159.0;0",
			"Description" : "",
			"Favorite" : 0,
			"HardwareDisabled" : false,
			"HardwareID" : 3,
			"HardwareName" : "Dummy",
			"HardwareType" : "Dummy (Does nothing, use for virtual switches only)",
			"HardwareTypeVal" : 15,
			"HaveTimeout" : false,
			"ID" : "140F8",
			"LastUpdate" : "2024-01-11 20:50:42",
			"Name" : "Compteur zigbee",
			"Notifications" : "false",
			"PlanID" : "0",
			"PlanIDs" : 
			[
				0
			],
			"Protected" : false,
			"ShowNotifications" : true,
			"SignalLevel" : "-",
			"SubType" : "Energy",
			"SwitchTypeVal" : 0,
			"Timers" : "false",
			"Type" : "P1 Smart Meter",
			"TypeImg" : "counter",
			"Unit" : 1,
			"Usage" : "159 Watt",
			"UsageDeliv" : "0 Watt",
			"Used" : 1,
			"XOffset" : "0",
			"YOffset" : "0",
			"idx" : "167"
		}
	],
	"status" : "OK",
	"title" : "Devices"
}
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Re: [LUA] Repartition Consommation HC / HP...

Message par bartras »

Les types et sous types sont identiques dans "Dispositifs":
Capture d'écran 2024-01-11 205837.png
Capture d'écran 2024-01-11 205837.png (90.41 Kio) Consulté 1278 fois
Capture d'écran 2024-01-11 205858.png
Capture d'écran 2024-01-11 205858.png (43.54 Kio) Consulté 1278 fois
La seule chose qui change c'est "Unit".
Mais je ne sais pas ce que ça représente. Une idée?
Dernière modification par Keros le 11 janv. 2024, 21:02, modifié 1 fois.
Raison : Merci d'éditer votre message précédent pour y rajouter l'information complémentaire
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Repartition Consommation HC / HP...

Message par Keros »

Je ne sais pas, désolé.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
zozo
Messages : 4
Inscription : 15 avr. 2023, 19:46

Re: [LUA] Repartition Consommation HC / HP...

Message par zozo »

Bonjour,

J'ai le sript HP/HC avec un seul interrupteur qui pilote le bascule, depuis 2 ans aucun problème, et toujours ok.
Le wattmètre est un OWL180.
Je vais changer pour mettre une pince ampermetrique zigbee car j'ai besoin de connaitre le sens du courant donc idem que le OWL mais avec "-" si il y a injection :
Je viens d'installer des panneaux solaires.

Le problème avec ce script c'est qu'il additionne quelque soit le sens du courant. Ici j'injecte du courant, mais compte comme de la consommation.
Capture d’écran 2024-05-18 à 14.06.20.png
Capture d’écran 2024-05-18 à 14.06.20.png (88.29 Kio) Consulté 1203 fois

Code : Tout sélectionner

function log(p_message)
-- print("[HPHC] " .. p_message)
end
function getdevname4idx(deviceIDX)
 for i, v in pairs(otherdevices_idx) do
   if v == deviceIDX then
     return i
   end
 end
 return 0
end

commandArray = {}
DEBUG = false

local nomCompteurPrincipal = getdevname4idx(3955) --counter a
local idxCompteurIntelligent = 3980
local nomCompteurIntelligent = getdevname4idx(idxCompteurIntelligent)--HPHC
local nomHeureCreuse = getdevname4idx(259) -- Switch Heures Creuses

for deviceName,deviceValue in pairs(devicechanged) do
 if (deviceName==nomCompteurPrincipal) then
   -- On récupère la valeur du compteur unique => consEnergy
   ConsPower, consEnergy = string.match(otherdevices_svalues[nomCompteurPrincipal], "(%d+%.*%d*);(%d+%.*%d*)")
   log(ConsPower.."-"..consEnergy)
   --on somme les compteurs HP et HC => EnergyImport
   --http://www.domoticz.com/wiki/Upload_energy_data_to_PVoutput
   EnergyImportLow, EnergyImportHigh, EnergyExportLow, EnergyExportHigh, PowerImport, PowerExport = otherdevices_svalues[nomCompteurIntelligent]:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")
  
   -- For the first time, the value are not initilize in the smart counter, we set 0 by default.
   if(EnergyImportLow == nil)then
     EnergyImportLow =0
     EnergyImportHigh =0
     EnergyExportLow = 0
     EnergyExportHigh =0
     PowerImport = 0
     PowerExport = 0
   end
   -- Lors du changement de pile du compteur unique, consEnergy a été réinitialisé, faussant complémtement les valeurs de EnergyImportLow/EnergyImportHigh
    if((EnergyImportLow+0) < 0 or (EnergyImportHigh+0) < 0) then
        EnergyImportLow =0
        EnergyImportHigh =0
    log("  ----- Reinit de EnergyImportLow/EnergyImportHigh");
   end

   EnergyImport = EnergyImportLow + EnergyImportHigh
   EnergyExport = EnergyExportLow + EnergyExportHigh

   log(" ----- PowerImport = " .. PowerImport .. " W");
   log(" ----- EnergyImportLow = " .. EnergyImportLow .. " Wh");
   log(" ----- EnergyImportHigh = " .. EnergyImportHigh .. " Wh");
   log(" ----- EnergyImport = " .. EnergyImport .. " Wh");
   log(" ----- PowerExport = " .. PowerExport .. " W");
   log(" ----- EnergyExportLow = " .. EnergyExportLow .. " Wh");
   log(" ----- EnergyExportHigh = " .. EnergyExportHigh .. " Wh");
   log(" ----- EnergyExport = " .. EnergyExport .. " Wh");
 
   --On calcule le delta avec le compteur actuel
   delta = consEnergy - EnergyImport
 
   --On ajoute le delta sur le bon tarif
   if (otherdevices[nomHeureCreuse] == 'Off') then
     EnergyImportLow = EnergyImportLow + delta
   else
     EnergyImportHigh = EnergyImportHigh + delta
   end
 
   --On modifie le compteur intelligent
   commandArray['UpdateDevice'] = idxCompteurIntelligent.."|0|"..EnergyImportLow..";"..EnergyImportHigh..";0;0;"..ConsPower..";0"

 end
end

return commandArray
Quelqu'un peut m'aider à retrouver le graphe suivant en HP/HC ?
Capture d’écran 2024-05-18 à 14.09.47.png
Capture d’écran 2024-05-18 à 14.09.47.png (437.24 Kio) Consulté 1203 fois
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Repartition Consommation HC / HP...

Message par Keros »

Tu es sûr d'avoir mis le bon type de widget pour ton graphique ? Avec la téléinfo, j'ai un widget de type P1 smart meter energy pour les widgets avec la répartition HP/HC.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
zozo
Messages : 4
Inscription : 15 avr. 2023, 19:46

Re: [LUA] Repartition Consommation HC / HP...

Message par zozo »

En fait c'est le bon c'est l'image qui n'est pas bonne pour rectifier l'illustration :
La source en entrée du script est :
Capture d’écran 2024-05-18 à 14.09.47.png
Capture d’écran 2024-05-18 à 14.09.47.png (437.24 Kio) Consulté 1176 fois
En sortie du script j'ai :
Capture d’écran 2024-05-19 à 09.57.33.png
Capture d’écran 2024-05-19 à 09.57.33.png (448.89 Kio) Consulté 1176 fois
Le fonctionnement est correct avec la bascule HP / HC au bon moment avec le device interrupteur ON/OFF.

Cependant, quand mon device idx 3955 (Consommation maison (crurent a) Général, kWh) a une valeur négative en entrée, mon script ressort une valeur absolue positive incohérent avec une notion de production électrique.

=> J'aurais besoin d'aide pour modifier ce script qui fonctionne en modifiant ou ajoutant une ou des lignes de code pour que quand le device d'entrée idx 3955 ("nomCompteurPrincipal" dans le script") prend une valeur négative, que le produit de sortie sur le device idx 3980 ("idxCompteurIntelligent") sort une valeur égale à "0".

Pourquoi "0" ? Car je renvoi du courant sur le réseau gratuitement, du coup cela ne fausse pas les compteur kWh qui serait décrémental en négatif avec un cout / kwa lui aussi à la baisse.

Merci pour votre aide pour modifier ce code :D
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Re: [LUA] Repartition Consommation HC / HP...

Message par bartras »

J'avais le même problème que toi.

J'ai choisi une solution que je trouve encore meilleur.
En fait le P1 smartmeter gère aussi l'injection de courant (production solaire) et le rendu est même plutôt esthétique !
graphe
graphe
Capture d'écran 2024-05-27 204424.png (456.35 Kio) Consulté 1099 fois
J'ai beaucoup galéré pour écrire le script mais voilà ce que ça donne :

Code : Tout sélectionner

function log(p_message)
    --print("[3_Compteur_réseau_bis] " .. p_message)
end

function getdevname4idx(deviceIDX)
    for i, v in pairs(otherdevices_idx) do
        if v == deviceIDX then
            return i
        end
    end
    return 0
end

function processEnergyValues(ConsumptionName)
    -- On récupère les valeurs du compteur Solaire
    local EnergyImportLow, EnergyImportHigh, EnergyExportLow, EnergyExportHigh, PowerImport, PowerExport = otherdevices_svalues[ConsumptionName]:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")
    
    -- For the first time, the value are not initialized in the smart counter, we set 0 by default.
    if EnergyImportLow == nil then
        EnergyImportLow = 0
        EnergyImportHigh = 0
        EnergyExportLow = 0
        EnergyExportHigh = 0
        PowerImport = 0
        PowerExport = 0
    end
    
    -- Lors du changement de pile du compteur unique, consEnergy a été réinitialisé, faussant complétement les valeurs de EnergyImportLow/EnergyImportHigh
    if tonumber(EnergyImportLow) < 0 or tonumber(EnergyImportHigh) < 0 then
        EnergyImportLow = 0
        EnergyImportHigh = 0
        log("  ----- Reinit de EnergyImportLow/EnergyImportHigh")
    end
    
    log(ConsumptionName .." ----- PowerImport = " .. PowerImport .. " W");
    log(ConsumptionName .." ----- EnergyImportLow = " .. EnergyImportLow .. " Wh");
    log(ConsumptionName .." ----- EnergyImportHigh = " .. EnergyImportHigh .. " Wh");
    --log(ConsumptionName .." ----- EnergyImport = " .. EnergyImport .. " Wh");
    log(ConsumptionName .." ----- PowerExport = " .. PowerExport .. " W");
    log(ConsumptionName .." ----- EnergyExportLow = " .. EnergyExportLow .. " Wh");
    log(ConsumptionName .." ----- EnergyExportHigh = " .. EnergyExportHigh .. " Wh");
    --log(ConsumptionName .." ----- EnergyExport = " .. EnergyExport .. " Wh");
    
    return EnergyImportLow, EnergyImportHigh, EnergyExportLow, EnergyExportHigh, PowerImport, PowerExport
end

commandArray = {}

    local idxSolaire = 1609
    local idxConsommation = 240 
    local idxReseau = 1774
    local idxHeureCreuse = 92
    
    local nomSolaire = getdevname4idx(idxSolaire)
    local nomConsommation = getdevname4idx(idxConsommation)
    local nomReseau = getdevname4idx(idxReseau)
    local nomHeureCreuse = getdevname4idx(idxHeureCreuse)
    
    --local nomCompteurPrincipal = getdevname4idx(240)
    --local idxCompteurIntelligent = 242
    --local nomCompteurIntelligent = getdevname4idx(idxCompteurIntelligent)--HPHC
    
    for deviceName,deviceValue in pairs(devicechanged) do
        
        if (deviceName==nomConsommation) then
            
            -- On récupère la valeur du compteur unique => consEnergy
            --ConsPower, ConsEnergy = string.match(otherdevices_svalues[nomConsommation], "(%d+%.*%d*);(%d+%.*%d*)")
            --log(ConsPower.."-"..consEnergy)
            
            -- On récupère les valeurs du compteur Réseau
            REnergyImportLow, REnergyImportHigh, REnergyExportLow, REnergyExportHigh, RPowerImport, RPowerExport = processEnergyValues(nomReseau)
                        
            -- On récupère les valeurs du compteur Consommation
            CPower, CEnergy = string.match(otherdevices_svalues[nomConsommation], "(%d+%.*%d*);(%d+%.*%d*)")
            --CEnergyImportLow, CEnergyImportHigh, CEnergyExportLow, CEnergyExportHigh, CPowerImport, CPowerExport = processEnergyValues(nomConsommation)
            
            -- On récupère les valeurs du compteur Solaire
            SPower, SEnergy = string.match(otherdevices_svalues[nomSolaire], "(%d+%.*%d*);(%d+%.*%d*)")
            --SEnergyImportLow, SEnergyImportHigh, SEnergyExportLow, SEnergyExportHigh, SPowerImport, SPowerExport = processEnergyValues(nomSolaire)
            
            
            REnergyImport = REnergyImportLow + REnergyImportHigh
            REnergyExport = REnergyExportLow + REnergyExportHigh
            --CEnergyImport = CEnergyImportLow + CEnergyImportHigh
            --SEnergyExport = SEnergyExportLow + SEnergyExportHigh
            

            
            --On calcule le delta avec le compteur actuel
            deltaImport = CEnergy - REnergyImport
            deltaExport = SEnergy - REnergyExport
            
            --On ajoute le delta sur le bon tarif
            if (otherdevices[nomHeureCreuse] == 'Off') then
                REnergyImportLow = REnergyImportLow + deltaImport
            else
                REnergyImportHigh = REnergyImportHigh + deltaImport
            end
            
            REnergyExportLow = REnergyExportLow + deltaExport
            
            
            deltaPower = CPower - SPower
            
            --On ajoute le delta sur le bon tarif
            if deltaPower >= 0 then
                RPower = RPowerImport + deltaPower
            else
                RPower = RPowerExport + deltaPower
            end
            
            REnergyImportLow=tostring(math.floor(REnergyImportLow))
            REnergyImportHigh=tostring(math.floor(REnergyImportHigh))
            REnergyExportLow=tostring(math.floor(REnergyExportLow))
            RPower=tostring(math.floor(RPower))
            
            --On modifie le compteur intelligent
            commandArray['UpdateDevice'] = idxReseau.."|0|"..REnergyImportLow..";"..REnergyImportHigh..";"..REnergyExportLow..";0;"..CPower..";"..SPower

        end
    end

return commandArray
Répondre