Recherche scipt

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
banditos
Messages : 106
Enregistré le : 30 nov. 2016, 09:55

Recherche scipt

Message par banditos » 20 août 2019, 23:21

Bonjour,
je suis à la recherche d'un petit scrip qui permet de copier la valeur d'une sonde de T° pour l'écrire dans une sonde de T° virtuelle, pour éviter les grosses manipes suite aux changements de piles des sondes orégon.

Merci
Raspberry pi 3/Rasbian-Jessie/Domoticz/RFXtrx433 USB 433.92MHz/SSD 32gb

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


balajol
Messages : 667
Enregistré le : 13 nov. 2015, 18:54
Localisation : 62

Re: Recherche scipt

Message par balajol » 20 août 2019, 23:50

Bonsoir,
Tu dois Pouvoir t'inspirer de ceci:

Code : Tout sélectionner

--Ce sript récupère la T° d'un dispositif TEMP/HUM pour renségner un dummy T°     Utiliser ce script si les sondes se transforment en T° H°
--993 est le numero idx du dispositif virtuel Affichant la Temperature Seule:    "T°-Ballon_ECS_Chaudiere"    ;     1002 celui de "Temp_Retour_Radiateurs"

function arrondir(num, dec)
      if num == 0 then
        return 0
      else
         local mult = 10^(dec or 0)
         return math.floor(num * mult + 0.5) / mult
      end
  end


commandArray = {}
        if (devicechanged['T°-Ballon_ECS_Chaudiere-50L']) then
            
            resultat = arrondir(tostring(otherdevices_temperature['T°-Ballon_ECS_Chaudiere-50L']),1)
            
             commandArray['UpdateDevice'] = 993 .. '|0|'.. resultat
             end
             
             if (devicechanged['Temp_Retour_Radiateurs-']) then
        resultat2 = arrondir(tostring(otherdevices_temperature['Temp_Retour_Radiateurs-']),1)
        commandArray['UpdateDevice'] = 1002 .. '|0|'.. resultat2
    end
    
    if (devicechanged['Sonde-1-Univ-1-Bas-Ballon-1000L']) then
            
            resultat3 = arrondir(tostring(otherdevices_temperature['Sonde-1-Univ-1-Bas-Ballon-1000L']),1)
            
             commandArray['UpdateDevice'] = 1311 .. '|0|'.. resultat3--    1311	DUMMY Virtuel	1456F	1	Sonde_1_Bas_Stock
         end
         if (devicechanged['Sonde-2-Univ-1-Ballon-1000L']) then
            
            resultat4 = arrondir(tostring(otherdevices_temperature['Sonde-2-Univ-1-Ballon-1000L']),1)
            
             commandArray['UpdateDevice'] = 1312 .. '|0|'.. resultat4--   1312	DUMMY Virtuel	14570	1	Sonde_2_Stock
         end
         if (devicechanged['Sonde-3-Univ-1-Ballon-1000L']) then
            
            resultat5 = arrondir(tostring(otherdevices_temperature['Sonde-3-Univ-1-Ballon-1000L']),1)
            
             commandArray['UpdateDevice'] = 1313 .. '|0|'.. resultat5--    1313	DUMMY Virtuel	14571	1	Sonde_3_Stock
         end
         if (devicechanged['Sonde-4-Univ-1-H-Bal.1000L']) then
            
            resultat6 = arrondir(tostring(otherdevices_temperature['Sonde-4-Univ-1-H-Bal.1000L']),1)
            
             commandArray['UpdateDevice'] = 1314 .. '|0|'.. resultat6--     1314	DUMMY Virtuel	14572	1	Sonde_4_Stock_Haut
         end
         
         if (devicechanged['Temp_Ballon_ECS_80L_solaire-']) then
            
         resultat7 = arrondir(tostring(otherdevices_temperature['Temp_Ballon_ECS_80L_solaire-']),1)
            
        commandArray['UpdateDevice'] = 1322 .. '|0|'.. resultat7-- 1322	DUMMY Virtuel	1457A	1	Temp_Ballon_ECS_80L_solaire
    end
    
Pour les sondes Oregon regarde ici:

viewtopic.php?t=7910

Cdt
Bertrand
v4.9700 sur PC Windows7 (Elite book); DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, Divers SOMFY RTS etc..

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

Re: Recherche scipt

Message par denis_brasseur » 21 août 2019, 05:02

J'utilise le même principe que le code de Bertrand.

Le code devient vite un peu lourd quand tu enchaîne les sondes et les virtuel device à mettre à jour.
Un tableau dans lequel je stocke les idx source et destination :

Code : Tout sélectionner

ArraySonde[#ArraySonde + 1] = {sonde = 2643, idx = 3007}
ArraySonde[#ArraySonde + 1] = {sonde = 2644, idx = 3008}
--ArraySonde[#ArraySonde + 1] = {sonde = 2645, idx = 3009}
--sonde est le numero idx du dispositif affichant la Temperature
--idx est le numero idx du dispositif virtuel à mettre à jour

et ensuite une boucle dans laquelle je capte les changement d'état et je met à jour les virtuel device

Code : Tout sélectionner

--Parcours le Tableau
for key, valeur in pairs(ArraySonde) do
	if (devicechanged[GetDeviceNameByIdx(valeur.sonde)]) then
		--print(GetDeviceNameByIdx(valeur.sonde)..'-'..getTempIdx(valeur.sonde))
		commandArray[#commandArray+1]={['UpdateDevice'] = valeur.idx..'|0|'..getTempIdx(valeur.sonde)}
	end
end
Mes 3 fonctions sont placé dans un fichier module.lua, mais le code doit etre exploitable dans l'état, ne reste qu'a personnaliser les ArraySonde[#ArraySonde + 1], on peux en placer/supprimer/mettre en commentaire autant que l'on souhaite sans avoir à réécrire le code

Code : Tout sélectionner

-- arrondire
function round(num, dec)
	if num == 0 then return 0
	else local mult = 10^(dec or 2)
	return math.floor(num * mult + 0.5) / mult
	end
end

-- température
function getTempIdx(idx)
	return round(tonumber(otherdevices_temperature[GetDeviceNameByIdx(idx)]),1)
end

-- humidité
function getHum(device)
	return round(tonumber(otherdevices_humidity[GetDeviceNameByIdx(idx)]),1)
end

-- retourne le nom du switch selon son IDX
function GetDeviceNameByIdx(deviceIDX)
	for i, v in pairs(otherdevices_idx) do
		if v == deviceIDX then
			return i
		end
	end
	return 0
end


commandArray = {}

local ArraySonde = {}
--sonde est le numero idx du dispositif affichant la Temperature
--idx est le numero idx du dispositif virtuel à mettre à jour

ArraySonde[#ArraySonde + 1] = {sonde = 2643, idx = 3007}
ArraySonde[#ArraySonde + 1] = {sonde = 2644, idx = 3008}
--ArraySonde[#ArraySonde + 1] = {sonde = 2645, idx = 3009}


--Parcours le Tableau
for key, valeur in pairs(ArraySonde) do
	if (devicechanged[GetDeviceNameByIdx(valeur.sonde)]) then
		--print(GetDeviceNameByIdx(valeur.sonde)..'-'..getTempIdx(valeur.sonde))
		commandArray[#commandArray+1]={['UpdateDevice'] = valeur.idx..'|0|'..getTempIdx(valeur.sonde)}
	end
end
	
return commandArray	
Ne reste plus qu'a modifier l'idx sonde en cas de changement de pile et après recréation du device associé.
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
10 Getdio 54755 (gestion chauffage)
2 CHACON 34131 (détecteur fumées)
5 Bresser Capteur thermo/hygro
2 CHACON DiO 54781 (contacteur porte)
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

banditos
Messages : 106
Enregistré le : 30 nov. 2016, 09:55

Re: Recherche scipt

Message par banditos » 21 août 2019, 08:17

Merci beaucoup pour vos réponses.

je regarde ça.
Raspberry pi 3/Rasbian-Jessie/Domoticz/RFXtrx433 USB 433.92MHz/SSD 32gb

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Datawolf
Messages : 210
Enregistré le : 03 avr. 2018, 13:51

Re: Recherche scipt

Message par Datawolf » 21 août 2019, 09:25

banditos a écrit :
20 août 2019, 23:21
[....] pour éviter les grosses manipes suite aux changements de piles des sondes orégon.
Salut,
Avant de se demander comment je vais demander pourquoi: lors d'un changement de pile un nouveau dispositif est créé et il suffit d'aller sur l'ancien et cliquer sur "Remplacer par", non ?
@+
Datawolf

Doudy
Messages : 214
Enregistré le : 07 mai 2016, 17:23

Re: Recherche scipt

Message par Doudy » 21 août 2019, 09:35

Datawolf a écrit :
21 août 2019, 09:25

Salut,
Avant de se demander comment je vais demander pourquoi: lors d'un changement de pile un nouveau dispositif est créé et il suffit d'aller sur l'ancien et cliquer sur "Remplacer par", non ?
@+
Datawolf
Oui effectivement, mais il me semble qu'il prend le nouvel IDX et ne garde pas l'ancien... ;)
PI 3 = RFXCOM
PI 3 + Touchscreen 7" affichage Domoticz
RFXCOM 433
Domoticz Version: 4.10717 - Python Version: 3.5.3

banditos
Messages : 106
Enregistré le : 30 nov. 2016, 09:55

Re: Recherche scipt

Message par banditos » 21 août 2019, 12:32

C'est ça !
Raspberry pi 3/Rasbian-Jessie/Domoticz/RFXtrx433 USB 433.92MHz/SSD 32gb

banditos
Messages : 106
Enregistré le : 30 nov. 2016, 09:55

Re: Recherche scipt

Message par banditos » 23 août 2019, 12:21

Bonjour,
j'ai créé un dummy virtuel T°/H evec un idx de 789, ma sonde physique T°/H a 733 d'idx, j'ai modifié le script, je l'ai placé dans le fichier lua de Domoticz comme à chaque fois et pourtant ma sonde virtuelle n'est pas mise à jour, si quelqu'un a une idée.

Merci

Code : Tout sélectionner

-- arrondire
function round(num, dec)
	if num == 0 then return 0
	else local mult = 10^(dec or 2)
	return math.floor(num * mult + 0.5) / mult
	end
end

-- température
function getTempIdx(idx)
	return round(tonumber(otherdevices_temperature[GetDeviceNameByIdx(idx)]),1)
end

-- humidité
function getHum(device)
	return round(tonumber(otherdevices_humidity[GetDeviceNameByIdx(idx)]),1)
end

-- retourne le nom du switch selon son IDX
function GetDeviceNameByIdx(deviceIDX)
	for i, v in pairs(otherdevices_idx) do
		if v == deviceIDX then
			return i
		end
	end
	return 0
end


commandArray = {}

local ArraySonde = {}
--sonde est le numero idx du dispositif affichant la Temperature
--idx est le numero idx du dispositif virtuel à mettre à jour

ArraySonde[#ArraySonde + 1] = {sonde = 733, idx = 789}



--Parcours le Tableau
for key, valeur in pairs(ArraySonde) do
	if (devicechanged[GetDeviceNameByIdx(valeur.sonde)]) then
		--print(GetDeviceNameByIdx(valeur.sonde)..'-'..getTempIdx(valeur.sonde))
		commandArray[#commandArray+1]={['UpdateDevice'] = valeur.idx..'|0|'..getTempIdx(valeur.sonde)}
	end
end
	
return commandArray	
Raspberry pi 3/Rasbian-Jessie/Domoticz/RFXtrx433 USB 433.92MHz/SSD 32gb

cyberbob
Messages : 470
Enregistré le : 28 nov. 2016, 19:43
Localisation : Belgique

Re: Recherche scipt

Message par cyberbob » 23 août 2019, 12:31

Pour que je comprenne : Si on fait "remplacer par" lors du changement des piles, l'idx change, mais pas le nom de la sonde, et dans tous les scripts, si la sonde est reprise par son nom, le changement de pile devient transparent pour tous ces sripts, non ?
Domoticz Stable V4.9700 sur Synology DSM 6.2 / 2 x RFlink V48.4 - 433.92MHz(Dio/Chacon) & 433.42MHz(RTS) / Script en LUA & Blocky

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

Re: Recherche scipt

Message par vil1driver » 23 août 2019, 13:34

Oui

A l'origine, la nouvelle doit être nommée différemment, (le nom doit être unique)
Une fois les données dupliquées,
Tu supprimes l'ancienne et renommes la nouvelle comme l'ancienne.

Les idx ne sont pratiquement jamais utiles et au pire un peut les obtenir à la volée dans les scripts au besoin..

Code : Tout sélectionner

idx_lampe=otherdevices_idx['lampe'] 

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre