1. also es darf kein - Zeichen drin sein (wird als - interpretiert) deshalb hat Theo Arends auch SetOption64 1 eingebaut ist dann underscore
2. ja du kannst das EEPROM mit define einschalten, erst wenn es auch gefunden wird wird es benutzt
1. also es darf kein - Zeichen drin sein (wird als - interpretiert) deshalb hat Theo Arends auch SetOption64 1 eingebaut ist dann underscore
2. ja du kannst das EEPROM mit define einschalten, erst wenn es auch gefunden wird wird es benutzt
Guten Morgen Ekkehard
das ist iobroker ein javascript script
kenne mich in FHEM gar nicht aus, geht aber ganz sicher auch.
du musst dir einen String zusammenstellen (eigentlich ein Tasmota script, kann alles möglich drin stehen)
das script muss mit > beginnen und die Zeilen müssen mit Semikolon getrennt sein.
und damit die MQTT Text Variable script setzten.
also z.B. >pooltemp=22.7;lufttemp=25.5 etc
Gruß Gerhard
weis jetzt warum subscribe bei mir nicht geht. benutze den sonoff adapter in iobroker und nicht den mqtt adapter und der unterstützt das nicht.
habe aber keine Lust mein System umzustellen, muss also jemand anderes mal testen.
also wie in rules mit subscribe abonnieren
der event name ist jetzt allerdings der Variablenname. (und der muss nur Großbuchstaben haben) der in der >D Sektion definiert sein muss.
also z.B.
>D
TEMP=0
>B
=>Subscribe TEMP, stat/%topic%/SENSOR,DS18B20.Temperature
>S
if upd[TEMP]>0
then
=>print temp=%TEMP%
endif
dieses Define muss vor dem Kompilieren gesetzt werden
#define SUPPORT_MQTT_EVENT
ok es geht also darum Werte vom Broker zu verteilen.
das mach ich etwas anders.
in iobroker setze ich die script variable mit >var1=x;var2=y etc und setzte damit direkt variablen in scripter
damit verteile ich alle interessierenden Werte z.B. an alle Displays.
habe mir das subscribe mal angesehen und in scripter übernommen.
leider kann ich meinen iobroker nicht dazu bewegen nach subscribe was zu schicken.
bleib aber dran, obwohl ich meine Methode besser finde.
subscribe ist ein rules Befehl.
was möchtest du denn erreichen?
du kannst alle MQTT events abfragen in der >T oder >E Sektion.
wenn du feststellen willst wann eine Variable upgedatet wurde (was dem Event in Rules entspricht)
frage einfach mit upd[var]>0 ab
also z.B. temp=BME280#Temperature
if upd[temp]>0
then
wenn du das in der neuen >F Sektion machst hast du eine zeitliche Auflösung von 100 ms
in der >E Sektion werden alle Events sofort also synchron mit dem MQTT Publish gemeldet.
Hallo Wiese66,
nimm immer als ersten Zähler die echte serielle Schnittstelle. (mit Pullup ca 4,7k)
wenn dann der Zähler in der Konsole Daten liefert mit sensor95 d1 , ok
dann verbinde denselben Eingang mit dem 2. Zähler GPIO (noch keinen Pullup hier) und gehe auf sensor95 d2
du solltest jetzt auch hier Daten sehen. (es nutz gar nichts den Pin and GND oder VCC zu legen, damit bekommst du keine Daten)
erst wenn das für beide pins klappt, kannst du die weiteren Definitionen überprüfen.
Gruß
gemu2015
nein, kein Filesystem das kriegst du nur mit SD Karte über SPI das geht nur mit mehr pins.
es wird einfach nur ein entsprechender RAM Bereich allokiert und vom, zum EEPROM kopiert
d.h du hast entsprechend weniger RAM
das define heisst
#define USE_24C256
wenn du mehr script Speicher brauchst bestell dir ein i2c EEPROM da du eh i2c Sensoren hast.
https://www.ebay.de/itm/AT24C256-S…q4AAOSwMO9cALBC
damit hast du 4kb Script Speicher (default oder auch mehr, EEPROM hat 32kb)
nochmal zu den verbleibenden Zeichen im Editor.
ja die Anzeige ist bei allen Browsern gleich aber bei Safari kann man trotz verbleibender Zeichen nicht mehr alle eingeben (Eingabe gesperrt)
das ist bei Chrome kein Problem.
Tolles Projekt deine Poolsteuerung. So etwas konnte man bisher mit Tasmota nicht machen. ?
es gibt eine Menge Leute die so was mit HA Brokern machen, das ist aber fatal, wenn das WLAN ausfällt oder aus irgend einem Grund der ESP nicht erreichbar ist. (bei mir immer mal wieder der Fall)
Mir ist es lieber wenn solche Sachen autonom sind und ich über MQTT nur die Zustände abfragen kann.
Vielleicht könnte man ja hier im Forum einen extra Bereich ausweisen in dem man solche Projekte inklusive script vorstellen könnte.
ok, das Thema permanente Variablen braucht bessere Dokumentation.
wenn du ein Variable mit einer Konstanten vorgesetzten willst einfach in der D Sektion bei einer normalen Variablen einen Wert einsetzen. Das wird dann bei jedem Neustart so gesetzt.
Variablen mit dem p: kannst du auch auf 0 setzen denn sie werden ohnehin am Ende der D Sektion mit den Werten aus dem permanenten Speicher belegt.
diese Variablen sind dazu da sich dynamisch verändernde Größen zu merken. (auch nach dem Neustart)
sie werden automatisch beim Neustart des ESP oder des Scripter gespeichert
oder mit dem Befehl "svars" aus dem script heraus
oder du kannst sie mit Hilfe der Konsole setzen >var=xx
am Ende dieses Konsolenbefehls werden die permanent Variablen erneut gespeichert.
das mit den falschen Angaben der verfügbaren Zeichen ist merkwürdigerweise Browserabhängig in Chrome geht es fehlerfrei bei mir (Mac User) in Safari immer falsch.
Hallo Ekkehard
ja, habe die ganze if then else Logic neu codiert. (in meinem Repo => universal 5)
scheint jetzt zu laufen, muss aber noch besser getestet werden.
in deinem script oben ist ein Fehler "Then" statt "then" vielleicht liegt es daran.
leider gibt es so gut wie keinen Syntax check in scripter. das würde zu viel Code verbrauchen.
nur bei Variablen die er nicht findet gibts entweder ??? oder var not found.
das gibt manchmal sehr komische Resultate wenn man einen Syntaxfehler macht.
Gruß Gerhard
hab eben was merkwürdiges festgestellt.
in meinen scipts steht natürlich nicht nur ein print Befehl in einer Bedingung
wenn ich in deinem script überall dazwischen "richtigen" code eintrage geht es.
Mal sehen was die Ursache ist
du hast recht da stimmt was nicht.
werde nachforschen woran es liegt.
ist komisch da ich natürlich selbst scripts mit Verschachtelungen verwende.
als workaround kannst du den Problemcode (die verschachtelte if then else Bedingung) erst mal in eine subroutine auslagern
also z.B.
=#toggle
und am Ende der Sektion
#toggle
if sw==0
then
sw=1
else
sw=0
endif
wobei toggeln natürlich viel einfacher geht mit sw^=1
also bei mir gibt es keinen crash, sollte auch nicht crashen wenn etwas falsch geschrieben ist.
muss allerdings
var=Clock#Timer
heissen, da bei scripts Groß Kleinschreibung eine Rolle spielt.
wenn es bei dir immer noch crashed schicke mir dein script damit ich den Fehler suchen kann.
hab mir das im Tasmota Quelltext angesehen.
soweit ich gesehen habe must du einfach
var=Clock#Timer
in Sektion >E abfragen dort wird das vom Timer abgeliefert
ja switch case gibt es
Hallo Ekkehard
da hast du ja einiges vor. Mal sehen ob das alles am Ende in den script Speicher passt (ca 1500 bytes)
werd mal versuchen das zu simulieren wegen der Problem mit der Verschachtelung
also es gibt bisher keinen Zugriff auf die Tasmota timer. das würde auch keinen Sinn machen da die ja immer ein Relais schalten, was du ja nicht willst.
werde mal prüfen ob wenn sie inaktiv sind man trotzdem den Zustand abfragen kann.
ansonsten kannst du alle Zeitinfos wie stunde minute etc auch selbst abfragen
meines Erachtens brauchst du sicher eine Hysterese
mir persönlich gefallen bei solchen Aufgaben state machines am besten, also mit switch case ends
Gruß Gerhard
PS
", aber sicher nicht am Sonoff..oder??"
nicht sonoff da nicht genügend pins herausgeführt sind aber z.B. Wemos ESP und Tasmota sogar mit einem Display mit 1024x600 Auflösung und touchscreen.
ja klar geht das, in scripter.m gibt es einige Beispiele
wenn es mal mehr Nutzer gibt sollten wir eine Sammlung von Anwendungsbeispielen erstellen.
meine eigenen sind fast immer in Kombination mit Displays die Graphen und Werte von Umweltsensoren und Solarwechselrichtern etc anzeigen.
Inzwischen nutze ich auch SD Karten und kann z.B. auch farbige Bilder anzeigen, oder Sensorwerte in Logfiles schreiben, oder einen akustischen Alarm bei Überschreitungen auslösen inclusive email senden.
Damit könnte man mit diesem Setup alle möglichen Steuerungen auch ohne Broker realisieren.
so gehts =>
also in der D Sektion einen Timer definieren in dem du ein t vor die Variablendefinition schreibst
t:timer=0
der timer startet wenn er auf einen Wert > 0 gesetzt wird automatisch
also z.B. timer=60 für 60 Sekunden
dann in Sektion S
immer abfragen ob er abgelaufen ist
if timer==0
then
; hier ist er abgelaufen, damit diese Bedingung nur einmal auftritt, jetzt den timer auf -1 setzen, oder neu stellen
timer=-1
endif
Gruß Gerhard
so sähe das als script aus
>D
>E
if pwr[1]>0
or pwr[2]>0
or pwr[3]>0
then
=>power4 1
else
=>power4 0
endif
Hallo Wolfi,
dein Zähler ist deutlich anders als die bisherigen. Wie du schon festgestellt hast sind die Einträge etwas länger.
die passen nicht in den Shift Buffer. Deshalb musst du den Buffer vergrößern.
die komplette Sequenz muss hinein passen, also mindestens 35 Zeichen ab 77 07
bisher
#define SML_BSIZ 32
z.B.
#define SML_BSIZ 48
Gruß Gerhard
PS bin nur noch selten im Forum