[PYTHON] Extraire les informations des compteurs intelligents avec le matériel le moins cher

introduction

Avec la déréglementation de l'électricité, l'installation de ** compteurs intelligents ** est encouragée.

En introduisant les ** compteurs intelligents ** installés par les compagnies d'électricité et les ** éléments de type terminal de visualisation HEMS ** vendus par chaque entreprise, ** la consommation d'énergie, etc. peut être visualisée en temps réel **. Je vais.

Pourtant! , ** chose semblable à un terminal de visualisation HEMS ** est ** la fixation des prix de l'industrie de la réforme du logement ** très ** cher **.

Par conséquent, le but de cet article est de créer des ** objets de type terminal de visualisation HEMS ** à bas prix **.

Remarquer

On suppose que l'histoire se trouve dans la zone d'alimentation électrique de Tokyo, mais si vous habitez dans la zone d'alimentation d'une autre entreprise, veuillez lire le nom de la société d'électricité m (_ _) m

La couche physique de communication est décidée par chaque entreprise, mais lorsque j'ai ouvert le couvercle, elle a été unifiée par Wi-SUN (décrit plus tard) dans tout le pays. Le matériel que vous devez acheter ne change nulle part dans le pays.

Matériel

Faites installer un compteur intelligent

Tout d'abord, vous devez installer un compteur intelligent.

** Q: Mais c'est cher, n'est-ce pas? ** ** ** R: Non, c'est gratuit! ** **

À l'origine, il sera remplacé par un compteur intelligent même si vous le laissez seul, mais si vous demandez «Faites-le d'abord», le travail de remplacement sera prioritaire.

De plus, avec la déréglementation de l'énergie électrique, il est devenu possible de sélectionner une compagnie d'électricité, mais si vous changez de compagnie d'électricité, elle sera automatiquement remplacée par un compteur intelligent, il est donc recommandé de passer à une autre.

La compagnie d'électricité que vous choisissez pour économiser de l'argent dépend de la quantité d'énergie utilisée par chaque foyer, donc si vous la comparez avec Price.com etc. Ça va être bien.

Si la quantité d'électricité utilisée est faible, par exemple dans un seul ménage, il peut être moins coûteux de laisser TEPCO tel quel.

Demander un service de route B

Soudain, un mot que je ne savais pas est sorti.

** Route B ** fait référence à la voie de communication entre le compteur intelligent et votre appareil HEMS domestique. (Bien que les itinéraires A et C soient également des termes, les explications sont omises car elles sont de côté.)

Lorsque vous postulez pour le service d'itinéraire B, vous recevrez l'ID et le mot de passe du compteur intelligent. Les frais d'utilisation sont gratuits.

Même si vous changez de compagnie d'électricité en raison de la déréglementation de l'électricité, la destination de l'application pour le service d'itinéraire B sera TEPCO. Pour être précis, c'est ** Tokyo Electric Power Grid Co., Ltd. ** qui est en charge de la transmission et de la distribution d'énergie.

Même avant le remplacement par le compteur intelligent, si vous demandez le service de route B, vous demandez implicitement le remplacement par le compteur intelligent.

Appliquons à partir du lien ci-dessous Service de transmission d'informations sur les compteurs de puissance (service d'itinéraire B) (Autre que Tokyo Electric Power, veuillez essayer google avec le nom de la compagnie d'électricité et le service d'itinéraire B)

Dans la note sur cette page

  • Les clients sont priés de préparer les équipements chez eux tels que les équipements HEMS.

Il est écrit que «l'équipement dans la maison du client tel que l'équipement HEMS» sera réalisé au bas de cet article.

D'ailleurs, l'ID sera envoyé par courrier et le mot de passe sera envoyé par courrier. N'est-ce pas l'inverse!

À propos, l'enveloppe à laquelle la pièce d'identité est envoyée est un shoboy dont l'expéditeur est pressé avec un tampon. Cela me fait ressentir le manque de motivation de TEPCO. DSC_0472.JPG

Acheter un appareil de communication Wi-SUN

De plus, des mots que je ne connaissais pas sont sortis.

Wi-SUN est une norme sans fil utilisée pour la communication avec les compteurs intelligents. (Non limité aux compteurs intelligents, il s'agit d'une norme internationale du Japon qui vise une faible consommation d'énergie, une longue distance et une norme sans fil de haute fiabilité qui est impossible avec le Wi-Fi, mais maintenant c'est une norme qui n'est pratique que pour les compteurs intelligents japonais. J'ai peur que les Galapagos soient appelés à l'avenir.)

Ici, le [BP35A1] de ROHM (http://www.rohm.co.jp/web/japan/news-detail?news-title=2015-01-07_ad&defaultGroupId=false) est utilisé comme dispositif de communication Wi-SUN. Je vais. Il semble que ce soit l'appareil Wi-SUN le moins cher que les gens ordinaires puissent acheter.

BP35A1withMathor.jpg

En regardant cette image, il semble que la carte mère BP359C soit nécessaire, mais elle n'est pas nécessaire car elle est pleine de fonctions inutiles.

La carte adaptatrice BP35A7A est, en d'autres termes, une "carte de dérivation". C'est un gars qui se convertit en un pas de 2,54 mm facile à utiliser pour le travail électronique amateur.

La carte adaptateur BP35A7A dispose d'un port série de niveau 3,3 V, vous pouvez donc la connecter à un micro-ordinateur tel que Raspeye ou la connecter à un PC via une conversion USB-série.

Plus facile

BP35A1 et clé USB avec conversion USB-série intégrée, [WSR35A1-00](http://www.rohm.co.jp/web/japan/news-detail?news-title=2014-10-02_news&defaultGroupId = false) est également disponible. Il est de 15 000 yens (hors taxes).

WSR35A1-00.jpg

Je pense que c'est facile pour les débutants en travail électronique. Il y a un inconvénient (?) Que ce n'est plus une œuvre électronique car il est simplement branché sur le port USB.

Ceux qui peuvent faire du travail électronique pourront faire un peu moins cher avec BP35A1, carte adaptateur et conversion USB-série (ou directement connecté à la broche série de Raspeye).

Résumé de la préparation du matériel

Aussi, je l'ai omis, mais j'ai également besoin d'un ordinateur pour être le vaisseau mère. L'exemple ci-dessous a été écrit en python, donc je pense que tout ordinateur exécutant python fonctionnera.

Logiciel

Il y a environ trois matériaux nécessaires pour créer un logiciel. Vous n'êtes pas obligé de le consulter pour déplacer l'exemple dans cet article, mais si vous souhaitez apporter d'autres améliorations, veuillez vous y référer.

Matériel de BP35A1

«Manuel de référence de la commande BP35A1» dans la «Page d'assistance de la gamme ROHM Sub-GHz»

Même si vous utilisez WSR35A1-00, puisque le contenu est BP35A1, vous devrez vous reporter au "Manuel de référence des commandes BP35A1".

Norme ECHONET Lite

ECHONET Lite Standard Ver.1.12 (version japonaise)

Jusqu'à 5 exemplaires sont pleins de volume, mais pour le moment, je pense qu'il suffit de regarder "Part 2 ECHONET Lite Communication Middleware Specifications".

Règlements détaillés de l'objet appareil ECHONET

APPENDICE ECHONET Device Object Detail Regulations Release H

C'est plus grand que le corps principal pour APPENDIX, et c'est une méthode commerciale d'appendice! C'est dans un état, mais c'est grand parce que l'histoire de divers appareils est écrite. En regardant la table, vous serez ravi de voir toutes sortes d'appareils électroménagers couverts, n'est-ce pas?

Pour le moment, il est acceptable de ne regarder que le compteur intelligent (régulation de la classe du compteur intelligent basse pression).

Exemple de programme

En tant que politique de création de programme

Nous attachons une grande importance à de telles choses. C'est un programme mal conduit.

Le langage utilisé était Python 2.7. J'utilise pyserial pour la communication série. Dans le cas de raspbian, Python et pyserial sont inclus depuis le début (02/06/2014 ou version ultérieure)

Son fonctionnement a été vérifié sur Windows et Mac. (En supposant que Python + pyserial est installé)

Modifiez l'ID, le mot de passe et le nom du périphérique du port série en fonction de votre environnement.

bp35a1.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import print_function

import sys
import serial
import time

#ID d'authentification de la route B (celui envoyé par courrier depuis TEPCO Power Grid)
rbid  = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
#Mot de passe d'authentification de la route B (celui envoyé par e-mail depuis TEPCO Power Grid)
rbpwd = "XXXXXXXXXXXX"
#Nom du périphérique du port série
serialPortDev = 'COM3'	#Pour les fenêtres
serialPortDev = '/dev/ttyUSB0'	# Linux(Dans le cas de la tarte aux râpes, etc.)
serialPortDev = '/dev/cu.usbserial-A103BTPR'	#Pour Mac

#Initialisation du port série
ser = serial.Serial(serialPortDev, 115200)

#Essayez d'obtenir la version pour le moment (vous n'êtes pas obligé de le faire)
ser.write("SKVER\r\n")
print(ser.readline(), end="") #Echo retour
print(ser.readline(), end="") #version

#B paramètre de mot de passe d'authentification racine
ser.write("SKSETPWD C " + rbpwd + "\r\n")
print(ser.readline(), end="") #Echo retour
print(ser.readline(), end="") #OK devrait venir (pas de chèque)

#Réglage de l'ID d'authentification de la route B
ser.write("SKSETRBID " + rbid + "\r\n")
print(ser.readline(), end="") #Echo retour
print(ser.readline(), end="") #OK devrait venir (pas de chèque)

scanDuration = 4;   #Temps de balayage. C'est 6 dans l'exemple, mais vous pouvez aller avec 4. (Si cela ne fonctionne pas, augmentez-le et réessayez)
scanRes = {} #Conteneur de résultats d'analyse

#Balayer la boucle de nouvelle tentative (jusqu'à ce que quelque chose soit trouvé)
while not scanRes.has_key("Channel") :
	#Effectuer une analyse active (avec IE)
	#Ça prend du temps. Environ 10 secondes?
	ser.write("SKSCAN 2 FFFFFFFF " + str(scanDuration) + "\r\n")

	#Boucle jusqu'à la fin du scan pour chaque scan
	scanEnd = False
	while not scanEnd :
		line = ser.readline()
		print(line, end="")

		if line.startswith("EVENT 22") :
			#J'ai terminé la numérisation (qu'elle soit trouvée ou non)
			scanEnd = True
		elif line.startswith("  ") :
			#Si vous le scannez et le trouvez, ouvrez 2 espaces et les données viendront
			#Exemple
			#  Channel:39
			#  Channel Page:09
			#  Pan ID:FFFF
			#  Addr:FFFFFFFFFFFFFFFF
			#  LQI:A7
			#  PairID:FFFFFFFF
			cols = line.strip().split(':')
			scanRes[cols[0]] = cols[1]
	scanDuration+=1

	if 7 < scanDuration and not scanRes.has_key("Channel"):
		#Vous pouvez spécifier jusqu'à 14 comme argument, mais si vous échouez avec 7, cela ne sert plus à rien
		print("Nouvelle tentative de scan")
		sys.exit()	####Itofuyu####

#Définissez le canal à partir du résultat de l'analyse.
ser.write("SKSREG S2 " + scanRes["Channel"] + "\r\n")
print(ser.readline(), end="") #Echo retour
print(ser.readline(), end="") #OK devrait venir (pas de chèque)

#Définir l'ID de panoramique à partir des résultats de l'analyse
ser.write("SKSREG S3 " + scanRes["Pan ID"] + "\r\n")
print(ser.readline(), end="") #Echo retour
print(ser.readline(), end="") #OK devrait venir (pas de chèque)

#Adresse Mac(64bit)Adresse locale du lien vers IPV6.
# (Je convertis en utilisant la fonction BP35A1, mais y a-t-il une histoire que je devrais simplement convertir la chaîne de caractères? ??)
ser.write("SKLL64 " + scanRes["Addr"] + "\r\n")
print(ser.readline(), end="") #Echo retour
ipv6Addr = ser.readline().strip()
print(ipv6Addr)

#Démarre la séquence de connexion PANA.
ser.write("SKJOIN " + ipv6Addr + "\r\n");
print(ser.readline(), end="") #Echo retour
print(ser.readline(), end="") #OK devrait venir (pas de chèque)

#En attente de la fin de la connexion PANA (renvoie environ 10 lignes)
bConnected = False
while not bConnected :
	line = ser.readline()
	print(line, end="")
	if line.startswith("EVENT 24") :
		print("Échec de la connexion PANA")
		sys.exit()	####Itofuyu####
	elif line.startswith("EVENT 25") :
		#Connexion terminée!
		bConnected = True

#Après cela, définissez le délai d'expiration de la communication série
ser.timeout = 2

#Le compteur intelligent lance une notification de liste d'instances
# (ECHONET-Lite_Ver.1.12_02.pdf p.4-16)
print(ser.readline(), end="") #ignorer

while True:
	#Création de cadres ECHONET Lite
	#Matériel de référence
	#・ ÉCHONET-Lite_Ver.1.12_02.pdf (EL ci-dessous)
	#· Appendice_H.pdf (Sous AppH)
	echonetLiteFrame = ""
	echonetLiteFrame += "\x10\x81"		# EHD (référence:EL p.3-2)
	echonetLiteFrame += "\x00\x01"		# TID (référence:EL p.3-3)
	#EDATA d'ici
	echonetLiteFrame += "\x05\xFF\x01"	# SEOJ (référence:EL p.3-3 AppH p.3-408~)
	echonetLiteFrame += "\x02\x88\x01"	# DEOJ (référence:EL p.3-3 AppH p.3-274~)
	echonetLiteFrame += "\x62"			# ESV(62:Demande de lecture de valeur de propriété) (référence:EL p.3-5)
	echonetLiteFrame += "\x01"			# OPC(1 pièce)(référence:EL p.3-7)
	echonetLiteFrame += "\xE7"			# EPC(référence:EL p.3-7 AppH p.3-275)
	echonetLiteFrame += "\x00"			# PDC(référence:EL p.3-9)
	
	#Envoyer la commande
	command = "SKSENDTO 1 {0} 0E1A 1 {1:04X} {2}".format(ipv6Addr, len(echonetLiteFrame), echonetLiteFrame)
	ser.write(command)

	print(ser.readline(), end="") #Echo retour
	print(ser.readline(), end="") #EVENT 21 devrait venir (non coché)
	print(ser.readline(), end="") #OK devrait venir (pas de chèque)
	line = ser.readline()         #ERX UDP devrait venir
	print(line, end="")
	
	#Les données reçues sont parfois accompagnées de données différentes
	#Parce qu'il peut être manqué et que des données étranges peuvent être récupérées.
	#Le contrôle est strict.
	if line.startswith("ERXUDP") :
		cols = line.strip().split(' ')
		res = cols[8]	#Partie de données reçues UDP
		#tid = res[4:4+4];
		seoj = res[8:8+6]
		#deoj = res[14,14+6]
		ESV = res[20:20+2]
		#OPC = res[22,22+2]
		if seoj == "028801" and ESV == "72" :
			#Compteur intelligent(028801)Réponse de(72)Si
			EPC = res[24:24+2]
			if EPC == "E7" :
				#Le contenu est une valeur de mesure de puissance instantanée(E7)Si c'est le cas
				hexPower = line[-8:]	#Les 4 derniers octets (8 caractères hexadécimaux) sont les mesures de puissance instantanée
				intPower = int(hexPower, 16)
				print(u"Mesure de puissance instantanée:{0}[W]".format(intPower))
				


#Je ne viendrai pas ici car c'est une boucle infinie
ser.close()

Voir les commentaires pour plus d'informations sur le programme.

Lorsque je fais cela, j'obtiens la sortie suivante: Puisqu'il s'agit d'un échantillon pour favoriser la compréhension, le contenu de la communication est bruyant.

$ ./bp35a1.py
SKVER
EVER 1.2.10
OK
SKSETPWD C XXXXXXXXXXXX
OK
SKSETRBID XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
OK
SKSCAN 2 FFFFFFFF 4
OK
EVENT 22 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX
SKSCAN 2 FFFFFFFF 5
OK
EVENT 20 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX
EPANDESC
  Channel:39
  Channel Page:09
  Pan ID:XXXX
  Addr:XXXXXXXXXXXXXXXX
  LQI:95
  PairID:XXXXXXXX
EVENT 22 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX
SKSREG S2 39
OK
SKSREG S3 XXXX
OK
SKLL64 XXXXXXXXXXXXXXXX
FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX
SKJOIN FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX
OK
EVENT 21 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 00

~ Omis ~

SKSENDTO 1 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0E1A 1 000E
EVENT 21 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 00
OK
ERXUDP FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0E1A 0E1A XXXXXXXXXXXXXXXX 1 0012 1081000102880105FF017201E704000002AE
Mesure de puissance instantanée:686[W]
SKSENDTO 1 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0E1A 1 000E
EVENT 21 FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 00
OK
ERXUDP FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX FE80:0000:0000:0000:XXXX:XXXX:XXXX:XXXX 0E1A 0E1A XXXXXXXXXXXXXXXX 1 0012 1081000102880105FF017201E7040000029B
Mesure de puissance instantanée:667[W]

~ Répéter ~

La première négociation prend environ 10 secondes. En outre, il semble que la réponse intervienne environ 1 seconde après avoir lancé la demande. J'ai l'impression que c'est un peu lent pour le "temps réel" et la "valeur instantanée".

en conclusion

Nous avons présenté le matériel BP35A1 pour communiquer avec le compteur intelligent et montré un échantillon minimum de logiciel qui l'utilise. Cela ressemble à un programme qui ne sort que vers la sortie standard, mais je pense que c'était utile pour comprendre les spécifications de communication car il n'y avait pas de code supplémentaire comme pour l'interface graphique.

Les compteurs intelligents ne peuvent être utilisés qu'en les connectant à divers appareils, donc je pense qu'il est très utile pour les utilisateurs généraux de pouvoir accéder aux informations en direct. Nous espérons que cet article vous aidera à l'appliquer à votre hack domestique.

Addendum 1

J'ai omis le site référencé. Excusez-moi.

Afficher la puissance instantanée et l'historique du compteur intelligent avec un navigateur Web

[J'ai fabriqué un wattmètre avec un compteur intelligent et Raspberry Pi] (http://chappnet.hateblo.jp/entry/2015/08/23/112738)

Addendum 2

Le format de réponse de ERXUDP (et ERXTCP) est binaire par défaut, mais il est peu pratique et doit être changé en ASCII hexadécimal.

Avant d'exécuter l'exemple de code Python, envoyons la commande WOPT 01 avec ** TeraTerm etc. ** **

Il n'est pas recommandé d'envoyer à partir du programme au démarrage car il ira au flash intégré au moment où vous tapez cette commande. Si vous souhaitez l'inclure dans votre programme, utilisez la commande ROPT pour lire les paramètres actuels et envoyez la commande WOPT 01 uniquement si vous devez la modifier.

Addendum 3

Il est controversé de savoir si le prix du dongle USB WSR35A1-00 est de 15 000 yens, ou le prix du BP35A1 et des environs est inférieur à 10 000 yens, ce qui est bon marché ou cher. C'est un titre accrocheur, mais je pense personnellement que c'est cher. Je pense que si nous pouvons obtenir plus d'appareils, nous pouvons nous rapprocher du prix du dongle WiFi (environ 1000 yens). Si vous connaissez un appareil moins cher, veuillez nous le faire savoir dans les commentaires. (Il semble qu'il existe une clé USB de 5000 yens pour Fretz Mill Energy, mais je ne connais pas les spécifications, donc je ne peux pas l'utiliser à moins de m'inscrire à Fretz Mierne.)

Addendum 4

Un produit appelé RL7023 Stick-D / IPS a été publié par Tesera Technology Co., Ltd. Vous pouvez l'acheter sur chip1stop pour 8 060 yens (hors taxes). Les spécifications de communication semblent être les mêmes que celles du WSR35A1-00 et du BP35A1. J'ai confirmé que le programme ci-dessus fonctionne tel quel. C'est petit et bon marché, donc la recommandation actuelle est ici.

DSC_0447.JPG

Addendum 5

Un kit Wi-SUN HAT pour connecter facilement le M5StickC et le BP35A1 est disponible sur BOOTH. Kit "Wi-SUN HAT" pour M5 Stick C Si vous souhaitez utiliser la série ESP32, je pense que cette combinaison est le meilleur achat. (Si vous souhaitez l'utiliser avec un périphérique USB tel que Raspeye, je pense que le RL7023 Stick-D / IPS dans la section précédente est bon.)

Recommended Posts

Extraire les informations des compteurs intelligents avec le matériel le moins cher
Lisez la puissance du compteur intelligent avec M5StickC (édition BP35C0-J11-T01)
Obtenez les dernières informations AMI avec l'AWS CLI
Découvrez le jour par date / heure