- Home
- Deutsch
- Entwicklung
- [Major Update] UniFi Adapter v0.5.0
[Major Update] UniFi Adapter v0.5.0
-
@braindead sagte in [Major Update] UniFi Adapter v0.5.0:
Bei mir sind es 60 Sekunden
bei mir auch. ( 3 AP + 2 Mesh) Ich setze das Intervall mal auf 90 Sekunden.
-
@braindead sagte in [Major Update] UniFi Adapter v0.5.0:
@BBTown Motivation kannst Du. Danke.
Ja ich weiß, das ist nicht immer fair und ich werde deiner Leistung/Unterstützung damit nicht unbedingt gerecht
Andererseits, schau doch mal nach wann ich das erste mal den Vorschlag/die Bitte nach einer Whitelist hier eingestellt habe. Im Anschluss kam diese Bitte immer wieder von mir und auch anderen Anwendern.Wenn ich alle Themen rund um UniFi querlese und zusammenfasse, dann ist die am häufigsten genannte Funktion/Idee der Einsatz für die Anwesenheitserkennung. Wenn dem so ist, dann benötigst Du eben einfach nur eine handvoll an Devices/Datenpunkten.
Aber RX/TX scheint einfach wichtiger zu sein ...
-
@BBTown Ich habe klar kommuniziert, was ich mit dem Adapter erreichen möchte und in welcher Reihenfolge das passiert. Einige Dinge (RX/TX) werden nebenbei mitgenommen, andere werden eingebaut sobald sie ins Konzept passen.
Es steht wirklich jedem frei einen Beitrag zum Adapter zu leisten in Form von Commits auf GitHub. Dein verlinkter Kommentar ist mittlerweile 22 Tage alt, also mehr als genug Zeit den Commit zu machen.
Aber irgendetwas scheint auch für Dich einfach wichtiger zu sein ...
-
@dslraser ich habe das nun auch eine Weile beobachtet, dazu auch zusätzlich dein Script genutzt.
Intervall habe ich 60sek im Adapter eingestellt.Egal zu welchen Tages/Nachtzeiten und in unregelmäßigen Abständen, kommen "Fehlmeldungen".
Bedeutet, es Kommen offline Meldungen, obwohl ich im Netz bin.
Dabei ist es egal ob das Handy durchs Haus irrt oder am Platz liegt.
Am Handy ist extra "Energiesparmodus" deaktiviert. Also es schläft nicht.
Auch habe ich meinen zweiten AP deaktiviert, somit sollte auch das wechseln zwischen AP ´s nicht damit zusammen hängen.
Zuverlässig läuft nur mein anders Skript, meldet nur, wenn ich wirklich off/online bin. -
@crunchip said in [Major Update] UniFi Adapter v0.5.0:
Zuverlässig läuft nur mein anders Skript, meldet nur, wenn ich wirklich off/online bin.
OK, dann Butter bei die Fische: Wie oft läuft Dein Script und gibt es ein Offset? Bitte auch mal das Script hier posten, damit ich das genau nachvollziehen kann.
-
@braindead hatte ich weiter oben schon genannt
was anderes macht du ja auch nicht im Adapter?codeschnipsel
function checkUAP () { for (var i=0; i<wificlients.devices.length; i++) { // UAP abfragen var lchange = getState("unifi.0.default.clients." + wificlients.devices[i].mac + ".uptime_by_uap").lc; var uap_anwesenheit = (lchange - ((new Date().getTime()) - 60000) < 0 === true) ? false : true; if (logging) log('Gerät ' + wificlients.devices[i].geraet + ' von ' + wificlients.devices[i].nutzer + ' ist ' + uap_anwesenheit); // Datenpunkt verzögert beschreiben var idUAP = "javascript." + instance + ".Anwesend.UAP." + wificlients.devices[i].nutzer; setStateDelayed(idUAP, uap_anwesenheit, 1000); } } // jede Minute schedule('* * * * * *', checkUAP); // bei Skriptstart createStates(); // Datenpunkte erstmal anlegen setTimeout(function() { // 2s verzögert Abfrage erstmals ausführen checkUAP(); }, 2*1000);
-
@crunchip
okay, in Deinem Script ist eine Verzögerung drinn....Dann ändere ich meins auch mal. Wenn Du den "Schraubenschlüssel" für Telegramm nimmst, dann kommen auch keine Nachrichten zwischendurch, oder doch ? -
@dslraser
Wenn ich den Datenpunkt über den Schraubenschlüssel konfigurieren möchte, sei es per Telegram oder auch iogo Nachrichten zu senden, bekomme ich keine Benachrichtigung, warum auch immer.
Daher hab ich mir wiederum dafür ein Blockly erstellt -
@braindead
Welcher Zeitraum steckt denn hinter den Datenpunkten:
unifi.0.default.devices.[USG 3P].port_table.wan.rx_bytes
und
unifi.0.default.devices.[USG 3P].port_table.wan.tx_bytesDanke
SG
Mario -
@braindead sagte in [Major Update] UniFi Adapter v0.5.0:
Es steht wirklich jedem frei einen Beitrag zum Adapter zu leisten in Form von Commits auf GitHub. Dein verlinkter Kommentar ist mittlerweile 22 Tage alt, also mehr als genug Zeit den Commit zu machen.
Aber irgendetwas scheint auch für Dich einfach wichtiger zu sein ...ja, wenn es rein um die Form geht, und Du Wünsche und Kommentare hier im Thread nicht berücksichtigen magst, dann kann man das selbstverständlich so handhaben. Entweder baut man einen Adapter der möglichst viele anspricht, oder man baut den eben vorrangig für sich selbst.
Mitunter schmeckt der Köder dem Angler eben besser als dem Fisch
-
@BBTown Interessant, den ersten Teil meiner Antwort zitierst Du nicht. Wahrscheinlich passt er nicht zu Deiner gewollten Aussage und dem flotten Spruch am Ende, oder?
Um das Thema abzuschließen: Eine Whitelist kommt, sobald alle wichtigeren Punkte abgearbeitet sind. Wenn der Adapter bis dahin für Dich nicht zu gebrauchen ist, dann sei es so. Mehr als 1000 Installationen >= v0.4.3 zeugen davon, dass es genug User gibt, die den Adapter auch ohne Whitelist nutzen.
-
@BBTown said in [Major Update] UniFi Adapter v0.5.0:
Mitunter schmeckt der Köder dem Angler eben besser als dem Fisch
Ich würde mal behaupten das die meisten Adapter daraus Endstanden sind das jemand etwas für sich selbst gebraucht hat was es bisdahin nicht gab oder er mit dem was es gab unzufrieden war. Es ist also jedem freigestellt, wenn er nicht zufrieden ist, etwas eigenes auf die Beine zu stellen. Aber die meisten machen es nicht weil die es entweder nicht können, keine zeit oder lust oder beides haben sich damit zu beschäftigen und es lernen oder ganz einfach nur zu faul dafür sind.
Ich für meinen Teil will nicht abstreiten das mir auch auch die Motivation fehlt es zu lernen einen Adapter zu schreiben, aber ich versuche auch nicht die Hand zu beißen die mich füttert.
Muß eben jeder selber wissen wie er sich verhält.
-
@braindead sagte in [Major Update] UniFi Adapter v0.5.0:
@BBTown Interessant, den ersten Teil meiner Antwort zitierst Du nicht. Wahrscheinlich passt er nicht zu Deiner gewollten Aussage und dem flotten Spruch am Ende, oder?
das ganze Thema ist ja wie gesagt nicht neu, und zum Thema "Github" und "es interessiert mich nicht", verweise ich einfach mal auf diesen Beitrag ...
Ich wollte mich übrigens gar nicht streiten
-
Hi,
super Arbeit !!!!
Ich habe schon lange einen Unifi Access Point. Eigentlich lief es bisher ok aber jetzt ist das SetUp wesentlich effizienter und übersichtlicher.
Vielen Dank dafür.
Für alle die Interesse haben und als kleines Danke schön an @braindead Ich habe vor Jahren mal ein AnwesenheitsControl Script für TR64 geschrieben. Jetzt habe ich ein kleines Script für den Unifi Adapter geschrieben (eigentlich für mich - Teile ich aber gerne
Das Script kann wie gehabt ein externes Logging, eine Jason mit Komm und Geht und eine einfache Liste der Anwesenheiten.
Ausserdem lassen sich die States aus Unifi spiegeln. Vielleicht hilft das bei dem Thema WhiteList.
Der Hauptnutzen des Scriptes ist es aber einen Datenpunkt zu haben, der die Anwesenheiten kumuliert. Also JemandDA oder nicht..weiter unten das Script. Habe es einfach gehalten. Damit sollten also Anpassungen leicht möglich sein.
Liebe Grüße
Looxer//----------------------------------------------------------------------------------------------------- // Einstellungsbereich //----------------------------------------------------------------------------------------------------- // Liste der teilnehmenden User/Geräte var Anwesenheit = []; Anwesenheit[0] = ['unifi.0.default.clients.7c:94:2a:xx:4e:xx.is_online', 'Daisy' ]; Anwesenheit[1] = ['unifi.0.default.clients.b8:7b:c5:xx:4c:xx.is_online', 'Micky' ]; Anwesenheit[2] = ['unifi.0.default.clients.d0:2b:20:xx:98:xx.is_online', 'Tick' ]; Anwesenheit[3] = ['unifi.0.default.clients.8c:8e:f2:xx:6f:xx.is_online', 'Trick' ]; Anwesenheit[4] = ['unifi.0.default.clients.88:44:77:xx:5b:xx.is_online', 'Track' ]; var path = "javascript.0.Anwesenheitssteuerung.Userlist." //Logging var logflag = false; // logging enabled var LogPath = "/opt/iobroker/iobroker-data/Anwesenheiten2.csv"; // Pfad und Dateiname des externen Logs // Debug var debug = true; // mehr/weniger meldungen im Log // States anlegen ? var CreateAllStates = true; // checken ob alle States angeleget sind ? dann auf true var shadowing = true; // user Status spiegeln //------------------------------------------------------------------------------------------------------- // Start der Logik //------------------------------------------------------------------------------------------------------- var fs = require('fs'); // enable write fuer externes log var UserAllText = "JemandDa"; // ist irgendwer da ? var UserString = "Liste"; // Statename fuer die Liste in VIS if (CreateAllStates) { CreateStates(); // States anlegen }; Subscribe(); // Subscriptions fuer alle User anlegen //----------------------------------------------------------------------------------------------------- // Suscription //----------------------------------------------------------------------------------------------------- function Subscribe () { for (var i in Anwesenheit) { // loop ueber alle log("Subscription fuer "+Anwesenheit[i][1] + " erstellt","info"); on({id: Anwesenheit[i][0], change: 'any'}, function(obj) { // erstelle subscription if (obj.state.val !== obj.oldState.val) { if(debug ) {log ("Anwesenheitsstatus Aenderung fuer Objekt " + obj.id +" auf " + obj.state.val + " erkannt","info" )}; UserUpdate(obj.id,obj.state.val ); } }); // endon } } //----------------------------------------------------------------------------------------------------- // Userupdate //----------------------------------------------------------------------------------------------------- function UserUpdate (objekt,Status) { var User = ""; var CreationTime = formatDate(new Date(),"TT.MM.JJJJ SS:mm:ss"); var LogString= ""; var anzahluser = 0; // auslösenden User ermitteln for (var i in Anwesenheit) { // loop ueber alle anzahluser = anzahluser + 1 ; if(Anwesenheit[i][0] === objekt ) { // das ist der Auslöser User = Anwesenheit[i][1] log ("Anwesenheitsstatus Aenderung fuer User " + User + " auf " + Status + " erkannt","info" ); } } if(debug) {log("Anzahl User in der Userlist = "+ anzahluser,"info")} if(Status === true) { // user wurde auf anwesend gesetzt setState(path+"1KommtGeht."+User+"Kommt",CreationTime); LogString = User + ";"+ "Kommt"; writelog(LogString); }else{ setState(path+"1KommtGeht."+User+"Geht",CreationTime); LogString = User + ";" + "Geht"; writelog(LogString); } // jetzt schauen ob kein User mehr da ist var Userda = false; var Userlist = ""; for (var i in Anwesenheit) { // loop ueber alle if (existsState(Anwesenheit[i][0]) ) { if (getState(Anwesenheit[i][0]).val) { Userda = true; Userlist = Userlist + " " + Anwesenheit[i][1]; } } } if(!Userda) { setState(path+UserAllText,false ); // kein User da Userlist = "Niemand"; // kein User da }else{ setState(path+UserAllText,true ); // wenn mindestens ein user da ist dann ist der state JemandDa = true } setState(path+UserString,Userlist ); // update der Userlist // jetzt Jason füllen var JasonString =""; var counter = 0; var UserStatus = false; var UserKommt = ""; var UserGeht = ""; for (var i in Anwesenheit) { // loop ueber alle counter = counter + 1 ; // Jason (Descr1, Wert1, Deesc2, Wert2, Deesc3, Wer3, Deesc4, Wert4, if ( counter === 1 ) { // Eroeffnung der Json Tabelle JasonString = "["; } if (existsState(Anwesenheit[i][0]) ) { UserStatus = getState(Anwesenheit[i][0]).val; }else { UserStatus = false; }; if(Anwesenheit[i][1] === User ) { // auslösender User if(Status === true) { // user ist gekommen UserKommt = CreationTime; // aktuelle Zeit setzen UserGeht = getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Geht").val; if(shadowing) { setState(path+Anwesenheit[i][1],true); } }else { // user ist gegangen UserGeht = CreationTime; UserKommt =getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Kommt").val; if(shadowing ) { setState(path+Anwesenheit[i][1],false); } } }else { UserKommt =getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Kommt").val; // wenn dieser User nicht auslösend war dann nur den gespeicherten Wert einlesen --- Kommt UserGeht = getState(path+"1KommtGeht."+Anwesenheit[i][1]+"Geht").val; if(shadowing) { if (existsState(Anwesenheit[i][0])) { setState(path+Anwesenheit[i][1],getState(Anwesenheit[i][0]).val); }else { setState(path+Anwesenheit[i][1],false); } } }; JasonString = JasonString +JasonCreate ("Name", Anwesenheit[i][1], "Status", UserStatus, "Kommt", UserKommt , "Geht", UserGeht ); if ( counter === anzahluser ) { JasonString = JasonString + "]"; // Schliessen der Json Tabelle } else { JasonString = JasonString + ","; // Schliessen einer einzelnen Zeile - nur die letzte nicht }; } // ende for setState(path+'1KommtGeht.' + "AnwesenheitJason", JasonString); } // Ende Funktion //----------------------------------------------------------------------------------------------------- // Erstellung von jason strings zur Tabellendarstellung //----------------------------------------------------------------------------------------------------- function JasonCreate (Desc1, Wert1, Desc2, Wert2, Desc3,Wert3, Desc4,Wert4) { var buildzeile = "{"; buildzeile = buildzeile + '"' + Desc1+ '":'; buildzeile = buildzeile + '"' + Wert1 + '"' + ","; buildzeile = buildzeile + '"' + Desc2 + '"' + ":"; buildzeile = buildzeile + '"' + Wert2 + '"' + ","; buildzeile = buildzeile + '"' + Desc3 + '"' + ":"; buildzeile = buildzeile + '"' + Wert3 + '"' + ","; buildzeile = buildzeile + '"' + Desc4 + '"' + ":"; buildzeile = buildzeile + '"' + Wert4 + '"' + "}"; return buildzeile; } // Ende Funktion //----------------------------------------------------------------------------------------------------- // Funktion schreibt einen Logeintrag in das Filesystem und auch in das interne Log-System //----------------------------------------------------------------------------------------------------- function writelog(string) { if (logflag === true) { var logdate = formatDate(new Date(),"TT.MM.JJJJ"); var logtime = formatDate(new Date(),"SS:mm:ss"); fs.readFile(LogPath, 'utf8', function(err,data){ if (!err){ fs.appendFileSync(LogPath, logdate+" ;"+logtime+" ;"+string + "\n"); // Füge Satz in Datei ein }else{ log("Logfile nicht gefunden - wird angelegt"), "info"; var headerLine= "Datum;Uhrzeit;Name;Kommt-Geht"; fs.appendFileSync(LogPath, headerLine + "\n"); // Füge Satz in Datei ein fs.appendFileSync(LogPath, logdate+" ;"+logtime+" ;"+string + "\n"); // Füge Satz in Datei ein } // ende check error }); // ende check File } // endif check logflag } // Ende Funktion //----------------------------------------------------------------------------------------------------- // States erstellen //----------------------------------------------------------------------------------------------------- function CreateStates () { for (var i in Anwesenheit) { // loop ueber alle if(shadowing) { createState(path+Anwesenheit[i][1] , false , {read: true, write: true, type: 'boolean', name: 'Anwesenheit - User '+Anwesenheit[i][1], desc: 'ZAnwesenheit - User '+Anwesenheit[i][1] } ); } createState(path+"1KommtGeht."+Anwesenheit[i][1]+"Geht" , "", {read: true, write: true, type: 'string', name: 'Anwesenheit Zeit ausloggen', desc: 'Zeit gehen User '+Anwesenheit[i][1] } ); createState(path+"1KommtGeht."+Anwesenheit[i][1]+"Kommt" , "", {read: true, write: true, type: 'string', name: 'Anwesenheit Zeit einloggen', desc: 'Zeit kommen User '+Anwesenheit[i][1] } ); }; createState(path+UserAllText , false, {read: true, write: true, type: 'boolean', name: 'Anwesenheit alle User', desc: 'Anwesenheit alle User'}) createState(path+UserString , "Niemand", {read: true, write: true, type: 'string', name: 'Anwesenheit Userliste', desc: 'Anwesenheit Userliste'}); createState( path + '1KommtGeht.' + "AnwesenheitJason", "",{read: true, write: true, type: 'string', name: 'Anwesenheitsstatus Jason Liste', desc: 'UserListe als Jason'}); }; // Ende Funktion
-
@looxer01
kannst Du Dein Script bitte komplett in Code Tags Packen.
Damit (in der Menüleiste)
-
@looxer01 sagte in [Major Update] UniFi Adapter v0.5.0:
sorry - da hatte sich ein Fehler eingeschlichen. Sollte jetzt komplett selektierbar sein.
vG Looxer -
@looxer01
ja, nun ist es okay, danke fürs teilen. -
@crunchip @braindead
Ich habe in mein Blockly eine Verzögerung eingebaut. Den Adapter habe ich auf 60 Sekunden gelassen. Heute Nacht habe ich das mal mit 2 Minuten Verzögerung laufen gelassen. (nur für die Abmeldung/Offline Meldung) Bei 2 Minuten Verzögerung hatte ich nicht eine einzige Offline Meldung. Die Online Meldung kommt beim nächsten Adapter Intervall Durchlauf und die Offline Meldung dann nach Adapter Intevall Durchlauf + max die eingestellte Verzögerung. Ich werde jetzt mal die Verzögerung nur knapp über dem Updateintervall testen. (eine Minute Verzögerung reicht bei meiner Installation nicht)Falls Jemand probieren möchte:
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="" id=";k,Ihk0[-)fmYrQXm8m^">anlegen_in</variable> <variable type="" id="fyVM({2.Ubq}R7hxFVRc">speicherort</variable> <variable type="" id="nTXOZ!3I{zM-7hg^DXcc">person_1_is_online_DP</variable> <variable type="" id="lvz.2`K]e8c1*JEc-vJu">anwesenheit_person_1</variable> <variable type="" id="@i-nl2q|$|OFpK!Yx+CC">anwesenheit_person_2</variable> <variable type="" id="yB(N?#)zIjYIo%.B@UT(">person_2_is_online_DP</variable> <variable type="" id=";^euFaDvC/jHl4C^!SUw">person_1</variable> <variable type="undefined" id="start">start</variable> <variable type="" id="sgYRW3,@::dC5Ux]x;8|">person_2</variable> <variable type="" id=";,S.tm1x]$^/_:4UWB~|">verzoegerung_person_1</variable> <variable type="undefined" id="warten_person_1">warten_person_1</variable> <variable type="undefined" id="warten_person_2">warten_person_2</variable> <variable type="" id="XzCE`hDBP%sX+x?@f$E;">verzoegerung_person_2</variable> <variable type="" id="![EW]9b!hQ9S[MT.q}6-">telegram_benutzer</variable> </variables> <block type="procedures_defcustomnoreturn" id="eZsGA^2r{c%G,YpuLp]K" x="13" y="13"> <mutation statements="false"> <arg name="anlegen_in" varid=";k,Ihk0[-)fmYrQXm8m^"></arg> </mutation> <field name="NAME">Datenpunkte_anlegen</field> <field name="SCRIPT">LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwoKCmZ1bmN0aW9uIGNyZWF0ZVVzZXJTdGF0ZXMod2hlcmUsIGZvcmNlLCBzdGF0ZXNUb0NyZWF0ZSwgY2FsbGJhY2sgPSB1bmRlZmluZWQpIHsKIAogICAgY29uc3QgV0FSTiA9IGZhbHNlOyAvLyBPbmx5IGZvciAwX3VzZXJkYXRhLjA6IFRocm93cyB3YXJuaW5nIGluIGxvZywgaWYgc3RhdGUgaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgZm9yY2U9ZmFsc2UuIERlZmF1bHQgaXMgZmFsc2UsIHNvIG5vIHdhcm5pbmcgaW4gbG9nLCBpZiBzdGF0ZSBleGlzdHMuCiAgICBjb25zdCBMT0dfREVCVUcgPSBmYWxzZTsgLy8gVG8gZGVidWcgdGhpcyBmdW5jdGlvbiwgc2V0IHRvIHRydWUKICAgIC8vIFBlciBpc3N1ZSAjNDc0IChodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc0KSwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgZXhlY3V0ZXMgdGhlIGNhbGxiYWNrIAogICAgLy8gYmVmb3JlIHRoZSBzdGF0ZSBpcyBhY3R1YWwgY3JlYXRlZC4gVGhlcmVmb3JlLCB3ZSB1c2UgYSBzZXRUaW1lb3V0IGFuZCBjb3VudGVyIGFzIGEgd29ya2Fyb3VuZC4KICAgIGNvbnN0IERFTEFZID0gNTA7IC8vIERlbGF5IGluIG1pbGxpc2Vjb25kcyAobXMpLiBJbmNyZWFzZSB0aGlzIHRvIDEwMCwgaWYgaXQgaXMgbm90IHdvcmtpbmcuCgogICAgLy8gVmFsaWRhdGUgIndoZXJlIgogICAgaWYgKHdoZXJlLmVuZHNXaXRoKCcuJykpIHdoZXJlID0gd2hlcmUuc2xpY2UoMCwgLTEpOyAvLyBSZW1vdmUgdHJhaWxpbmcgZG90CiAgICBpZiAoICh3aGVyZS5tYXRjaCgvXigoamF2YXNjcmlwdFwuKFsxLTldWzAtOV18WzAtOV0pKSR8MF91c2VyZGF0YVwuMCQpLykgPT0gbnVsbCkgKSB7CiAgICAgICAgbG9nKCdUaGlzIHNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IHRvIGNyZWF0ZSBzdGF0ZXMgdW5kZXIgWycgKyB3aGVyZSArICddJywgJ2Vycm9yJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFByZXBhcmUgInN0YXRlc1RvQ3JlYXRlIiBzaW5jZSB3ZSBhbHNvIGFsbG93IGEgc2luZ2xlIHN0YXRlIHRvIGNyZWF0ZQogICAgaWYoIUFycmF5LmlzQXJyYXkoc3RhdGVzVG9DcmVhdGVbMF0pKSBzdGF0ZXNUb0NyZWF0ZSA9IFtzdGF0ZXNUb0NyZWF0ZV07IC8vIHdyYXAgaW50byBhcnJheSwgaWYganVzdCBvbmUgYXJyYXkgYW5kIG5vdCBpbnNpZGUgYW4gYXJyYXkKCiAgICAvLyBBZGQgIndoZXJlIiB0byBTVEFURVNfVE9fQ1JFQVRFCiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IGxwUGF0aCA9IHN0YXRlc1RvQ3JlYXRlW2ldWzBdLnJlcGxhY2UoL1wuKlwuL2csICcuJyk7IC8vIHJlcGxhY2UgYWxsIG11bHRpcGxlIGRvdHMgbGlrZSAnLi4nLCAnLi4uJyB3aXRoIGEgc2luZ2xlICcuJwogICAgICAgIGxwUGF0aCA9IGxwUGF0aC5yZXBsYWNlKC9eKChqYXZhc2NyaXB0XC4oWzEtOV1bMC05XXxbMC05XSlcLil8MF91c2VyZGF0YVwuMFwuKS8sJycpIC8vIHJlbW92ZSBhbnkgamF2YXNjcmlwdC54LiAvIDBfdXNlcmRhdGEuMC4gZnJvbSBiZWdpbm5pbmcKICAgICAgICBscFBhdGggPSB3aGVyZSArICcuJyArIGxwUGF0aDsgLy8gYWRkIHdoZXJlIHRvIGJlZ2lubmluZyBvZiBzdHJpbmcKICAgICAgICBzdGF0ZXNUb0NyZWF0ZVtpXVswXSA9IGxwUGF0aDsKICAgIH0KCiAgICBpZiAod2hlcmUgIT0gJzBfdXNlcmRhdGEuMCcpIHsKICAgICAgICAvLyBDcmVhdGUgU3RhdGVzIHVuZGVyIGphdmFzY3JpcHQueAogICAgICAgIGxldCBudW1TdGF0ZXMgPSBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsKICAgICAgICAgICAgbGV0IGxvb3BJbml0ID0gKGxvb3BQYXJhbVsxXVsnZGVmJ10gPT0gdW5kZWZpbmVkKSA/IG51bGwgOiBsb29wUGFyYW1bMV1bJ2RlZiddOyAvLyBtaW1pYyBzYW1lIGJlaGF2aW9yIGFzIGNyZWF0ZVN0YXRlIGlmIG5vIGluaXQgdmFsdWUgaXMgcHJvdmlkZWQKICAgICAgICAgICAgY3JlYXRlU3RhdGUobG9vcFBhcmFtWzBdLCBsb29wSW5pdCwgZm9yY2UsIGxvb3BQYXJhbVsxXSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gRnVuY3Rpb24gdG8gY2FsbGJhY2sgcGFyYW1ldGVyIHdhcyBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ3JlYXRlIFN0YXRlcyB1bmRlciAwX3VzZXJkYXRhLjAKICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOwogICAgICAgIGxldCBjb3VudGVyID0gLTE7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgY291bnRlciArPSAxOwogICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2cgKCdbRGVidWddIEN1cnJlbnRseSBwcm9jZXNzaW5nIGZvbGxvd2luZyBzdGF0ZTogWycgKyBsb29wUGFyYW1bMF0gKyAnXScpOwogICAgICAgICAgICBpZiggKCQobG9vcFBhcmFtWzBdKS5sZW5ndGggPiAwKSAmJiAoZXhpc3RzU3RhdGUobG9vcFBhcmFtWzBdKSkgKSB7IC8vIFdvcmthcm91bmQgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9pb0Jyb2tlci9pb0Jyb2tlci5qYXZhc2NyaXB0L2lzc3Vlcy80NzgKICAgICAgICAgICAgICAgIC8vIFN0YXRlIGlzIGV4aXN0aW5nLgogICAgICAgICAgICAgICAgaWYgKFdBUk4gJiYgIWZvcmNlKSBsb2coJ1N0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgd2lsbCBubyBsb25nZXIgYmUgY3JlYXRlZC4nLCAnd2FybicpOwogICAgICAgICAgICAgICAgaWYgKCFXQVJOICYmIExPR19ERUJVRykgbG9nKCdbRGVidWddIFN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZy4gT3B0aW9uIGZvcmNlICg9b3ZlcndyaXRlKSBpcyBzZXQgdG8gWycgKyBmb3JjZSArICddLicpOwogICAgICAgICAgICAgICAgaWYoIWZvcmNlKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgZXhpc3RzIGFuZCBzaGFsbCBub3QgYmUgb3ZlcndyaXR0ZW4gc2luY2UgZm9yY2U9ZmFsc2UKICAgICAgICAgICAgICAgICAgICAvLyBTbywgd2UgZG8gbm90IHByb2NlZWQuCiAgICAgICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCB3aGljaCB3ZSBhcmUgZ29pbmcgdG8gZXhlY3V0ZSBub3cuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ28gb3V0IGFuZCBjb250aW51ZSB3aXRoIG5leHQgZWxlbWVudCBpbiBsb29wLgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4NDUyOTIwL2NvbnRpbnVlLWluLWN1cnNvci1mb3JlYWNoCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvLyBpZighZm9yY2UpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFN0YXRlIGlzIG5vdCBleGlzdGluZyBvciBmb3JjZSA9IHRydWUsIHNvIHdlIGFyZSBjb250aW51aW5nIHRvIGNyZWF0ZSB0aGUgc3RhdGUgdGhyb3VnaCBzZXRPYmplY3QoKS4KICAgICAgICAgICAgbGV0IG9iaiA9IHt9OwogICAgICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICAgICAgb2JqLmNvbW1vbiA9IGxvb3BQYXJhbVsxXTsKICAgICAgICAgICAgc2V0T2JqZWN0KGxvb3BQYXJhbVswXSwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0IGZvciBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddOiAnICsgZXJyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKQogICAgICAgICAgICAgICAgICAgIGxldCBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbG9vcFBhcmFtWzFdLmRlZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUobG9vcFBhcmFtWzBdLCBpbml0LCB0cnVlLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBzZXRTdGF0ZSBkdXJjaGdlZsO8aHJ0OiAnICsgbG9vcFBhcmFtWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHByb2Nlc3NlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBGdW5jdGlvbiB0byBjYWxsYmFjayBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSwgREVMQVkgKyAoMjAgKiBjb3VudGVyKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0KfQoKcGVyc29uMSA9ICdIZWlrbycKcGVyc29uMiA9ICdLZXJzdGluJwpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICAvL0Fud2VzZW5oZWl0IFBlcnNvbmVuL0hhbmR5cwogICAgWydVbmlmaS5Bbndlc2VuaGVpdC4nK1twZXJzb24xXSwgeyduYW1lJzpbcGVyc29uMV0rJyBBbndlc2VuaGVpdCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnVW5pZmkuQW53ZXNlbmhlaXQuJytbcGVyc29uMl0sIHsnbmFtZSc6W3BlcnNvbjJdKycgQW53ZXNlbmhlaXQnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgIApdOwoKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLCBmYWxzZSwgc3RhdGVzVG9DcmVhdGUsIGZ1bmN0aW9uKCl7OwogICAgbWFpbigpOwp9KTsKCgo=</field> <comment pinned="false" h="80" w="160">Datenpunkte erstellen</comment> </block> <block type="variables_set" id="oODt+HYM*+ptP0jLnPoN" x="13" y="62"> <field name="VAR" id="fyVM({2.Ubq}R7hxFVRc" variabletype="">speicherort</field> <value name="VALUE"> <block type="text" id="^a2)}wPt=s[~]UsHJqvr"> <field name="TEXT">0_userdata.0</field> </block> </value> <next> <block type="comment" id="@hJky?+Qv5OpJOJa;Tl6"> <field name="COMMENT">Unifi Adapter Client DP is_online</field> <next> <block type="variables_set" id="Y?6=|YzWSeM4LOdF5$XM"> <field name="VAR" id="nTXOZ!3I{zM-7hg^DXcc" variabletype="">person_1_is_online_DP</field> <value name="VALUE"> <block type="field_oid" id="knG,[`=1g+b,s{kx1EP,"> <field name="oid">unifi.0.default.clients.8c:b8:4a:34:ac:85.is_online</field> </block> </value> <next> <block type="comment" id="/R=ulymL%~caLxh2Ilfo"> <field name="COMMENT">Unifi Adapter Client DP is_online</field> <next> <block type="variables_set" id="Vx9vV3Sg8kY@H?;zDw@("> <field name="VAR" id="yB(N?#)zIjYIo%.B@UT(" variabletype="">person_2_is_online_DP</field> <value name="VALUE"> <block type="field_oid" id="!feFu(z:sKBl~0nK`eGu"> <field name="oid">unifi.0.default.clients.04:d6:aa:76:06:53.is_online</field> </block> </value> <next> <block type="variables_set" id="9m,K[:2^)KFEl|00rZQ7"> <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field> <value name="VALUE"> <block type="text" id="pJ}1(u|}l3lA7~[z+Wg5"> <field name="TEXT">Heiko</field> </block> </value> <next> <block type="comment" id="}W{ch-1OEjvE8xy`G(aN"> <field name="COMMENT">60000 x 1 = 1 Minute</field> <next> <block type="comment" id="vOE*^-a,jtYycI=KQ)Q!"> <field name="COMMENT">90000 x 1 = 1,5 Minuten</field> <next> <block type="variables_set" id="WCX(yO/edOT~0H{EzEDJ"> <field name="VAR" id=";,S.tm1x]$^/_:4UWB~|" variabletype="">verzoegerung_person_1</field> <value name="VALUE"> <block type="math_arithmetic" id="8=|?+a[CEu_T?522u981"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="y=JYnz0]^+S}-0Wcp8dK"> <field name="NUM">90000</field> </shadow> </value> <value name="B"> <shadow type="math_number" id="xBI[G7a_J/}x!L4k{6FN"> <field name="NUM">1</field> </shadow> </value> </block> </value> <next> <block type="variables_set" id="k`L|~6i[HzfGD|D*L^Z["> <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field> <value name="VALUE"> <block type="text" id="$^o6%]+%A^W3{Txo4Yds"> <field name="TEXT">Kerstin</field> </block> </value> <next> <block type="variables_set" id="aJJ+aqI83onu8lQ]Q_UQ"> <field name="VAR" id="XzCE`hDBP%sX+x?@f$E;" variabletype="">verzoegerung_person_2</field> <value name="VALUE"> <block type="math_arithmetic" id="q`nu[t,DyhqtYO9Tp}`Y"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="`Ce#nDl]~dO36UCkyB]1"> <field name="NUM">90000</field> </shadow> </value> <value name="B"> <shadow type="math_number" id="cHM6|FVqyG^7-@=9PZ$t"> <field name="NUM">1</field> </shadow> </value> </block> </value> <next> <block type="variables_set" id="bEu?$N6,|qbfd8h2t;xr"> <field name="VAR" id="![EW]9b!hQ9S[MT.q}6-" variabletype="">telegram_benutzer</field> <value name="VALUE"> <block type="text" id="@AJ19!Lch7=H%ib(sX@`"> <field name="TEXT">Heiko</field> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="(4(-f$1VS~CwO}P[R@.6" collapsed="true"> <mutation name="Datenpunkte_anlegen"> <arg name="anlegen_in"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="!74)L93;^_?DR0pALJ9f"> <field name="VAR" id="fyVM({2.Ubq}R7hxFVRc" variabletype="">speicherort</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> <block type="procedures_defnoreturn" id="SSMy$1MUVX,GQsbb[2*m" collapsed="true" x="12" y="437"> <field name="NAME">main</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="timeouts_cleartimeout" id="TZP~F0nTRJ5tX).DDSa`"> <field name="NAME">start</field> <next> <block type="variables_set" id=",U2@|cXpD(cMh/t+?6ch"> <field name="VAR" id="lvz.2`K]e8c1*JEc-vJu" variabletype="">anwesenheit_person_1</field> <value name="VALUE"> <block type="text_join" id="!1[II16BPGnRh-7=6hz["> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="xK5Ij}90B8}K(46SJ?nI"> <field name="VAR" id="fyVM({2.Ubq}R7hxFVRc" variabletype="">speicherort</field> </block> </value> <value name="ADD1"> <block type="text" id="j|:+t7a^%@D?7F{x85Vu"> <field name="TEXT">.Unifi.Anwesenheit.</field> </block> </value> <value name="ADD2"> <block type="variables_get" id="/d9dG48mWBBOwwOV|b7q"> <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field> </block> </value> </block> </value> <next> <block type="variables_set" id="!b3P0hupqzO)$LYY_96G"> <field name="VAR" id="@i-nl2q|$|OFpK!Yx+CC" variabletype="">anwesenheit_person_2</field> <value name="VALUE"> <block type="text_join" id="j^1|XvQ;,bZdK7j*e[W]"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="{e5Na0l3aK]%yCR.A^B{"> <field name="VAR" id="fyVM({2.Ubq}R7hxFVRc" variabletype="">speicherort</field> </block> </value> <value name="ADD1"> <block type="text" id="IVD:VEYV~yR=s_-/Xf!N"> <field name="TEXT">.Unifi.Anwesenheit.</field> </block> </value> <value name="ADD2"> <block type="variables_get" id="Aty5L{S^6krr(,SAac[M"> <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field> </block> </value> </block> </value> <next> <block type="timeouts_settimeout" id=".|_m4*n~bGC)tC]M]!E^"> <field name="NAME">start</field> <field name="DELAY">1</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="controls_if" id="@IdN-@8]b19pM5K:RKAV"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="mOtoF5ZD{_J6ssks0m)y"> <field name="OP">EQ</field> <value name="A"> <block type="get_value_var" id="P=ub#}lCd=k9sU(YPcg:"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text" id="+?=%oVJ6|*ti.6j6/Wxj"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="l+hT5v.Pk.O2J$/Iaqt,"> <field name="VAR" id="nTXOZ!3I{zM-7hg^DXcc" variabletype="">person_1_is_online_DP</field> </block> </value> </block> </value> <value name="B"> <block type="logic_boolean" id="9{xgUNQr|Jen;~u_$)6d"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control_ex" id=".V]CdR(,WY/[gHi[+RLy" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="3%^DGT`3E`2/0p:w3{4^"> <field name="VAR" id="lvz.2`K]e8c1*JEc-vJu" variabletype="">anwesenheit_person_1</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i"> <field name="BOOL">TRUE</field> </shadow> <block type="text_join" id="f8$xC!VB#l1J#2YIx60!"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="1oBT:?uj_zr?Mgi+#WM`"> <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field> </block> </value> <value name="ADD1"> <block type="text" id="SWk`f2QCt@7CE*{M9F=y"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="Gh(!zydv3Jh_{d7dIKNr"> <field name="TEXT">ist online ✅</field> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="I7CJ`-|pTzVbPm]Rm~#j"> <field name="NUM">0</field> </shadow> </value> </block> </statement> <statement name="ELSE"> <block type="control_ex" id="Rm7t|TP;p?8IkYCVTFYf" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="rh!@7z?k=8.uZbxF?DoI"> <field name="VAR" id="lvz.2`K]e8c1*JEc-vJu" variabletype="">anwesenheit_person_1</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i"> <field name="BOOL">TRUE</field> </shadow> <block type="text_join" id=";.n,Hn*I2XhhSW85o_Q2"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="tu5-.4UIt2~I(onp}L$P"> <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field> </block> </value> <value name="ADD1"> <block type="text" id="`*!Euh8@c0Kv1`dL)`|]"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="OP@O9n8`%s$i4iu!qalG"> <field name="TEXT">ist offline ❌</field> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="?QJBHR?P%=ONW9U|7bz~"> <field name="NUM">0</field> </shadow> </value> </block> </statement> <next> <block type="controls_if" id="CW7PDI-i5$*GOj_KJb4Q"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="-!aPk*oy9xC5J=ysP)7="> <field name="OP">EQ</field> <value name="A"> <block type="get_value_var" id="n+Ps:J5qI;GEdiv{)E?z"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text" id="+?=%oVJ6|*ti.6j6/Wxj"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="!|b(=p?G65~q+jglAR8w"> <field name="VAR" id="yB(N?#)zIjYIo%.B@UT(" variabletype="">person_2_is_online_DP</field> </block> </value> </block> </value> <value name="B"> <block type="logic_boolean" id="!(SIj5PDvV$R:iUQ*(LP"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control_ex" id="4VEiHKIjpLMpRX2h?+MR" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="MTibw$-yf66T#p]`3z?r"> <field name="VAR" id="@i-nl2q|$|OFpK!Yx+CC" variabletype="">anwesenheit_person_2</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i"> <field name="BOOL">TRUE</field> </shadow> <block type="text_join" id=":iT@UQ1eLTq{?.Nc0-Ob"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id=")vF^Rbw,2,7/)$D8gF};"> <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field> </block> </value> <value name="ADD1"> <block type="text" id="23zE8haiF=Z5L.H#Pk7i"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="+0!/qeY$7F8aH-xnRR*0"> <field name="TEXT">ist online ✅</field> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="l4gI%#`:C=?(4rd|p`^."> <field name="NUM">0</field> </shadow> </value> </block> </statement> <statement name="ELSE"> <block type="control_ex" id="W?x]+MW|=5vu@Uj(3,75" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="VV1Lj`Qf^tQkmc+x.maW"> <field name="VAR" id="@i-nl2q|$|OFpK!Yx+CC" variabletype="">anwesenheit_person_2</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i"> <field name="BOOL">TRUE</field> </shadow> <block type="text_join" id="ll.R;kcidI|hRLwDFVB{"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="WD$^uCEDqYwF6:QS*F]j"> <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field> </block> </value> <value name="ADD1"> <block type="text" id="wR$`1P`CT=B)$/YSN(~J"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="4c(~/}V#~bT!jwy2iB}J"> <field name="TEXT">ist offline ❌</field> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="!d5FRdKZAaU7?)=#m4%_"> <field name="NUM">0</field> </shadow> </value> </block> </statement> </block> </next> </block> </statement> <next> <block type="on_ext" id="SX%6!fqcVoVlD@SU-7Y4"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id=";0_S:)AqTJF$]lRUv@gx"> <field name="oid">default</field> </shadow> <block type="variables_get" id="UKe(AmN7{4GdYH(3_`O#"> <field name="VAR" id="nTXOZ!3I{zM-7hg^DXcc" variabletype="">person_1_is_online_DP</field> </block> </value> <statement name="STATEMENT"> <block type="timeouts_cleartimeout" id=";5poL43K$!]^/%.4$m+%"> <field name="NAME">warten_person_1</field> <next> <block type="controls_if" id="_z?rO3%XvQmDU%U1=lon"> <value name="IF0"> <block type="on_source" id="_(Fal+8L^ATHe#Hq|y+9"> <field name="ATTR">state.val</field> </block> </value> <statement name="DO0"> <block type="control_ex" id="LM-KIX/g(V6Tuik9CLF/" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="7,y}skvg#u?n$OT[5K=S"> <field name="VAR" id="lvz.2`K]e8c1*JEc-vJu" variabletype="">anwesenheit_person_1</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i"> <field name="BOOL">TRUE</field> </shadow> <block type="text_join" id="l|J80x/T-`0?9M^7b]:N"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id=".qiA1:)|eFl9@:8-b6*`"> <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field> </block> </value> <value name="ADD1"> <block type="text" id="G0=0Fc~I_fA]0O)}g3W("> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="]N,+4OnsaC~Lw_.k0/hh"> <field name="TEXT">ist online ✅</field> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="1:S1**dQmdnwe.l7.Z-b"> <field name="NUM">0</field> </shadow> </value> </block> </statement> <next> <block type="timeouts_settimeout" id="=B9@U~m`_A#Z6:]qChNR"> <field name="NAME">warten_person_1</field> <field name="DELAY">verzoegerung_person_1</field> <field name="UNIT">ms</field> <statement name="STATEMENT"> <block type="controls_if" id="1VR-AfT4Oa^*9,9^jtoL"> <value name="IF0"> <block type="logic_negate" id="7-N(LCjniX9-2w}5C|lV"> <value name="BOOL"> <block type="on_source" id="9dgu*Y:=}#idI+CVK{?O"> <field name="ATTR">state.val</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control_ex" id="YN=l|7.)+2WVOGMcg!/`" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="4.t^B;y;~YJA^DTb;gyE"> <field name="VAR" id="lvz.2`K]e8c1*JEc-vJu" variabletype="">anwesenheit_person_1</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i"> <field name="BOOL">TRUE</field> </shadow> <block type="text_join" id="o}K:*wP8{onf4yKv=4YT"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="941ISD`abMu2l=]8Y(/m"> <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field> </block> </value> <value name="ADD1"> <block type="text" id="ZM+pW%,1k!o2Vf?t0R?l"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="S__OPp))@Dgo/JTcf}ax"> <field name="TEXT">ist offline ❌</field> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="f6RJ7!swO;Le1Bfko;L2"> <field name="NUM">0</field> </shadow> </value> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </statement> <next> <block type="on_ext" id="~ObZs=5%-:^CnQuYO(z="> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id=";0_S:)AqTJF$]lRUv@gx"> <field name="oid">default</field> </shadow> <block type="variables_get" id="Olbu@Xq[MZTK?j4d_a#g"> <field name="VAR" id="yB(N?#)zIjYIo%.B@UT(" variabletype="">person_2_is_online_DP</field> </block> </value> <statement name="STATEMENT"> <block type="timeouts_cleartimeout" id="TP402$RK@-Gp1F8cUm2A"> <field name="NAME">warten_person_2</field> <next> <block type="controls_if" id="!K2H`_FR~oD9eh*@T1|w"> <value name="IF0"> <block type="on_source" id="*I8C7_{s9`7I(Zx#@%|2"> <field name="ATTR">state.val</field> </block> </value> <statement name="DO0"> <block type="control_ex" id="mFAN(dDUr6q/gR6UwBVZ" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="$UftmC*.f}ze-ab-ys,Q"> <field name="VAR" id="@i-nl2q|$|OFpK!Yx+CC" variabletype="">anwesenheit_person_2</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i"> <field name="BOOL">TRUE</field> </shadow> <block type="text_join" id="P3N04_kX]?qG{Xs2[(fH"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="P5IAcPBtd#@dS,*2B@fW"> <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field> </block> </value> <value name="ADD1"> <block type="text" id="r7@)j/8/+({|VPB=@6%r"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="xxE=NzJgw3NYsn-%!LPx"> <field name="TEXT">ist online ✅</field> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="p/d5]r.~2%E#lqUZ+Zzo"> <field name="NUM">0</field> </shadow> </value> </block> </statement> <next> <block type="timeouts_settimeout" id="@C,B!T7fXep/Dm=_:4d3"> <field name="NAME">warten_person_2</field> <field name="DELAY">verzoegerung_person_2</field> <field name="UNIT">ms</field> <statement name="STATEMENT"> <block type="controls_if" id="MR]9DN1U5jsMH!CAUwnx"> <value name="IF0"> <block type="logic_negate" id=",X~j=CgHu3Dua,Pajc)c"> <value name="BOOL"> <block type="on_source" id=":T;WH4z-(3~qmteGL,c3"> <field name="ATTR">state.val</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control_ex" id="L{2Dp(q220seA@K)H~:9" inline="true"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="hRVN~;8VstUL/pd4KSAZ"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="37B(F$tlde-Bt#u.;L~#"> <field name="VAR" id="@i-nl2q|$|OFpK!Yx+CC" variabletype="">anwesenheit_person_2</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="bbVKs5v:Ert)PYdo!`!i"> <field name="BOOL">TRUE</field> </shadow> <block type="text_join" id="eFy4q-cPhD:xWFQ|LO1f"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id=";$UrDWF]KPE{L^K`r/hr"> <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field> </block> </value> <value name="ADD1"> <block type="text" id="wwJ^.~7}z9=7(BjXQ.p)"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="lM_E)oJ#UCr|#hxu*pAT"> <field name="TEXT">ist offline ❌</field> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="~ECK]+XM?KdV2JNU{|2O"> <field name="NUM">0</field> </shadow> </value> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </statement> <next> <block type="on_ext" id="kBmahL8nnn?vxO//$f-["> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="ni$tZS5FQYqe`2,/#UC,"> <field name="oid">default</field> </shadow> <block type="variables_get" id="QQcy{{[8Zg74:pbx$kRi"> <field name="VAR" id="lvz.2`K]e8c1*JEc-vJu" variabletype="">anwesenheit_person_1</field> </block> </value> <statement name="STATEMENT"> <block type="controls_if" id="$/OU#xEey?~;BXD:2yDW"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="Q~Ms:uf(M:~S,tM9,~js"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="i@wtxhk*E|Qo{AoB_u?I"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text_join" id="@,A~!kjAU/-aY3.wbM9;"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="TACK]j|)Lo@,E00/vwhP"> <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field> </block> </value> <value name="ADD1"> <block type="text" id="7hOD~O*?LrVG~dZ8TQ5`"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="L492!]0m|`X{r2h{+w=6"> <field name="TEXT">ist online ✅</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="54*y/hkmyWndQBH{h#)V"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">Markdown</field> <value name="MESSAGE"> <shadow type="text" id="F8`_}5Ls0W8c7x2c+hZa"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="IGB?:md|3ZD;,sYcS|bg"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="/tAT/wS-)[}+6m*I4~g8"> <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field> </block> </value> <value name="ADD1"> <block type="text" id="fFlUO))aCIA!f=Yag|;M"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="V[o?yVyX~D{w{(:^NNVr"> <field name="TEXT">ist online ✅</field> </block> </value> </block> </value> <value name="USERNAME"> <block type="variables_get" id="41ZPm5?AKrt.cqhBg3{2"> <field name="VAR" id="![EW]9b!hQ9S[MT.q}6-" variabletype="">telegram_benutzer</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="telegram" id="gONL!Ak:KiDx*lp_)..%"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">Markdown</field> <value name="MESSAGE"> <shadow type="text" id="=nQH.TsZSn{lfpy^dbYY"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="z,us3C]4=+L0DA.p_}lp"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="i3Q4|n~53-sQ?^T*H.TC"> <field name="VAR" id=";^euFaDvC/jHl4C^!SUw" variabletype="">person_1</field> </block> </value> <value name="ADD1"> <block type="text" id="QFr-g%mo//Sg8;:roRfA"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id=")0nYWe-N-O.,_Jrn${Vm"> <field name="TEXT">ist offline ❌</field> </block> </value> </block> </value> <value name="USERNAME"> <block type="variables_get" id="vm,}kUg}PwBi!:PsGM,{"> <field name="VAR" id="![EW]9b!hQ9S[MT.q}6-" variabletype="">telegram_benutzer</field> </block> </value> </block> </statement> </block> </statement> <next> <block type="on_ext" id="q4OPoLnwQVEJSw$nioXu"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="hXjoTKk;7Ym;i+XqSni1"> <field name="oid">default</field> </shadow> <block type="variables_get" id="U=OI/?JPPNn/VeC.eoBY"> <field name="VAR" id="@i-nl2q|$|OFpK!Yx+CC" variabletype="">anwesenheit_person_2</field> </block> </value> <statement name="STATEMENT"> <block type="controls_if" id="({xqy3x//DnK@jj08nId"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="7hJU.dk^tV/xxaHXK:96"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="lLs6wkl|I#q4lph`RbX("> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text_join" id="kT/l3;AAS%)aS2G#O$Kn"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="iVvqZxBB66K4Oco(cXJa"> <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field> </block> </value> <value name="ADD1"> <block type="text" id="(J`VLxYAOs=YWWOW$[H+"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="o@}[*NOAo(#=4meNSS8q"> <field name="TEXT">ist online ✅</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="G/k/uD]_e{FwK|;oni_9"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">Markdown</field> <value name="MESSAGE"> <shadow type="text" id="F8`_}5Ls0W8c7x2c+hZa"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="EwI{:V.W#KbT~#,))hp4"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="rXJ#~l_SmSueR^}c}c+2"> <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field> </block> </value> <value name="ADD1"> <block type="text" id="{++h2{_?][DK]_UJQ!1;"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="+T~B`e5Yo89(P:rS[eXJ"> <field name="TEXT">ist online ✅</field> </block> </value> </block> </value> <value name="USERNAME"> <block type="variables_get" id="SIP/Bn3+q.?-|~fP{|mj"> <field name="VAR" id="![EW]9b!hQ9S[MT.q}6-" variabletype="">telegram_benutzer</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="telegram" id="QrG*QsVt38c~9UI4H1.U"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">Markdown</field> <value name="MESSAGE"> <shadow type="text" id="=nQH.TsZSn{lfpy^dbYY"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="i*RxzVi!*A==)}IS5C}S"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="}%!^~Qa|-+l=w6[91@*f"> <field name="VAR" id="sgYRW3,@::dC5Ux]x;8|" variabletype="">person_2</field> </block> </value> <value name="ADD1"> <block type="text" id="nE0K73Q(?EJwI52FCdl@"> <field name="TEXT"> </field> </block> </value> <value name="ADD2"> <block type="text" id="zQ8F1qC^L?*7c#hE}z_A"> <field name="TEXT">ist offline ❌</field> </block> </value> </block> </value> <value name="USERNAME"> <block type="variables_get" id="M|AZ+FjOe.JP3wkCCbbC"> <field name="VAR" id="![EW]9b!hQ9S[MT.q}6-" variabletype="">telegram_benutzer</field> </block> </value> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </xml>
-
@dslraser ich werde es mal testen
-
@crunchip sagte in [Major Update] UniFi Adapter v0.5.0:
@dslraser ich werde es mal testen
Hat heute morgen und eben (ich war unterwegs) funktioniert wie gewünscht.