Gruppieren von Variablen... zum Schreiben von Werten an einer Stelle

Hallo zusammen,

als relativ neuer nutzer von IPSymcon v2.7 stehe ich vor einem problem, welches sich mir aus der dokumentation bisher nicht erschlossen hat.

Scenario:
Ich habe rollaeden in meinem haus alle auf bus. die zustaende, ob ein rolladen ‚oben‘ oder ‚unten‘ ist habe ich pro rolladen in einer IPS stringvariablen hinterlegt. Sprich pro rolladen EINE variable.

Wenn ich den rolladen ueber den wand-taster bewege wird die variable gesetzt. Ebenso wenn ich den rolladen ueber ein ‚webfront‘ getriggertes PHP script ganz hoch, oder ganz runter fahre. So weit so gut.

Herausforderung:
Die rollaeden werden jedoch auch durch einen aussenlicht-sensor morgens und abends angesteuert. dieser sensor setzt eine IPS boolean variable namens ‚day_night‘. (true==day, false==night)

Da, wenn ‚day_night‘ true ist, alle rollaeden ‚oben‘ sind, wuerde ich gern alle rolladen string-variablen auf ‚oben‘ setzen.
Auf ‚unten‘ wenn ‚day_night‘ false ist.

Ich koennte natuerlich ueber ein event, welches auf der aenderung von ‚day_night‘ basiert, alle rolladen variablen setzen, aber das ist muehsam, fehleranfaellig und aufwendig zu maintainen.

Frage:
Gibt es die moeglichkeit variablen einer gruppe zuzuordnen und dann die zuweisung des werts (‚oben‘ oder ‚unten‘) auf die ID der gruppe zu machen… so daS dann automatisch alle der gruppe zugeordneten variablen diesen wert aufweisen ?

Vielen dank,

homa

Moin homa…

… erstmal muss ich sagen, das Dein Post hier sehr schwer zu lesen ist oder sollte ich sagen, zu maintainen?! :smiley:
Kleiner Scherz…

Was für ein Bus-System benutzt Du denn? KNX, Homatic etc.?!
Liefert Dein System keine Rückmeldung zur Position?
Wo ist das Problem in einem Skript alle Zustände zu aktualisieren? Wieviel hast Du denn und wieso soll das Fehlerbehaftet sein, wenn Du das von einer anderen Variable abhängig machst?
Gruß,
Peter

Moin Peter :slight_smile:

hast recht, man koennte das kuerzer beschreiben… aber dann muss man zu viele fragen beantworten. :stuck_out_tongue:

Ich fahre: LCN als Bus und HomeMatic als Taxi. :smiley:
(HomeMatic deckt nur kleinigkeiten ab die in der busplanung nicht beruecksichtigt wurden)
… und nein, man kann die positionierung nicht abfragen.

zum thema:
naja, die ‚zuFussVariante‘ wuerde gehen… ist aber nicht elegant. anstatt eines scripts wuerde ich jedoch zwei ‚events‘ auf das ‚day_night‘ legen und je nach event ueber ‚SetValueString‘ die einzelnen variablen setzen… aber das ist wohl unter ‚geschmack-sache‘ zu verbuchen.

Zurueck zu meiner frage:
aus gruenden der ‚eleganz‘ wollte ich wissen ob man variablen als gruppe zum schreiben (und lesen) zusammenfassen kann. Somit muesste ich nur eine ‚association list‘ pflegen und wuerde an einer stelle mit einem command auf die gruppe alles erledigt haben.

Sollte das in IPS nicht gehen… waer das ok… aber wenn das moeglich ist, moechte ich es nutzen.

Gruesse aus dem Sueden - Holger

Hallo homa,
da Du nur jeweils 2 Zustände für x Jalousien speichern möchtest, würde ich das Ganze binär tricksen, d.h. EINE Integer-Variable definieren und diese dann bitweise setzen.
Das könnte man z.B. so machen, auf die Schnelle getippt:

1.Zuerst Definition einer Integervariable, ID=nnnnn
2.Funktionsbibliothek:

function SetJalueState($nr,$b){
$i1 = GetValueInteger(nnnnn);
$x = pow(2,($nr-1));
if ($b == ‚true‘) {
$i2 = $i1 | $x;
} else {
$i2 = $i1 & (~$x);
}
SetValueInteger(nnnnn,$i2);
}

function SetJalueStateAll($b,$n){
if ($b == ‚true‘) {
$x = pow(2,$n)- 1;
} else {
$x = 0;
}
SetValueInteger(nnnnn,$x);
}

function GetJalueState($nr){
$i = GetValueInteger(nnnnn);
$x = pow(2,($nr-1));
$b = ‚false‘;
if (($i & $x) == $x) {
$b = ‚true‘;
}
return($b);
}

function GetJalueStateAll($n){
for($j=1;$j<=$n;$j++){
echo $j.’: '.GetJalueState($j)."
";
}
}

Mit SetJalueState($nr,$b) setzt Du Jalousie Numero $nr auf State $b (‚true‘ oder ‚false‘);
Mit SetJalueStateAll($b,$n) setzt Du alle Jalousien auf State $b (‚true‘ oder ‚false‘), Zahl der Jalousien $n ist anzugeben!
Mit GetJalueState($nr) bekommst Du den State (‚true‘ oder ‚false‘) der Jalousie Numero $nr zurück
Mit GetJalueStateAll($n) bekommst Du den State (‚true‘ oder ‚false‘) aller Jalousien angezeigt, Zahl der Jalousien ist anzugeben!

Bastel dir doch ein Script, in welchem du die einzelnen Variablen in einem Array zusammenpackst (Soviel Rollläden werden
es wohl nicht sein).


$Rollladen_Liste = array( "Rollladen1_ID" =>  25347,
                                  "Rollladen2_ID" =>  56554,
                                  "Rollladen3_ID" =>  44871,
 .....)

Diese Script kannst du dann in dein Aktions-Script includen.

Achja. Den Status der Rollläden in eine STRING-Variable zu schreiben macht die Sache sehr kompliziert und unüberschaubar. Nutze wie oben schon erwähnt eine Integer mit zb. 0 für „Unten“ und 1 für „Oben“. Dieser
Variable kannst du dann ein Profil zuordnen, welches dann die „Beschriftung“ der Variable übernimmt.

Hab mal die Formatierung etwas besser lesbar gemacht:

Lieber Rainer,

besten Dank für die Formatierung, bei ja neu hier und wusste nicht, wie man Code separiert einfügen kann > jetzt weiß ich’s…

Beste Grüße,
Martin