INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Plausibiltätsprüfung Variablen ???
15.10.2015, 17:58
Beitrag #1
Plausibiltätsprüfung Variablen ???
Hallo in die Runde,

ich habe einen Sketch für meine Lichtsteuerungszentrale geschrieben, der einige Variablen verwaltet.

Die Variablen können aus verschiedenen Quellen kommen. Bei einigen Quellen ist der Wert "0" jedoch ein "Fehler" den ich gern ignorieren möchte. Gibt es einen einfach Weg, eine Variable nur neu zu setzen wenn der Wert ungleich "0" ist?

Ich setze mal den Code hier rein, auch wenn er wohl zu lang sein wird, um ihn zu prüfen.... Es geht um das array "Status".

Der Hintergrund ist, dass jedes Feld in dem Array von einem anderen Node beschrieben wird. Die offenen Felder werden dann jedesmal auf 0 gesetzt, sollen aber den Wert behalten, bis ein anderer plausibler Wert kommt.


Code:
#include <SPI.h>
#include <EEPROM.h>
#include <UTFT.h>
#include <DS3232RTC.h>
#include <Time.h>
#include <TimeAlarms.h>
#include <Wire.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

#define TIME_MSG_LEN  11   // time sync to PC is HEADER followed by Unix time_t as ten ASCII digits
#define TIME_HEADER  'T'   // Header tag for serial time sync message
#define TIME_REQUEST  7    // ASCII bell character requests a time sync message

// T1444334730  //20:05  08.10.2015

extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
UTFT myGLCD(HX8357B,38,39,40,41);

tmElements_t tm;
long sensorValue = 140; // hier den Wert vom externen Lichtsensor "Node 2" einfügen
long blau = 0;
long sensorblau; // String blau = String(sensorblau); in Programm einfügen
long Scene = 1;
char scene[2];   //  String sende = String(Sende); in Programm einfügen

long Status[10];
long Trigger[10];
long Sende[5];

int inSwitch1 = 5;
int inSwitch2 = 9;
unsigned long switch1ActiveTime = 1000;
const unsigned long intervalSwitch1Active = 100;

RF24 radio(7,8);

const uint64_t talking_pipes[5] = { 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL, 0xF0F0F0F0B4LL, 0xF0F0F0F0A5LL, 0xF0F0F0F096LL };
const uint64_t listening_pipes[5] = { 0x3A3A3A3AD2LL, 0x3A3A3A3AC3LL, 0x3A3A3A3AB4LL, 0x3A3A3A3AA5LL, 0x3A3A3A3A96LL };

typedef enum { role_invalid = 0, role_ping_out, role_pong_back } role_e;
const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};

role_e role;

const uint8_t address_at_eeprom_location = 0;
uint8_t node_address;

void setup(void)
{
  // Setup the LCD
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setFont(BigFont);
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
    // create the alarms
  //Alarm.alarmRepeat(6,20,0,Scene02);
  //Alarm.alarmRepeat(7,30,0,Scene03);
  Alarm.alarmRepeat(13,30,0,Scene04);
  Alarm.alarmRepeat(17,30,0,Scene05);
  Alarm.alarmRepeat(19,30,0,Scene06);
  Alarm.alarmRepeat(22,0,0,Scene07);
  Alarm.alarmRepeat(22,20,0,Scene08);
  //Alarm.alarmRepeat(21,45,0,Scene09);
  //Alarm.alarmRepeat(23,10,0,Scene10);
  //Alarm.alarmRepeat(22,10,0,Scene0);
  Alarm.alarmRepeat(dowMonday,7,30,30,Scene01);  
  Alarm.alarmRepeat(dowTuesday,7,30,30,Scene01);
  Alarm.alarmRepeat(dowWednesday,7,30,30,Scene01);
  Alarm.alarmRepeat(dowThursday,7,30,30,Scene01);
  Alarm.alarmRepeat(dowFriday,7,30,30,Scene01);
  Alarm.alarmRepeat(dowSaturday,7,40,30,Scene01);
  Alarm.alarmRepeat(dowSunday,7,40,30,Scene01);
  Alarm.alarmRepeat(dowMonday,8,50,30,Scene02);  
  Alarm.alarmRepeat(dowTuesday,8,50,30,Scene02);
  Alarm.alarmRepeat(dowWednesday,8,50,30,Scene02);
  Alarm.alarmRepeat(dowThursday,8,50,30,Scene02);
  Alarm.alarmRepeat(dowFriday,8,50,30,Scene02);
  Alarm.alarmRepeat(dowSaturday,8,40,30,Scene02);
  Alarm.alarmRepeat(dowSunday,8,40,30,Scene02);
  Alarm.alarmRepeat(dowMonday,11,0,30,Scene03);  
  Alarm.alarmRepeat(dowTuesday,11,0,30,Scene03);
  Alarm.alarmRepeat(dowWednesday,11,0,30,Scene03);
  Alarm.alarmRepeat(dowThursday,11,0,30,Scene03);
  Alarm.alarmRepeat(dowFriday,11,0,30,Scene03);
  Alarm.alarmRepeat(dowSaturday,10,45,30,Scene03);
  Alarm.alarmRepeat(dowSunday,10,45,30,Scene03);
  Alarm.alarmRepeat(dowMonday,21,55,30,Scene10);  
  Alarm.alarmRepeat(dowTuesday,21,55,30,Scene10);
  Alarm.alarmRepeat(dowWednesday,21,55,30,Scene10);
  Alarm.alarmRepeat(dowThursday,21,55,30,Scene10);
  Alarm.alarmRepeat(dowFriday,22,45,30,Scene10);
  Alarm.alarmRepeat(dowSaturday,22,45,30,Scene10);
  Alarm.alarmRepeat(dowSunday,21,55,30,Scene10);
  //Alarm.timerRepeat(30, Repeats);
    
  SPI.begin();
      if(timeStatus() != timeSet)
    {
          myGLCD.setColor(25, 0, 255);
          myGLCD.setBackColor(0, 0, 0);
          myGLCD.print("Die Uhrzeit kann nicht synchronisiert werden", RIGHT, 23);
          delay(5000);
          myGLCD.clrScr();
    }
   else
          myGLCD.setColor(255, 55, 0);
          myGLCD.setBackColor(0, 0, 0);
          myGLCD.print("Die Uhrzeit wurde synchronisiert", RIGHT, 23);
          delay(1000);
          myGLCD.clrScr();
                          
tmElements_t tm;
setSyncProvider(RTC.get); // holen Zeit von RTC(Uhr)
  
    role = role_pong_back;
    node_address = 1;
  
  Serial.begin(57600);
  printf_begin();
  printf("\n\rRF24/examples/starping/\n\r");
  printf("ROLE: %s\n\r",role_friendly_name[role]);
  printf("ADDRESS: %i\n\r",node_address);

  radio.begin();

    radio.openReadingPipe(1,talking_pipes[0]);
    radio.openReadingPipe(2,talking_pipes[1]);
    radio.openReadingPipe(3,talking_pipes[2]);
    radio.openReadingPipe(4,talking_pipes[3]);
    radio.openReadingPipe(5,talking_pipes[4]);

  radio.startListening();
  radio.printDetails();
  if ( role == role_invalid )
  {
    printf("\n\r*** NO NODE ADDRESS ASSIGNED *** Send 1 through 6 to assign an address\n\r");
  }
}

void Scene0()
{
  Serial.println("00");
  Scene = 0;
}
void Scene01()
{
  Serial.println("01");
  Scene = 1;
}

void Scene02()
{
  Serial.println("02");
  Scene = 2;
}
void Scene03()
{
  Serial.println("03");
  Scene = 3;
}
void Scene04()
{
  Serial.println("04");
  Scene = 4;
}
void Scene05()
{
  Serial.println("05");
  Scene = 5;
}
void Scene06()
{
  Serial.println("06");
  Scene = 6;
}
void Scene07()
{
  Serial.println("07");
  Scene = 7;
}
void Scene08()
{
  Serial.println("08");
  Scene = 8;
}

void Scene09()
{
  Serial.println("09");
  Scene = 9;
}

void Scene10()
{
  Serial.println("10");
  Scene = 10;
}

void Scene11()
{
  Serial.println("11");
  Scene = 11;
}

void Scene12()
{
  Serial.println("12");
  Scene = 12;
}
void Scene13()
{
  Serial.println("13");
  Scene = 13;
}
void Scene14()
{
  Serial.println("14");
  Scene = 14;
}
void Scene15()
{
  Serial.println("15");
  Scene = 15;
}
void Scene16()
{
  Serial.println("16");
  Scene = 16;
}
void Scene17()
{
  Serial.println("17");
  Scene = 17;
}


void loop(void)
{  
    if ((digitalRead(inSwitch1) == HIGH) && Scene < 17)
  {
        myGLCD.setColor(25, 155, 105);
                myGLCD.print("Programm ++", RIGHT, 85);
                Scene = Scene + 1;
                delay(200);
                myGLCD.print("             ", RIGHT, 85);
  }
  if ((digitalRead(inSwitch2) == HIGH) && Scene > 0)
  {
        myGLCD.setColor(25, 155, 105);
        myGLCD.print("Programm --", RIGHT, 85);
                Scene = Scene - 1;
                delay(200);
                myGLCD.print("            ", RIGHT, 85);
  }
  
  tmElements_t tm;
  setSyncProvider(RTC.get);
  myGLCD.setColor(205, 15, 55);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.setFont(BigFont);
  myGLCD.print("Lampensteuerung P+P Haacke", 5, 1);
  myGLCD.setFont(BigFont);
  myGLCD.setColor(255, 255, 0);
  myGLCD.print(".", 65, 100);
  myGLCD.print(".", 140, 100);
  myGLCD.print(":", 80, 50);
  myGLCD.print(":", 180, 50);
int t = RTC.temperature();
float celsius = t / 4.0;
float fahrenheit = celsius * 9.0 / 5.0 + 32.0;
  myGLCD.print("Temp", 295, 50);
  myGLCD.print("O", 425, 20);
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.printNumI(hour(), 10, 20);
  myGLCD.printNumI(minute(), 100, 20);
  myGLCD.printNumI(second(), 200, 20);
  myGLCD.printNumI(day(), 5, 70);
  myGLCD.printNumI(month(), 75, 70);
  myGLCD.printNumI(year(), 155, 70);
  myGLCD.printNumI(RTC.temperature()/4.0, 365, 20);
  myGLCD.setFont(BigFont);
  myGLCD.setColor(25, 215, 255);
  myGLCD.print("zugeordnetes", 5, 120);
  myGLCD.print("Programm:", 225, 120);
  String scene = String(Scene);
  myGLCD.setColor(25, 155, 255);
  myGLCD.print(scene, 385, 120);
          myGLCD.setColor(225, 125, 0);
        //myGLCD.print("                                           ", 0, 265);
        myGLCD.print("empfange:", 5, 135);
        myGLCD.print("Sonne blau:     ", 1, 155);
        myGLCD.printNumI(Status[0], 200, 155);
        myGLCD.print("Sonne gruen:    ", 1, 170);
        myGLCD.printNumI(Status[1], 200, 170);
        myGLCD.print("Sonne rot:      ", 1, 185);
        myGLCD.printNumI(Status[2], 200, 185);
        myGLCD.print("Lese Vati:      ", 1, 200);
        myGLCD.printNumI(Status[3], 210, 200);
        myGLCD.print("Lese Mutti:     ", 1, 215);
        myGLCD.printNumI(Status[4], 210, 215);
        myGLCD.print("PIR WZ Decke:", 1, 230);
        myGLCD.printNumI(Status[5], 220, 230);
        myGLCD.print("frei:", 1, 245);
        myGLCD.printNumI(Status[6], 220, 245);
        myGLCD.print("frei:", 1, 260);
        myGLCD.printNumI(Status[7], 220, 260);
        myGLCD.print("frei:", 1, 275);
        myGLCD.printNumI(Status[8], 220, 275);
        myGLCD.print("frei:", 1, 290);
        myGLCD.printNumI(Status[9], 220, 290);
        //myGLCD.print("von Lampe:", 305, 265);
        //myGLCD.printNumI(pipe_num+1, RIGHT, 265);
        myGLCD.print("sende:", 260, 135);
        myGLCD.print("Kueche:", 260, 155);
        myGLCD.printNumI(Trigger[0], RIGHT, 155);
        myGLCD.print("WZ Decke:", 260, 170);
        myGLCD.printNumI(Trigger[1], RIGHT, 170);
        myGLCD.print("WZ Schr 1", 260, 185);
        myGLCD.printNumI(Trigger[2], RIGHT, 185);
        myGLCD.print("WZ Schr 2:", 260, 200);
        myGLCD.printNumI(Trigger[3], RIGHT, 200);
        myGLCD.print("Garten:", 260, 215);
        myGLCD.printNumI(Trigger[4], RIGHT, 215);
        myGLCD.print("Vati:", 260, 230);
        myGLCD.printNumI(Trigger[5], RIGHT, 230);
        myGLCD.print("Mutti:", 260, 245);
        myGLCD.printNumI(Trigger[6], RIGHT, 245);
        myGLCD.print("Start Schr 1:", 260, 260);
        myGLCD.printNumI(Trigger[7], RIGHT, 260);
        myGLCD.print("Start Schr 2:", 260, 275);
        myGLCD.printNumI(Trigger[8], RIGHT, 275);
        myGLCD.print("Szene:", 260, 290);
        myGLCD.printNumI(Trigger[9], RIGHT, 290);
  Alarm.delay(10);

  
  switch (Scene)
    {
      case 0:
      Sende[0] = 0;
      Sende[1] = 0;
      Sende[2] = 0;
      Sende[3] = 0;
      Sende[4] = 0;
      break;
      
      case 1:
      Sende[0] = 1;
      Sende[1] = 1;
      Sende[3] = 1;
      Sende[4] = 1;
      break;
      
      case 2:
      Sende[0] = 2;
      Sende[1] = 2;
      Sende[2] = 2;
      Sende[4] = 2;
      break;
      
      case 3:
      Sende[1] = 3;
      Sende[3] = 3;
      Sende[4] = 3;  
      break;
      
      case 4:
      Sende[2] = 4;
      Sende[3] = 4;
      Sende[4] = 4;
      break;
      
      case 5:
      Sende[0] = 5;
      Sende[1] = 5;
      Sende[2] = 5;
      Sende[3] = 5;
      Sende[4] = 5;
      break;
      
      case 6:
      Sende[1] = 6;
      Sende[3] = 6;
      break;
      
      case 7:
      Sende[0] = 7;
      Sende[2] = 7;
      Sende[3] = 7;
      Sende[4] = 7;
      break;
      
      case 8:
      Sende[0] = 8;
      Sende[1] = 8;
      Sende[2] = 8;
      Sende[3] = 8;
      Sende[4] = 8;
      break;
      
      case 9:
      Sende[0] = 9;
      Sende[1] = 9;
      Sende[2] = 9;
      Sende[3] = 9;
      Sende[4] = 9;
      break;
      
      case 10:
      Sende[0] = 10;
      Sende[1] = 10;
      Sende[2] = 10;
      Sende[3] = 10;
      Sende[4] = 10;
      break;
      
      case 11:
      Sende[0] = 11;
      Sende[1] = 11;
      Sende[2] = 11;
      Sende[3] = 11;
      Sende[4] = 11;
      break;
      
      case 12:
      Sende[0] = 12;
      Sende[1] = 12;
      Sende[2] = 12;
      Sende[3] = 12;
      Sende[4] = 12;
      break;
      
      case 13:
      Sende[0] = 0;
      Sende[1] = 0;
      Sende[2] = 0;
      Sende[3] = 0;
      Sende[4] = 0;
      break;
      
      case 14:
      Sende[0] = 0;
      Sende[1] = 0;
      Sende[2] = 0;
      Sende[3] = 0;
      Sende[4] = 0;
      break;
            
      case 15:
      Sende[0] = 0;
      Sende[1] = 0;
      Sende[2] = 0;
      Sende[3] = 0;
      Sende[4] = 0;
      break;
      
      case 16:
      Sende[0] = 0;
      Sende[1] = 0;
      Sende[2] = 0;
      Sende[3] = 0;
      Sende[4] = 0;
      break;
      
      case 17:
      Sende[0] = 0;
      Sende[1] = 0;
      Sende[2] = 0;
      Sende[3] = 0;
      Sende[4] = 0;
      break;
      
      default:
         Serial.println("keine Scene erkannt");
     }

    uint8_t pipe_num;
    if ( radio.available(&pipe_num) )
    {
     // unsigned int Status[];
      bool done = false;
      while (!done)
      {
        done = radio.read( Status, sizeof(Status) );
        printf("empfange Status  %lu , %lu , %lu , %lu , %lu , %lu , %lu , %lu , %lu , %lu\n\r",Status[0] ,Status[1], Status[2], Status[3], Status[4], Status[5] ,Status[6], Status[7], Status[8], Status[9]);

      delay(50);
      }
      radio.stopListening();
      radio.openWritingPipe(listening_pipes[pipe_num-1]);
      uint16_t pipe_id = listening_pipes[pipe_num-1] & 0xffff;
      
      Trigger[0] = Sende[0];// Programmvorgabe für die Küche
      Trigger[1] = Sende[1];//Programmvorgabe für die Wohnzimmerdecke
      Trigger[2] = Sende[2];//Programmvorgabe für Wohnzimmerschrank 1
      Trigger[3] = Sende[3];//Programmvorgabe für Wohnzimmerschrank 2
      Trigger[4] = Sende[4];//Programmvorgabe für den Garten      
      Trigger[5] = Status[3];//Übertrage den Abstand für Leseleuchte Vati
      Trigger[6] = Status[4];//Übertrage den Abstand für Leseleuchte Mutti
      Trigger[7] = 1;//Status[6];//Rückmeldung vom PIR Wohnzimmerdecke
      Trigger[8] = Status[5];
      Trigger[9] = Scene;      
      radio.write( Trigger, sizeof(Trigger) );
      printf("Sende Trigger  %lu , %lu , %lu , %lu , %lu , %lu , %lu , %lu , %lu , %lu\n\r",Trigger[0] ,Trigger[1], Trigger[2], Trigger[3], Trigger[4], Trigger[5] ,Trigger[6] ,Trigger[7], Trigger[8], Trigger[9] );

      
      radio.startListening();    
      unsigned long started_waiting_at = millis();
  }

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2015, 18:14
Beitrag #2
RE: Plausibiltätsprüfung Variablen ???
Ich denke If wert =0 {} Else { wert= neuer_Wert}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2015, 19:45
Beitrag #3
RE: Plausibiltätsprüfung Variablen ???
hm.... der Ansatz ist nicht schlecht.... klappt aber nicht...

so sieht es bei mir aus:

Code:
if (Status[0] == 0 )
          {}
        else
          {
          Status[0] = Status[0];
          }
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2015, 19:48
Beitrag #4
RE: Plausibiltätsprüfung Variablen ???
Der Fehler liegt bei diesem Code hinter else{,
Da der Index für die Variable gleich ist.
Versuche mal Status[0] = Status[1];
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2015, 20:05
Beitrag #5
RE: Plausibiltätsprüfung Variablen ???
damit würde ich ja aber auf die nächste Stelle im Array zugreifen...

Vielleicht könnte ich ein weiteres array definieren, welches die empfangenen Werte aufnimmt und nur bei Plausiblität überträgt...

Wobei ich eigentlich eine Lösung finden sollte, die die Stellen im Array nur beschreibt, wenn es erforderlich ist...

Ich habe mehrer Sensoren die wie NRF24 Werte an die Zentrale senden.... Jeder Sensor soll eigentlich bestimmte Stellen im Array befüllen. Obwohl ich in den jeweiligen Sensoren nur die relevanten Arraystellen beschreibe, werden die anderen mit "0" beschrieben- das führt letztendlich zu dem Problem.....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2015, 20:16 (Dieser Beitrag wurde zuletzt bearbeitet: 15.10.2015 20:17 von Klaus(i).)
Beitrag #6
RE: Plausibiltätsprüfung Variablen ???
Am Besten Du schreibst dir eine Funktion, die überprüft, ob der neue Wert größer 0 ist.
Ich habe das beispielhaft mal gemacht.
In die Funktion geht alter und neuer Wert rein und es kommt der neue raus, wenn er größer 0 ist, andernfalls der alte.

Gruß, Klaus

(ignorier das PHP vor code)
PHP-Code:
void loop(void){
  
long messwert;
  
  
//.... ganz viel Code vorher
  
messwert 12;  //Sensorwert kommt irgendwo her
  
  //Aufruf Funktion
  
wert valueGt0(wertmesswert);
  
//.... ganz viel Code nachher
}

//Funktion Wert>0
long valueGt0(long valuelong new_value){

  if (
new_value 0) {
    return 
new_value;
  } else {
    return 
value;
  }

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2015, 20:50
Beitrag #7
RE: Plausibiltätsprüfung Variablen ???
OK, das sieht interessant aus- da setze ich mich morgen mal ran... vielen Dank schon mal....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.10.2015, 11:58
Beitrag #8
RE: Plausibiltätsprüfung Variablen ???
Ich habs jetzt so gemacht, dass ich bei dem Sketch der die Werte weiterverarbeitet ein Trägheit eingebaut habe- also, dass der neue Wert nicht sofort übernommen wird sondern sich Schrittweise angleicht... damit pendeln die Werte ganz leicht um den eigentlichen Wert- was aber nicht stört, da es sich um analoge Werte handelt....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Variablen over/underflow "deaktivieren" Scheams 6 223 23.06.2016 16:36
Letzter Beitrag: Scheams
Exclamation String Zerlegen in drei Variablen Wampo 4 848 28.12.2015 01:07
Letzter Beitrag: Wampo
Information Rechnen mit variablen Jim 3 1.824 22.05.2015 16:44
Letzter Beitrag: Jim
  Variablen Fehler bei TFT Display Xwill 1 806 08.05.2015 13:10
Letzter Beitrag: Thorsten Pferdekämper
  Due: freier Speicher für Variablen während der Laufzeit? HaWe 8 1.394 28.04.2015 08:22
Letzter Beitrag: tito-t
  Variablen per WIFI zwischen 3 Arduinos versenden Daewid 4 793 23.04.2015 01:22
Letzter Beitrag: Daewid
  Variablen Typ double, char, long aus ext. EEPROM lesen SternGucker 8 1.533 02.04.2015 08:10
Letzter Beitrag: SternGucker
  Probleme mit Variablen Johngun 3 629 07.03.2015 02:37
Letzter Beitrag: Johngun
  Probleme mit einer Variablen scritch 12 1.700 05.12.2014 16:56
Letzter Beitrag: Thorsten Pferdekämper
  Berechnung in einer Variablen scritch 8 2.035 04.10.2014 19:04
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste