Hallo,
wollte euch mal ne kleine Anleitung zusammen stellen wie man einfach und günstig einen Zähler auslesen kann.
Ob OBIS oder SML geht beides, (OBIS nicht getestet, da kein Zähler vorhanden…
Diese Methode richtet sich nur an die Zähler die selbständig Daten regelmäßig absenden, hier wird also
nur eine IR lese Diode verwendet, ohne schreib Diode!
Übernehme aber keine Haftung, nachmachen auf eigene Gefahr!
Zum Beispiel werde ich meine Zähler nehmen diese Sind von ISKRA und heißen TM691.
Was braucht man für diese Lösung:
1: Die PIN für den Zähler von dem Netzbetreiber. (Damit gibt es aktuelle und genaue Werte).
2: 5V im Schaltschrank oder der Nähe, ich nutze einfaches Netzteil für 230V Steckdose mit 2 USB Anschlüssen.
3: Ausreichend starkes WLAN, ohne WLAN gehts nicht.
4: PC um Arduino IDE oder Atom zu starten um den ESP8266 zu flashen.
5: Lötkolben am ESP müssen 2 Kabel angelötet werden, so wie die Diode am Kabel
6: ESP8266, ich verwendete Wemos D1-Mini, USB Kabel um dies am PC anzuschließen und später für die Stromversorgung.
7: Die IR Diode ich verwendete diese, da diese flach ist und so mit besser ankleben lässt: TEKT5400S. Mann kann jede andere gleichwertige nehmen!
8: Die Tasmota Software die ich etwas vorbereite, werde dort das unnötige abschalten.
Software vorbereiten
Die Arduino IDE oder Atom müssen bereits installiert sein und der Chip ESP8266 eingebunden sein und auch
alles richtig eingestellt sein um auf den Chip schreiben zu können.
Hier ist beschrieben wie man ESP8266 hinzufügt: https://blog.opendatalab.de/codeforbuga/2016/07/02/arduino-ide-mit-nodemcu-esp8266
Nicht vergessen die Bibliotheken in das Bibliotheken Ordner zu kopieren, sonst gehts nicht.
So sehen meine Einstellungen aus, nu den Port müsst Ihr bei euch auswählen:
Dann muss noch Tasmota im Arduino IDE eingestellt werden, damit Ihr ins Wlan kommt. MQTT kann man auch gleich machen aber auch
später in der Weboberfläche des Tasmota.
Dies macht Ihr so:
in der Datei:
my_user_config.h
Wlan und bei bedarf MQTT eintragen
// -- Wifi ----------------------------------------
#define WIFI_IP_ADDRESS "0.0.0.0" // [IpAddress1] Set to 0.0.0.0 for using DHCP or enter a static IP address
#define WIFI_GATEWAY "192.168.1.1" // [IpAddress2] If not using DHCP set Gateway IP address
#define WIFI_SUBNETMASK "255.255.255.0" // [IpAddress3] If not using DHCP set Network mask
#define WIFI_DNS "192.168.1.1" // [IpAddress4] If not using DHCP set DNS IP address (might be equal to WIFI_GATEWAY)
#define STA_SSID1 "Deine Wlan SSID" // [Ssid1] Wifi SSID
#define STA_PASS1 "Dein Wlan Passwort" // [Password1] Wifi password
#define STA_SSID2 "" // [Ssid2] Optional alternate AP Wifi SSID
#define STA_PASS2 "" // [Password2] Optional alternate AP Wifi password
#define WIFI_CONFIG_TOOL WIFI_RETRY // [WifiConfig] Default tool if wifi fails to connect (default option: 4 - WIFI_RETRY)
// (WIFI_RESTART, WIFI_MANAGER, WIFI_RETRY, WIFI_WAIT, WIFI_SERIAL, WIFI_MANAGER_RESET_ONLY)
// The configuration can be changed after first setup using WifiConfig 0, 2, 4, 5, 6 and 7.
// -- MQTT ----------------------------------------
#define MQTT_USE 1 // [SetOption3] Select default MQTT use (0 = Off, 1 = On)
#define MQTT_HOST "" // [MqttHost]
#define MQTT_FINGERPRINT1 "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00" // [MqttFingerprint1]
#define MQTT_FINGERPRINT2 "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07" // [MqttFingerprint2]
#define MQTT_PORT 1883 // [MqttPort] MQTT port (10123 on CloudMQTT)
#define MQTT_USER "" // [MqttUser] MQTT user
#define MQTT_PASS "" // [MqttPassword] MQTT password
Hier ist noch wichtig diesen Eintrag zu machen #define USE_SML_M:
// -- Serial sensors ------------------------------
#define USE_SML_M
//#define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code)
//#define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code)
// #define CO2_LOW 800 // Below this CO2 value show green light (needs PWM or WS2812 RG(B) led and enable with SetOption18 1)
Danach ist noch wichtig in der Datei xsns_53_sml euren Zähler auszuwählen oder zu konfigurieren!
In der Spalte könnt Ihr die Anzeige namen in der WEB Oberfläche anpassen, habs mir etwas angepasst. Dies ist nur ein ausschnitt.
// max 23 chars
#if DMY_LANGUAGE==de-DE
// german web text
#define D_TPWRIN "Verbraucht"
#define D_TPWROUT "Eingespeist"
#define D_TPWRCURR "Live Leistung"
#define D_TPWRCURR1 "Verbrauch P1"
#define D_TPWRCURR2 "Verbrauch P2"
Hier könnt Ihr die Namen die über MQTT gesendet werden ändern:
// JSON Strings do not translate
// max 23 char
#define DJ_TPWRIN "Total_in"
#define DJ_TPWROUT "Total_out"
#define DJ_TPWRCURR "Power_curr"
#define DJ_TPWRCURR1 "Power_p1"
#define DJ_TPWRCURR2 "Power_p2"
#define DJ_TPWRCURR3 "Power_p3"
Und hier trägt Ihr euren Zähler ein:
// select this meter
#define METER EBZD_G
Da drunten kommen jetzt alle verfügbaren Zähler die man auswählen kann, hier das Beispiel was bei mir funktionierte:
#if METER==EBZD_G
#undef METERS_USED
#define METERS_USED 1
struct METER_DESC const meter_desc[METERS_USED]={
[0]={3,'s',0,SML_BAUDRATE,"Meter",-1,1,0}};
const uint8_t meter[]=
//0x77,0x07,0x01,0x00,0x01,0x08,0x00,0xff
"1,77070100010800ff@1000," D_TPWRIN ",KWh," DJ_TPWRIN ",4|"
// ..
"1,77070100020800ff@1000," D_TPWROUT ",KWh," DJ_TPWROUT ",4|"
// 77 07 01 00 10 07 00 FF
"1,77070100100700ff@1," D_TPWRCURR ",W," DJ_TPWRCURR ",0|"
// ..
"1,77070100600100ff@#," D_METERNR ",," DJ_METERNR ",0";
#endif
Da müsst Ihr vielleicht mal ausprobieren welche Einstellungen zu euren Zähler passen würden.
Für den MT691 musste ich auch als ausprobieren. Wenn Ihr das machen müsst ist das gar nicht so schwer:
#if METER==EBZD_G
#undef METERS_USED
#define METERS_USED 1
struct METER_DESC const meter_desc[METERS_USED]={
[0]={3,'s',0,SML_BAUDRATE,"Meter",-1,1,0}}; Meter ist Topic könnt euch anpassen wie Ihr wollt
const uint8_t meter[]=
//0x77,0x07,0x01,0x00,0x01,0x08,0x00,0xff Die letzen 6 Zahlen vor ff sind der Code der auch im Zähler ist
"1,77070100010800ff@1000," D_TPWRIN ",KWh," DJ_TPWRIN ",4|" 1.8.0 = 010800
// ..
"1,77070100020800ff@1000," D_TPWROUT ",KWh," DJ_TPWROUT ",4|" 2.8.0 = 020800
// 77 07 01 00 10 07 00 FF
"1,77070100100700ff@1," D_TPWRCURR ",W," DJ_TPWRCURR ",0|" 10.7.0 = 100700
// ..
"1,77070100600100ff@#," D_METERNR ",," DJ_METERNR ",0";
#endif
Da kann man verschiedene Codes ausprobieren, ich hab keine weiteren für den MT691 gefunden.
Nun wenn alles eingestellt ist, muss man noch den ESP8266 damit beschreiben, hoffe das klappt auf anhieb.
Wenn nicht Einstellungen zu dem Board überprüfen.
Wenn alles klappte müsste der ESP im Wlan sein, entweder in dem Router nach der IP schauen oder über Seriellen Monitor.
Jetzt könnt Ihr die IP in den Browser eingeben und diese aufrufen. Da müsste die Hauptseite der Tasmota kommen.
Wird aber erst alles mit nullen sein, da die Diode noch nicht dran ist. Bei euch könnten mehr oder weniger Zeilen sein,
kommt auf eure Einstellungen drauf an. Bei mir sieht es so aus, ist aber bereits mit Daten:
Bei Live Leistung wird bei mir der Wert mit einem Minus vorgesetzt, das kommt deswegen das wir eine Photovoltaikanlage haben.
Der Wert ist das was wir zu dem Netzbetreiber einspeisen nach dem Selbstverbrauch.
Hardware Vorbereitung
Nun kommt unsere Diode ins Spiel, diese muss nun an den ESP8266 angelötet werden, da würde ich kurzen Kabel empfehlen.
Wenn dieser länger sein sollte, bitte einen abgeschirmten nehmen.
Das Datenblatt der Diode ist hier zu finden: (PDF) https://www.vishay.com/docs/81569/tekt5400.pdf
Emitter kommt nach GND! Collector kommt nach RxD! Eigentlich sollte ein 1k Widerstand von 3.3V zu Collector angelötet sein.
Bei mir funktioniert es auch ohne wunderbar!
Nun kann man die Diode über die Sendediode am Zähler ankleben. Denkt dran Wlan muss gut verfügbar sein und 5V muss auch
da sein. Eine Powerbank könnte da auch mal aushelfen. Es ist nicht hübsch aber so sieht es bei mir aus:
Danach hoffentlich bekommt Ihr die Werte auf der Weboberfläche zu sehen, wenn nicht alles noch mal kontrollieren.
Tasmota Config
Nun könnt Ihr bei bedarf Einstellungen vornehmen die Ihr brauch bei MQTT z.B. etc.
Bei mir musste ich keinen Pin auswählen, es funktionierte auf anhieb!
Wenn Ihr in der Console teleperiod 10 eintippt wird alle 10 Sekunden eine MQTT Nachricht gesendet.
Kürzer geht meines wissens nicht, überlege auch die Zeiten zu verlängern, da im IPS sammeln sich schon
vielen Daten an.
So sehen die Einstellungen bei mir aus:
Die Console spuckt alle 10 Sekunden folgendes aus:
15:16:16 MQT: tele/Abstellraum_Hauptzaehler_Strom/STATE = {"Time":"2019-10-26T15:16:16","Uptime":"0T00:04:56","UptimeSec":296,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":20,"MqttCount":1,"Wifi":{"AP":1,"SSId":"Wlan Name","BSSId":"44:4E:6D:A5:E3:71","Channel":6,"RSSI":72,"LinkCount":1,"Downtime":"0T00:00:05"}}
15:19:56 MQT: tele/Abstellraum_Hauptzaehler_Strom/SENSOR = {"Time":"2019-10-26T15:19:56","Meter":{"Total_in":64.2345,"Total_out":405.0207,"Power_curr":-411,"Meter_number":"0a0149534b000XXXXXX"}}
IPS
Nun müsst Ihr schauen wie Ihr MQTT in eurem IPS verarbeite, bei mir werden die Variablen alle 10 Sek aktualisiert.
Naja hallt wenn MQTT rein kommt…
So sieht das ganze aus, leider von dem zweiten Zähler habe ich noch keine PIN:
Wie man sehen kann schreibt er bei mir ins Minus, eigentlich logisch da die Werte mit Minus rein kommen.
Wenn Ihr Ideen habt wie man noch weitere Variablen hinzufügen kann. Und auch welche von verschiedenen
Werten herausrechnen könnte?
IPS ist für mich noch neuland, daher nicht so einfach.
Was haltet Ihr von dem ganzen? Wo kann man was verbessern?
Gruß