NEU! UPGRADE IP 11 verfügbar!
NEU! LICHTWIDGET - DPT 7.600 - Logik Manager Update - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/B9MUEJj2

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur VISU
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[DISKUSSION] Erstellen der ersten Custom Logik und Fragen

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

Ersteller
Picha
Reactions:
Beiträge: 152
Registriert: Do Okt 04, 2018 12:54 pm
Hat sich bedankt: 50 Mal
Danksagung erhalten: 29 Mal

Erstellen der ersten Custom Logik und Fragen

#1

Beitrag von Picha »

Hallo zusammen,

ich habe mich nun auch an meine erste Custom Logik gewagt.
Ziel war es den fortlaufenden Gesamtzählerstand des Wärmepumpenzähler einzulesen und die stündliche, tägliche, wöchentliche, monatliche und jährliche Änderung auszugeben.

Der erstellte Code:

Code: Alles auswählen

/**
 * New custom logic
 *
 * 
 */

{
  "_Meta": { // Optional
    "Description": "",
    "Version": "1.00",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
  },

  "Input": [
	  ["akt_Zaehlerstand","aktueller Zaehlerstand","$I_akt_kWh","a"],
		["Trigger_sofort","Trigger zur sofortigen übernahme der kWh","$I_Trigger_sofort","c"]
	
  ],
  "Output": [
		["Verbrauch_Stunde","Verbrauch der letzten Stunde","$Stundenverbrauch","c"],
		["Verbrauch_Tag","Verbrauch eines Tages","$Tagesverbrauch","c"],	
		["Verbrauch_Woche","Verbrauch einer Woche","$Wochenverbrauch","c"],
		["Verbrauch_Mon","Verbrauch eines Monats","$Monatsverbrauch","c"],		
		["Verbrauch_Jahr","Verbrauch eines Jahres","$Jahresverbrauch","c"]		
		
  ],
  "Level": [
		["$I_akt_kWh","float",0.0],
		["$I_Trigger_sofort","bool",false],
		//
		["$Stundenverbrauch","float",0.0],
		["$Tagesverbrauch","float",0.0],
		["$Wochenverbrauch","float",0.0],
		["$Monatsverbrauch","float",0.0],
		["$Jahresverbrauch","float",0.0],
		//
		["$SpeicherStunde","float",0.0],
		["$SpeicherTag","float",0.0],
		["$SpeicherWoche","float",0.0],
		["$SpeicherMonat","float",0.0],
		["$SpeicherJahr","float",0.0],
		["$KonstTrue","bool",true],
		["$KonstFalse","bool",false],
		["$Konst0","float",0.0],
		["$Konst1","float",1.0],
		//
		["$ResetStunde","string","1 0 0-23 * * *"],
		["$ResetTag","string","1 0 0 * * *"],
		["$ResetWoche","string","1 0 0 * * 0"],
		["$ResetMonat","string","1 0 0 1 * *"],
		["$ResetJahr","string","1 0 0 1 1 *"],
		["$ResetStundeTrigger","bool",false],
		["$ResetTagTrigger","bool",false],
		["$ResetWocheTrigger","bool",false],
		["$ResetMonatTrigger","bool",false],
		["$ResetJahrTrigger","bool",false],
		["$UebnStundeTrigger","bool",false],
		["$UebnTagTrigger","bool",false],
		["$UebnWocheTrigger","bool",false],
		["$UebnMonatTrigger","bool",false],
		["$UebnJahrTrigger","bool",false]
  ],
  "Module": [ 
      
        // Trigger zur Übernahme der aktuellen kWh mittels Cron
		["Cron","$KonstTrue","$ResetTagTrigger",0,"$ResetTag"],
		["Cron","$KonstTrue","$ResetWocheTrigger",0,"$ResetWoche"],
		["Cron","$KonstTrue","$ResetMonatTrigger",0,"$ResetMonat"],
		["Cron","$KonstTrue","$ResetJahrTrigger",0,"$ResetJahr"],

		// Cron oder Eingang
		["Or" , ["$ResetStundeTrigger" , "$I_Trigger_sofort"], "$UebnStundeTrigger"],
		["Or" , ["$ResetTagTrigger" , "$I_Trigger_sofort"], "$UebnTagTrigger"],
		["Or" , ["$ResetWocheTrigger" , "$I_Trigger_sofort"], "$UebnWocheTrigger"],
		["Or" , ["$ResetMonatTrigger" , "$I_Trigger_sofort"], "$UebnMonatTrigger"],
		["Or" , ["$ResetJahrTrigger" , "$I_Trigger_sofort"], "$UebnJahrTrigger"],
		
      // Trigger Übernahme der aktuellen kWh in den Speicher
		["Latch","$I_akt_kWh","$SpeicherStunde","$UebnStundeTrigger",0],
		["Latch","$I_akt_kWh","$SpeicherTag","$UebnTagTrigger",0],
		["Latch","$I_akt_kWh","$SpeicherWoche","$UebnWocheTrigger",0],
		["Latch","$I_akt_kWh","$SpeicherMonat","$UebnMonatTrigger",0],
		["Latch","$I_akt_kWh","$SpeicherJahr","$UebnJahrTrigger",0],
		
		// Delta ermitteln
		["Polynomial", "$Konst1", "$Stundenverbrauch",["$I_akt_kWh", "-$SpeicherStunde"]],
		["Polynomial", "$Konst1", "$Tagesverbrauch",["$I_akt_kWh", "-$SpeicherTag"]],
		["Polynomial", "$Konst1", "$Wochenverbrauch",["$I_akt_kWh", "-$SpeicherWoche"]],
		["Polynomial", "$Konst1", "$Monatsverbrauch",["$I_akt_kWh", "-$SpeicherMonat"]],
		["Polynomial", "$Konst1", "$Jahresverbrauch",["$I_akt_kWh", "-$SpeicherJahr"]]

  ]
}
Leider funktioniert die Custom Logik nicht wie erwartet.
Geplant war es durch den Eingang $I_Trigger_sofort die Speicherplätze ($SpeicherStunde... bis ...$SpeicherJahr) mit dem aktuellen Zählerstand zu füllen. Dies ist nur beim ersten Start nötig und wird durch eine händische Umschaltung erledigt.
Danach soll das beschreiben der "Speicher" mittels der Latch Bausteine getriggert durch Crons erfolgen.

Das Delta wird jeweils durch die Polynominal Bausteine ermittelt.

Scheinbar werden die Speicher nicht durch das händische Triggern vom Eingang "$I_Trigger_sofort" beschrieben.
Die Cron Trigger scheinen auch nicht zu arbeiten.

Kann jemand einen Fehler erkennen?
Wurde mich über Tipps und Vorschläge zum vereinfachen/ verbessern der Custom Logik freuen.

Vielen Dank im Voraus
Markus
TWS 2600 ID:591 + PBM, VPN offen, Reboot nach Absprache"

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

#2

Beitrag von Robosoc »

Ich schau es mir gerade nur auf dem Handy an und spontan fällt mir auf, dass der zweite Parameter von CRON bei Dir bereits die Zeiten sind.

Dies müsste aber der letzte Parameter sein
["Cron","$Start","$Alarm","$NextTrigger","$CronExpr"]

Siehe app.php/kb/viewarticle?a=115#Cron

Hilft dir das?
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

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

#3

Beitrag von Robosoc »

Oh, nee, stop, habe mich verlesen... Meinen Beitrag bitte ignorieren... Ich schau mir das nochmal an
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

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

#4

Beitrag von Robosoc »

Meine neue Vermutung auf die schnelle sind die Minuszeichen in den POLYNOMIAL Bausteinen... Ich denke das geht so nicht, du musst wahrscheinlich mit einer Konstanten - 1 multiplizieren.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

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

#5

Beitrag von Robosoc »

Ahhhh, und ich glaub auch der Hinweis von mir war falsch... Sorry... Jetzt mach ich mal Pause und schau es mir später am Rechner in Ruhe an...
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

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

#6

Beitrag von Robosoc »

Aber bevor ich da nachher rangehe. Was Willst du denn eigentlich am Ende mit den Ergebnissen machen. Willst Du die in Timeseries schreiben und anzeigen lassen? Dann wäre das Logik Modul zwar eine gute Übung, aber eigentlich unnötig, weil das aus dem Logging der Zählerstände in Grafana problemlos "erzeugt" wird.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

Hammer
Reactions:
Beiträge: 171
Registriert: Mo Sep 10, 2018 9:17 am
Hat sich bedankt: 81 Mal
Danksagung erhalten: 69 Mal

#7

Beitrag von Hammer »

Hi Markus,

ich kann so keinen Fehler finden.
Bei mir funktioniert es auch.
Versuche doch die Start Werte statt mit dem Trigger_sofort, mit der Funktion Limiter Comparator (Wenn Wert kleiner 1) zu füllen.

Grüße
Stefan
[Edit: :?]
Zuletzt geändert von Hammer am Mi Dez 02, 2020 9:05 pm, insgesamt 1-mal geändert.
Timberwolf Server 2500 ID:210 +PBM; VPN offen & Reboot nach Rücksprache .

Wiregate von 2011, ab 2024 in Rente

Hammer
Reactions:
Beiträge: 171
Registriert: Mo Sep 10, 2018 9:17 am
Hat sich bedankt: 81 Mal
Danksagung erhalten: 69 Mal

#8

Beitrag von Hammer »

Hallo Markus,

ich habe noch meine Änderungen hinzugefügt.

Code: Alles auswählen

/**
 * New custom logic
 *
 * 
 */

{
  "_Meta": { // Optional
    "Description": "",
    "Version": "1.00",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
  },

  "Input": [
	  ["akt_Zaehlerstand","aktueller Zaehlerstand","$I_akt_kWh","a"]
  ],
  "Output": [
		["Verbrauch_Stunde","Verbrauch der letzten Stunde","$Stundenverbrauch","c"],
		["Verbrauch_Tag","Verbrauch eines Tages","$Tagesverbrauch","c"],	
		["Verbrauch_Woche","Verbrauch einer Woche","$Wochenverbrauch","c"],
		["Verbrauch_Mon","Verbrauch eines Monats","$Monatsverbrauch","c"],		
		["Verbrauch_Jahr","Verbrauch eines Jahres","$Jahresverbrauch","c"]		
		
  ],
  "Level": [
		["$I_akt_kWh","float",0.0],
		
		//
		["$Stundenverbrauch","float",0.0],
		["$Tagesverbrauch","float",0.0],
		["$Wochenverbrauch","float",0.0],
		["$Monatsverbrauch","float",0.0],
		["$Jahresverbrauch","float",0.0],
		//
		["$SpeicherStunde","float",0.0],
		["$SpeicherStunde_fuellen","bool",false],
		["$SpeicherTag","float",0.0],
		["$SpeicherTag_fuellen","bool",false],
		["$SpeicherWoche","float",0.0],
		["$SpeicherWoche_fuellen","bool",false],
		["$SpeicherMonat","float",0.0],
		["$SpeicherMonat_fuellen","bool",false],
		["$SpeicherJahr","float",0.0],
		["$SpeicherJahr_fuellen","bool",false],
		["$KonstTrue","bool",true],
		["$KonstFalse","bool",false],
		["$Konst0","float",0.0],
		["$Konst1","float",1.0],
		["$Break","bool",false],
		//
		["$ResetStunde","string","1 0 0-23 * * *"],
		["$ResetTag","string","1 0 0 * * *"],
		["$ResetWoche","string","1 0 0 * * 0"],
		["$ResetMonat","string","1 0 0 1 * *"],
		["$ResetJahr","string","1 0 0 1 1 *"],
		["$ResetStundeTrigger","bool",false],
		["$ResetTagTrigger","bool",false],
		["$ResetWocheTrigger","bool",false],
		["$ResetMonatTrigger","bool",false],
		["$ResetJahrTrigger","bool",false],
		["$UebnStundeTrigger","bool",false],
		["$UebnTagTrigger","bool",false],
		["$UebnWocheTrigger","bool",false],
		["$UebnMonatTrigger","bool",false],
		["$UebnJahrTrigger","bool",false]
  ],
  "Module": [ 
		// Abbruch wenn kein Eingangswert vorhanden
		 ["Comparator" , "$I_akt_kWh" , "$Break" , "$Konst1"]
		,["Break", ["-$Break"]]
		
        // Trigger übernahme der aktuellen kWh in den Speicher wenn dieser leer ist
	   	,["Comparator" , "$SpeicherStunde" , "$SpeicherStunde_fuellen" , "$Konst1"]
		,["Comparator" , "$SpeicherTag" , "$SpeicherTag_fuellen" , "$Konst1"]
		,["Comparator" , "$SpeicherWoche" , "$SpeicherWoche_fuellen" , "$Konst1"]
		,["Comparator" , "$SpeicherMonat" , "$SpeicherMonat_fuellen" , "$Konst1"]
		,["Comparator" , "$SpeicherJahr" , "$SpeicherJahr_fuellen" , "$Konst1"]
		, 
	  	  
        // Trigger zur Übernahme der aktuellen kWh mittels Cron 
		["Cron","$KonstTrue","$ResetStundeTrigger",0,"$ResetStunde"],
		["Cron","$KonstTrue","$ResetTagTrigger",0,"$ResetTag"],
		["Cron","$KonstTrue","$ResetWocheTrigger",0,"$ResetWoche"],
		["Cron","$KonstTrue","$ResetMonatTrigger",0,"$ResetMonat"],
		["Cron","$KonstTrue","$ResetJahrTrigger",0,"$ResetJahr"],

		// Cron oder leerem Speicher
		["Or" , ["$ResetStundeTrigger"  , "-$SpeicherStunde_fuellen"], "$UebnStundeTrigger"],
		["Or" , ["$ResetTagTrigger" 	, "-$SpeicherTag_fuellen"], "$UebnTagTrigger"],
		["Or" , ["$ResetWocheTrigger"   , "-$SpeicherWoche_fuellen"], "$UebnJahrTrigger"],
		["Or" , ["$ResetMonatTrigger"   , "-$SpeicherMonat_fuellen"], "$UebnJahrTrigger"],
		["Or" , ["$ResetJahrTrigger"    , "-$SpeicherJahr_fuellen"], "$UebnJahrTrigger"]
		
		// Übername des Eingang Wert in den Speicher
		,["Latch","$I_akt_kWh","$SpeicherStunde","$UebnStundeTrigger",0]			
		,["Latch","$I_akt_kWh","$SpeicherTag","$UebnTagTrigger",0]				
		,["Latch","$I_akt_kWh","$SpeicherWoche","$UebnJahrTrigger",0]			
		,["Latch","$I_akt_kWh","$SpeicherMonat","$UebnJahrTrigger",0]			
		,["Latch","$I_akt_kWh","$SpeicherJahr","$UebnJahrTrigger",0]
		,
		
		// Delta ermitteln
		["Polynomial", "$Konst1", "$Stundenverbrauch",["$I_akt_kWh", "-$SpeicherStunde"]],
		["Polynomial", "$Konst1", "$Tagesverbrauch",["$I_akt_kWh", "-$SpeicherTag"]],
		["Polynomial", "$Konst1", "$Wochenverbrauch",["$I_akt_kWh", "-$SpeicherWoche"]],
		["Polynomial", "$Konst1", "$Monatsverbrauch",["$I_akt_kWh", "-$SpeicherMonat"]],
		["Polynomial", "$Konst1", "$Jahresverbrauch",["$I_akt_kWh", "-$SpeicherJahr"]]

  ]
}
Ein Break verhindert die Ausführung ohne Eingangswert und wenn der Speicher leer ist wird der automatisch mit dem Eingangswert gefüllt, bevor das Delta berechnet wird.

Grüße
Stefan
Timberwolf Server 2500 ID:210 +PBM; VPN offen & Reboot nach Rücksprache .

Wiregate von 2011, ab 2024 in Rente

Ersteller
Picha
Reactions:
Beiträge: 152
Registriert: Do Okt 04, 2018 12:54 pm
Hat sich bedankt: 50 Mal
Danksagung erhalten: 29 Mal

#9

Beitrag von Picha »

Hi Robosoc,

ja, ich schreibe die Werte in eine TS. Dass es auch in Grafana zu lösen sein müsste, habe ich mir auch gedacht. Leider bekomme ich in Grafana noch weniger auf die Reihe..... .
Aus Übungsgründen habe ich mich dann an die Custom Logik gesetzt, was ja auch ein interessantes Thema ist.
Eigentlich würde ich es auch jetzt ganz gerne mit der Logik lösen.

Allen schon mal vielen Dank für die Hilfe.

Gruß Markus
TWS 2600 ID:591 + PBM, VPN offen, Reboot nach Absprache"

Ersteller
Picha
Reactions:
Beiträge: 152
Registriert: Do Okt 04, 2018 12:54 pm
Hat sich bedankt: 50 Mal
Danksagung erhalten: 29 Mal

#10

Beitrag von Picha »

Hallo Hammer,

schonmal Danke.
Werde deine Anpassungen morgen mal ausprobieren.

Gruß Markus
TWS 2600 ID:591 + PBM, VPN offen, Reboot nach Absprache"
Antworten

Zurück zu „Logikengine & Logik-Editor“