====== Zugriff auf den Miniserver ======
**LoxBerry XL** stellt beim Starten des Scripts automatisch die Verbindung zu deinem bzw. deinen Miniservern her. Es werden dafür die Angaben und Einstellungen im Miniserver-Widget von LoxBerry genutzt.
In deinem Script hast du damit automatisch Zugriff mit der Variable **''%%$ms1%%''**, bei mehreren Miniservern z.B. **''%%$ms1%%''**, **''%%$ms2%%''**, **''%%$ms3%%''** und so weiter. Beim Starten des Scripts wird angezeigt, welche Miniserver verfügbar sind:
{{konfiguration:loxberry_xl_extended_logic:1247772696.png?w=300}}
Mit dieser Variable hast du dann **direkten Zugriff** auf die Logik-Bausteine und Eingänge/Ausgänge deines Miniservers:
==== Beispiel ====
{{konfiguration:loxberry_xl_extended_logic:1247772700.png?400}}
===== Bezeichnung der Ein-/Ausgänge des Miniservers =====
Übergeben wird im Beispiel bei **''%%$ms3->LED_Spot%%'' __exakt__** die Bezeichnung des Bausteins, oder Virtuellen Eingangs, Virtuellen Texteingangs oder Virtuellen Ausgangs. Bezeichnung und Beschreibung!? → [[https://loxwiki.atlassian.net/wiki/spaces/LOX/pages/1527808747|"Bezeichnung" und "Beschreibung" von Objekten]]
**Zu beachten** gilt dabei Folgendes:
* Bezeichnungen in der Loxone Config müssen **eindeutig** sein (wenn alle Bausteine "Lichtschalter" heißen, nimmt der Miniserver einfach irgendeinen davon)
* Im Gateway-Konzentrator-Betrieb muss der Befehl an den tatsächlichen Miniserver gesendet werden, nicht an den Konzentrator
* Die Bezeichnungen sind case-sensitive (heißt der Baustein "Außentemperatur", muss auch "Außentemperatur" verwendet werden, nicht "außentemperatur").
* In der Standard-Syntax sind **erlaubt **: Umlaute und z.B. das scharfe ß
* In der Standard-Syntax sind **nicht erlaubt **: Alle von PHP als Steuerzeichen gewertete Zeichen, insbesondere Leerzeichen, Bindestrich (-), Beistrich (,), Dollar-Zeichen ($), Größer/Kleiner-Zeichen (>)
* Dafür gibt es Spezialsyntaxen, um diese Bausteine trotzdem ansprechen zu können.
* Optimal ist es, wenn die __Bezeichnung__ komplett ohne Leerzeichen und Sonderzeichen auskommt, und für die Visualisierung die __Beschreibung__ definiert wird. [[https://loxwiki.atlassian.net/wiki/spaces/LOX/pages/1527808747|"Bezeichnung" und "Beschreibung" von Objekten]]
Folgende Syntax **funktioniert**:
* $ms1->LED_Spot → Underscores erlaubt
* $ms1->Süden_Außentemperatur → Umlaute erlaubt
* $ms1->{'LED-Spot'} → Spezialsyntax, um Leerzeichen, Bindestriche und Sonderzeichen angeben zu können
* $ms1->get('LED Spot') → Spezialsyntax, um Leerzeichen, Bindestriche und Sonderzeichen angeben zu können
Folgende Syntax **funktioniert nicht**:
* $ms1->LED Spot → Leerzeichen nicht erlaubt!
* $ms1->LED-Spot → Bindestrich nicht erlaubt!
===== Abrufen und Senden von Daten vom/zum Miniserver =====
Die Syntaxen zum Abrufen und Senden von Daten sind im Beispiel gezeigt.
Beim **Senden** von Daten können sowohl dezimale Werte (auch mit Nachkommastellen), Texte, als auch Digitalwerte gesendet werden.
Für digitale Bausteine stehen die Befehle der [[https://www.loxone.com/dede/kb/webservices/|Loxone Webservices]] zur Verfügung: **''%%Ein, On, Aus, Off, Impuls, Pulse%%''**, sowie für Bausteine mit zwei Ausgängen: **''%%ImpulsPlus, ImpulsMinus, PulseUp, PulseDown, ImpulsAuf, ImpulsAb, PulseOpen, PulseClose, PlusEin, PlusAus, UpOn, UpOff, AufEin, AufAus, OpenOn, OpenOff, MinusEin, MinusAus, DownOn, DownOff, AbEin, AbAus, CloseOn, CloseOff%%''**
==== Syntax- und Code-Beispiele ====
// Daten abrufen
$licht_ist_an = $ms1->LED_Spot;
$licht_ist_an = $ms1->LED_Spot();
$licht_ist_an = $ms1->{'LED-Spot'};
$licht_ist_an = $ms1->get('LED-Spot');
// Daten senden
$ms1->LED_Spot("On");
$ms1->LED_Spot = "On";
$ms1->{'LED-Spot'} = "On";
$ms1->set('LED-Spot', "On");
$ms1->Alarmtext = "Der Alarm wurde ausgelöst!";
$ms1->Soll_Temperatur = 23.5;
==== Einheit filtern ====
{{konfiguration:loxberry_xl_extended_logic:1247772707.png?w=230}}
Das Abrufen von Daten liefert eine gegebenenfalls in den Eigenschaften des Bausteins hinterlegte Einheit mit.
In diesem Beispiel würde der Abruf''%% %%''**''%%$ms1->Außentemperatur%%''** zurückliefern: **''%%7.5°C%%''**
Um die Einheit zu filtern, liefert **LoxBerry XL** die Funktion **''%%clean()%%''**''%% %%''mit:
echo $ms1->Außentemperatur;
// Ausgabe: 7.5°C
echo clean( $ms1->Außentemperatur );
// Ausgabe: 7.5
==== Vorsicht bei Schleifen und if-Abfragen ====
Schlechtes Beispiel :
if ( $ms1->Außentemperatur < -20 ) {
echo "Heute ist es sehr, sehr kalt!";
} elseif( $ms1->Außentemperatur < 0 ) {
echo "Es gefriert draußen.";
} elseif( $ms1->Außentemperatur < 20 ) {
echo "Temperatur ist ganz ok";
} else {
echo "Heiß heute!";
}
Dieser Code führt __drei Abfragen__ gegen den Miniserver aus. (Randnotiz: Eventuell implementieren wir noch einen Kurzzeit-Cache, um das zu verbessern.)
Gleiche Funktion, aber Gutes Beispiel (1) :
$temp = $ms1->Außentemperatur;
if ( $temp < -20 ) {
echo "Heute ist es sehr, sehr kalt!";
} elseif( $temp < 0 ) {
echo "Es gefriert draußen.";
} elseif( $temp < 20 ) {
echo "Temperatur ist ganz ok";
} else {
echo "Heiß heute!";
}
Das braucht nur noch eine Abfrage.