-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path9_Tasmota_Script_SML_Simulator.txt
105 lines (91 loc) · 2.96 KB
/
9_Tasmota_Script_SML_Simulator.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
>D 128
; SML Simulator Script von ottelo.jimdo.de
; Script zum Simulieren eines Smartmeters/Stromzählers
; Es erzeugt eine Zufalls-Wirkleistung in W und errechnet damit Netzbezug und Netzeinspeisung
; Momentan simuliert das Script einen MT175 Stromzähler. Damit das Script läuft muss ein angepasstes Tasmota Image
; mit SML Support + #define SCRIPT_MAXSSIZE 128 verwendet werden. Das biete ich
; auf meiner Seite an. Dann benötigt man ein IR Lesekopf mit ESP32 oder 8266.
; Die zufallsgenerierte Leistung/Arbeit/Energie wird unten in der >S Sektion
; zum String hinzugefügt und dann als SML Binary gesendet.
; Die Leistung wird jede Sekunde addiert. Wenn positiv dann +PwrFrGrd, wenn negativ dann
; +PwrToGrd. Nach 60s wird die Arbeit/Energie für den Zähler errechnet = EnFrGrd EnToGrd.
RndPwr=0
utm="00d 00h 00m"
PwrToGrd=0
PwrFrGrd=0
save=0
; Startwert Stromzählerwert kWh (Netzbezug)
p:EnFrGrd=10000
; Startwert Stromzählerwert kWh (Netzeinspeisung)
p:EnToGrd=500
; OBIS SML MT175 Stromzähler
; Netzbezug kWh. Ohne die letzten 10 Stellen, werden generiert
cEnIn="77070100010800ff650001018201621e52ff5900000000"
; Aktuelle Wirkleistung Watt. Ohne die letzten 10 Stellen, werden generiert
cPow="77070100100700ff0101621b520055"
; Netzeinspeisung kWh. Ohne die letzten 10 Stellen, werden generiert
cEnOut="77070100020800ff0101621e52ff5900000000"
>B
->sensor53 r
; sets decimal precision to 0
dp0
>M 1
; Stromzähler MT175 wird simuliert
; Rx-Pin=3 (N/A), s=SML, 0=kein Filter, 9600=baudrate, MT175=Name, 1=Tx-Pin
+1,3,s,0,9600,MT175,1
1,77070100100700ff@1,*Leistung,W,Power_curr,0
1,77070100010800ff@1000,*Verbrauch,KWh,Total_in,2
1,77070100020800ff@1000,*Netzeinspeisung,KWh,Total_out,2
>S
;Daten speichern Button
if (save==1) {
save=0
svars
print Daten wurden gespeichert
}
;Zeit seit letztem Boot
utm=s(2.0(int(uptime/1440)))+"d "+s(2.0(int(uptime/60)%24))+"h "+s(2.0(uptime%60))+"m"
; Zufallszahl 0..7000 - 2000 = Zufallsleistung -2000W .. +5000W
RndPwr=rnd(7000)-2000
; alle 1s: Leistung W jede Sekunde addieren
if (RndPwr<0) {
PwrToGrd-=RndPwr
} else {
PwrFrGrd+=RndPwr
}
; alle 60s: Arbeit/Energie berechnen
if (secs%60==0) {
if (PwrFrGrd>0) {
EnFrGrd+=PwrFrGrd/3600000
PwrFrGrd=0
}
if (PwrToGrd>0) {
EnToGrd+=PwrToGrd/3600000
PwrToGrd=0
}
}
; alle 5s: SML Werte senden (Hex String als binary)
if (secs%5==0) {
; Leistung
sml(1 1 cPow+hx(RndPwr)+"01")
; Netzbezug
sml(1 1 cEnIn+hx(EnFrGrd*10000)+"01")
; Netzeinspeisung
sml(1 1 cEnOut+hx(EnToGrd*10000)+"01")
}
>W
; web button
bu(save "gespeichert!" "Daten speichern")
Simulierte Zählerwerte:{m}
Aktuelle Leistung{m}%0RndPwr% W
Netzbezug (Verbrauch){m}%2EnFrGrd% kWh
Netzeinspeisung (PV){m}%2EnToGrd% kWh
; Zeit
<hr>{m}<hr>
Datum{m}%s(2.0day)%.%s(2.0month)%.%s(2.0year)% - %s(2.0hours)%:%s(2.0mins)%:%s(2.0secs)%
Uptime{m}%0utm%
$<center><span style="font-size:10px;">
$Version 25.01.2025 (SML Simulator) by ottelo.jimdo.de<br>
$Hinweis: Die Daten werden nicht automatisch gespeichert!<br>
$Speichern über Button oder Restart.<br>
$</span></center>