-
Notifications
You must be signed in to change notification settings - Fork 2
/
MT681-4xS0Impuls-Zaehler-script.txt
250 lines (200 loc) · 9.52 KB
/
MT681-4xS0Impuls-Zaehler-script.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
Das Script ist ein Beispiel für 4*S0 Impuls Zähler und einem SML Zähler Type MT681 auf einer ESP32(x) CPU
Wenn man das Chipinterne Speichern entfernt, dann ist es auch für ESP 8285/8266 geeignet.
Ist noch nicht ganz fertig, aber als erstes Beispiel sollte es taugen.
Ich verwende hierfür einen ESP32C6zero https://www.waveshare.com/wiki/ESP32-C6-Zero
bezogen von
https://de.aliexpress.com/item/10050068515756
63.html?spm=a2g0o.order_list.order_list_main.5.7b785c5f1VQl7o&gatewayAdapt=glo2deu
Die passende deutschsprachige Tasmota Version finden Sie unter //github.com/HofeBY und ich verwende die,
welche kein RULES im Namen trägt. Bei diesem also tasmota32c6(.factory).bin
CPU Temperatur durch Kommando "SO146 1" aktivieren. ( ESP32(x) CPU )
->Einstellungen->Geräteeinstellungen->GPIO8 ist bei ESP32C6zero als WS2812 konfiguriert.
Für die 4*Impuls & 2*TTL GPIO´s in ->Einstellungen->Geräteeinstellungen->GPIO6/7/9/23/1/3 muss "none" eingetragen sein!
Nachdem Sie unter "->Werkzeuge->Script konfigurieren" den Haken bei "Script aktivieren" gesetzt haben sollten Sie den gesamten Inhalt
incl. ">D" per "Cut&Paste" siehe unterhalb "Hier mein vorläufiges Script.txt" einfügen.
Nun sollten Sie in Section ">M" die jeweilige "ZNr...." gegen die Ihrer Zähler eintragen. (Kann auch später nachgeholt werden)
"speichern" nicht vergessen !
Die Belegung dieser GPIO´s für Impulszähler & TTL-RxD/TxD geschieht in der Script.txt.
PW steht für Parterre West und ein g davor steht für globale Variable, welche direkt an lokale Tasmota Geräte übermittelt wird.
In meinem Beispiel haben die 4*S0 Impulszähler 10 l / Impuls.
Für die vier S0 Impulszähler wurden die GPIO 6,7,9,23 Rückseite verwendet, mittels Drahtbrücke von GND an GPIOx Pad wird ein Impuls gezählt.
SML nutzt GPIO3 als RxD und GPIO1 als TxD für IR TTL-Adapter und wird im script.txt belegt.
So, nun sollten sie wie im Bild wie "MT681-4xS0Impuls-Zaehler-script.jpg" aussehen. Ein paar Werte werden noch fehlen.
Jetzt folgt das Prüfen der S0 Signaleingänge in dem man den jeweiligen GPIO 6,7,9,23 mit Drahtbrücke jeweils gegen GND tastet.
Das sollte entsprechend Werte beim jeweiligen Zählereingang einen neuen Zählwert auslösen.
Nun, da die S0 Impulszählereingänge als funktionstüchtig geprüft sind, wagen wir den ersten Versuch.
Wir merken Uns die Zählerstände und entfernen die Stromversorgung des ESP.
Nach ein paar Sekunden Stromversorgung wieder einstecken & Zählerstände auf Startseite vergleichen.
Richtig bemerkt, es fehlen Zählerwerte !
Nun möchten Wir den entsprechenden Zählereingang mit dem aktuellen Wert auf dem physischen Zähler gleich einstellen.
Meine Zähler machen 10 l / Impuls & haben somit 100 Impulse pro m³
Berechnung jeweiliger NeuerWertX=100*Zählerablesewert (m³) mit Nachkommastellen.
NeuerWertX werden Nachkommastellen abgeschnitten !
hierzu verwenden wir das Kommando "sensor53 cX NeuerWertX" eingegeben unter "Werkzeuge/Konsole/Befehl eingeben" ->
sensor53 c1 NeuerWert1 ENTER
sensor53 c2 NeuerWert2 ENTER
sensor53 c3 NeuerWert3 ENTER
sensor53 c4 NeuerWert4 ENTER
->Werkzeuge->Hauptmenü->Neustart
Hoffentlich passen wie bei mir die Zählerstände auch noch nach dem "Neustart".
Mein Gas Zähler hat bei 100 Impulsen (1m³) einen Wärmeenergie Wert von 11,5kWh/m³ .
Vergleichen Sie das mit Ihrer Gasrechnung, evtl. Berechnung beim 4.Zähler anpassen.
Anmerkung zu S0 Impulseingängen werden über die Zeit aufsummiert, aber nicht selbststädig in den
nicht flüchtigen Speicher geflasht !
Beim Anwenden von "Neustart" ohne Unterbrechung der Stromversorgung hat es aber ja doch gespeichert.
Kann man durch Spannungsversorgungs Unterbrechung ja erneut prüfen.
Erklärung:
Erst ein Kommando "svars" speichert diese veränderten flüchtigen Zählerwerte ab.
siehe Section >R bei Reboot oder >S im Fall der "PWZaehler-20??.CSV" Speicherung um 0:00h .
Es bedeutet auch, das wenn man die Stromversorgung unterbricht, das noch nicht gespeicherte flüchtige Zählerwerte
(S0 Impulse) verloren gehen ! Also erst "Neustart", dann ausstecken !
Ansonsten wird korrigieren der Zählerwerte siehe oberhalb fällig.
Mein mqtty Broker ist IOBroker mit Instanz "sonoff" Port 1883 installiert.
Die Zählerwerte werden via mqtty an einen Broker z.B. IOBroker übertragen.
Zusätzlich werden einige weitere Wert zusätzlich via mqtty übermittelt.(z.B. Archiv-...)
Einstellungen "IOBroker Instanz Sonoff" siehe "IOBroker-Instanz-Sonoff-Einstellungen.jpg"
Es werden globale Variablen mit Wert sowohl gesendet, als auch empfangen, wenn diese von anderen ESP´s versendet wird.
Globale Variablen eignen sich hierzu, da kein großer Konfigurationsaufwand entsteht und der Sender die Empfäger nicht einbinden muss.
Tages Zählerstartwerte werden um 0:00h in eine "PWZaehler-JAHR.CSV" Datei auf Chip internem Filesystem (320k Byte) geschrieben.
Also jedes Jahr eine weitere Datei und Täglichen neuem Eintrag.
Bitte rechtzeitig vor Überfüllung die alten Dateien rauskopieren geschätzt mehr als ca.10Jahre.
Nach ein paar Tagen mit funktionstüchtigem SML Leser mit 4xS0 Impulszählern sehen wir Uns das "Archiv-..." Verzeichnis auf dem IOBroker an.
Uns wird schnell klar, das das tägliche loggen der Tageszählerwerte xx1.8.0 und xx2.8.0 eine Menge Einträgen verursacht.
Zum ersten prüfen ob alles funktioniert ja ganz schön, aber am Jahresende wären mehr als 700 Einträge zu löschen.
Deshalb empfehle ich Section ">J" die Zeilen mit "day" am Zeilenanfang mit einem ";" ergänzt zu speichern.
Ab jetzt gibt´s nur noch Monatliche/Jährliche Werte.
Weitere Sensor Optionen siehe Beschreibung Liesmich-zuerst.txt :
Ich habe einen DS3231(mit internem Temperatursensor) an I²C Bus mit einkompiliert, damit der SML ESP eine lokale
NTP Zeitbasis ermöglicht & auch als NTP Server für weitere LAN Teilnehmer dienen kann.(+Temperaturmessung im Zählerschrank)
Das macht Ihn gegen nur temporär vorhandener Internetverbindung (NTP Zeitsynchronikation) unempfindlich.
Anleitung siehe :
https://tasmota.github.io/docs/Smart-Meter-Interface
https://tasmota.github.io/docs/Scripting-Language/
möglicher Reed für Gaszähler:
https://www.conrad.de/de/p/pic-ms-328-3-reed-kontakt-1-schliesser-200-v-dc-140-v-ac-1-a-10-w-503533.html?refresh=true
https://www.thingiverse.com/thing:5175961#google_vignette
Hier mein vorläufiges Script.txt :
>D
rssi=0
CPUtemp=0
fr=0
res=0
cnt=0
str=""
hr=0
dy=0
yr=0
swesp=0
;Zähler Variablen evtl. Startwert setzen.
PWKWZ=0
PWWWZ=0
HWZ=0
Gas=0
Ar=",77070100"
Au="ff@1000,"
g:gPW1670=0
g:gPW180=0
g:gPW280=0
;Externe Datenquellen
g:gotemp=0
g:gA1670=0
g:gopress=0
>B
>BS
dp1,2
->sensor53 r
>T
rssi=WiFi#rssi
CPUtemp=ESP32#Temperature ;activate with command "SO146 1"
gPW1670=PWMT681#PW16_7_0
gPW180=PWMT681#PW1_8_0
gPW280=PWMT681#PW2_8_0
PWKWZ=PWKWZ#KWZ
PWWWZ=PWWWZ#WWZ
HWZ=HWZ#HWZ
Gas=Gas#Gas
>G
>S
if upsecs%300==0
{
gvr
}
if upsecs%tper==0 {
;knx(26 sml[1]) ;KNX TX1
;knx(27 sml[2]) ;KNX TX2
;knx(28 sml[3]) ;KNX TX3
;knx(29 sml[3]) ;KNX TX4
;knx(30 gPW1670);KNX TX5
;=>WebSend [192.168.178.9] Power on ; 1. Relais an bei IP
}
;0:00h Tagesstart Variablen in Datei PWZaehler-JAHR.CSV schreiben
hr=hours
if chg[hr]>0
and hr==0
{
fr=fo("/PWZaehler-"+s(0year)+".csv" 2)
res=fw(s(4.0year)+s(2.0month)+s(2.0day) fr)
res=fw(";"+s(3gPW180)+";"+s(3gPW280) fr)
res=fw(";"+s(2PWKWZ)+";"+s(2PWWWZ) fr)
res=fw(";"+s(2HWZ)+";"+s(2Gas) fr)
res=fw("\r\n" fr)
fc(fr)
svars
} ;Day
>J
; Hier wird via mqtt ergänzende Werte mit Datum zum Server übermittelt ;vor Zeile und Wert wird weggelassen ;-) day
,"PWMT681":{"PWMT681-ZNr":"1020130008154711"}
,"Archiv-PWMT681":{"PWMT681-ZNr":"1020130008154711"
,"PWMT681-1_8_0-Y%0year%":%3gPW180%
,"PWMT681-1_8_0-Y%0year%-M%0month%":%3gPW180%
,"PWMT681-1_8_0-Y%0year%-M%0month%-D%0day%":%3gPW180%
,"PWMT681-2_8_0-Y%0year%":%3gPW280%
,"PWMT681-2_8_0-Y%0year%-M%0month%":%3gPW280%
,"PWMT681-2_8_0-Y%0year%-M%0month%-D%0day%":%3gPW280%
}
>R
svars ;speichern der Variablen um Zählverluste zu vermeiden
print Wir starten den ESP %dvnm% neu.
>W
bu(swesp "ESP aktiv" "ESP geblockt")
Timestamp: %tstamp%h {m}
%dvnm% WLAN IP: %lip% {m}%rssi% %%
swesp = %0swesp% zeigt Schalterlaubnis Schaltbutton
Variablen von %dvnm%:
PWKWZ %2PWKWZ% m³
PWWWZ %2PWWWZ% m³
HWZ %2HWZ% m³
Gas %2Gas% m³
Gesendete globale Variablen von %dvnm%:
gPW1670 %1gPW1670% W
gPW180 %4gPW180% kWh
gPW280 %4gPW280% kWh
Globale externe Variablen:
gotemp Außentemperatur %1gotemp% °C von 11ESP8266
gA1670 %1gA1670% W Strom aktuell aus 21ESP32
gopress Luftdruck %1gopress% hPa aus 20ESP8266
>M 5
+1,6,c,1,-100,PWKWZ
1,=h PW Kaltwasser ZNr_2024-553346
1,1-0:1.8.0*255(@100,Kaltwasser Verbrauch,m³,KWZ,2)
1,1-0:1.7.0*255(@0.16667,Kaltwasser akt,l,strom,1)
+2,7,c,1,-100,PWWWZ
2,=h PW Warmwasser ZNr_2024-8795543
2,1-0:1.8.0*255(@100,Warmwasser Verbrauch,m³,WWZ,2)
2,1-0:1.7.0*255(@0.16667,Warmwasser akt,l,strom,1)
+3,9,c,1,-100,HWZ
3,=h PW Hauswasser ZNr_47110815
3,1-0:1.8.0*255(@100,Hauswasser Verbrauch,m³,HWZ,2)
3,1-0:1.7.0*255(@0.16667,Hauswasser akt,l,strom,1)
+4,23,c,1,-500,Gas
4,=h PW Gas ZNr_08154711
4,1-0:1.8.0*255(@100,Gas Verbrauch,m³,Gas,2)
4,1-0:1.8.0*255(@8.695,Gas Verb.kWh,kWh,GaskWh,3)
4,1-0:1.7.0*255(@0.16667,Gas akt Verbrauch,l,strom,2)
4,1-0:1.7.0*255(@0.11519,Gas akt kW,kW,GaskW,3)
+5,5,s,1,9600,PWMT681,3,10
5,=h PW PWMT681 1020130008154711
5,77070100100700ff@1,16.7.0 akt.Leistung,W,PW16_7_0,17
5%Ar%010800%Au%1.8.0 HT&NT Bezug,kWh,PW1_8_0,4
5%Ar%020800%Au%2.8.0 HT&NT Lieferung,kWh,PW2_8_0,4
#