KNX Data Secure Unterstützung
für KNX Logger und KNX Busmonitor

KNX Diagnose Monitor, Import des ETS Projektes deutlich beschleunigt, Suche in der Navigation
Mehr Informationen dazu hier im Forum

Insider Version 6 zur 4.5 jetzt für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki

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

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
Antworten

Ersteller
SchateMuhl
Reactions:
Beiträge: 472
Registriert: Mi Nov 23, 2022 9:31 pm
Wohnort: Werther bei Nordhausen
Hat sich bedankt: 128 Mal
Danksagung erhalten: 185 Mal
Kontaktdaten:

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

#1

Beitrag 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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von SchateMuhl am Mo Nov 18, 2024 8:13 am, insgesamt 1-mal geändert.
Grüße
Andreas

TWS 3500M ID:992 /XL ID:1198 , VPN offen, Reboot nach Absprache
- KNX mit TWS, 1Home, ENO Gateway, ETS6.3
- PV Anlagen AC gekoppelt mit Fronius IG 40/60 und Symo 10KW
- 96kWh LiFePo mit 3 x MultiPlus 48/8000 und DC PV Anlagen über MPPT
Benutzeravatar

Parsley
Reactions:
Beiträge: 681
Registriert: Di Okt 09, 2018 7:27 am
Wohnort: 490..
Hat sich bedankt: 791 Mal
Danksagung erhalten: 425 Mal

#2

Beitrag 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. ;)
Gruß Parsley

Timberwolf Server 3500L #657 (VPN offen, reboot nach Absprache)
Bitte WIKI lesen.

Ersteller
SchateMuhl
Reactions:
Beiträge: 472
Registriert: Mi Nov 23, 2022 9:31 pm
Wohnort: Werther bei Nordhausen
Hat sich bedankt: 128 Mal
Danksagung erhalten: 185 Mal
Kontaktdaten:

#3

Beitrag 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?
Grüße
Andreas

TWS 3500M ID:992 /XL ID:1198 , VPN offen, Reboot nach Absprache
- KNX mit TWS, 1Home, ENO Gateway, ETS6.3
- PV Anlagen AC gekoppelt mit Fronius IG 40/60 und Symo 10KW
- 96kWh LiFePo mit 3 x MultiPlus 48/8000 und DC PV Anlagen über MPPT
Benutzeravatar

Parsley
Reactions:
Beiträge: 681
Registriert: Di Okt 09, 2018 7:27 am
Wohnort: 490..
Hat sich bedankt: 791 Mal
Danksagung erhalten: 425 Mal

#4

Beitrag von Parsley »

Hi

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

Timberwolf Server 3500L #657 (VPN offen, reboot nach Absprache)
Bitte WIKI lesen.

StefanW
Elaborated Networks
Elaborated Networks
Reactions:
Beiträge: 10702
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 5303 Mal
Danksagung erhalten: 8685 Mal
Kontaktdaten:

#5

Beitrag 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
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.
Benutzeravatar

ztjuu
Reactions:
Beiträge: 109
Registriert: Sa Mär 07, 2020 8:49 am
Wohnort: Bleiberg-Nötsch (Kärnten)
Hat sich bedankt: 87 Mal
Danksagung erhalten: 75 Mal

#6

Beitrag von ztjuu »

Super Arbeit!
Ich nutze ebenfalls seit einer Woche den BSC und lese die Werte mit MQTT aus.

Werde den Baustein gleich nutzen!
TWS 950Q -> 3500XL ID:1424 VPN: aktiviert Reboot: (OK)
EFH-Neubau: KNX, 1-Wire, DALI, VPN, CV & in Zukunft Multiroom Sound mit raspberry pi, Ekey-Zugang, ModBus TCP & RTU, MQTT

Sun1453
Reactions:
Beiträge: 2216
Registriert: Do Feb 07, 2019 8:08 am
Hat sich bedankt: 1978 Mal
Danksagung erhalten: 885 Mal

#7

Beitrag 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.
Gruß Michael

Timberwolf 950 QL #344 | Mit Internetanbindung | VPN Offen | Reboot nach Absprache | PROD Server
Timberwolf 2500 #602 | VPN offen | TEST Server | Reboot nach Absprache |
Antworten

Zurück zu „Logikengine & Logik-Editor“