script editor für Tasmota

  • Hi Gerhard,

    sorry, irgendwas klappt auch hier nicht (mit den Sub's). Ich rufe die Sub folgendermassen auf:


    ..

    if Sv>0

    or Sf>0

    or SCl>0

    or SCp>0

    or SCv>0

    then =>power2 1

    =#u1

    else

    =>power2 0

    endif

    ..


    Die Sub sieht so aus:


    #u1

    =>print %Cp%

    Cp+=1

    =>print %Cp%

    if SCp>0

    Then SCp+=-1

    endif

    if SCp==0

    then Cp=0

    endif


    Beim ersten Aufruf war die Variable Cp mit einem Wert vorgelegt, der auch sauber inkrementiert wurde, mit jedem weiteren Aufruf wird sie auf Null zurückgesetzt und dann wieder inkrementiert. Es ist auch egal ob ich das Power2 1 noch in die Sub verlege.


    Ich glaube ich warte besser bis Du das Problem gefunden hast.

    Gruß!

  • 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

  • Hi Gerhard,


    erstmal Danke für die schnelle Hilfe. Waren ja ein paar Zeilen Code..


    Das mit der Syntax stimmt, ist manchmal echt schwer zu finden. So sorgt z.B. ein #u2 mit Leerzeichen danach dass das #u2 nicht ausgeführt wird. Ich bin echt nicht der Ordentliche (siehe "Then", sorry dafür..), da merkt man erstmal wieviel Lebenszeit eine guter Syntaxprüfung wert ist! Aber es ist wie es ist, ist halt kein Speicher da. Muss man eben an sich arbeiten..


    Ich habe Deine geänderte xdiv.. in meine Kopie der 6.6.0.1 kopiert und alles neu übersetzt.


    Habe es in verschiedenen Codezuständen getestet :

    Die Variante mit den Sub's: Die oben beschriebenen Probleme resultierten aus großen T's und überflüssigen Leerzeichen und ähnlichem, waren alles meine eigenen Fehler. Hätte wahrscheinlich auch so funktioniert.


    Die Subs wieder aufgelöst:

    JUHUUUHHH! Es funktioniert!


    Superherzlichen Dank!


    Ich teste das Gerät jetzt, baue es am Bestimmungsort ein und wenn Du interessiert bist stelle ich das Ganze dann als praktische Anwendung zur Verfügung. Gib mir mal einen Tipp wo am besten. Ich halte Script, abgesehen von Geschmacksfragen die Syntax betreffend, für deutlich leistungsfähiger als Rules. Mit Rules habe ich das Projekt nicht hinbekommen, es scheiterte schon an der Anzahl der Variablen. Mit Script ist letztendlich was Kleines und Überschaubares rausgekommen.


    Eine Sache ist mir übrigens noch aufgefallen: Der Zähler für die verfügbaren Zeichen im Editor scheint nicht zu stimmen. Ich habe mal ausprobiert wie viele noch passen, es sind noch 287. Dann lässt sich nichts mehr einfügen, der Zähler rechts oben sagt jedoch: 139 chars left.

    Danke Dir nochmal!

    Gruß!

    Ekkehard

  • Ja, bin auch auf Mac.. Beim Firefox Mac/ Win + IE auf Win werden die gleichen Werte angezeigt wie im Safari. Na, egal..


    Eine Frage: die Definition p:Tmax=30 verstehe ich so, dass Max mit 30 permanent abgespeichert wird, ist das richtig?


    Wenn dann klappt das so nicht. Ich habe die Werte in der Konsole auf 0 gesetzt und nochmal ausgelesen. Nach dem Neustart kommen die alten Werte wieder hoch, die ich vorher im >B Abschnitt drin hatte und die anders sind als der Wert in der Variablendefinition.


    Nix gravierendes, aber vielleicht interessant.

  • 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.

  • 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.

  • Soll das bedeuten, dass die Zeichen tatsächlich noch frei sind? Dann würde ich ja glatt den Chrome installieren.. Wollte noch einen Poolwassersensor einbauen, das scheitert am Platz...


    Ich glaube auch dass solche Funktionen in eine Steuerung vor Ort gehören und die übergeordneten Broker sich auf das Große und Ganze konzentrieren sollten. Deswegen bin ich auch so begeistert von Script, zusammen mit den Sonoffs & Co öffnen sich (zumindest für mich) Welten.

    Das Nächste ist eine Steuerung für eine Gartenberegnung mit 4 Ventilen. Aller 5 Minuten rotierend Wechsel über die Gesamtlaufzeit, damit das Wasser ordentlich versickern kann. Hat mich im FEHM ganz schön herausgefordert..

    Also wie gesagt, ich habe ne halbwegs ordentliche Doku gemacht, würde das alles bereitstellen. Bin aber mit diesen Foren nicht so fit, wo das am besten hinpassen würde und wer da was machen muss. Fände es gut wenn es hilft Script zu promoten.

    Die Tests stimmen mich froh, bis jetzt läuft alles perfekt! Will noch MQTT einbauen und das Ganze mit TLS absichern, der Pool steht beim Schwiegervater..

  • 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

  • @eth

    Ich denke deine Anleitungen wären hier an jeder Stelle sehr willkommen.

    Die Admins sind da sehr tolerant, weshalb wir uns wahrscheinlich auch gern hier rumtreiben :)


    Du kannst die Dokus z.B. im Wiki unterbringen - da aber sicher auch viele Fragen auftauchen werden,

    vielleicht besser unter 'Mein Sonoff-Projekt' o.ä. ...



    @gemu2015

    Hoffe jedem ist bewusst, wie wertvoll deine Arbeit und Zeit für github und für uns alle hier ist,

    und dass das CreationX-Forum sehr stolz drauf sein kann :thumbup:

  • Hi Gerhard,


    habe das Gerät am Bestimmungsort eingebaut, wie immer ist die Realität etwas anders als die Theorie. Werde es noch etwas umbauen.

    Prinzipiell aber läuft alles so wie gedacht, ich bekomme jetzt fleissig über TLS verschlüsselt Status auf meinen Mosquitto gebroked..

    Ich denke das Problem im Script mit den if's ist jetzt ausreichend getestet, ich konnte dazu kein Problem mehr feststellen. Alles andere hatte sich ja auch aufgeklärt. Ich würde anregen dass "offiziell" werden zu lassen.

    @NoitarrcX: Kann Dir nur beipflichten, was Gerhard hier abgeliefert hat ist einfach toll und auch wie schnell er geholfen hat! :thumbup::thumbup:

    Mit dem Projekt werde ich es so machen wie Du vorgeschlagen hast, wenn es rund ist stelle ich es in das Forum. Im Moment ist mir da noch zu viel "Luft nach oben".

  • Hi Gerhard,


    habe nochmal eine Frage:

    In der Doku zu den commands steht unter MQTT der Befehl Subscribe. Diese ermöglicht es wohl Events auf Subscibes zu erzeugen was ja schon genial wäre..). Auf der Konsolenzeile ergibt die Eingabe des Befehls eine Fehlermeldung (ist mit Scrips kompiliert). Ich habe mal in die Rules.ino gesehen und dort was gefunden, was wie die Verarbeitung des Befehles aussieht.

    Bin ich da richtig, dass dies nur mit den Rules geht und bei Scripts nicht implementiert ist?

  • 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,

    ich hab das selbe Problem (subscribe). Ich möchte mit dem Befehl subscribe einen Topic des Brokers (der von einem script auf einem Raspi befüllt wird) subscriben und mit tasmota und dem entsprechenden Event dann auf dem an tasmota hängenden Display anzeigen.

    z.B.


    Code
    1. subscribe pve, /xxxx/energy
    2. rule1 on pve do displaytext [s1p21l1c1] erz. Energie: %value% W


    Wie lässt sich das mit script erreichen?

  • 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.

  • Guten Morgen,

    hier ist ja schon Bewegung!

    Mir geht es um Sensorwerte anderer Clients, bei meinem Pool speziell die Pooltemperatur und den Luxwert. I2C ist ja nun nicht der perfekte Feldbus für abgesetzte Sensoren.

    Aber das ist letztendlich ja auch egal. Hab im Git Beiträge dazu gesehen, https://github.com/arendst/Sonoff-Tasmota/issues/5744 z.B. hat ein ähnliches Ansinnen. Und hieraus https://github.com/arendst/Sonoff-Tasmota/pull/5320 lese ich dass dies (nun also mit Rules) möglich sein sollte. Ich probiere es damit mal aus.


    Das mit dem ioBroker klingt ja interessant, wie setzt Du denn Variablen in Script von aussen? Bei mir läuft FEHM, liesse sich das übertragen? Das wäre bei mir auch ne Möglichkeit..

    Gutes Gelingen!