[V4.5 IP1] Custom Logik Temperatur Warnung per VISU-Nachrichten
Verfasst: So Nov 17, 2024 6:11 pm
Ich habe heute mal ein kleine Custom Logik für meine Batterie Packs mit Seplos BMS und einem BSC gebaut.
Ziel ist es, die 6 Temperaturwerte die ich von meinen Seplos BMS über einen BSC (Battery Safety Controller) bekomme wie folgt auszuwerten
- Anzeige der 4 Zell Temperaturen und der Innentemperatur in der VISU
- den Min und Max Wert zu ermitteln
- bei Unterschreitung einer min Temperatur eine Nachricht per Telegram und VISU zu senden
- das gleiche bei Überschreitung der Max Grenze
- und extra Überwachung der Seplos Temperatur 5 , die direkt am Power-Mostet misst.
- die 3 Grenzwerte sind als Input vorhanden und können so mit einem Pegelsteller aus der VISU eingestellt werden, Initialwerte sind fest hinterlegt
- die Logik beginnt erst nachdem alle 6 Input Temperaturwerte vorhanden sind ( dank des neuen Startverhaltens)
- bei einer Temperatur Überschreitung wird der Ausgang 8 auf True gesetzt, damit setze ich ein Trigger am BSC, der dann den Lade / Entladestrom auf 0 stellt.
- Ausgänge 3-5 werden auch auf True gezogen wenn eines der 3 Ereignisse eintrifft, damit kann man sich z.B einen Alarm in der VISU Anzeigen.
Die Logik kann gern von allen genutzt und geändert werden.
"Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht."
Ausgabe der Nachricht in der VISU
Nachricht im Telegram
und so sieht es im Widget aus
Diese Logik ist bei mir für die BMS Temperatur Überwachung entstanden, kann aber, mit Anpassungen
auch für alle anderen Temperatur Überwachungen genutzt werden.
Viel Spass damit.
Ziel ist es, die 6 Temperaturwerte die ich von meinen Seplos BMS über einen BSC (Battery Safety Controller) bekomme wie folgt auszuwerten
- Anzeige der 4 Zell Temperaturen und der Innentemperatur in der VISU
- den Min und Max Wert zu ermitteln
- bei Unterschreitung einer min Temperatur eine Nachricht per Telegram und VISU zu senden
- das gleiche bei Überschreitung der Max Grenze
- und extra Überwachung der Seplos Temperatur 5 , die direkt am Power-Mostet misst.
- die 3 Grenzwerte sind als Input vorhanden und können so mit einem Pegelsteller aus der VISU eingestellt werden, Initialwerte sind fest hinterlegt
- die Logik beginnt erst nachdem alle 6 Input Temperaturwerte vorhanden sind ( dank des neuen Startverhaltens)
- bei einer Temperatur Überschreitung wird der Ausgang 8 auf True gesetzt, damit setze ich ein Trigger am BSC, der dann den Lade / Entladestrom auf 0 stellt.
- Ausgänge 3-5 werden auch auf True gezogen wenn eines der 3 Ereignisse eintrifft, damit kann man sich z.B einen Alarm in der VISU Anzeigen.
Die Logik kann gern von allen genutzt und geändert werden.
Code: Alles auswählen
/*
-
-
-
-
-
-
*/
{
"_Meta": { // Optional
"Description": "Diese Logik wertet 6 Temperaturen meines Seplos BMS aus und gibt Warnungen bei Min,Max und max MosFet Temperatur per Telegramm und VISU Nachricht aus",
"Version": "1.00",
"Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
},
"Level": [
// --------------------Eingangs Variablen-------------------
["$in_1","float",0], // Temperatur Wert 1 vom BMS (Fühler 0 auf den Zellen)
["$in_2","float",0], // Temperatur Wert 2 vom BMS (Fühler 1 auf den Zellen)
["$in_3","float",0], // Temperatur Wert 3 vom BMS (Fühler 2 auf den Zellen)
["$in_4","float",0], // Temperatur Wert 4 vom BMS (Fühler 3 auf den Zellen)
["$in_5","float",0], // Temperatur Wert 5 vom BMS (Fühler am MosFet Kühlkörper)
["$in_6","float",0], // Temperatur Wert 6 vom BMS (Fühler vom inneren des Pack's)
["$in_7","float",10.0], // Temperatur Vorgabe Minimale Temperatur
["$in_8","float",35.0], // Temperatur Vorgabe Maximale Temperatur
["$in_9","float",60.0], // Temperatur Vorgabe Max MosFet Temperatur Temperatur
// ----------------------Ausgangs Variablen--------------------
["$out_1","string"," "], // String für VISU Widget
["$out_2","float",0], // Ausgabe max Wert, ausser MosFet
["$out_3","bool",false], // True bei Min Warnung
["$out_4","bool",false], // True bei Max Alarm
["$out_5","bool",false], // True bei MosFet Alarm
["$out_6","string,512",""], // Nachrichten String für Telegramm (genau so sieht auch der Strin in der VISU Nachricht aus)
["$out_7","string,512",""],
["$out_8","bool",false], // True bei Alarm, damit schalte ich den Lade / Entladestrom auf 0
// --------------------------Trigger Flags----------------------------
["$trigger","bool",true],
["$interntrigger_1","bool",false], // für VISU Nachrichten
["$interntrigger_2","bool",false], // für VISU Nachrichten
["$interntrigger_3","bool",false], // für VISU Nachrichten
// --------------------------Variablen--------------------------
["$Channel","string","general"],
["$Priority","integer",2],
["$Title", "string,64", "Wichtige Nachricht"],
["$Category", "string,64", "Temperatur-Warnung"],
["$KonstTrue","bool",true],
["$Temp_Min","float",0], //min Wert
["$Temp_Max","float",0], //max Wert
["$Temp_Mean","float",0], //mittelwert
["$Temp_Median","float",0], //zentralwert
["$Min-Alarm","bool",false],
["$Max-Alarm","bool",false],
["$MosFet-Alarm","bool",false],
["$format_temp1","string"," %.1f°C/"],
["$visu_temp1","string"," "],
["$format_temp2","string"," %.1f°C/"],
["$visu_temp2","string"," "],
["$format_temp3","string"," %.1f°C/"],
["$visu_temp3","string"," "],
["$format_temp4","string"," %.1f°C"],
["$visu_temp4","string"," "],
["$format_temp5","string"," %.1f°C/"],
["$visu_temp5","string"," "],
["$format_temp6","string"," I=%.1f°C"],
["$visu_temp6","string"," "],
["$Utime","integer",0],
["$Nachricht_Stunde","integer",0],
["$Nachricht_Minute","integer",0],
["$Nachricht-MIN","string,250",""],
["$Nachricht-MAX","string,250",""],
["$Nachricht-MOS","string,250",""],
["$vorNachricht","string","Achtung Batterie Pack 1 hat eine "], // erster Teil des Nachrichten Strings
["$minNachricht","string","minimale Temperatur von "], // zweiter Teil des Nachrichten Strings , dann kommt der eigentliche Wert
["$maxNachricht","string","maximale Temperatur von "],
["$mosNachricht","string","maximale MosFet-Temperatur von "],
["$nachNachricht","string"," erreicht, vorsichtig Laden/Entladen"], // letzte Teil des Nachrichten Strings
["$alarmnachNachricht","string"," erreicht, Lade/Entladestrom wird auf 0 gesetzt"],
["$min_valueNachricht","string"," "],
["$max_valueNachricht","string"," "],
["$mos_valueNachricht","string"," "],
["$formatNachricht","string","%.1f °C "],
["$formatStunde","string","Zeit = %d:"],
["$formatMinute","string","%d, "],
["$stundeNachricht","string"," "],
["$minuteNachricht","string"," "],
["$Telegram-Nachricht","string,250",""],
["$Visu-Nachricht","string,250",""],
["$Telegram-Trigger","bool",false],
["$Visu-Trigger","bool",false]
],
//---------------------------------Inputs--------------------------------------
"Input": [
["BMS_1-Temp_1", "BMS_1-Temp_1", "$in_1", "ai"], // Eingangs Wert
["BMS_1-Temp_2", "BMS_1-Temp_2", "$in_2", "ai"], // Eingangs Wert
["BMS_1-Temp_3", "BMS_1-Temp_3", "$in_3", "ai"], // Eingangs Wert
["BMS_1-Temp_4", "BMS_1-Temp_4", "$in_4", "ai"], // Eingangs Wert
["MosFet_Temp", "Temperatur 5 vom Seplos", "$in_5", "ai"], // Eingangs Wert
["Innen_Temp", "Innen Temperatur vom Batterie-Pack", "$in_6", "ai"],
["Warnung-Min-Temp", "min Temperatur für Warnung", "$in_7", "c"] ,
["Warnung-Max-Temp", "max Temperatur für Warnung", "$in_8", "c"],
["Warnung-MosFet-Temp", "max MosFet Temperatur für Warnung", "$in_9", "c"]
//---------------------------------Outputs--------------------------------------
],
"Output": [
["Visu-String", "Visu-String", "$out_1", "a"], // Ausgangs Wert Tages Start
["Max-Tempwert","Max-Tempwert","$out_2","a"],
["Min-Alarm","Alarm wegen Temp Unterschreitung","$out_3","c"],
["Max-Alarm","Alarm wegen Temp Ueberschreitung","$out_4","c"],
["MosFet-Alarm","Alarm wegen MosFet Temp Ueberschreitung","$out_5","c"],
["Telegram", "Telegram-Nachricht", "$out_6", "c"],
["--", "--", "$out_7", "c"],
["Trigger_set","Trigger für BSC","$out_8","c"]
],
//--------------------------------Module--------------------------
"Module": [
// Momentane Zeit in Stunden und Minuten speichern
["Localtime",0,"$Utime",0,"$Nachricht_Minute","$Nachricht_Stunde",0,0,0,0,0,0],
// Temperaturen in Strings mit Angabe der Einheit formatieren
["Printf","$in_1","$format_temp1", "$visu_temp1"],
["Printf","$in_2","$format_temp2", "$visu_temp2"],
["Printf","$in_3","$format_temp3", "$visu_temp3"],
["Printf","$in_4","$format_temp4", "$visu_temp4"],
["Printf","$in_5","$format_temp5", "$visu_temp5"],
["Printf","$in_6","$format_temp6", "$visu_temp6"],
// Min und Max Temperaturen bestimmen
["Statistic",["$in_1","$in_2","$in_3" ,"$in_4","$in_6"],"$Temp_Min","$Temp_Max","$Temp_Mean", "$Temp_Median"],
["Latch","$Temp_Max","$out_2","$trigger",0],
// prüfen ob es eine Grenzüberschreitung gibt, wenn ja wird der entsprechende Trigger auf True gesetzt
["Comparator" , "$in_7" , "$Min-Alarm" , "$Temp_Min"],
["Comparator" , "$Temp_Max" , "$Max-Alarm" , "$in_8"],
["Comparator" , "$in_5" , "$MosFet-Alarm" , "$in_9"],
// Ausgabe der Trigger Zustände , kann als Alarm Objekt genutzt werden
["Latch","$Min-Alarm","$out_3","$Min-Alarm",3],
["Latch","$Max-Alarm","$out_4","$Max-Alarm",3],
["Latch","$MosFet-Alarm","$out_5","$MosFet-Alarm",3],
// Setzen von Out-8 , dieses True oder False gebe ich per MQTT an meinen BSC um den Ladestrom-Trigger auszulösen, der dann den Ladestrom/Entladestrom auf 0 setzt
["Latch","$Max-Alarm","$out_8","$Max-Alarm",3],
["Latch","$MosFet-Alarm","$out_8","$MosFet-Alarm",3],
// Anzeige-String für VISU bauen
["Concat",["$visu_temp1","$visu_temp2","$visu_temp3","$visu_temp4","$visu_temp6"], "$out_1"],
// Formatierungen der Werte für die Nachricht
["Printf","$Temp_Min","$formatNachricht","$min_valueNachricht"],
["Printf","$Temp_Max","$formatNachricht","$max_valueNachricht"],
["Printf","$in_5","$formatNachricht","$mos_valueNachricht"],
// Formatierungen der Uhrzeit (Stunde Minute)
["Printf","$Nachricht_Stunde","$formatStunde","$stundeNachricht"],
["Printf","$Nachricht_Minute","$formatMinute","$minuteNachricht"],
// Erzeugung der Nachricht für Min-Grenze
["Concat",["$stundeNachricht","$minuteNachricht","$vorNachricht","$minNachricht","$min_valueNachricht","$nachNachricht"],"$Nachricht-MIN"],
// Ausgabe der Nachricht
["Latch","$Nachricht-MIN","$out_6","$Min-Alarm",1],
// Trigger für VISU Nachricht setzen
["Latch","$KonstTrue","$interntrigger_1","$Min-Alarm",1],
// VISU Nachricht senden
["SendToSimple", "-$interntrigger_1", "$Channel", "$Title", "$Nachricht-MIN", "$Category", "$Priority"],
// Trigger für VISU Nachricht zurück setzen, damit die Nachricht nur kommt wenn der Min-Alarm Trigger von Fals auf True wechselt
["Latch","-$KonstTrue","$interntrigger_1","$Min-Alarm",1],
// das Gleiche für Max
["Concat",["$stundeNachricht","$minuteNachricht","$vorNachricht","$maxNachricht","$max_valueNachricht","$alarmnachNachricht"],"$Nachricht-MAX"],
["Latch","$Nachricht-MAX","$out_6","$Max-Alarm",1],
["Latch","$KonstTrue","$interntrigger_2","$Max-Alarm",1],
["SendToSimple", "-$interntrigger_2", "$Channel", "$Title", "$Nachricht-MAX", "$Category", "$Priority"],
["Latch","-$KonstTrue","$interntrigger_2","$Max-Alarm",1],
// das Gleiche für MosFet Alarm
["Concat",["$stundeNachricht","$minuteNachricht","$vorNachricht","$mosNachricht","$mos_valueNachricht","$alarmnachNachricht"],"$Nachricht-MOS"],
["Latch","$Nachricht-MOS","$out_6","$MosFet-Alarm",1],
["Latch","$KonstTrue","$interntrigger_3","$MosFet-Alarm",1],
["SendToSimple", "-$interntrigger_3", "$Channel", "$Title", "$Nachricht-MOS", "$Category", "$Priority"],
["Latch","-$KonstTrue","$interntrigger_3","$MosFet-Alarm",1]
]
}
"Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht."
Ausgabe der Nachricht in der VISU
Nachricht im Telegram
und so sieht es im Widget aus
Diese Logik ist bei mir für die BMS Temperatur Überwachung entstanden, kann aber, mit Anpassungen
auch für alle anderen Temperatur Überwachungen genutzt werden.
Viel Spass damit.