Seite 1 von 1

[V4.5 IP1] Custom Logik Temperatur Warnung per VISU-Nachrichten

Verfasst: So Nov 17, 2024 6:11 pm
von SchateMuhl
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.
Bildschirmfoto 2024-11-17 um 17.48.38.png
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
Bildschirmfoto 2024-11-17 um 17.51.01.png

Nachricht im Telegram
Screenshot 2024-11-17 175702.jpg

und so sieht es im Widget aus

Bildschirmfoto 2024-11-17 um 17.59.34.png


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.

Re: [V4.5 IP1] Custom Logik Temperatur Warnung per VISU-Nachrichten

Verfasst: So Nov 17, 2024 9:55 pm
von Parsley
Cool, danke Andreas.

Falls es für dich ok ist würde sich Elabnet sicher freuen, wenn du die Logik unter die TOLL stellst. ;)

Re: [V4.5 IP1] Custom Logik Temperatur Warnung per VISU-Nachrichten

Verfasst: Mo Nov 18, 2024 8:19 am
von SchateMuhl
Hi Parsley
@Parsley

Na klar', kann die Logik jeder nutzen, ich habe den Satz eingefügt.
Ist an dieser Stelle noch mehr zu machen?

Re: [V4.5 IP1] Custom Logik Temperatur Warnung per VISU-Nachrichten

Verfasst: Mo Nov 18, 2024 9:39 am
von Parsley
Hi

Danke. Nein, das war schon alles! :handgestures-thumbupright:

Re: [V4.5 IP1] Custom Logik Temperatur Warnung per VISU-Nachrichten

Verfasst: Mo Nov 18, 2024 10:58 am
von StefanW
Hi Andreas, danke sehr.

Lukas, das kann gerne in den öffentlichen Logik-Module Bereich, sollte alles mit der Hauptversion V 4.1 laufen

lg

Stefan

Re: [V4.5 IP1] Custom Logik Temperatur Warnung per VISU-Nachrichten

Verfasst: Di Nov 19, 2024 7:23 am
von ztjuu
Super Arbeit!
Ich nutze ebenfalls seit einer Woche den BSC und lese die Werte mit MQTT aus.

Werde den Baustein gleich nutzen!

Re: [V4.5 IP1] Custom Logik Temperatur Warnung per VISU-Nachrichten

Verfasst: Di Nov 19, 2024 10:50 am
von Sun1453
Cooles Ding was du da zusammengebaut hast. Respekt, weil soviele Systeme mit einem Baustein abzudecken. Vor allem die ganzen Logischen Zusammenhänge im Kopf zu haben und die Verbindungen dazu Crazy. Bestimmt auch eine gute Testlogik für die Logik Landkarte die in Entwicklung ist.