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

Haustürstatus (0-3dez) in Abhängigkeit von zwei Reeds als Logik abbilden

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
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

Haustürstatus (0-3dez) in Abhängigkeit von zwei Reeds als Logik abbilden

#1

Beitrag von tger977 »

Hallo ihr Logikexperten,

ich versuche mich gerade mal mit den ersten Schritten im Logikeditor und stolpere gerade über folgende Logik die ich im Logikprozessor sehr einfach abbilden konnte:

Code: Alles auswählen

HaustuerUG => {receive=>['4/1/0','4/1/1'], transmit=>'0/0/12',
    	translate => sub{
    	if ($input->[0]==0 && $input->[1]==0) {
          return 0;}; # Tür zu, unverschlossen
    	if ($input->[0]==1 && $input->[1]==0) {
    	  return 1;}; # Tür offen, unverschlossen
    	if ($input->[0]==0 && $input->[1]==1) {
    	  return 2;}; # Tür zu + abgeschlossen
    	if ($input->[0]==1 && $input->[1]==1) {
    	  return 3;}; # Tür offen + abgeschlossen
    	}, execute_only_if_input_defined=>1,reply_to_read_requests=>1, transmit_on_startup=>1, debug=>1 },
 
Es darum aus zwei Reedkontakten (offen/zu und verschlossen/unverschlossen) einen Haustürstatus in einer neuen GA abbzubilden (Status 0-4dez, siehe Kommentaren oben im Code).

Muss ich da nun wirklich x Einzellogiken mit OR und AND und Schwellwertschaltern zusammenklicken?

Wäre um Hinweise dankbar wie man sowas am besten angeht... Sorry, aber da steh ich echt auf dem Schlauch, mit einer Programmiersprache wär das (für mich!) nach 2min erledigt gewesen, hier rätsel ich nun schon ein paar Minuten drüber wie ich es am besten angehen soll.
Zuletzt geändert von tger977 am Sa Aug 31, 2019 11:48 pm, insgesamt 2-mal geändert.
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#2

Beitrag von tger977 »

also ich hab nun mal etwas gespielt. Mit 4x AND und mit der Mappingfunktion in den AND's dachte ich geht das vielleicht, aber wohl leider doch nicht, da man dann sowohl für true als auch false ein mappingwert eingeben muss. Ich möchte aber nur eine Aktion auf dem Ausgang wenn true kommt, das false soll immer einfach ignoriert werden. Aber ich habe gesehen dazu gibt es schon einen FR...

Hat sonst noch jemand eine Idee?
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#3

Beitrag von Dragonos2000 »

Ähm...wie kommst Du auf 0-4? Wenn ich Deinen Code richtig interpretiere kommt da nur 0-3 raus. Ich würde das so implementieren:

Code: Alles auswählen

{
      "Level": [
		["$input_A","bool",false],
		["$input_B","bool",false],
		["$Zwei","integer",2],
		["$Output","integer",0]
      ],
      "Module": [
		["Polynomial","$Zwei","$Output",["$input_A","$input_B"]]
      ],
      "Input": [
		["Eingang 1","Input 0","$input_A","c"],
		["Eingang 2","Input 1","$input_B","c"]
      ],
      "Output": [
		["Output","Ergebnis","$Output","c"]
      ]
}
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#4

Beitrag von tger977 »

ja, das war falsch. Nur 0-3...

puh, also das o.g. Codestück muss nun als Customlogik verwendet werden, oder?

Und wie lese ich den Code oben nun bzw. wie funktioniert das genau mit der Polynomial Funktion? :confusion-scratchheadyellow:
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#5

Beitrag von Dragonos2000 »

Genau, den Code einfach in eine Custom Logik kopieren.
Der Abschnitt "Level" definiert quasi die verwendeten Variablen, der Abschnitt "Input" definiert, welche Variablen als Eingang verwendet werden und wie diese angezeigt werden sollen; analog dazu der Abschnitt "Output".
Im Abschnitt "Module" wird die eigentliche Logik abgebildet.

Die Funktion "Polynomial" berechnet den Funktionswert eines Polynoms wie folgt (aus der KB):
f(x)=A0 + A1 * X + A2 * X^2 + ... + An * X^n
["Polynomial", "$Variable_X", "Ergebnis",["$A0", "$A1", "$A2", ..., "$An]]

Die Variable X habe ich definiert über "$Zwei" im Abschnitt "Level" und den Initialisierungswert "2".
"$Output" ist das Ergebnis der Berechnung.
Verwendet werden nur die Koeffizienten A0 und A1 (in eckigen Klammern)

Es steht dort also für die Polynomialfunktion:
$Output = $input_A + $input_B*$Zwei
bzw.:
$Output = $input_A + $input_B*2

Ich hoffe, ich konnte es rüberbringen.
Zuletzt geändert von Dragonos2000 am Sa Aug 31, 2019 11:33 pm, insgesamt 5-mal geändert.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#6

Beitrag von tger977 »

magic...

Es funktioniert, nur ich weiss nicht warum...

Danke, Jochen! Wenn mir nun noch jemand das erklären kann damit ich das für die Zukunft selbst hinbekomme wär das weltklasse.
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#7

Beitrag von tger977 »

ok, danke für die Erklärung! So langsam dämmert es...
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#8

Beitrag von Dragonos2000 »

Braucht ein bisschen, muss sich erst setzen. Das ging mir am Anfang genauso. Aber wenn man es verinnerlicht hat, ist es wirklich mächtig.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#9

Beitrag von Dragonos2000 »

Schau Dir dazu am Besten folgende Artikel der KB an:
app.php/kb/viewarticle?a=84
app.php/kb/viewarticle?a=87
app.php/kb/viewarticle?a=96
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#10

Beitrag von tger977 »

dann noch eine Frage: Mit der o.g. Logik im Logikprozessor habe ich diese Logik immer auch bei Systemstart direkt ausführen können (Option transmit_on_startup=>1). Geht das mit dem TW auch daß er bei einem Neustart einmalig alle Eingänge per read liest und die Logik ausführt, so daß am Output direkt nach Start auch ein aktueller Wert (z.B. in der Visu) steht?
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache
Antworten

Zurück zu „Logikengine & Logik-Editor“