acp(array 0) löscht das array array (erst in letzter tasmota release)
wenn du ein Dateisystem hast speicherst du das array besser ab und lädst es beim Neustart wieder.
acp(array 0) löscht das array array (erst in letzter tasmota release)
wenn du ein Dateisystem hast speicherst du das array besser ab und lädst es beim Neustart wieder.
chg[v_heut] ist immer 0 wenn die variable nicht geändert wurde. insofern macht das keinen sinn auf 0 zu vergleichen.
>D
cday=0
>S
cday=day
if chg[cday]>0
and cday>0 {
; tag hat sich geändert
}
Nur zur Info bez openweathermap etc.
Habe jetzt eine Lösung eingebaut auch sehr grosse Webseiten auszulesen z.B. weatherforecast (16 kb)
Das geht über den Umweg das die Seite in eine lokale Datei eingelesen wird und dann mit einem neuen Datei Suchbefehl die Datei ähnlich gwr() durchsucht werden kann.
Das benötigt kaum RAM Speicher und geht auch auf ESP8266 mit Dateisystem
einlesen der Datei
fres =fo("/web.txt" w)
res=frw(fres "api.openweathermap.org/data/2.5/forecast?lat=44.34&lon=10.99&appid=f6c....")
print erbenis: %res%
fc(fres)
einige werte auslesen
1)
websend sendet, webquery sendet mit Anwort
beides sind Tasmota Konsolen Befehle
http() ist ein script Befehl der ähnliches macht wie webquery
2) https geht leider nicht so einfach
3) weis ich nicht
4) siehe deinen anderen Post
in >D werden nur Variablen vordefiniert, addieren kannst du hier nichts.
in allen anderen Sektionen kannst du einfach Strings und numerische Variablen "addieren"
>D
s1=""
s2=""
s3=""
n1=1.234
>S
s1=s2+"hallo"+s3+s(2n1)+" kW"
das habe ich regelmässig dass ein Gerät nicht oder zu spät antwortet.
Habe aber keine Anwendung wo das mich stört.
res=http("192.168.178.111" "/cm?&cmnd=status%208")
prüfe den wert von res, dort siehst du ja ob du ein 200 bekommst (HTTP OK)
Mit Berry wird das wohl möglich sein, oder?
Das geht auch nicht mit Berry. Der in Tasmota verwendete JSON Decoder kann das nicht.
es sei denn du schreibst den Decoder selbst in Berry
wenn dann müsste es so geschrieben werden
daje1=inverters[0]#data_age
das Format ist zu komplex für den Tasmota JSON decoder. (wegen dem index "inverters":[{"serial" => eckige Klammer auf)
du must das mit string suche herausfischen gwr()
du kannst den komplexen JSON Pfad NICHT mit einer Variablen substituieren
StatusSNS#SML#Power_curr muss so angegeben werden
und funktioniert auch so nur in manchen Sektionen z.B. >T >E
mit diesem Define stellst du die maximale Buffergrösse für Script ein.
#define UFSYS_SIZE 8192
Bei ESP8266 mit Dateisystem sollest du maximal 8192 einstellen, bei ESP32 bis ca 16384
ip_tasmota ist eine Stringvariable, da darftst du nicht noch mal Gänsefüsse drum machen
muss heissen: res=http( ip_tasmota "/cm?&cmnd=status%208")
das %% brauchst du nur in Sektion >W oder bei Tasmota Befehlen -> etc
aber die permanten Arrays sind dort zusammen kleiner als 383 Bytes!
nicht permanente Arrays sind nur durch den RAM Verbrauch limitiert
erst mal was du da definiert hast geht nicht. der permanente Speicher hat nur 1532 Bytes.
ein numerischer Wert verbraucht 4 Bytes, also kannst du nur ca 380 Bytes permanent in einem Array speichern.
Wenn du größere Arrays speichern willst musst du das mit dem Dateisystem machen (fwa(), fra())
ein Array vorbelegen geht mit array = {1 2 3 4} etc was aber nur bei kleinen Arrays Sinn macht.
in Zukunft wird es dafür einen Befehl geben, momentan musst du das in einer Schleife machen.
nein, der 1000. Punkt geht nicht automatisch. Ich hatte das mal bei Tasmota vorgeschlagen aber das wurde nicht akzeptiert weil es in anderen Ländern nicht gebräuchlich ist.
Das musst du mit String Manipulationen selbst regeln.
du brauchst:
#define SUPPORT_MQTT_EVENT
dp(3,5)
Setzt ab diesem Zeitpunkt das dezimalformat auf Anzahl Vorkommastellen hier 3 und Nachkommastellen hier 5 und den Dezimalpunkt auf Komma
Mathematik in >W geht nur innerhalb einer Klammer
Z.B. hier mit 3 Nachkommastellen
Durchschnitt{m}%3(v1/v2)%
Wenn man die Anzahl der Stellen weglässt gilt der vom letzten dp() Befehl gesetzte Globalwert
also ganz grundsätzlich kann mann in jeder %% Substitution und bei conversion zu string mit s()
vk,nk davorstellen
v1=123.456
str=s(5,4v1) ergibt 00123,4560
%5.4% ergibt 00123.4560
Es gibt nur eindimensionale Arrays.
Die Anzahl der möglichen Arrays ist vordefiniert mit 5 und kann vergrößert werden vor dem Kompilieren
wundere dich nicht über die Bezeichnung, Arrays können auch Filter sein
#define MAXFILT 5
eine Array kann so groß sein wie du Speicher hast. Beim ESP32 mit PSRAM auch sehr gross.
checke die verblieben RAM Größe (heap). es sollten beim ESP8266 mindestens so 12k übrig bleiben und beim ESP32 20k
Hinter >D kann man die Default string Größe (20) erhöhen bis auf die vordefinierte Maximalgröße ist default 48
#define SCRIPT_MAXSSIZE 48
also rechtsbündig wird nicht unterstützt.
Das Dezimal Format wird mir dp(x , y) eingestellt
x = Anzahl der Vorkommastellen
y = Anzahl der Nachkommastellen
das Komma dazwischen wird als Dezimalpunkt genommen, kann also . oder , sein
Die Anzahl der Nachkommastellen steht per default auf 2
Schreib einfach in >B zusätzlich
dp(3) (decimal precision)
du kannst direkt die Dekoderzeile auslesen mit sml[x] (x = Decoder Zeile)
also:
wget http://192.168.177.82/cm?cmnd=script?sml[1]
(den Namen aus der Dekoderzeile kannst du nur in Sektion >T einlesen, das ist eine JSON Variable, STROM#AgoA)