Question de codage pour z-wave

Tags: #<Tag:0x00007fcbaae7adb0>

Bonsoir tout le monde,
Je veux faire un scénario qui, dans un bloc code, pingue certains type d’équipements z-wave en l’occurrence mes vannes spiritz afin d’en forcer le réveil toutes les heures, sinon, il se désactivent.
Mon problème se situe au niveau de la recherche des équipements, les pings ne me posant pas de difficulté.
Y-a-t-il un moyen, si je parcours la liste de tous les devices z-wave, de stocker dans un array uniquement un seul type de devices, en l’occurrence ces vannes ?
Moi je ne vois pas.
Bien sûr, je peux les pinguer tous mais je ne voudrais pas bouffer du temps CPU pour rien.
Par avance, merci de votre aide.

Bonsoir,
il y a la script de @nechry qui fait ca

Merci mais je peux le trouver où ?

par exemple, API à mettre et nodeid pour le noeud a tester

// https://nechry-automation.ch/2018/06/07/api-restful/
// Setup
// Jeedom configuration/API/Clef API Z-Wave
$apizwave = '...................clef Zawave.......................;
// the node Id to perform the ping
$nodeId = 1;
// End Setup

$url = 'http://127.0.0.1:8083/node?node_id=' . $nodeId . '&type=action&action=testNode&apikey=' . $apizwave;
$contents = file_get_contents($url);
//$scenario->setLog('Contents :'.$contents);
$results = json_decode($contents);
$success = $results->state;
if ($success != 'ok') {
    $scenario->setLog('Z-wave test : Node return an error: ' . $results->result);
$scenario->setData("ZAPI_NodePingDead", $nodeId);
} else {    $scenario->setLog('Z-wave test : Node #' . $nodeId .' OK');
        // save ping time for delta check
$scenario->setData("ZAPI_NodePingTime", time());
$scenario->removeData(ZAPI_NodePingDead);
    
}

Ok merci.
Mais je connais ce script, je l’utilise déjà pour repérer les noeuds morts.
Ce que je veux faire c’est récupérer le type d’équipement et si cela correspond à une de mes vannes, stocker son nodeID dans un tableau afin de pinguer tous ces équipements dans un foreach.

Excuses, j’ai été un peu rapide.
J’ai atteint mes limites

Pas de souci.
Merci qd même

$eqLogics = eqLogic::byType('openzwave');
foreach($eqLogics as $eqLogic) {
  $scenario->setLog($eqLogic->getLogicalId() . $eqLogic->getHumanName());
}

La classe eqLogic : https://doc.jeedom.com/dev/phpdoc/4.1/classes/eqLogic.html

Merci de ton aide.
Ceci étant, je dois être bouché mais et, à moins de me tromper complètement, avec ce que tu m’as envoyé, avec ça, je récupère tous les devices z-wave.
Ce que je voudrais c’est ne récupérer que les Eurotronic et là, je ne vois pas comment faire le lien, un truc du genre getBrand() ou quelque chose d’équivalent.
Mais je rêve peut-être.

Je ne sais pas comment tu as nommé tes vannes, mais si elles sont les seules à avoir le terme Eurotronic dans le nom, tu traites que si cela matche avec getHumanName.

1 J'aime

Pour compléter le script précédent

$eqLogics = eqLogic::byType('openzwave');
foreach($eqLogics as $eqLogic) {
  
  $scenario->setLog($eqLogic->getLogicalId() . $eqLogic->getHumanName() . ' ' .$eqLogic->getConfiguration()['product_name']);
  if( $eqLogic->getConfiguration()['product_name'] == 'Eurotronic') {
    // équipements du type voulu
  }
}


1 J'aime

Oui, il faut fouiller dans la classe eqLogic, c’est pour cela que j’avais indiqué le lien.

Oui, j’ai complété la réponse !

Ok, désolé, j’avais regardé mais je n’y ai vu que la liste des fonctions sans plus de détails.
J’ai dû mal cherché.
Merci encore.

Super, merci beaucoup.
Plus qu’à écrire le reste mais ça devrait aller.
Je posterais l’ensemble du bloc code au cas où ça intéresserait quelqu’un d’autre.
Bonne soirée

@Jeandhom @Bercolly

Désolé mais un truc m’échappe, comment avec juste ça :

Screenshot_2021-02-21 API Documentation

Vous arrivez à avoir toutes les infos qu’il vous faut dans la doc.

J’ai écrit le bout de code que vous m’avez proposé et il ne trouve pas les bonnes valeurs, ce qui ne m’étonne qu’à moitié.

Le code :

$eqLogics = eqLogic::byType('openzwave');
foreach($eqLogics as $eqLogic) {
	$scenario->setLog($eqLogic->getLogicalId() . $eqLogic->getHumanName() . ' ' .$eqLogic->getConfiguration()['product_name']);
	if( $eqLogic->getConfiguration()['product_name'] == 'Eurotronic') {
    // équipements du type voulu
		$scenario->setLog($eqLogic->getLogicalId() . $eqLogic->getHumanName() . ' ' .$eqLogic->getConfiguration()['product_name']);
		$ToPing_List[] = $node_id;
    }
}

Le log :

------------------------------------
[2021-02-21 20:43:12][SCENARIO] Start : Scenario lance manuellement.
[2021-02-21 20:43:12][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-02-21 20:43:12][SCENARIO] Exécution d'un bloc code
[2021-02-21 20:43:12][SCENARIO] 75[Amis][FM AM] FGSD002 Smoke Sensor
[2021-02-21 20:43:12][SCENARIO] 92[Amis][Télécommande AM] CRC-3-6-0x Soft Remote
[2021-02-21 20:43:12][SCENARIO] 29[Amis][TV AM] FGWPE/F Wall Plug Gen5
[2021-02-21 20:43:12][SCENARIO] 87[Amis][Vanne AM] EUR_SPIRITZ Wall Radiator Thermostat
[2021-02-21 20:43:12][SCENARIO] 31[Atelier][Plug Amp] Power plug 12A
[2021-02-21 20:43:12][SCENARIO] 97[Atelier][Plug Chrg] Smart Power Plug NAS-WR01ZE
[2021-02-21 20:43:12][SCENARIO] 72[Atelier][Télécommande AT] CRC-3-6-0x Soft Remote
[2021-02-21 20:43:12][SCENARIO] 19[Couloir][PIR CL] Battery Powered PIR Sensor
[2021-02-21 20:43:12][SCENARIO] 85[Cuisine][Vanne CU] EUR_SPIRITZ Wall Radiator Thermostat
[2021-02-21 20:43:12][SCENARIO] 77[Enfants][FM EN] FGSD002 Smoke Sensor
[2021-02-21 20:43:12][SCENARIO] 74[Enfants][Vanne EN] EUR_SPIRITZ Wall Radiator Thermostat
[2021-02-21 20:43:12][SCENARIO] 37[Entree][FM ET] FGSD002 Smoke Sensor
[2021-02-21 20:43:12][SCENARIO] 21[Entree][PIR ET] FGMS001-ZW5 Motion Sensor
[2021-02-21 20:43:12][SCENARIO] 84[Entree][Vanne ET] EUR_SPIRITZ Wall Radiator Thermostat
[2021-02-21 20:43:12][SCENARIO] 45[Extérieur][EXT ET] SP816 Outdoor Motion Detector
[2021-02-21 20:43:12][SCENARIO] 48[Extérieur][EXT GA] SP816 Outdoor Motion Detector
[2021-02-21 20:43:12][SCENARIO] 46[Extérieur][Lampe ET] FGD212 Dimmer 2
[2021-02-21 20:43:12][SCENARIO] 60[Extérieur][Lampe GA] FGD212 Dimmer 2
[2021-02-21 20:43:12][SCENARIO] 61[Extérieur][Netatmo] FGS222 Double Relay Switch 2x1.5kW
[2021-02-21 20:43:12][SCENARIO] 33[Garage][Congélo] FGWPE/F Wall Plug Gen5
[2021-02-21 20:43:12][SCENARIO] 32[Garage][Cumulus] FGS222 Double Relay Switch 2x1.5kW
[2021-02-21 20:43:12][SCENARIO] 66[Garage][LL Fuite] Water Leakage Detector
[2021-02-21 20:43:12][SCENARIO] 95[Garage][Plug Clean] Power plug 12A
[2021-02-21 20:43:12][SCENARIO] 51[Garage][Plug IMP] Power plug 12A
[2021-02-21 20:43:12][SCENARIO] 34[Garage][Plug LL] FGWPE/F Wall Plug Gen5
[2021-02-21 20:43:12][SCENARIO] 30[Garage][Plug Vélo] Power plug 12A
[2021-02-21 20:43:12][SCENARIO] 55[Garage][Porte haut GA] Door/Window Detector
[2021-02-21 20:43:12][SCENARIO] 53[Local technique][Local] HKZW-DWS01 Door/Window Sensor
[2021-02-21 20:43:12][SCENARIO] 11[Local technique][PAC] FGS212 Switch 3kW
[2021-02-21 20:43:12][SCENARIO] 12[Local technique][PHSel] FGS213 Switch
[2021-02-21 20:43:12][SCENARIO] 13[Local technique][Piscine] FGBS001 Universal Binary Sensor
[2021-02-21 20:43:12][SCENARIO] 14[Local technique][Pompe] FGS212 Switch 3kW
[2021-02-21 20:43:12][SCENARIO] 96[Local technique][Range Extender LT]
[2021-02-21 20:43:12][SCENARIO] 93[Local technique][Télécommande LT] CRC-3-6-0x Soft Remote
[2021-02-21 20:43:12][SCENARIO] 1[Maison][1Z-Stick Gen5 (ZW090)] ZW090 Z-Stick Gen5 EU
[2021-02-21 20:43:12][SCENARIO] 73[Parents][Vanne PA] EUR_SPIRITZ Wall Radiator Thermostat
[2021-02-21 20:43:12][SCENARIO] 89[Salle de bain][SdBF] Water Leakage Detector
[2021-02-21 20:43:12][SCENARIO] 16[Salon][Range Extender GA] DSD37 Range Extender
[2021-02-21 20:43:12][SCENARIO] 65[Salon][Range Extender SA]
[2021-02-21 20:43:12][SCENARIO] 91[Salon][Télécommande SA] CRC-3-6-0x Soft Remote
[2021-02-21 20:43:12][SCENARIO] 23[Salon][TV SA] FGWPE/F Wall Plug Gen5
[2021-02-21 20:43:12][SCENARIO] 88[Salon][Vanne SA] EUR_SPIRITZ Wall Radiator Thermostat
[2021-02-21 20:43:12][SCENARIO] 35[Salon][Volet] FGR223 Roller Shutter Controller 3
[2021-02-21 20:43:12][SCENARIO] Fin correcte du scénario

En toute rigueur, si le nom Eurotronic était découvert, les lignes lui correspondant devraient être doublée dans le log, le code étant écrit pour.
Donc, j’imagine que la syntaxe de l’eqLogic n’est pas bonne puisqu’on trouve bien les vannes dans le log.
J’ai essayé avec « EUR_SPIRITZ », le résultat est le même.

Si vous avez une ou des suggestions à me faire, je suis bien évidemment preneur.

Par avance, merci

$eqLogics = eqLogic::byType('openzwave');
foreach($eqLogics as $eqLogic) {
	$scenario->setLog($eqLogic->getLogicalId() . $eqLogic->getHumanName() . ' ' .$eqLogic->getConfiguration()['product_name']);
	if( strpos($eqLogic->getConfiguration()['product_name'], 'EUR_SPIRITZ') != false {
    // équipements du type voulu
		$scenario->setLog($eqLogic->getLogicalId() . $eqLogic->getHumanName() . ' ' .$eqLogic->getConfiguration()['product_name']);
//		$ToPing_List[] = $node_id;
  		$ToPing_List[] = $eqLogic->getId();
    }
}
$eqLogics = eqLogic::byType('openzwave');
foreach($eqLogics as $eqLogic) {
	$scenario->setLog($eqLogic->getLogicalId() . $eqLogic->getHumanName() . ' ' .$eqLogic->getConfiguration()['product_name']);
	if( strpos($eqLogic->getConfiguration()['product_name'], 'EUR_SPIRITZ') != false {
    // équipements du type voulu
		$scenario->setLog($eqLogic->getLogicalId() . $eqLogic->getHumanName() . ' ' .$eqLogic->getConfiguration()['product_name']);
//		$ToPing_List[] = $node_id;
// 		$ToPing_List[] = $eqLogic->getId();
  		$ToPing_List[] = $eqLogic->getLogicalId();
    }
}

Merci à tous les 2 mais ça m’embête de vous déranger pour ça.
J’aimerais bien pouvoir être autonome sur l’utilisation de ces fonctions.
Y aurait-il une doc plus complète quelque part ou un mode d’emploi de la doc indiquée ?

Pas à ma connaissance, il faut regarder le code pour comprendre les arguments à passer et le résultat qui sera obtenu.
Regarder la structure des tables est aussi très instructif.