Recherche scipt
Recherche scipt
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
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
Re: Recherche scipt
Bonsoir,
Tu dois Pouvoir t'inspirer de ceci:
Pour les sondes Oregon regarde ici:
viewtopic.php?t=7910
Cdt
Bertrand
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
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..
-
- Messages : 287
- Enregistré le : 24 déc. 2018, 17:05
- Localisation : (26)
Re: Recherche scipt
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 :
--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
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
Ne reste plus qu'a modifier l'idx sonde en cas de changement de pile et après recréation du device associé.
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}
--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
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
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"
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"
Re: Recherche scipt
Merci beaucoup pour vos réponses.
je regarde ça.
je regarde ça.
Raspberry pi 3/Rasbian-Jessie/Domoticz/RFXtrx433 USB 433.92MHz/SSD 32gb
Re: Recherche scipt
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
Re: Recherche scipt
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
PI 3 + Touchscreen 7" affichage Domoticz
RFXCOM 433
Domoticz Version: 4.10717 - Python Version: 3.5.3
Re: Recherche scipt
C'est ça !
Raspberry pi 3/Rasbian-Jessie/Domoticz/RFXtrx433 USB 433.92MHz/SSD 32gb
Re: Recherche scipt
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
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
Re: Recherche scipt
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
-
- Messages : 5188
- Enregistré le : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: Recherche scipt
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..
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']