Seit dem Update lassen sich FS20 Statusvariablen nicht mehr ändern.

Habe vorhin das letzte Update gemacht.
Seit dem lassen sich die Statusvariablen meiner FS20 Dimmer nicht mehr per Script ändern.

Es kommt diese Fehlermeldung:

Warning: Variable wurde als „Nur-Lesen“ markiert und kann nicht verändert werden

Hab’s noch mal mit diesem Einzeiler probiert, aber selbe meldung:

SetValueBoolean(14692 /FS20 DI-3 Testdimmer 1\StatusVariable/, false); ergibt:

Warning: Variable wurde als „Nur-Lesen“ markiert und kann nicht verändert werden

:confused:

hallo rallofax,

über dieses Problem bin ich auch gefallen, ist aber leider so.

Hier ist das Problem und evtl. Lösungsansätze beschrieben.

Dazu gab es schon jede Menge Lesestoff :slight_smile:

Ich suchs mal raus, sollte dieses nicht zutreffen, weiter melden.

hat sich erledigt, Werner war schneller.

OK, das mit dem Sinn und Zweck, das eine Statusvariable eigendlich nicht per Script geändert werden soll ist „ich nenn es mal Glaubensfrage“.

Da aber:

FS20_SetIntensity(37172 /Tisch Dim FS20 DI20-2 1311/, 0, 3);

den Status leider nicht auf False zurücksetzt, habe ich in allen Lichtzsenen noch ein:

SetValueBoolean(29678 /Tisch Dim FS20 DI20-2 1311\Status/, false);

um die Dimmer wieder auf AUS zu setzten.

Im Moment bedeutet das für mich im Dunkeln zu sitzten, mein Lichtszenenscript fragt vorher ab ob ein Dimmer AN oder AUS ist und die Einzelschaltung der Lampen erfolgt per „Einknopf“. Dazu muss aber die Statusvariable der Dimmer richtig stehen, sonst funktioniert bei mir nichts mehr :frowning:

Bleibt im Moment nur ein Restore auf die alte Version oder alle Dimmer
ausbauen und den Jumper ziehen damit ich sie wieder von Hand schalten kann.
mmmhhh, WAF ist damit für heute gleich null :mad:

Die Dimmer-Status-Variable setzt sich doch in der V2 nach der im Dimmer eingestellten Zeit von alleine zurück.

FS 20 ist halt mal nicht BiDi.

Egal was Du mit FS 20 schaltest ob von Hand oder über IPS, den genauen Status wirst du nie erhalten.(außer VorOrt) Es geht ein einziger Funkbefehl verloren, schon stimmt gar nichts mehr.

Setzen eines Status der nie ankommt oder nur teilweise wäre ja ein Trugschluß.

Hab den Beitrag wieder gefunden.

Dort steht wie man den internen Timer nutzt um die Variable wieder zurück zusetzen.

nö, leider nicht

hab’s eben noch mal probiert:

FS20_SetIntensity(12549 /Deckenleuchte Dim FS20 DI20-2 4211/, 16, 0);
FS20_SetIntensity(12549 /Deckenleuchte Dim FS20 DI20-2 4211/, 0, 0);

und der Status bleibt auf AN

Hallo rallofax,

schau Dir mal den Beitrag nebst Einstellung der Instanz an. Evtl. hast Du den Timer im PIRI nicht programmiert.

Hab mir den Beitrag noch mal durchgelesen.

Hilft mir Moment aber nicht weiter.

Ich benutze SetIntensity um Dimmer in verschiedenen Lichtszenen „soft“ innherhalb von x Sekunden umzuschalten. Das geht nur mir SetIntensity.

Damit ich auf meinem Touchscreen sehe welche Lampen AN/AUS sind, werden die Graphiken je nach Statusvariable des Dimmers Ein- oder Ausgeblendet.

Um auch ausserhalb der Lichtszenen schalten zu können ist die Graphik gleichzeitig ein Knopf der je nach Status den Dimmer Ein- oder Ausschaltet.

So habe ich alle Kombinationsmöglichkeiten.
Nur Dummerweise Funktioniert das nur wenn der Status der Dimmer richtig gesetzt ist, was SetIntensity leider nicht macht.

Mit Timer oder Anschliessendem SwitchMode komm ich nicht weiter da die Zeiten je nach Lichtszene und Dimmer verschieden sind. (Hab schon div. Möglichkeiten probiert, aber keine war so richtig zu gebrauchen.)

Was ich brauche wäre jetzt eine Alternative um nach einem SetIntensity auf 0, den Status auf False zu setzen.

Hallo Rallofax,

wenn Du meinst, Du wärst die ganze Zeit mit der alten Methode zufrieden gewesen(welche) :confused:
Man kann alles über Scripte lösen, nur wird das BiDi in FS 20 nicht ersetzen können.

Daher poste dein(Script)e und man wird dir helfen. Ändert aber an der Tatsache nichts.

@rallofax

Mach dir doch einfach noch eine dritte Boolean-Variable, die du über das selbe Script auf False/True setzt und frage diese im Zusammenhang mit deinen Lichtszenarien ab.

Mit BIDI brauch ich nicht, meine kleines Häuschen ist aus Holz und FS20 funktioniert bei mir bestens.

Das mit der dritten Variablen wäre eine Lösung, werde es mal Testen.

Hier einmal die Scripte:

Über einen Knopf werden Boolean Variablen gesetzt welche Lichtszene Aktiv sein soll z.B.:

 //Setzt die Lichtszene Fernsehen und startet das Lichtszenenscript
SetValueBoolean("Lichtszene_Aus", false);
SetValueBoolean("Lichtszene_Abwesend", false);
SetValueBoolean("Lichtszene_Saubermachen", false);
SetValueBoolean("Lichtszene_Fernsehen", true);
SetValueBoolean("Lichtszene_Film", false);
SetValueBoolean("Lichtszene_Romantik", false);
SetValueBoolean("Lichtszene_Gaeste", false);
IPS_RunScript("33974");
SetValueString ("Anzeige_Lichtszene", "Lichtzene Fernsehen ist eingeschaltet");

Durch einen IPS_RunScript wird dann das eigendliche Lichtszenen Script gestartet. ( Das ersparrt mir das editieren vieler kleiner Scripte bei Änderungen)

//Lichtszene schalten
 
 $Lichtszene_Aus = GetValueBoolean("Lichtszene_Aus");
 $Lichtszene_Abwesend = GetValueBoolean("Lichtszene_Abwesend");
 $Lichtszene_Fernsehen = GetValueBoolean("Lichtszene_Fernsehen");
 $Lichtszene_Romantik = GetValueBoolean("Lichtszene_Romantik");
 $Lichtszene_Saubermachen = GetValueBoolean("Lichtszene_Saubermachen");
 $Lichtszene_Film = GetValueBoolean("Lichtszene_Film");
 $Lichtszene_Gaeste = GetValueBoolean("Lichtszene_Gaeste");
 
//________________________________________________________________________________________
 if ($Lichtszene_Aus == true)
  {
 	FS20_SetIntensity(37172 /*Tisch Dim FS20 DI20-2 1311*/, 0, 3);
 		SetValueBoolean(29678 /*Tisch Dim FS20 DI20-2 1311\Status*/, false);
 		
  	FS20_SetIntensity(28470 /*Wandlampe Flur Unten Dim FS20 DI20-2 1313*/, 0, 3);
 		SetValueBoolean(19479 /*Wandlampe Flur Unten Dim FS20 DI20-2 1313\Status*/, false);
 		
	FS20_SetIntensity(20344 /*Vitrine Wohnzimmer Dim FS20 DI3 1314*/, 0, 3);
		SetValueBoolean(23879 /*Vitrine Wohnzimmer Dim FS20 DI3 1314*/, false);
		
	FS20_SetIntensity(45835 /*Essecke Deckenlampe FS20 DI20-2 1312\Status*/, 0, 3);
	   SetValueBoolean(38859 /*Essecke Deckenlampe FS20 DI20-2 1312\Status*/, false);

   IPS_SetEventActive(56310 /*Timer Abwesenheitssimulation*/,false);
      FS20_SwitchDuration(12549 /*Deckenleuchte Dim FS20 DI20-2 4211*/,false,0);
  }
  
 //________________________________________________________________________________________
 if ($Lichtszene_Abwesend == true)
  {
   FS20_SetIntensity(37172 /*Tisch Dim FS20 DI20-2 1311*/, 0, 30);
 		SetValueBoolean(29678 /*Tisch Dim FS20 DI20-2 1311\Status*/, false);

  	FS20_SetIntensity(28470 /*Wandlampe Flur Unten Dim FS20 DI20-2 1313*/, 0, 30);
 		SetValueBoolean(19479 /*Wandlampe Flur Unten Dim FS20 DI20-2 1313\Status*/, false);

	FS20_SetIntensity(20344 /*Vitrine Wohnzimmer Dim FS20 DI3 1314*/, 0, 30);
		SetValueBoolean(23879 /*Vitrine Wohnzimmer Dim FS20 DI3 1314*/, false);
		
	FS20_SetIntensity(45835 /*Essecke Deckenlampe FS20 DI20-2 1312\Status*/, 0, 30);
	   SetValueBoolean(38859 /*Essecke Deckenlampe FS20 DI20-2 1312\Status*/, false);
  
	IPS_SetEventActive(56310 /*Timer Abwesenheitssimulation*/,true);
	FS20_SwitchDuration(12549 /*Deckenleuchte Dim FS20 DI20-2 4211*/,true,10*60);
  }
//__________________________________________________________________________________________
 if ($Lichtszene_Fernsehen == true)
  {
 	FS20_SetIntensity(37172 /*Tisch Dim FS20 DI20-2 1311*/, 16, 3);
 	FS20_SetIntensity(28470 /*Wandlampe Flur Unten Dim FS20 DI20-2 1313*/, 0, 3);
 		SetValueBoolean(19479 /*Wandlampe Flur Unten Dim FS20 DI20-2 1313\Status*/, false);
	FS20_SetIntensity(20344 /*Vitrine Wohnzimmer Dim FS20 DI3 1314*/, 0, 3);
		SetValueBoolean(23879 /*Vitrine Wohnzimmer Dim FS20 DI3 1314*/, false);
	FS20_SetIntensity(45835 /*Essecke Deckenlampe FS20 DI20-2 1312\Status*/, 0, 3);
	   SetValueBoolean(38859 /*Essecke Deckenlampe FS20 DI20-2 1312\Status*/, false);
  }
//__________________________________________________________________________________________
 if ($Lichtszene_Romantik == true)
  {
   FS20_SetIntensity(37172 /*Tisch Dim FS20 DI20-2 1311*/, 8, 3);
 	FS20_SetIntensity(28470 /*Wandlampe Flur Unten Dim FS20 DI20-2 1313*/, 8, 3);
	FS20_SetIntensity(20344 /*Vitrine Wohnzimmer Dim FS20 DI3 1314*/, 8, 3);
	FS20_SetIntensity(45835 /*Essecke Deckenlampe FS20 DI20-2 1312\Status*/, 8, 3);
  }
//__________________________________________________________________________________________
 if ($Lichtszene_Saubermachen == true)
  {
   FS20_SetIntensity(37172 /*Tisch Dim FS20 DI20-2 1311*/, 16, 3);
 	FS20_SetIntensity(28470 /*Wandlampe Flur Unten Dim FS20 DI20-2 1313*/, 16, 3);
	FS20_SetIntensity(45835 /*Essecke Deckenlampe FS20 DI20-2 1312\Status*/, 16, 3);
  }
//___________________________________________________________________________________________
 if ($Lichtszene_Film == true)
  {
   FS20_SetIntensity(37172 /*Tisch Dim FS20 DI20-2 1311*/, 10, 3);
 	FS20_SetIntensity(28470 /*Wandlampe Flur Unten Dim FS20 DI20-2 1313*/, 0, 3);
 		SetValueBoolean(19479 /*Wandlampe Flur Unten Dim FS20 DI20-2 1313\Status*/, false);
	FS20_SetIntensity(20344 /*Vitrine Wohnzimmer Dim FS20 DI3 1314*/, 10, 3);
  }
//__________________________________________________________________________________________
 if ($Lichtszene_Gaeste == true)
  {
   FS20_SetIntensity(37172 /*Tisch Dim FS20 DI20-2 1311*/, 16, 3);
 	FS20_SetIntensity(28470 /*Wandlampe Flur Unten Dim FS20 DI20-2 1313*/, 16, 3);
	FS20_SetIntensity(20344 /*Vitrine Wohnzimmer Dim FS20 DI3 1314*/, 16, 3);
	FS20_SetIntensity(45835 /*Essecke Deckenlampe FS20 DI20-2 1312\Status*/, 16, 3);
  }
//________________________________________________________________________________________

Um jetzt ausserhalb der Szenen schalten zu können ist jeder Raum selbst ein Button und Licht kann über EIN/AUS geschaltet werden. In Abhängigkeit ob der Dimmer AN oder AUS ist. Dazu brauch ich den Status

$AnAus = GetValueBoolean(29678 /*Tisch Dim FS20 DI20-2 1311\Status*/);


if ($AnAus == false)
	{
	FS20_SetIntensity(37172 /*Tisch Dim FS20 DI20-2 1311*/, 16, 0);
	}

if ($AnAus == true)
	{
	FS20_SetIntensity(37172 /*Tisch Dim FS20 DI20-2 1311*/, 0, 0);
	   SetValueBoolean(29678 /*Tisch Dim FS20 DI20-2 1311\Status*/, false);
	}

In Life sieht das so aus: (Ich mach das mal als Link, ist auch von meiner privaten Seite, also keine Werbung oder sonst etwas) sollte das nicht gewünscht sein dann bitte sofort wieder löschen.


Im zweiten Scipt muß eine Hilfsavariable eingebaut werden, nennen wir sie mal $AnAus2.
Diese auf false setzen wenn gewünscht. z.B. bei:

SetValueBoolean(29678 /*Tisch Dim FS20 DI20-2 1311\Status*/, false);

Im dritten Script diese für false Abfragen verwenden.
Bei FS20_SetIntensity und bei FS20_SwitchMode wird der Status auf true ja automatisch gesetzt. Hier könnet die Hilfsvariable über einen Trigger oder im Script gesetzt werden.

Falls jemand eine bessere Lösung hat kann sie gerne veröffentlichen.
Die o.g. Lösung bedeutet zwar einen Mehraufwand von Migrationen der Scripte V1 auf die V2, aber ist letztlich die sauberere Programmierweise.

Hallo,

Gibt es keine Möglichkeit, einen anderen Befehl hinzuzufügen, mit welchem auch Systemvariabeln geändert werden können?

Vor allem bei der Entwicklung wäre dies sehr hilfreich, ich kann ja während der Entwicklung nicht immer auf eine neue Temperatur warten um zu testen ob Events/Datenbankanbindung/Semaphore usw. richtig funktionieren. Und immer 10 Variabeln von Hand ändern ist auch sehr aufwändig.

Gruss

hightower

Hallo hightower,

Geht auch so. Einfach Doppelklick auf die entsprechende Variable und bei der folgenden Frage mit NEIN antworten.

So, hab jetzt für jeden Dimmer eine zusätzliche Variable eingebaut, funktioniert auch.

Problem bleibt jetzt nur noch das im laufe der Zeit alle Dimmer den Status AN haben, obwohl sie AUS sind :eek:

Das steht jetzt im Gegensatz zu dem, warum Statusvariblen nicht von Hand geändert werden sollen. Siehe Hier.

Nach Durchsuchen des Forums, bin ich ja auch nicht alleine mit diesem Problem.

Bitte Bitte, kann im nächsten oder auch übernächsten Update nicht eingebaut werden das SetIntensity auf 0 auch den Dimmerstatus auf AUS setzt :o
Das wäre dann konform zu dem Grund warum Statusvariblen nicht von Hand geändert werden sollen und ersparrt eine Menge Trickserrei mit zusätlichen Variablen.

An diesse Stelle noch allen ein frohes Neues von mir
Ralf

Bitte Bitte, kann im nächsten oder auch übernächsten Update nicht eingebaut werden das SetIntensity auf 0 auch den Dimmerstatus auf AUS setzt :o

Nein, da es einfach nicht stimmt. Der Dimmer ist nicht aus und er verbraucht mehr Strom als, wenn er wirklich aus wäre. (Es gab dazu mal einen Thread hier im Forum)

paresy

…Und immer 10 Variabeln von Hand ändern ist auch sehr aufwändig…

… allerdings gibt es schon etliche Fälle, wo man Statusvariablen händisch nachziehen muss, entgegen der reinen Lehre:

Beispiel: Verwendung von Masteradressen

Wenn mehrere Aktoren per „virtuellem“ Aktor mit Masteradresse geschaltet werden, muss man die einzelnen Aktoren bzw. ihre Statusvariablen „händisch“, also per SetValue der VStatusvariable entsprechend nachziehen/setzen.

Beispiel: Regenmelder

Wenn man nicht immer den Sender aufschrauben möchte und die Einschaltdauer neu programmieren moechte, um die Auswertungszyklen zu verändern, bleibt nur der Weg per SetScriptTimer und dem Setzen der Statusvariablen auf False

etc. etc.

Beides geht in der aktuellen IPS V2 Version nicht mehr - wäre daher trotz der richtigen Arumente hinsichtlich Statusvariablen sehr dafuer, das Setzen dieser wieder zu gestatten

Viele Grüße
Dirk