UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[Frage] Wie Differenz Vorgänger zu Aktuellem Wert gegen Schwelle/Faktor prüfen?

Hier bitte Eure Diskussionen und Feature Requests zu neuen Logikmodulen und Funktionen des Logik-Editors

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#11

Beitrag von tger977 »

Robosoc hat geschrieben: Mi Apr 28, 2021 4:12 pm Da Du ja Modbs-Nutzer bist und daher eventuell V2.0 IP4 installiert hast, wäre es eventuell auch möglich den neuen Baustein "freie Formel" als Alternative zu verwenden, in dem die "Div durch 0"-Problematik ja abgefangen wird. Aber da ich die IP4 noch nicht installiert habe, kann ich Dir dazu noch keine Tipps geben.
genau das war der Plan, auf meiner IP Version ist der Formel Baustein vorhanden, allerdings habe ich noch keine Syntax gefunden den in einer custom Logik einzubauen.

kann den hier in der KB noch jemand hinterlegen?
app.php/kb/viewarticle?a=115

Danke!
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#12

Beitrag von Robosoc »

Du kannst Dir in der Regel den Code eines Standardbausteins anzeigen lassen. Ich glaube, wenn Du in der Bausteinauswahl bist, den Erklärungstext komplett anzeigen lässt und da dann auch <> klickst.... Oder so ähnlich... Habe ich lange nicht mehr gemacht. Davon kannst Du den Code dann ableiten.

Wenn ich IP4 installiert habe, trage ich das auch gerne irgendwann in die KB ein.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#13

Beitrag von tger977 »

StefanW hat geschrieben: Mi Apr 28, 2021 7:06 pm frag doch mal den Hersteller ob er nicht eine Firmware-Version hat, welche zumindest das (häufige) Wechseln des Exponenten unterlässt. Weil mit mathematischen und zeitlichen Zusammenhängen zwischen verschiedenen Registern kommt kein Modbus Gateway gut zurecht. Genau dafür gibt es ja die Möglichkeit mehrere Register zusammenfassen zu können, damit man große Werte bei toller Auflösung übertragen kann.
Ich hab mir das nun mal bei der OpenWB im OpenSource Code angesehen wie es dort gelöst wurde, da ich mit dem Auslesen über die OpenWB bisher sehr stabile und stetige Verläufe hinbekommen habe (es kam dort nur hin und wieder zu "0" Werten bei Modbus Lesefehlern, aber nie zu diesen Zehnerpotenzsprüngen). Dort wird wohl genau deshalb immer zweimal der Scalefactor (Register 40084) ausgelesen (einmal vor und direkt nochmal nach dem umzurechnenden Wert in Register 40083) und dann nur im Falle daß beide Scalefactor Werte identisch sind der Wert tatsächlich verwendet/ausgegeben. Wenn Werte nicht identisch erfolgt keine Ausgabe und es bleibt beim letzten Wert...

Code: Alles auswählen

resp= client.read_holding_registers(40084,2,unit=slave1id)
multipli = resp.registers[0]
multiplint = format(multipli, '04x')
fmultiplint = int(struct.unpack('>h', multiplint.decode('hex'))[0])

respw= client.read_holding_registers(40083,2,unit=slave1id)
value1w = respw.registers[0]
allw = format(value1w, '04x')
rawprodw = finalw = int(struct.unpack('>h', allw.decode('hex'))[0]) * -1
resp= client.read_holding_registers(40084,2,unit=slave1id)
mult2ipli = resp.registers[0]
mult2iplint = format(mult2ipli, '04x')
fmult2iplint = int(struct.unpack('>h', mult2iplint.decode('hex'))[0])

if fmultiplint == fmult2iplint:
    if fmultiplint == 0:
        rawprodw = rawprodw
    if fmultiplint == -1:
        rawprodw = rawprodw / 10 
    if fmultiplint == -2:
        rawprodw = rawprodw / 100
    if fmultiplint == -3:
        rawprodw = rawprodw / 1000
    if fmultiplint == -4:
        rawprodw = rawprodw / 10000
    if fmultiplint == -5:
        rawprodw = rawprodw / 
    if extprodakt == 1:    
            resp= client.read_holding_registers(40380,1,unit=slave1id)
            value1 = resp.registers[0]
            all = format(value1, '04x')
            extprod = int(struct.unpack('>h', all.decode('hex'))[0]) * -1
    else:
            extprod = 0
    rawprodw = rawprodw + extprod - storagepower    
    f = open('/var/www/html/openWB/ramdisk/pvwatt', 'w')
    f.write(str(rawprodw))
    f.close()
        
Ich würde das dann aufgrund der o.g. "Probleme" mit init und auch ggf. schnellen Wolken etc. nun auch hier mal versuchen umzusetzen, scheint mir ggf. einfacher zu sein...

@Robosoc / Sven: Trotzdem vielen, vielen Dank für Deinen Einsatz :bow-yellow: Das hat mich zumindest nun wieder mal dazu gebracht die Customlogik mir anzusehen und zu verstehen. Vielleicht werde ich irgendwann dann doch mal "warm" mit dieser proprietären "Codierung"...

Mei, is des aber au kompliziert einen einfachen Leistungswert über dieses Sunspec Protokoll zu bekommen :angry-banghead:
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#14

Beitrag von tger977 »

oh, mei nächstes Problem: Ich kann im Gerätemanager das Register 40084 leider nicht zweimal in derselben Abfrage auswählen/abrufen... Geht also dieser Weg auch erstmal nicht.

@Elabnet: könntet ihr ein zweimaliges lesen ermöglichen? (nur wenn das mit minimalem Aufwand umsetzbar ist!!!)
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#15

Beitrag von Robosoc »

Setz das mal lieber in einem neuen topic auf.. . Hat ja mit custom logiken nichts zu tun und da werden dann eventuell andere ModBus Anwender mitlesen und schreiben.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#16

Beitrag von tger977 »

Robosoc hat geschrieben: Mi Apr 28, 2021 8:48 pm Du kannst Dir in der Regel den Code eines Standardbausteins anzeigen lassen. Ich glaube, wenn Du in der Bausteinauswahl bist, den Erklärungstext komplett anzeigen lässt und da dann auch <> klickst....

Wenn ich IP4 installiert habe, trage ich das auch gerne irgendwann in die KB ein.
ok, auch das hab ich mir mal angesehen um dazu zu lernen ;)

Module Code scheint mir dann wie folgt (für KB Erweiterung) für den neuen Formelbaustein:

Code: Alles auswählen

["CalcFormula",  [ "$VAR<X>0", "$VAR<X>1" ], "$Out", "$Formula" ]
Dabei scheinen $VAR<X>0...x beliebig oft definierbar zu sein und dann in $Formula als String referenzierbar zu sein z.B. durch den String "X1*(10^X2)" in $Formula?!

Aber so ganz hab ich das noch nicht verstanden warum dies dann zu der $VAR<X>0 bzw. 1 Definition passt :confusion-scratchheadyellow:
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#17

Beitrag von Robosoc »

Andi, kannst du bitte mal den gesamten Code der CalcFormular inkl. Level und Input Abschnitt posten?
Für mich sieht es plausibel aus und bevor ich meinen Erklärungsversuch dazu gebe, würde ich gerne noch die weitere Deklaration sehen.
Zuletzt geändert von Robosoc am Do Apr 29, 2021 5:09 am, insgesamt 1-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#18

Beitrag von tger977 »

Robosoc hat geschrieben: Do Apr 29, 2021 4:36 am Andi, kannst du bitte mal den gesamten Code der CalcFormular inkl. Level und Input Abschnitt posten?
Bitteschön:

Code: Alles auswählen

{
  "levels": [
    "$Formula",
    "$VAR<X>1",
    "$VAR<X>0",
    "$Out",
    "$Error"
  ],
  "modules": [
    [
      "Break",
      []
    ],
    [
      "CalcFormula",
      [
        "$VAR<X>0",
        "$VAR<X>1"
      ],
      "$Out",
      "$Formula"
    ]
  ],
  "inputPorts": [
    {
      "name": "Variable X",
      "description": "Dieser Wert wird in der Formel mit X und der Nummer des Eingangs verwendet. Zum Bespiel X1 für den ersten Eingang.",
      "mnemonic": "$VAR<X>0-LE-INPUT-0",
      "triggerType": "ai",
      "type": "float",
      "optional": false,
      "multiple": true
    },
    {
      "name": "Variable X",
      "description": "Dieser Wert wird in der Formel mit X und der Nummer des Eingangs verwendet. Zum Bespiel X1 für den ersten Eingang.",
      "mnemonic": "$VAR<X>1-LE-INPUT-0",
      "triggerType": "ui",
      "type": "float",
      "optional": false,
      "multiple": true
    }
  ],
  "outputPorts": [
    {
      "name": "Ergebnis",
      "description": "Berechneter Wert anhand der Formel falls kein Fehler auftreten ist.",
      "mnemonic": "$Out",
      "triggerType": "a",
      "type": "float",
      "optional": false,
      "multiple": false
    }
  ]
}
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#19

Beitrag von Robosoc »

tger977 hat geschrieben: Do Apr 29, 2021 10:00 pm Bitteschön:
Danke, war jetzt doch nicht ganz wie von mir erwartet, hilft mir aber sehr. Werde gleich eine eigene Diskussion dazu aufmachen. Und hier dann auch den Link dazu einstellen.

edit: Link
Zuletzt geändert von Robosoc am Fr Apr 30, 2021 7:09 am, insgesamt 3-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK
Antworten

Zurück zu „Feature Requests & Diskussionen Timberwolf Logik (Module & Editor)“