Hallo
du darfst an GPIO 0,1,2 KEINE reed Kontakte oder Schalter anschliessen, da sonst die CPU nicht mehr richtig booten kann.
(D3=GPIO0) (D4=GPIO2)
Gruß Gerhard
Hallo
du darfst an GPIO 0,1,2 KEINE reed Kontakte oder Schalter anschliessen, da sonst die CPU nicht mehr richtig booten kann.
(D3=GPIO0) (D4=GPIO2)
Gruß Gerhard
Alles anzeigenWirkleistung bei Einspeisung mit negativem Vorzeichen darstellen?!
Hi Miteinand,
wie bekannt, wird bei der Tasmota-Lösung die aktuelle Wirkleistung immer mit einem positiven Wert angegeben. Wenn man aber einen Zweirichtungszähler und Überschusseinspeisung hat, ist das ungünstig, da der Zähler zumindest bei der Wirkleistung Bezug anzeigt, obwohl man manchmal auch einspeist. Ich habe nun die Stelle gefunden die im SML-Protokoll des EMH ED300 L für das Vorzeichen infrage käme (danke an Ronald). Leider bin ich nicht so fit das ich mit dem Skripten in Tasmota oder auch mit Programmierung das Vorzeichen setzen kann.Kann mir einer auf die Sprünge helfen?
Hier der Zusammenhang aus dem SML-Protokoll:Verbrauch EMH ED300 L
77
07 01 00 01 08 00 ff Zählwerk positive Gesamtenergie (+A - Verbrauch)
64 01 01 82 → die 82 steht für Verbrauch/Bezug
→ Zählwerk pos. Wirkenergie, tariflos → Obis 1.8.0
77
07 01 00 02 08 00 ff Zählwerk ngegative Gesamtenergie (-A - Einspeisung)
64 01 01 82
→ Zählwerk neg. Wirkenergie, tariflos → Obis 2.8.0
Einspeisung EMH ED300 L
77
07 01 00 01 08 00 ff Zählwerk positive Gesamtenergie (+A - Verbrauch)
64 01 01 a2 → a2 steht für Einspeisung
→ Zählwerk pos. Wirkenergie, tariflos → Obis 1.8.0
77
07 01 00 02 08 00 ff Zählwerk ngegative Gesamtenergie (-A - Einspeisung)
64 01 01 a2
→ Zählwerk neg. Wirkenergie, tariflos → Obis 2.8.0
Bleibt gesund !
Danke!
Hallo
Bei Gesamtenergie machen negative Werte gar keinen Sinn!
Nur bei aktueller Wirkleistung ist das sinnvoll und funktioniert bei den meisten Zählern auch problemlos (z.B. bei meinem Zweirichtungszähler EHZ363)
Dein Zähler gibt laut Datenblatt bei aktueller Wirkleistung nur den Betrag aus, also auch nur positive Werte.
Gruß Gerhard
Pos |
OBIS-T-Kennzahl |
Bezeichnung |
OBIS Kenn- zahl |
Ein- richtungs- zähler |
Ein- richtungs- zähler |
Zwei- richtungs- zähler |
Saldie- render Zähler |
1 |
81 81 C7 82 03 FF |
Hersteller |
X |
X |
X |
X |
|
2 |
01 00 00 00 09 FF |
Gerätenum mer |
0.0.9 |
X |
X |
X |
X |
3 |
01 00 01 08 00 FF |
Zählwerk pos. Wirkenergie, tariflos |
1.8.0 |
X |
X |
||
4 |
01 00 02 08 00 FF |
Zählwerk neg. Wirkenergie, tariflos |
2.8.0 |
X |
X |
X |
|
5 |
01 00 01 08 01 FF |
Zählwerk pos. Wirkenergie, Tarif 1 |
1.8.1 |
X |
X |
||
6 |
01 00 02 08 01 FF |
Zählwerk neg. Wirkenergie, Tarif 1 |
2.8.1 |
X |
X |
X |
|
7 |
01 00 01 08 02 FF |
Zählwerk pos. Wirkenergie, Tarif 2 |
1.8.2 |
X |
|||
8 |
01 00 0F 07 00 FF |
Aktuelle pos. Wirkleistung Betrag |
15.7.0 |
X |
X |
X |
X |
9 |
01 00 01 11 00 FF |
Signierter Zählerstand (nur im EDL40- Modus) |
1.17.0 |
X |
X |
||
10 |
81 81 C7 82 05 FF |
Public Key |
X |
X |
X |
X |
Hallo Jens,
>T wird immer alle Teleperiod Sekunden aufgerufen.
Der Fehler war dass ein Leerzeichen vor der geschweiften Klammer gebraucht wird.
if temp>=max {
-> power1
}
if temp<=min {
-> power1 1
}
werde mal untersuchen ob man das ändern kann.
eine script Variable kannst du mit =>publish ... an den broker senden
oder aber in der >J Sektion eintragen.
die Unit eines Datenpunktes wird nicht übertragen. (ist bei den meisten Variablen nicht im JSON enthalten)
nur z.B. bei wenigen wie der Temperatur wird die Variable TempUnit zusätzlich gesendet und ergibt aber eine extra Variable im Broker.
Es gibt in IObroker bei vordefinierten Variablen aber ein Default unit. Diese vordefinierten Variablen sind in der Datei datapoints.js enthalten.
diese Datei kannst du editieren und z.B. die Luftfeuchtigkeit mit Unit vordefinieren.
Wenn IObroker eine JSON Variable in dieser Liste nicht findet wird automatisch (wenn die Häkchen im Setup gesetzt sind) eine Variable diese Namens angelegt aber ohne Unit.
Gruß Gerhard
über Sektion >E kommen 2 Tasmota calls herein.
FUNC_SET_POWER (kein MQTT JSON)
FUNC_RULES_PROCESS (MQTT JSON)
bei Dimmer xx werden beide Calls aktiviert wenn sich dabei POWER ändert, >E wird also 2 mal aufgerufen.
Habe jetzt die Option eingebaut beide getrennt zu verarbeiten (#define SCRIPT_POWER_SECTION)
FUNC_SET_POWER >P
FUNC_RULES_PROCESS >E
workaraound geht bei mir
>D
p1=0
>E
p1=pwr[1]
if chg[p1]>0
then
break
endif
dann dein bisheriger kode
immer wenn POWER wechselt von ON zu OFF oder umgekehrt wird offensichtlich kein gültiger JSON geschickt.
in beiden Fällen Dimmer not found.
wenn dimmer auf 0 gesetzt wird wird Power auch auf 0 gesetzt
wird dimmer >0 gesetzt wird power auf 1 gesetzt.
Hallo Jens,
Falls du das script an das gerade benutze Display anpassen willst =>
Die Parameter des Displays kannst du z.B. so auslesen:
>D
xs=0
ys=0
mo=0
>B
+>Display
>E
mo=Display#Model
xs=Display#Width
ys=Display#Height
print %xs% %ys% %mo%
Gruß Gerhard
Hallo Jens
Displaymodel stellt man nur einmal ein. 2 Displays gleichzeitig werden nicht unterstützt.
Was hast du denn für Probleme mit dem Display ?
Gruß Gerhard
das darf nicht sw heissen der Name ist für sw[x] reserviert
nimm z.B. s1=sw[1]
t:t1=0 hätte es heissen sollen!
sorry das endif ist beim kopieren verloren gegangen.
In der jetzigen Konfiguration bekomme ich die erste Volumen Meldung nach dem Booten erst nach 20 Minuten.
die Sensordaten werden erst nach ein paar Sekunden in Sektion >T geliefert so dass du direkt nach dem Booten noch warten musst.
eventuell würde ich die Berechnung und auch Displayanzeige z.B alle 10 Sekunden machen lassen und nur den Publish alle 20 Minuten
also
if upsecs%10==0
;calculate and display
endif
if upsecs%tper==0
; publish
endif
Versuchs mal damit.
Tipp nimm wenns geht -> statt =>
das erzeugt sonst zu viel unnötigen MQTT Traffik
>D
r=100 ;Radius liegende Zisterne in cm
l=207 ;Länge liegende Zisterne in cm
h=0 ;Wasserstand in cm
a=0 ;Berechnungswinkel
v=0 ;Volumen
m=0 ; Analogwert des Levelsensors
DT="DisplayText"
hr=0
t:t1
>T
m=ANALOG#A0
if m<601
then
h=ANALOG#A0/3
endif
>S
;update every teleperiod
if upsecs%tper==0
then
a=2*acos((r-h)/r)
v=l/1000*((r*r)/2)*(a-sin(a))
print Wstd :%h%
print Winkel Alpha:%a%
print Volumen :%v% Liter
->%DT% [s1p21c1l01]Volumen
->%DT% [s1p21c1l02]%0v%
->%DT% [s1p21c1l03]Liter
=>publish stat/%topic%/RESULT %0v%
Nachspeisung
if v<5000
then
n=1
endif
if v>6000
then
n=0
endif
print Nachspeisung :%n%
hr=hours
if chg[hr]>0
and n>0
then
t1=60
endif
if t1>0
then
->power2 1
else
->power2 0
endif
>W
Füllmenge {m} %0v% Liter
Der Fonteditor ist auf meinem Fork im Ordner Fonteditor. (Mac und PC Version)
Du editierst damit direkt die Zeichen im C Quelltext in den Fontfiles und musst danach neu kompilieren.
ich würde für das Grad Zeichen der Einfachheit halber ein kleines O aus dem kleinsten Font nehmen und entsprechend platzieren.
Die analoge Uhr muss man noch definieren #define USE_AWATCH
Prozentzeichen ist %%
das Grad Zeichen musst du suchen im Font => https://github.com/arendst/Tasmota/wiki/Displays
und dann per escape ansteuern (ist dort auch erklärt)
Eventuell musst du die Fontdatei editieren (Dazu habe ich einen eigenen Fonteditor gebaut)
Du must für SPI die Hardware Pins nehmen, nur so geht es.
der Jumper muss auf 3-Wire SPI stehen also BS=1 und DC auf GND
und diese defines.
#define USE_DISPLAY
#define USE_SPI
#define USE_DISPLAY_SSD1351
Dieses Script zeigt eine farbige Analog und Digitaluhr an
\>D
min=0
\>B
->displaytext [Bi0z]
->displaytext [Ci2x0y0r128:128]
\>S
->displaytext [f1Ci4c6l10tS]
->displaytext [Ci5c6l2T]
min=mins
if chg[min]>0
then
->displaytext [Ci3x64y64w30]
endif
Gruß Gerhard
Hallo Jens,
gib das Kommando z.B. script 1 in der Konsole an. In Iobroker Sonoff zuvor auf Autogenerate stellen.
Dann wird die Variable script in iobroker automatisch erzeugt.
im Tasmota script die Variablen definieren
>D
temp1=0
temp2=0
dann in iobroker javascript die Variablen setzen mit z.B.
setState('sonoff.0.RA8876.Script','>temp1=20.3;temp2=27.2');
noch zur Ergänzung:
die in den vorigen Beiträgen genannten Änderungen sind nicht mehr nötig.
und es geht schon ab 12k Ram
du brauchst meine Version von heute und musst den core pre 2.6
benutzen
wenn du SML nicht brauchst dann einfach USE_SML_M NICHT definieren.