Insider Preview 3 veröffentlicht

Bild

Wir haben seben die Insider Preview 3 zur Version 4.8 veröffentlicht
Komplett überarbeiteter Logik Katalog mit verbesserter Übersicht und Suche für einfachere Auswahl der Lgik Module
Sechs neue Logiken für Farbraum-Umrechnungen (siehe Bild)
Fünfzehn neue Logiken aus der Community
Damit sind es nun 99 Logiken
Einundzwanzig neue winterliche Hintergründe für die VISU
Verbesserte Mouse-Over im VISU Editor für klarere Information
Das HTTP-API Subsystem liefert nun im Header stets Header Access-Control-Allow-Origin = * aus
Der Modbus Register Auswahlassistent erlaubt nun verschiedene Sortierungen beim Anlegen einer Transaktion
Viele Bugfixes


Release Notes: https://elabnet.atlassian.net/wiki/x/AYDD0

AKTION: Wir haben noch viele tolle Updates und 150 Videos (und 800 Wiki Seiten) geplant. Bitte unterstütze uns mit einem Software-Wartungsvertrag, damit wir dieses alles erreichen können. Und damit Dein Server weiterhin Updates, Upgrades und Support erhält. Jetzt in der Aktion schenken wir Dir den Insider Club mit derselben Laufzeit wie der am längsten laufende aktive Wartungsvertrag dazu - bei sofortigem Laufzeitbeginn. Damit profitierst Du auch von einer vorzeitigen Verlängerung. Alle Infos: https://elabnet.atlassian.net/wiki/x/GQB8z

[Beantwortet] [V4.0 IP5] Wie kann man den Taupunkt in einer Custom-Logik berechnen?

Informationen und Diskussionen über Logik-Engine und Logik-Editor
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln

Robert_Mini
Beiträge: 3914
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1287 Mal
Danksagung erhalten: 2227 Mal

#11

Beitrag von Robert_Mini »

Achso:
Du musst beide Berechnungen ausführen, für >=0 das Ergebnis auf $td1 und für <0 auf $td2 schreiben.
Der Multiplexer wählt nur aus.

In Einzellogikzellwn könnte man das nur selektiv berechnen, in CustomLogiken kann man nicht einzelne Module überspringen!

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

blaubaerli
Beiträge: 2748
Registriert: Sa Sep 15, 2018 10:26 am
Wohnort: Kerpen
Hat sich bedankt: 1042 Mal
Danksagung erhalten: 839 Mal

#12

Beitrag von blaubaerli »

Hallo Hans,

da gibt es schon ein paar Hinweise im Forum :-) die habe ich mir gebookmarked:

Knowledge Base - 4.6.7.7_ CUSTOM: IF-THEN (ELSE) Lösungen

und

viewtopic.php?f=24&t=1585&p=16639#p16638

Beste Grüße
Jens

PS: Ich bekomme da auch regemäßig Kringel in den Hirnwindungen. Robert ist da schlicht der Foren-Guru :handgestures-thumbsup: :handgestures-thumbsup: :bow-yellow:
Zuletzt geändert von blaubaerli am Di Dez 26, 2023 9:31 pm, insgesamt 1-mal geändert.
timberwolf168(2600er)VPN offenReboot nach Vereinbarung
timberwolf1699(3500XL)VPN offenReboot jederzeit
wiregate1250
Bitte WIKI lesen.

gbglace
Beiträge: 4190
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1471 Mal
Danksagung erhalten: 1988 Mal

#13

Beitrag von gbglace »

Ich bin ja immer noch dabei eher dieses Wertepärchen je nach größer oder kleiner 0° in je eine Variable zu packen.
Ob die Auswahl nun durch einen Multiplexer oder einem Ausdruck in einer freien Formel passiert ist Geschmackssache.
Wichtig ist ja eher, dass nach dieser Auswahl zwei Variablen existieren, wodurch die 4 Formeln nur einmal in der gesamten Customlogik notiert sein müssen und berechnet werden müssen.
Das macht die Wartung der Customlogik einfacher.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU

Robert_Mini
Beiträge: 3914
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1287 Mal
Danksagung erhalten: 2227 Mal

#14

Beitrag von Robert_Mini »

Hallo Göran!

Danke für den Hinweis, macht speziell in diesem Fall Sinn, da die Formeln dient und komplex sind.
Wenn es eine Fallunterscheidung wäre, die anders behandelt wird, ginge es nur so wie dargestellt.

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
hans4711
Beiträge: 124
Registriert: Mi Nov 08, 2023 4:24 pm
Hat sich bedankt: 40 Mal
Danksagung erhalten: 65 Mal

#15

Beitrag von hans4711 »

@Robert_Mini irgendwie klappt es nicht ganz:
* Ich kann den Comperator Ausgang nicht mit dem mulitplexer Selektor koppeln weil der Multiplexer ein integer erwartet, der Comperator aber Bool ausgibt.
* Ich dachte ich Mappe true/false in 1/0 über eine Freie Formel (X1==true?1:0). Die Freie Formel erwartet aber einen Float als Eingang und kein Bool
* Ich habe die Abfolge mit Standardlogiken nachgebaut, daher habe ich auch die Fehlermeldungen der falschen Casts

Hast du dafür eine Lösung?
So sieht der Code aktuell aus, ich habe die Formel jetzt zu einer zusammengefasst

Code: Alles auswählen

/**
 * New custom logic
 *
 * 
 */

{
  "_Meta": { // Optional
    "Description": "",
    "Version": "1.00",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
  },
  "Input": [
    ["Temperatur","Temperatur","$temp","c" ],
    ["Luftfeuchte","Luftfeuchte","$luft","c" ]
  ],
  "Output": [
    ["Taupunkt","Berechneter Taupunkt","$taupunkt","a"],
    ["Comperator","True postiv, False, negativ","$comp","a"],
    //Zur Fehlersuche
    ["Multi","True postiv, False, negativ","$multi","a"],
    ["IFElse","True postiv, False, negativ","$schwellwertueberschreitungint","a"]
    
  ],
  "Level": [
      //Ein/Ausgänge
    ["$temp","float",0.0],
    ["$luft","float",0.0],
    ["$taupunkt","float",0.0],
    
    //Formeln
    ["$formelminusgrade","string","((240.7*(log10(((6.1078 * (10^(7.6*X1)/(240.7+X1))) * (X1/100))/6.1078))) / (7.6-(log10(((6.1078 * (10^(7.6*X2)/(240.7+X2))) * (X2/100))/6.1078))))*100/100"],
    ["$formelplusgrade","string","((237.3*(log10(((6.1078 * (10^(7.5*X1)/(237.3+X1))) * (X1/100))/6.1078))) / (7.5-(log10(((6.1078 * (10^(7.5*X2)/(237.3+X2))) * (X2/100))/6.1078))))*100/100"],
    ["$formelinbenutzung","string",""],
    ["$formeltointeger","string","(X1==true)?1:0"],
    
    //Variablen für die Berechnungen
    ["$schwellwert","float",0.0],
    ["$schwellwertueberschreitung","bool",false],
    ["$schwellwertueberschreitungint","integer",0],
    
    //Troubleshooting
    ["$comp","bool",false],
    ["$multi","bool",false]
    
    
      
  ],
  "Module": [
      //Comparator, prüft ob die Temp postiv oder negativ ist, True bei Plusgraden, False bei Minusgraden
      ["Comparator" , "$luft" , "$comp" , "$schwellwert"], //nur für Fehlersuche
      ["Comparator" , "$luft" , "$schwellwertueberschreitung" , "$schwellwert"],
      ["CalcFormula",["$schwellwertueberschreitung"], "$schwellwertueberschreitungint", "$formeltointeger"],
      
      //Mulitplexer, speichert die richtige Formel in der Variable "formelinbenutzung", diese soll dann der freien Berechnung übergeben werden
      ["Multiplexer", ["$formelminusgrade", "$formelplusgrade"],"$multi","$schwellwertueberschreitung"], //nur für Fehlersuche
      ["Multiplexer", ["$formelminusgrade", "$formelplusgrade"],"$formelinbenutzung","$schwellwertueberschreitung"],
      
      
      //Berechnung des Taupunkts
      ["CalcFormula",["$temp","$luft"], "$taupunkt", "$formelinbenutzung"]
      
  ]
}
Bild
Bild
Zuletzt geändert von hans4711 am Mi Dez 27, 2023 11:19 pm, insgesamt 1-mal geändert.
3500 XL ID:1339

Robert_Mini
Beiträge: 3914
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1287 Mal
Danksagung erhalten: 2227 Mal

#16

Beitrag von Robert_Mini »

Hallo Hans!

Göran hatte das zwar etwas anders gemeint (Umschalter der Parameter), ich finde den Ansatz mit Umschalten der Formel aber ziemlich elegant :-).

Hab das bei mir nun getestet und im Wesentlichen einen Fehler in den Formel gefunden. Daher hab ich mal einfach "X1+X2" und "X1-X2" hinterlegt und dann funktioniert es auch schon. $temp statt $luft am comperator war auch falsch.

In Customlogiken kann man sehr wohl bool auf int und umgekehrt schreiben, man muss eben wissen was man tut. Insbesondere bei float auf bool kommt da schnell MIST raus....

Code: Alles auswählen

/**
 * New custom logic
 *
 * 
 */

{
  "_Meta": { // Optional
    "Description": "",
    "Version": "1.00",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
  },
  "Input": [
    ["Temperatur","Temperatur","$temp","c" ],
    ["Luftfeuchte","Luftfeuchte","$luft","c" ]
  ],
  "Output": [
    ["Taupunkt","Berechneter Taupunkt","$taupunkt","a"],
    ["Comperator","True postiv, False, negativ","$comp","a"],
    //Zur Fehlersuche
    ["Multi","True postiv, False, negativ","$multi","a"],
    ["IFElse","True postiv, False, negativ","$schwellwertueberschreitungint","a"]
    
  ],
  "Level": [
      //Ein/Ausgänge
    ["$temp","float",0.0],
    ["$luft","float",0.0],
    ["$taupunkt","float",0.0],
    
    //Formeln
   // ["$formelminusgrade","string","((240.7*(log10(((6.1078 * (10^(7.6*X1)/(240.7+X1))) * (X1/100))/6.1078))) / (7.6-(log10(((6.1078 * (10^(7.6*X2)/(240.7+X2))) * (X2/100))/6.1078))))*100/100"],
   // ["$formelplusgrade","string","((237.3*(log10(((6.1078 * (10^(7.5*X1)/(237.3+X1))) * (X1/100))/6.1078))) / (7.5-(log10(((6.1078 * (10^(7.5*X2)/(237.3+X2))) * (X2/100))/6.1078))))*100/100"],
   
    ["$formelminusgrade","string","X1+X2"],
    ["$formelplusgrade","string","X1-X2"],
    ["$formelinbenutzung","string",""],
   // ["$formeltointeger","string","(X1==true)?1:0"],
    
    //Variablen für die Berechnungen
    ["$schwellwert","float",0.0],
    ["$schwellwertueberschreitung","bool",false],
    ["$schwellwertueberschreitungint","integer",0],
    
    //Troubleshooting
    ["$comp","bool",false],
    ["$multi","bool",false]
    
    
  ],
  "Module": [
      //Comparator, prüft ob die Temp postiv oder negativ ist, True bei Plusgraden, False bei Minusgraden
      ["Comparator" , "$temp" , "$comp" , "$schwellwert"], //nur für Fehlersuche
      ["Comparator" , "$temp" , "$schwellwertueberschreitung" , "$schwellwert"],
      //["CalcFormula",["$schwellwertueberschreitung"], "$schwellwertueberschreitungint", "$formeltointeger"],
      
      //Mulitplexer, speichert die richtige Formel in der Variable "formelinbenutzung", diese soll dann der freien Berechnung übergeben werden
      ["Multiplexer", ["$formelminusgrade", "$formelplusgrade"],"$multi","$schwellwertueberschreitung"], //nur für Fehlersuche
      ["Multiplexer", ["$formelminusgrade", "$formelplusgrade"],"$formelinbenutzung","$schwellwertueberschreitung"],
      
      
      //Berechnung des Taupunkts
      ["CalcFormula",["$temp","$luft"], "$taupunkt", "$formelinbenutzung"]
      
  ]
}
Zum Standardbaustein melde ich mich noch.

lg
Robert
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Robert_Mini am Mi Dez 27, 2023 11:57 pm, insgesamt 1-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Robert_Mini
Beiträge: 3914
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1287 Mal
Danksagung erhalten: 2227 Mal

#17

Beitrag von Robert_Mini »

Bool als Selektor beim Multiplexer im Standardbaustein geht tatsächlich nicht.

@Stefan: hier ist aus meiner Sicht die Prüfung zu streng und es gibt keinen Eingangsmodifizierer, der Bool auf Int erlaubt. Ich wüsste da jetzt auch keinen einfachen Workaround...

Auch der MouseOver Text ist da aus meiner Sicht falsch: Ganzzahl (INT) passt, aber Ziel Datentyp sollte auch INT sein vermute ich mal.

lg
Robert
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Robert_Mini
Beiträge: 3914
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1287 Mal
Danksagung erhalten: 2227 Mal

#18

Beitrag von Robert_Mini »

Für den Formelfehler gebe ich auf, hab's in 1/2h nicht gefunden...

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
hans4711
Beiträge: 124
Registriert: Mi Nov 08, 2023 4:24 pm
Hat sich bedankt: 40 Mal
Danksagung erhalten: 65 Mal

#19

Beitrag von hans4711 »

Vielen Dank für Eure Hilfe!!!

Jetzt bin ich ein gutes Stück weiter, die Formeln habe ich jetzt um komplexität rauszunehmen wieder auf den ursprünglichen 5 gelassen und habe einfach vor jeder Formel einen Multiplexer gebaut.
Leider kann ich die Formeln wohl nicht wie benötigt umbauen.
Es kommt folgende Fehlermeldung:

28.12.2023 10:35:21 Logic_24 Taupunktrechner calc_formula3 Error while analyzing formula "6.1078 * 10^(7."
28.12.2023 10:35:22 src/le_math_expr.cpp#23:muparser: Missing parenthesis

Was mache ich da bei der Formel mit dem pow falsch?

Code: Alles auswählen

/**
 * New custom logic
 *
 * 
 */

{
  "_Meta": { // Optional
    "Description": "",
    "Version": "1.00",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
  },
  "Input": [
    ["Temperatur","Temperatur","$temp","c" ],
    ["feuchtefeuchte","feuchtefeuchte","$feuchte","c" ]
  ],
  "Output": [
    ["Taupunkt","Berechneter Taupunkt","$taupunkt","a"],
    ["Comperator","True postiv, False, negativ","$comp","a"],
    ["Multi","True postiv, False, negativ","$multi","a"],
    ["IFElse","True postiv, False, negativ","$schwellwertueberschreitungint","a"]
    
  ],
  "Level": [
      //Ein/Ausgänge
    ["$temp","float",0.0],
    ["$feuchte","float",0.0],
    ["$taupunkt","float",0.0],
    
    //Formeln
    //["$formelminusgrade","string","((240.7*(log10(((6.1078 * (10^(7.6*X1)/(240.7+X1))) * (X1/100))/6.1078))) / (7.6-(log10(((6.1078 * (10^(7.6*X2)/(240.7+X2))) * (X2/100))/6.1078))))*100/100"],
//    ["$formelminusgrade","string","X1+X2"],
//    ["$formelplusgrade","string","((237.3*(log10(((6.1078 * (10^(7.5*X1)/(237.3+X1))) * (X1/100))/6.1078))) / (7.5-(log10(((6.1078 * (10^(7.5*X2)/(237.3+X2))) * (X2/100))/6.1078))))*100/100"],
    //["$formelplusgrade","string","X1*X2"],
    ["$formelinbenutzung","string",""],
    ["$formeltointeger","string","(X1==true)?1:0"],
    
    //neue Formeln
    //var sdd = 6.1078 * Math.pow(10, (a*t)/(b+t));
    ["$formel1plus","string","6.1078 * 10^(7.5*X1)/(237.3+X1)"],
    ["$formel1minus","string","6.1078 * 10^(7.6*X1)/(240.7+X1)"],
    //var dd = sdd * (r/100);
    ["$formel2plus","string","X1 * (X2/100)"],
    ["$formel2minus","string","X1 * (X2/100)"],
    
    //var af = Math.pow(10,5) * mw/gk * dd/tk;
    ["$formel3plus","string","10^5 * 18.016/8314.3 * X1/(X2 + 273.15)"],
    ["$formel3minus","string","10^5 * 18.016/8314.3 * X1/(X2 + 273.15)"],

    //var v = Math.log10(dd/6.1078);
    ["$formel4plus","string","log10(X1/6.1078)"],
    ["$formel4minus","string","log10(X1/6.1078)"],
    
    //tp = Math.round( ((b*v) / (a-v))*100)/100;
    ["$formel5plus","string","((237.3*X1) / (7.5-X1))*100/100"],
    ["$formel5minus","string","((240.7*X1) / (7.6-X1))*100/100"],
    
    //Variablen für die Berechnungen
    ["$schwellwert","float",0.0],
    ["$schwellwertueberschreitung","bool",false],
    ["$schwellwertueberschreitungint","integer",0],
    ["$sdd","float",0.0],
    ["$dd","float",0.0],
    ["$af","float",0.0],
    ["$v","float",0.0],
    
    //Troubleshooting
    ["$comp","bool",false],
    ["$multi","bool",false]
    
    
      
  ],
  "Module": [
      //Comparator, prüft ob die Temp postiv oder negativ ist, True bei Plusgraden, False bei Minusgraden
      ["Comparator" , "$temp" , "$comp" , "$schwellwert"], //nur für Fehlersuche
      ["Comparator" , "$temp" , "$schwellwertueberschreitung" , "$schwellwert"],
      //["CalcFormula",["$schwellwertueberschreitung"], "$schwellwertueberschreitungint", "$formeltointeger"],
      
      ["Multiplexer", ["$formel1minus", "$formel1plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$temp"], "$sdd", "$formelinbenutzung"],
      
      ["Multiplexer", ["$formel2minus", "$formel2plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$sdd","$feuchte"], "$dd", "$formelinbenutzung"],

      ["Multiplexer", ["$formel3minus", "$formel3plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$dd","$temp"], "$af", "$formelinbenutzung"],

      ["Multiplexer", ["$formel4minus", "$formel4plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$dd"], "$v", "$formelinbenutzung"],
      
      ["Multiplexer", ["$formel5minus", "$formel5plus"],"$formelinbenutzung","$schwellwertueberschreitung"],
      ["CalcFormula",["$v"], "$taupunkt", "$formelinbenutzung"]
      
      //Mulitplexer, speichert die richtige Formel in der Variable "formelinbenutzung", diese soll dann der freien Berechnung übergeben werden
      //["Multiplexer", ["$formelminusgrade", "$formelplusgrade"],"$multi","$schwellwertueberschreitung"], //Nur für Fehlersuche
      //["Multiplexer", ["$formelminusgrade", "$formelplusgrade"],"$formelinbenutzung","$schwellwertueberschreitung"],
      
      
      //Berechnung des Taupunkts
      //["CalcFormula",["$temp","$feuchte"], "$taupunkt", "$formelinbenutzung"]
      
  ]
}
Zuletzt geändert von hans4711 am Do Dez 28, 2023 11:32 am, insgesamt 1-mal geändert.
3500 XL ID:1339

Robert_Mini
Beiträge: 3914
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1287 Mal
Danksagung erhalten: 2227 Mal

#20

Beitrag von Robert_Mini »

Hallo Hans!

Danke für deine Ausdauer, ich ärgere mich gerade über den muparser, da liegt offensichtlich ein Problem vor, das ich gerade weiter einschränken, aber nicht lösen konnte. Ich poste die weitere Problembehandlung separat.

Vielleicht hast du zwischenzeitlich eine andere Logik als Custom Logik zu lösen, möchte ungern deinen Schwung bremsen :-)

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Antworten

Zurück zu „Logikengine & Logik-Editor“