Beiträge von gemu2015

    es gibt einige Neuigkeiten.


    Ihr könnt jetzt alles mögliche im WEBUI anzeigen und auch eingeben.Die WEB Inputs (Buttons, Checkboxen, Slider, Text und Number Inputs) setzten direkt die Variablen in Scripter und WEBUIs werden direkt upgedated wenn man die Variable ändert.

    hier ein paar Beispiele:



    URBANsUNITED

    leider hab ich bisher kein breakout für so was gefunden. das Standard IC dafür ist der MC14490 (6 fach debouncer). Kann man natürlich problemlos auf eine Experimentierplatine löten. Oder die Standardschaltung hier nehmen. Trotzdem sollte das Kabel wenns etwas länger ist abgeschirmt sein.


    mac_switch


    wenn du in der script Version das script ausschaltest (Häkchen aus) solltest du doch zwischen beiden Version hin und her schalten können.


    (mit identisch aussehendem Display)


    das eine mal wird der Descriptor aus dem Flash, das andere Mal aus dem Script Editor gefüllt. (oder verwendest du dafür eine ältere sml version)


    wenn du dort einen Unterschied hättest wäre das extrem merkwürdig

    mac_switch

    dein descriptor ist sehr groß. dein Zähler gibt wirklich alle diese Werte aus ?

    Das Problem ist dass diese Daten eventuell nicht mehr in den IRQ Speicher der seriellen Schnittstelle passen (256 bytes)

    dort gibt es dann Überläufe und fehlende Daten.

    ABER wenn dein Script nur den Descriptor >D >B und >M enthält gibt es jedenfalls keinen Unterschied zur "alten" Version ausser dass der descriptor aus dem Script geladen wird und nicht aus dem Flash. (es wird dann im Scripter selbst keine Rechenzeit verbraucht)


    Um festzustellen ob es an der grossen Datenmenge liegen könnte kannst du mal was versuchen


    hier die beiden Zeilen auskommentieren dann dürfte eigentlich keine Lücke mehr entstehen.


    case FUNC_LOOP:

    SML_Counter_Poll();

    //break;

    //case FUNC_EVERY_50_MSECOND:

    if (dump2log) Dump2log();

    else SML_Poll();


    eventuell kannst du auch mal die Puffergröße für einen einzelnen Eintrag vergrößern


    #define SML_BSIZ 48


    sollte nämlich ein einzelner SML Wert dort nicht hineinpassen, gäbe es auch Lesefehler.


    #define SML_BSIZ 64


    sollte eigentlich immer reichen


    URBANsUNITED

    aber dein Stromzähler läuft richtig ?


    die Gas und Wasserzähler sind ein Problem wenn sie auf Pollmode stehen


    denn die Pollzeit wird nicht wirklich eingehalten. Wenn der ESP z.B. ein MQTT verschickt und da etwas warten muss kann er die Pollzeit von z.B. 10ms nicht einhalten.


    Als grundsätzliche Empfehlung für die Counter wäre hier besser den IRQ Mode mit vorgeschalteter Hardware Entprellung zu nehmen. da sollte eigentlich nicht schief gehen.


    der original Tasmota Counter arbeitet nur mit dem IRQ Mode kann aber nur eine Flanke entprellen und damit bräuchte er auch eine Hardware Entprellung für fehlerfreien Betrieb.

    habe einige Zähler mit der neuen Version laufen und kein instabiles Verhalten. Außerdem beruht ja die neue Version auf der alten, nur dass die Deskriptoren aus dem Scripter geladen werden statt aus dem Flash.


    da muss ein Fehler in deinem Script gewesen sein.

    mac_switch


    warum quälst du dich mit den alten Sachen rum. Der Treiber wird in Zukunft nur noch die Descriptor Version unterstützen.

    Scripter kann alles was rules kann und noch wesentlich mehr und ist auch einfacher zu verstehen.

    noch dazu kannst du jede Menge Zusatzberechnungen machen, wie Tagesverbrauch etc. und die auch im WEBUI anzeigen oder an Domoticz posten.


    verwende meine neuste Version von Github. dort habe ich eine extra für einen User eingebaute Domoticz Unterstützung rausgenommen weil sie sich mit deiner Lösung nicht vertragen würde. (gilt auch für deine bisherige rules Version)



    Hab dir mal ein script gebaut damit du siehst wie das aussehen würde


    ; definiere Variablen

    >D

    p_in=0

    p_out=0

    p_curr=0


    ; lese die tele Variablen ein

    >T

    p_in=SML#Total_in

    p_out=SML#Total_out

    p_curr=SML#Power_curr



    >S

    ; sende zu Domoticz bei teleperiod

    if upsecs%tper==0

    then

    =>publish domoticz/in {"idx":148,"svalue":"%p_in%"}

    =>publish domoticz/in {"idx":149,"svalue":"%p_out%"}

    =>publish domoticz/in {"idx":150,"svalue":"%p_curr%"}

    endif


    ;hier dein SML descriptor

    >M 1

    ,,,,

    Habe mal die SML Dokumentation von Tasmota ins Deutsche übersetzt (mit DEEPL, ist sehr zu empfehlen)


    dann hier ein paar Erläuterungen zum Modbus


    Beispiel:


    >D


    >B

    =>sensor53 r


    >M 1

    +1,3,m,0,9600,MODBUS,1,1,01040000,01040002,01040004,01040006,01040008,0104000a,0104000c,0104000e,01040010

    nach der üblichen Zählerdefintion kommt hier der Pin für den TX Anschluss Pin (hier 1)

    danach die Anzahl von 100ms Einheiten zu der jedes Register ausgelesen wird, hier 1, also alle 100ms ein Register

    danach kommen alle MODBUS Register in HEX Kodierung

    01 = MODBUS Adresse

    04 = MODBUS Cmd hier Register auslesen,

    0000 = Register Adresse in Hex, hier also Register 0 auslesen.



    Jetzt kommen die üblichen Decoder Zeilen

    dort steht also die Antwort vom Zähler

    01 = Zähler Adresse

    04 = Zähler CMD

    ffffffff = float Zahl, die der Zähler zurück liefert, manche Zähler haben eine reverse Byte Order da gibt man FFffFFff an

    xxxx = Checksumme die intern berechnet wird

    @ Abschluss des Decoder Vergleich Strings

    i0: = Index des Registerblocks im Sendedescriptor, also hier das erste angeforderte Register.

    danach wie gehabt.


    1,010404ffffffffxxxx@i0:1,Voltage P1,V,Voltage_P1,2

    1,010404ffffffffxxxx@i1:1,Voltage P2,V,Voltage_P2,2

    1,010404ffffffffxxxx@i2:1,Voltage P3,V,Voltage_P3,2

    1,010404ffffffffxxxx@i3:1,Current P1,A,Current_P1,2

    1,010404ffffffffxxxx@i4:1,Current P2,A,Current_P2,2

    1,010404ffffffffxxxx@i5:1,Current P3,A,Current_P3,2

    1,010404ffffffffxxxx@i6:1,active Power P1,W,Power_P1,2

    1,010404ffffffffxxxx@i7:1,active Power P2,W,Power_P2,2

    1,010404ffffffffxxxx@i8:1,actibe Power P3,W,Power_P3,2

    #


    sollen mehrere Zähler am selben Bus ausgelesen werden, gibt man einfach alle Register des 2 Zähler ebenfalls an dann aber mit einer anderen Geräteadresse, also z.B. 2 (muss man im Menü des Zählers einstellen)

    +1,3,m,0,9600,MODBUS,1,1,01040000,01040002,01040004,01040006,01040008,0104000a,0104000c,0104000e,01040010,02040000, etc


    man kann aber auch 2 Zähler an 2 Bussen auslesen, dann braucht man halt 4 IO Pins

    und 2 Descriptor und Decodersätze


    +1,3,m,0,9600,MODBUS,1,1,01040000,01040002,01040004,01040006,01040008,0104000a,0104000c,0104000e,01040010

    +2,12,m,0,9600,MODBUS,14,1,01040000,01040002,01040004,01040006,01040008,0104000a,0104000c,0104000e,01040010


    etc.

    mac_switch


    inzwischen ist die Serial Lib auch in Tasmota von Arends enthalten. dort gibt es auch eine sml_53. die ist aber noch nicht auf dem neuesten Stand da ich zur Zeit einige Erweiterungen einbaue (z.B. PZEM v1+v3) (dafür suche ich noch Tester)


    erst wenn die Neuerungen getestet sind mache ich einen commit bei Arends.