SmartMeter avec port P1

Normalement, pas possible. Tu as sûrement une valeur moyenne qui s’est créée.

ce que tu peux faire, c’est créer un virtuel (puissance) en plus et créer un event en dessous de ton scenario qui tourne toutes les minutes et mettre ceci:
event # Puissance # Puissance injection - Puissance conso

tu auras une courbe pour ta commande puissance qui va ds le positif en cas de production et en négatif en cas de conso

En fait comme je me basais que c’était l’un ou l’autre j’avais fait un virtuel ainsi:

#[Local technique][Compteur Electrique][Conso Puissance]# > 0 ? #[Local technique][Compteur Electrique][Conso Puissance]# : (#[Local technique][Compteur Electrique][Prod Puissance]# * -1)

Ca permet d’avoir en positif quand je consomme, et en négatif quand je produit

Je suppose en effet que c’était le lissage car c’était mis « Moyenne », j’ai mis sur « Aucune »
Je vais voir ce que ça donne, un grand merci pour ton aide.

Bonjour, utilisateur home assistant ici, qui aura bientôt un compteur smart de chez Ores car le mien ne tourne pas à l’envers malheureusement
Je pourrais être intéressé par ton module @Poluket il faudra que je trouve comment lire les data dans home assistant mais ça c’est mon problème :)- tu peux m’envoyer un mp avec ton prix ? merci !

Bonjour,
j’essaye de rapatrier les tensions et courant mais en recopiant les IF, il ne me rapatrie jamais les valeurs.

je suis pas un expert en script

peux-tu faire un test sur le tien et me donner le script modifié ?

pour la tension, si tu es en mono:

    if (substr( $data, 0, 10 ) === "1-0:32.7.0") {
       $scenario->setLog("32.7.0: " . substr( $data, 11, 5 ));
       cmd::byId("VirtuelID1")->event(substr( $data, 11, 5 ));
       }

et en tri:

    if (substr( $data, 0, 10 ) === "1-0:32.7.0") {
       $scenario->setLog("32.7.0: " . substr( $data, 11, 5 ));
       cmd::byId("VirtuelID1")->event(substr( $data, 11, 5 ));
       }
    if (substr( $data, 0, 10 ) === "1-0:52.7.0") {
       $scenario->setLog("52.7.0: " . substr( $data, 11, 5 ));
       cmd::byId("VirtuelID2")->event(substr( $data, 11, 5 ));
       }
    if (substr( $data, 0, 10 ) === "1-0:72.7.0") {
       $scenario->setLog("72.7.0: " . substr( $data, 11, 5 ));
       cmd::byId("VirtuelID3")->event(substr( $data, 11, 5 ));
       }

ne pas oublier de changer la valeur pour les VirtuelIDx

on a bien les 3 valeurs qui remontent dans jeedom:
image

et le vrituel:

le courant en mono: les requetes ds le scenario:

    if (substr( $data, 0, 10 ) === "1-0:31.7.0") {
       $scenario->setLog("31.7.0: " . substr( $data, 11, 6 ));
       cmd::byId("VirtuelID2")->event(substr( $data, 11, 6 ));
       }

pour le courant en tri:

et les requetes ds le scenario:

    if (substr( $data, 0, 10 ) === "1-0:31.7.0") {
       $scenario->setLog("31.7.0: " . substr( $data, 11, 6 ));
       cmd::byId("VirtuelID4")->event(substr( $data, 11, 6 ));
       }
    if (substr( $data, 0, 10 ) === "1-0:51.7.0") {
       $scenario->setLog("51.7.0: " . substr( $data, 11, 6 ));
       cmd::byId("VirtuelID5")->event(substr( $data, 11, 6 ));
       }
    if (substr( $data, 0, 10 ) === "1-0:71.7.0") {
       $scenario->setLog("51.7.0: " . substr( $data, 11, 6 ));
       cmd::byId("VirtuelID6")->event(substr( $data, 11, 6 ));
       }

au final, ces lignes son ajoutées:
image
et voila mon code complet ( en triphasé) testé et validé :

$cfgServer ="192.168.3.174";
$cfgPort    = "8088";                
$cfgTimeOut = "5";

$f=fsockopen("$cfgServer",$cfgPort,$cfgTimeOut);

if (!$f)
{
  $scenario->setLog('pas connecté');
  cmd::byId("19215")->event(0);
}
else
{
 $scenario->setLog('connecté');
  cmd::byId("19215")->event(1);
 $data2 = '';
 while (($data =  fgets($f, 4096)) !== false) {
    //$scenario->setLog($data);
    $data2 .= $data;
    //on remplit les valeurs dans les commandes jeedom
    if (substr( $data, 0, 9 ) === "1-0:1.8.1") {
       $scenario->setLog("1.8.1: " . substr( $data, 10, 10 ));
       cmd::byId("19201")->event(substr( $data, 10, 10 )) ;
       }
    if (substr( $data, 0, 9 ) === "1-0:1.8.2") { 
       $scenario->setLog("1.8.2: " . substr( $data, 10, 10 ));
       cmd::byId("19203")->event(substr( $data, 10, 10 ));
       }
    if (substr( $data, 0, 9 ) === "1-0:2.8.1") {
       $scenario->setLog("2.8.1: " . substr( $data, 10, 10 ));
       cmd::byId("19202")->event(substr( $data, 10, 10 ));
       }
    if (substr( $data, 0, 9 ) === "1-0:2.8.2") {
       $scenario->setLog("2.8.2: " . substr( $data, 10, 10 ));
       cmd::byId("19216")->event(substr( $data, 10, 10 ));
       }
    if (substr( $data, 0, 9 ) === "1-0:1.7.0") {
       $scenario->setLog("1.7.0: " . floatval(substr( $data, 10, 6 ))*1000);
       cmd::byId("19205")->event(floatval(substr( $data, 10, 6 ))*1000);
       }
    if (substr( $data, 0, 9 ) === "1-0:2.7.0") {
       $scenario->setLog("2.7.0: " . floatval(substr( $data, 10, 6 ))*1000);
       cmd::byId("19206")->event(floatval(substr( $data, 10, 6 ))*1000);
       }
    if (substr( $data, 0, 10 ) === "1-0:32.7.0") {
       $scenario->setLog("32.7.0: " . substr( $data, 11, 5 ));
       cmd::byId("20186")->event(substr( $data, 11, 5 ));
       }
    if (substr( $data, 0, 10 ) === "1-0:52.7.0") {
       $scenario->setLog("52.7.0: " . substr( $data, 11, 5 ));
       cmd::byId("20187")->event(substr( $data, 11, 5 ));
       }
    if (substr( $data, 0, 10 ) === "1-0:72.7.0") {
       $scenario->setLog("72.7.0: " . substr( $data, 11, 5 ));
       cmd::byId("20188")->event(substr( $data, 11, 5 ));
       }
    if (substr( $data, 0, 10 ) === "1-0:31.7.0") {
       $scenario->setLog("31.7.0: " . substr( $data, 11, 6 ));
       cmd::byId("20189")->event(substr( $data, 11, 6 ));
       }
    if (substr( $data, 0, 10 ) === "1-0:51.7.0") {
       $scenario->setLog("51.7.0: " . substr( $data, 11, 6 ));
       cmd::byId("20190")->event(substr( $data, 11, 6 ));
       }
    if (substr( $data, 0, 10 ) === "1-0:71.7.0") {
       $scenario->setLog("51.7.0: " . substr( $data, 11, 6 ));
       cmd::byId("20191")->event(substr( $data, 11, 6 ));
       }
	if (substr( $data, 0, 11 ) === "0-0:96.13.0") {
       //$scenario->setLog('Quitte la boucle');
       break;
	   } 
   	
    }
 //$scenario->setLog($data2);

 // coupe la session
 $scenario->setLog('coupe la session');
fclose($f);

}

désolé de répondre si tard je vais essayer ton code et regarder ton code pour essayer de le comprendre

Merci @Poluket je ne reprenais pas bien les données.
Ca fonctionne

Salut à tous,

J’utilise la même solution que vous pour récupérer les données de mon compteur Ores.
Malheureusement, je ne peux pas fixer mes adresses IP et donc utilise Scan.IP qui associe le mac/IP avec des bridges pour les plugins compatibles. Dans le plugin Scan.IP, la derniere IP du ESP8266 est automatiquement retrouvée sous #[MAC-IP][Lecteur P1][Last IpV4]#.

J’arrive à récupérer la valeur dans un virtuel ( si il le faut) mais pas à l’intégrer dans le code du scénario …

$cfgServer = cmd::byString("#[MAC-IP][Lecteur P1][Last IpV4]#");
$cfgPort    = "8088";                
$cfgTimeOut = "5";

$f=fsockopen("$cfgServer",$cfgPort,$cfgTimeOut);

if (!$f)
{
  $scenario->setLog('pas connecté');
  cmd::byId("191")->event(0);
}
else
{
 $scenario->setLog('connecté');
  cmd::byId("191")->event(1);
 $data2 = '';
 while (($data =  fgets($f, 4096)) !== false) {
    //$scenario->setLog($data);
    $data2 .= $data;
    //on remplit les valeurs dans les commandes jeedom
    if (substr( $data, 0, 9 ) === "1-0:1.8.1") {
       $scenario->setLog("1.8.1: " . substr( $data, 10, 10 ));
       cmd::byId("181")->event(substr( $data, 10, 10 )) ;
       }

J’ai aussi essayé en passant par un virtuel

$cfgServer = cmd::byId("192");
$cfgPort    = "8088";                
$cfgTimeOut = "5";

$f=fsockopen("$cfgServer",$cfgPort,$cfgTimeOut);

if (!$f)
{
  $scenario->setLog('pas connecté');
  cmd::byId("191")->event(0);

Pouvez-vous m’aider ? (de base je code pas en PHP, j’ai juste qlqs notions de codage)

Bon WE

et si tu mets $cfgServer = cmd::byString('#[MAC-IP][Lecteur P1][Last IpV4]#')->execCmd(); a la place, cela devrait etre ok

et si tu mets $scenario->setLog($cfgServer); en 4eme ligne, tu devrais avoir l’ip

image

tu devrais avoir une ligne avec 192.168.0.215


moi c’est 192.168.3.174

une bible:

:slight_smile: Top ça fonctionne !!!

Merci pour le lien « Petits codes entre amis », très intéressant. je vais pouvoir trouver les solutions par moi-même.

Bonjour Domex,

Pourrais tu détailler comment tu as procédé?

Pour ceux que ça intéresse, j’ai créé un petit code pour l’ESP-01 qui envoie les données toutes les 3 secondes en MQTT.
https://github.com/SNatis/T211-MQTT-Bridge
J’ai également mis les fichiers EasyEDA pour crée le PCB.

Actuellement, cela fait un mois que ça tourne sans aucun problème chez moi…

1 « J'aime »

je suis en train de finaliser une version câblée (rj45) pour ne pas utiliser le wifi. attention que ce modelé a besoin d’une alimentation extérieur pour l’alimenter (USB typeC 5V) .
S’il y en a qui veulent être des beta tester (fonctionne bien chez moi) . envoyez moi un mp

4 « J'aime »

Et le plugin-smartmeterp1 est dispo en stable depuis une petite semaine.

3 « J'aime »

Bonjour,

Je suis toujours à la recherche d’un équipement comme celui que vous proposez et, dans l’idéal, je préférerais acheter local. Cependant, je me pose une question concernant l’alimentation de votre boîtier. Qu’est-ce qui fait que votre boîtier doit être alimenté par une source externe alors qu’il semblerait que des boîtiers équivalents ci-dessous puissent être alimentés via le port P1 pour les compteurs DSMR5 ?

P1 reader ethernet – Marcel Zuidwijk

SlimmeLezer WT32-ETH01 – Marcel Zuidwijk

D’avance merci pour votre retour.

Bonjour, il existe aussi le Homewizard P1

En ethernet ? Car je pense que c’est bien sur ça que porte la question

Non, effectivement.

Bonjour,

je suis en train de le finaliser.
il sera possible de l’utiliser via une alim externe ou via l’alimentation du compteur seulement en RJ45. si l’on veut utiliser le wifi du module, il faut d’office une alimentation externe (dépasse les 250ma). et comme il sera possible de l’alimenter en externe, il sera compatible avec les versions plus anciennes de la norme.

il est un peu plus petit qu’une carte de banque (ne rentre pas dans la reservation du compteur) et sera fourni avec un cable de 30cm

il devrait être dispo sur mon site fin de semaine.
je les vendrais a 24€ piece TTC (4-6€ de livraison).

Il y aura 2 versions de firmware, une espeasy et une esphome.
Ce sera plug and play puisque pas de configuration wifi necessaire

j’ai testé aussi un module POE qui permet d’alimenter le compteur via son port USB-C, cela fonctionne bien. s’il y a des demandes, j’en ajouterai sur le shop mais on peut le trouver facilement sur le net.