====== 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.