Ansteuerungs/Zustandsmerk Konzept

Hallo liebe Forumsmitglieder,

Ich bin neu im Thema/Forum, und habe endlich auch meine Hardware zu spielen erhalten :).

Habe mir mittlerweile ein paar Gedanken zu einer sinnvollen halbwegs übersichtlichen Strategie zur Verwaltung der Instancen, Variablen und „Standart“ Events gemacht. Die ein oder andere Idee hab ich vom Lesen hier, aber es steht wirklich sehr viel auch unstrukturiert, so dass es möglich ist das es zu meiner Frage schon Antworten gibt. Wenn ja einfach mal verlinken aber auch gerne hier diskutieren.

Also offensichtlich macht es Sinn (Stichwort WAF / Ausfallsicherheit) viele Funktionen direkt mit einer FB ansteuern zu können. IPS sollte das aber mitbekommen/loggen. Sowohl um die Stati anzeigen zu können, als auch um gegebenfalls logische verknüpfungen durchführen zu können (Licht nur an wenn Dunkel z.B.)

Zur Sache habe mir folgendes überlegt:

Aktoren:

Instance anlegen und verbinden - Namen zuweisen in der Form
S_SW1_1 z.b. = Schlafzimmer _ switch nr.1 schalter 1

Dann eine zugehörige Variable
S_D_SW1_1 = Schlafzimmer _ Data _ Switch nr 1 _ Schalter 1
bei der Instanz als Data Variable eintragen
gegebenfalls noch
S_S_SW1_1 = Schlafzimmer _ Status _ Switch nr 1 _ Schalter 1
bei der Instanz als Status Variable eintragen

Eine zugehörige Funktion anlegen
S_T_SW1_1 = Schlafzimmer _ Trigger _ switch 1 _ schalter 1
So nun einen Trigger setzen mit UPDATE auf S_D_SW1_1

Die Funktion selber sieht nackt dann so aus:

switch (GetValueInteger ("S_D_SW1_3") {
  case "19": // Hoch Dimmen
  break;
  case "20": // Runter Dimmen
  break;
  case "17": // Einschalten   
  break;
  case "0": // Ausschalten 
  break;
}

So nun kann man im jeweiligen Case Fall was einfügen, was passieren soll wenn den Schalter gedrückt ist, oder nichts falls der Schalter rein direkt wirken soll.

Somit kann man über die Punkte Dimmen auch den Status eines Dimmers verfolgen indem man dann dort eine Interne Variable anpasst.
(Oder besteht eine Möglichkeit den Dimmstatus eines Dimmers auszulesen ?)

So analog Reaktoren:
Instance:
S_ST1 = Schlafzimmer Steckdose 1

Variable:
S_O_ST1_I = Schlafzimmer _ Out _ Steckdose1 _ Ist
S_O_ST1_S= Schlafzimmer _ Out _ Steckdose1 _ Soll

Eventscript:
S_O_ST1 Schlafzimmer _ Out _ Steckdose1 triggert wenn S_O_ST1_S ein update erhält. In dem Fall dann den Wert zur Physikalischen Einheit schreiben und auch S_O_ST1_I setzen.

S_O_ST1_I Sollte immer gesetzt werden wenn was empfangen wird was den Status der Steckdose ändert (FB)

Bei einem Dimmer kämmen noch zwei Soll/Ist Variablen mit der Intensität hinzu. Ist variablen müssten immer über obiges Case gepflegt werden. Z.b. so:

...
case "19": // Hoch Dimmen
     if (GetValueInteger ("S_O_DI1I_I")< 16) SetValueInteger ("S_O_DI1I_I" , GetValueInteger ("S_O_DI1I_I")+1);
  break;
  case "17": // Runter Dimmen
     if (GetValueInteger ("S_O_DI1I_I")> 0) SetValueInteger ("S_O_DI1I_I" , GetValueInteger ("S_O_DI1I_I")-1);
  break;
...

Das sollte so eigentlich gut funktionieren und es z.b. einfach ermöglichen im Designer einen Dimmer Status per Schieberegler anzuzeigen und auch zu ändern. (Position Ist variable, onChange Soll Variable)

Was mich allerdings daran stört ist der doch recht hohe Auffwand für ein Schalter / Dimmer. Ich vermute allerdings das geht nicht wesentlich besser, oder ?

Wie macht ihr das? Kann an teile evtl. automatisieren ?

So ich hoffe das war jetzt nicht zu DAU für den ersten Post :wink:

Gruß,
Anti aka Jan

Hallo,

und willkommen !

Erwähn doch mal bitte welche Hardware du dir gekauft hast, dann können wir auch villeicht helfen

Doch generell gesehen gelten folgenden Regeln:

Um den WAF Faktor zu gewährleisten sollte dein System nachher schon autark laufen, d.h. ohne jede Hilfe eines (IPS) Rechners. So sind wenigstens die Grundfunktionen wie Licht einschalten usw. gewährleistet ohne dass Frau (und du auch) Wutausbrüche bekommt.
Instanzen sowie Variablen Namen sollten mit System vergeben werden, so kannst du bei mehreren Räumen bequem mit Array’s arbeiten ohne für jeden Raum ein eigenes Skript zu schreiben.

Doch wie schon gesagt, um weiteres zu sagen, sollte man erst wissen, was du gekauft hast.

mfG Franz

Hehe achso …

Ja also FHZ 1300 , mit diversen Aktoren und REaktoren. Erste Versuche mach ich gerade mit Folgendem:

1x FS20-S8 (4 Kanal Handschalter)
1x Schaltsteckdose
1x Dimmersteckdose

Habe das jetzt mal so eingerichtet:#

Kanal 1 = Fernseh (Steckdose) an/aus
Kanal 2 = Beleuchtung auf dem Dimmer
Kanal 3 = Script spielerein
Kanal 4 = Alles aus

zu3: Derzeit wenn ich auf On klicke Lampe auf volle Helligkeit und wenn ich auf Off klicke Lampe auf Fernsehguck dämmerung :slight_smile:

Das ganze wird schon brav im Designer angeziegt und Dimmen kann man da auch :wink:

Aber wie machst du das mit arrays … IPS lässt als Vars doch keine Arrays zu, oder ?

Jan

Hallo,

ich hatte die Vermutung dass du FS20 gekauft hast, nur wollte ich zuerst die Bestätigung.

Zu allererst:

FS20 Elemente sind NICHT bidirektional Du wirst von einem Dimmer z.B. keine Statusrückmeldung erhalten.
Und da fangen die Probleme auch schon an. FS20 Dimmer arbeiten mit 16 Schaltstufen. D.h. in einem Skript muss du dir deinen Zähler setzen, der beim DIM_UP Befehl hochzählt, und beim jedem Zählerstand ein FS20_SetIntensity rausschicken. Das gleiche gilt natürlich dann auch für DIM_DOWN.
Und wo liegt dann das gesagte Problem? Ja, ganz einfach: Wenn du mal den Dimmer per Fernbedienung steuern willst, kriegt das IPS nicht mit. Du musst dann IPS schon mitlauschen lassen, damit der Zähler (0-16) in IPS dann auch mitzählt. Dies ist für den Fall wenn du die Dimmintensität im Designer anzeigen lassen willst. Doch geht nur ein Befehl verloren, hast du den Salat. Das ganze stimmt nicht mehr übereinander

Nun stehen zwei Möglichkeiten zur Auswahl:

[ol]
[li]Du steuerst den Dimmer rein über IPS. Dann muss deine FB eine andere Adresse haben als dein Dimmer. Doch dann wird das mit DIM_UP und DIM_DOWN nicht mehr richtig funktionnieren, ausser mit PHP Programmieraufwand, der den Zähler z.B. im Sekundentakt hochzählen lässt und bei jeden Zählerstand die Intensität vom Dimmer anpasst.
[/li]
[li]Du steuerst deinen Dimmer unabhängig von IPS. Dann kannst du die DIM_UP und DIM_DOWN Funktion der FB bequem benutzen beim Dimmer. Nur, das Problem wird dann sein, das IPS das nicht mitbekommt da die Dimmer keinen Rückmeldekanal haben. Also wird das Anzeigen im Designer des Dimmers eine Bastellösung sein und du kannst die Intensität innerhalb IPS nur vermuten !
[/li] [/ol]

Zu den Array’s:

Klar geht das. Als Beispiel nimmtst du einfach zwei Räume.

RAUM_1 und RAUM_2

Wenn du jetzt Variablen anlegst, z.b. Taster für Dimmer, dann nenne sie so:

RAUM1_FS20DU_PB_1 (PB steht für Pushbutton und die 1, im Falle wenn du mehr Dimmer haben solltest. Logischerweise wäre dann Raum 2:
RAUM2_FS20DU_PB_1

Nachher kannst du dir ein Array setzen :

$raum = array(RAUM_1, RAUM_2, ...);  // kann fortgeführt werden

Dann kannst du nachher nur mit einem Skript alle Variablen bequem ansprechen

mfG Franz

Das mit dem nicht rückmelden war mir eigentlich schon klar deswegen ja überhaupt der reativ hohe Auffwand.

Die Array Idee in der Form ist nicht schlecht … also den ganzen Kram zwar mühevoll als IPS Variablen anlegen diese aber wenigstens im Script per Schleifenbefehl ansteuerbar machen … Das werde ich denk ich verfolgen :wink:

An welcher Stelle kann man den gloable sachen hinterlegen ? (Array definition, evtl eigene Funktionen …)

Kann man in Events eigentlich Variblen setzen (normale PHP) die man dann beim nächsten (oder zeitgleichen Timeraufruf) wieder lesen kann ? (global nötig ? funktioniert das wenn mehrere Instanzen laufen …)

Hintergund: Wollte eine Bestätigung für einen Tastendruck durch „Dimmerflimmern“ erzeugen, leider führt sich das Script dann im 0,3 Sek (oder wie lang der Abstand zwischen 2 Dimmtakten ist) aus und somit überlagern sich mehrere erzeugte flimmer Impulse.

Gruß,
Anti

Array’s hinterlegst du in einem PHP-Skript in IPS

Und bei Bedarf rufst du das Skript per ‚include‘ Befehl auf

In IPS kann man globale Variablen anlegen. Kuck dich mal um in IPS, das wirst schon schnell rausfinden. Globale Variablen sind fast wie bei SPS die Merker, oder wie sie neuerdings bei Möeller z.b. Z0.0 also ‚Zwischenspeicher‘ genannt werden.
Der einzige Unterschied ist aber, das Merker verloren gehen bei Neustart, während IPS sich die Stati einer jeden Variable merkt.

Nee, in den Events können nur IPS- also globale Variablen stehen. Das ist ja auch klar

mfG Franz