This is an old revision of the document!


Luftschleuse 2

Die Räume in der Aktueller Stand. 90 haben drei Außentüren: Haupteingang (Front), Hinterhof, Notausgang Keller.

Zu diesem Zweck war eine neue Architektur für die alte Luftschleuse1 notwendig, die wir Luftschleuse2 getauft haben.

  • DOWN Kapsel zu, Strom aus –> Niemand da
  • CLOSED Kapsel zu, Strom an –> Jemand da, aber nur kurz, oder im Keller, oder schläft o.Ä
  • MEMBER Kapsel besetzt, Auch für Nicht-Keyholder-Member mit Token/Klingelcode betretbar. Oder halt klingeln oder klopfen und hoffen, dass jemand aufmacht.
  • PUBLIC Kapsel besetzt. Auch Externe/Gäste etc. sollen kommen (Public Tuesday, Lockpicker, Vorträge…). Tür vorne: daueroffen.

muCCC-Mitglieder bekommen den Klingelcode beim Beitritt mit der Willkommensmail von Mailman.

Unter http://uberbus.club.muc.ccc.de/spaceapi.json bietet wir einen Space-API-Endpoint an. Status-Mapping:

  • open: Status MEMBER oder PUBLIC
  • closed: Status CLOSED oder DOWN

Unter http://spaceapi-stats.n39.eu/#muccc gibt es eine automatische Statistik, mit welcher Wahrscheinlichkeit um eine gewisse Uhrzeit offen ist. In der Regel ist fast jeden Abend ab 19-21 Uhr jemand im Club. Wir speichern aktuell nicht wie viele Leute gerade im Club sind. Entsprechende Live-Statistiken sind aktuell nur innerhalb des Club-Netzes zugänglich, z.B. mit dem Tablet das im Hauptraum auf dem Tisch liegt.

Zentraler Knotenpunkt ist ein Carambola, das über den Mastercontroller (MC) per RS485 mit den einzelnen Schlössern verbunden ist.
Die Schlösser haben eigene Elektronik (Lockcontroller bzw. im Diagram Controller 😵 und Benutzerschnittstelle in Form von einem Knopf.

Schematischer Aufbau:
Quellcode Diagramm: http://web.xtort.eu/~dump/overall.graphml

Code und Hardware: https://github.com/muccc/luftschleuse2

Carambola, Mastercontroller und Lockcontroller Hintertür

Lockcontroller Vordertür

Taster Vordertür

IP: 192.168.2.2
Fingerprint: md5 8b:80:b3:e1:d4:38:86:87:42:75:d0:44:a6:81:46:96
User: open

  • Anforderungen besser definieren 🙂
    • Funktion
      • Was soll ein Nutzer an den Schlosscontrollern einstellen koennen?
      • Welche Informationen werden an den Schlosscontrollern angezeigt?
    • Gehäuse
      • Wo werden sie montiert?
      • Wie sicher müssen sie sein?
    • Netzteil
      • Intern oder extern?
      • Fernspeisung über Busleitung
        • Lockcontroller werden ueber Bus versorgt, Hauptcontroller versorgt Bus ueber Netzteil
    • Benutzerinterface
      • LEDs oder Display in den Schlosscontrollern?
      • z.B. 1 7-Segment LED, das Codes ausgibt.
    • Komponenten
      • Wichtig fuer Layout, Vorschlaege weiter unten.
    • Akku
      • Wielange muss er halten?
      • * Solange wie eine Netzstörung dauert 🙂
      • * 48h wäre gut, Akkus werden ueber Zeit schlechter.
      • Was verbaucht das System im Ruhezustand?
      • * Sleepmode an Schlosscontrollern haben.
      • * Schlosscontroller über BUS oder Nutzerinteraktion wecken
      • Intern oder extern?
    • Software
      • Protokoll fuer RS485 festlegen

Das Carambola kontaktiert ueber den MC zyklisch alle Schlosscontroller.
Die Controller haben einen Hardware-Watchdog, der sie neustartet, wenn keine Aktivitaet auf dem Bus mehr erkennbar ist. Sollte ein
Schlosscontroller den Bus blockieren oder der MC bzw. Carambola sich aufhaengen startet das komplette System neu.

Alternativ: Hauptcontroller schaltet bei Problemen komplette Vesorgungsspannung des Bus.

Die Verbindung der Module erfolgt ueber Ethernetkabel. Zwei Aderpaare sind fuer die 12 V Versorgungsspannung reserviert. Ein Aderpaar
wird von jedem Schlosscontroller mit einem Widerstand belastet. Der MC wertet dieses Paar aus, um abgesteckte Schlosscontroller schnell zu erkennen.

Der MC leitet die Datenuebertragung transparent durch. Zwischen Carambola und Schlosscontrollern wird verschluesselt kommuniziert.

Ein Bleiakku stellt eine Notstromversorgung. Die Ladung erfolgt direkt aus dem Netzteil des Hauptcontrollers.

Serienwiderstaende 10 Ohm + Brueckengleichrichter mit Suppressordiode parallel.
“Kapazitaetsarme Schutzbeschaltung”

Wechselbare Feinsicherung von Netzteil zum Akku
Polyfuse vom Akku zum Bus

Wechselbare Feinsicherung, ueberdimensioniert in Serie mit Polyfuse.

Besser H-Bruecke aus Automotive mit Fehlerüberwachung z.B. Kurzschluß, Kabelbruch

Alternativ: Motorstrom mit A/D-Wandler abgreifen.

Vorteile: Kann Motorposition und Bewegung abschaetzen.

Vorschlag:

MC und Schlosscontroller: ATMEL ATMega644A-AU o.ae. (5 V, extended temperature, 2x UART)
RS485 Treiber: MAX487EESA (slew rate limited, extended temperature, esd protected)
Vorschlag: Potentialgetrennter RS485-Treiber-IC von LTC oder MAX, weil es immer Potentialdifferenzen gibt wegen anderer Speisung etc. Einfach zuverlaessiger.
Gehause: ? (Metall? Kunststoff? Wo und wie werden die Schlosscontroller angebracht? Wie gross werden Display und Schalter? Steckverbinder intern oder am Gehaeuserand? Netzteil und Akku intern?)
Display: ? Farbige LEDS wohl besser auf Entfernung ablesbar. Gut wäre 7Segment LED, rot
Taster: Reichelt TASTER 1104 GN Serie
Netzteil: z.B.: Reichelt SNT MW25-12 (zum Einbau in das Gehaeuse)
Akku: z.B.: Reichelt LCR-12V 2,2P (2.2 Ah), besser 5,7Ah

Schaltplan soweit mal erstellt, werde den nachher noch von zuhause mal hochladen.

Atmel ATMega 324A, lagen noch 3 im Labor, wenn es der 644A werden soll, ist ja Pinkompatibel.
Schaltregler 5 V LM2594 0,5 A
Reset/Watchdog MAX705, überwacht RS485, wenn kein Datenverkehr, löst er Reset aus, außerdem Manueller Reset über die protection Loop möglich.
MAX48x als RS485
Eine SOT23 Referenz als Option (REF3040 etc.)
L6201 als H-Brücke für den Schlossmotor ()
2 Relais als potentialfreier Wechsler, 230V geeignet
2 digitale Ausgänge
8 Analoge oder digitale Eingänge (Port A, so das auch der ADC genutzt werden kann) Magnetkontakte, Steuerkontakte vom Schloss etc.

Display soll eigentlich am Carambola Interface angeschlossen werden, evtl. 2. serieller Port noch rausgeführt für Display/lokale Bedienung

1x Dorma SVP2719
1x Dorma SVP3XXX
1x CES IES Beschlag Drücker Kupplung

Der Club muss wie bisher auch per SSH durch designierte Keyholder “aufgeschlossen” werden; die Verwaltung der Keys wäre wohl wieder per git.

Zusätzlich dazu erhält jeder Türcontroller auch ein oder mehrere alternative Zugangsmedien, bspw. für RFID-Chips. Entsprechende Chips können dann an Members ausgegeben werden, sodass diese sich Zutritt zum Club verschaffen können, sofern per SSH von einem Keyholder der Club aufgeschlossen wurde. Alternativ können natürlich auch bereits vorhandene Zugangsmedien der zutrittswilligen Members erfasst werden anstatt noch etwas mehr Plastik zu verteilen (Firmenausweise, Handys mit NFC, Studentenausweise, etc. pp.). Da es sich bei diesen Zugangsmedien nur um einen besseren Türöffnerknopf handelt, ist die Sicherheit als solches eher nachrangig und man könnte sich bspw. auf die Prüfung der UID des Mediums beschränken. Verwaltung der UIDs wäre dann u.U. auch ein Job fürs git.
FIXME Was für Hardware braucht es dafür noch extra?
Ich habe noch ein paar alte Elektroniken aus CES Legic Zylindern, die werden für Studentenausweise in MUC benötigt, verwaltung erst mal mit der Progkarte.
ISO Tag (Mifare und OK) evtl. mit einem OpenPCD, später wäre auch eine all in one Lösung denkbar, wir brauchen ja nur die UID abfragen und die könnten später auch über Lockbus vom Carambola zum Leser geschrieben werden.

Meiner Meinung nach koennen wir an die Hintertuer auch einfach ne Klinke bauen und sie offen lassen — schneider 2012/12/07 22:08
Bin fuer OpenPCD, denn wir haben die Macht darueber, und muessen nichts reversen etc. (luja)

BTW: Ist das nicht etwas over-engineered? (luja)

Vordertuer:
Zustaende: Abgesperrt (man kommt immer raus), Public (jeder kommt von draussen rein), Offen (Mitglieder kommen mit zusaetzlicher RFID-Karte oder Klingelcode rein)
Sensoren: Klinke gedrueckt, Tuer offen

Hintertuer:
Zustaende: (siehe oben) Abgesperrt, Public, irgendwie auch Offen
Sensoren: Klinke gedrueckt, Tuer offen

Beide Schlösser können jederzeit von innen geöffnet werden, verriegeln aber und fallen nicht nur in den Schnapper.

SSH auf open@, die Hintertuer oeffnet einmal.
An der Steuerung kann eine Taste gedrueckt werden um alle Tueren auf Offen zu schalten. Einzelne Tueren koennen danach direkt an der jeweiligen Tuer auf Public geschaltet werden.
Hinweise fuer Stromausschalten werden aktiviert.

Wollen wir erstmal nicht, aus Komplexitaetsgruenden und anderem.

Knopf an der Steuerung an der Hintertuer sperrt alle Tueren. Eine Anzeige zeigt an, dass alle Tueren geschlossen haben.
Der Strom wird falls moeglich automatisch abgeschaltet.

Einzelne Tueren: Taster fuer Offen/Public fuer die einzelne Tuer
SSH: Einmal oeffnen der Hintertuer
Zentrale-Steuerung: Taster fuer Offen (wirkt auf alle Tueren) und Taster fuer Closed (wirkt auf alle Tueren)
Zentrale-Steuerung Anzeigen: Zustand des Systems, rote LED falls der Befehl Close nicht ausgefuehrt werden konnte (Warnton, falls die Tuer dennoch geöffnet wird)

An der Luftschleusenhauptsteuereinheit gibt es Taster, um den Zustand der Kapsel explizit zu setzten. Dies löst entsprechende Türzustände aus, setzt das Topic entsprechend und kann auch anderweitig ausgenutzt werden (Statuslampen, …).

  • Damit man nicht aus versehen “public” auslöst müssen 2 Taster gleichzeitig gedrückt werden (Vorne + Hinten), wahlweise mit ssh- (public@luftschleuse)

Schaltplan vom EVVA EMZY: evva-emzy-emz02.3.pdf

Stecker Frontpanel:

1: LED Down
2: LED Closed
3: LED Member
4: NC
5: GND
6: Switch Public
7: Button Member
8: Button Closed
9: Button Down

Buchse Frontpanel:
1: Brown
2: Orange
3: Green
5: Blue
6: Blue-White
7: Green-White
8: Orange-White
9: Brown-White

Kabel Frontpanel:

Brown-White: Button Down
Orange-White: Button Closed
Green- White: Button Member
Blue-White: Switch Public

Brown: LED Down
Orange: LED Closed
Green: LED Member

Blue: Gnd

Schaltplan Schloss: svp2719_schematic.pdf

Schlosskontakt Name Variable / Bemerkung PCB Pin Funktion
2 Brücke DOOR_LOCK_BRIDGE I/O 4 Kabelbrucherkennung
8 Entriegelung DOOR_LOCK_UNLOCKED_CONTACT I/O 4 Schloss entriegelt
5 Riegel DOOR_LOCK_LOCKED_CONTACT I/O 6 Riegel ausgeschlossen
7 Drücker DOOR_HANDLE_CONTACT I/O 7 Klinke gedrückt
10 Steuerfalle DOOR_DOOR_OPEN_CONTACT I/O 8 Steuerfalle gedrückt
13 Hallsensor DOOR_LOCK_CONTACT I/O 1 Position Motor
1,3,9 GND GND Masse
12 DC 12V Motor 1 Versorgung Hallsensor
6 Motor + Motor 2 Motor H-Brücke +
4 Motor - Motor 3 Motor H-Brücke -
Reedkontakt Am Türrahmen I/O 3 Türkontakt
Taster Tür öffnen 2.Kontakt GND I/O 10 Lokale Tür öffnen
LED Tür status Anode über Vorwiderstand I/O 9 Lokale Tür Status
DC Test Status DC 10K an Motor 1, 1K n. GND I/O 2 Messung ü. Spannungsteiler
Klingel Member ACC 12V und Masse Opto 2 Klingelcode

Originalkabel

Stecker 65239-007LF - Wire-To-Board-Steckverbinder, 2.54 mm, 14 Kontakt(e), Buchse, DUBOX 65239

Schlosskontakt Name Klemmenbezeichnung Originalsteuerung Farbe Funktion
1 Brücke 42 rosa Kabelbrucherkennung
2 Brücke 41 grau Kabelbrucherkennung
3 Gebrückt 11 GND
4 Motor - 45 gelb Motor
5 Riegel 43 eosa/grau Riegelkontakt
6 Motor + 46 grün Motor
7 Drücker 26 blau Drückerkontakt
8 Entriegelung 24 rot/blau Entriegelungskontakt
9 GND 27 violett GND Entriegelung+Drücker
10 Steuerfalle 49 braun Steuerfalle
11 Gebrückt 3 PE
12 +5V Hall 21 weiß +5V Hallsensor
13 Hall Out 44 rot Hallsensor Ausgang
14 GND 23 schwarz GND
  • Viele Einzelschritte nötig, bis die Tür offen ist
  • Android-Bug sorgt bei WLANs ohne Internetanbindung (wie hier) für Verbindungsprobleme

Ziel: Automatisierung der Schritte

  1. Mobile Daten deaktivieren (scheint Android-Verbindungsprobleme zu lösen)
  2. Mit Luftschleuse-WLAN verbinden
  3. SSH Login
  4. Mobile Daten aktivieren
  5. Mit regulärem Club-WLAN verbinden

Vorteile

  • Ein-Click-Lösung

Nachteile

  • viele Abhängigkeiten
  • nicht quelloffen

Abhängigkeiten

  • Tasker
  • AutoInput (Tasker Plugin)
  • Wifi Connect (Tasker Plugin)
  • SSH Tasker Plugin

Vorzunehmende Einstellungen

  • SSH-Key

Code

AbloyProtec.tsk.xml
<TaskerData sr="" dvi="1" tv="5.2.bf1">
	<Task sr="task4">
		<cdate>1531307637421</cdate>
		<edate>1531331968792</edate>
		<id>4</id>
		<nme>ABLOY PROTEC</nme>
		<pri>100</pri>
		<Kid sr="Kid">
			<launchID>2</launchID>
			<pkg>xce.ovu.etl</pkg>
			<vnme>v2</vnme>
			<vnum>2</vnum>
		</Kid>
		<Action sr="act0" ve="7">
			<code>811079103</code>
			<Bundle sr="arg0">
				<Vals sr="val">
					<GlobalAction>5</GlobalAction>
					<GlobalAction-type>java.lang.String</GlobalAction-type>
					<Password>&lt;null&gt;</Password>
					<Password-type>java.lang.String</Password-type>
					<com.twofortyfouram.locale.intent.extra.BLURB>Action: Quick Settings</com.twofortyfouram.locale.intent.extra.BLURB>
					<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
					<net.dinglisch.android.tasker.RELEVANT_VARIABLES>&lt;StringArray sr=""&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0&gt;%err
Error Code
Only available if you select &amp;lt;b&amp;gt;Continue Task After Error&amp;lt;/b&amp;gt; and the action ends in error&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;%errmsg
Error Message
Only available if you select &amp;lt;b&amp;gt;Continue Task After Error&amp;lt;/b&amp;gt; and the action ends in error&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;&lt;/StringArray&gt;</net.dinglisch.android.tasker.RELEVANT_VARIABLES>
					<net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>[Ljava.lang.String;</net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>
					<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>GlobalAction plugininstanceid plugintypeid </net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>
					<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>java.lang.String</net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>
					<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
					<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
					<plugininstanceid>72a28833-bbf9-475b-88cd-6bb7c00f379e</plugininstanceid>
					<plugininstanceid-type>java.lang.String</plugininstanceid-type>
					<plugintypeid>com.joaomgcd.autoinput.intent.IntentPerformGlobalAction</plugintypeid>
					<plugintypeid-type>java.lang.String</plugintypeid-type>
				</Vals>
			</Bundle>
			<Str sr="arg1" ve="3">com.joaomgcd.autoinput</Str>
			<Str sr="arg2" ve="3">com.joaomgcd.autoinput.activity.ActivityConfigPerformGlobalAction</Str>
			<Int sr="arg3" val="20"/>
		</Action>
		<Action sr="act1" ve="7">
			<code>1732635924</code>
			<Bundle sr="arg0">
				<Vals sr="val">
					<ActionId>Daten</ActionId>
					<ActionId-type>java.lang.String</ActionId-type>
					<ActionType>16</ActionType>
					<ActionType-type>java.lang.String</ActionType-type>
					<FieldSelectionType>0</FieldSelectionType>
					<FieldSelectionType-type>java.lang.String</FieldSelectionType-type>
					<IsFirstAction>false</IsFirstAction>
					<IsFirstAction-type>java.lang.Boolean</IsFirstAction-type>
					<IsTaskerAction>false</IsTaskerAction>
					<IsTaskerAction-type>java.lang.Boolean</IsTaskerAction-type>
					<NearbyText>&lt;null&gt;</NearbyText>
					<NearbyText-type>java.lang.String</NearbyText-type>
					<Password>&lt;null&gt;</Password>
					<Password-type>java.lang.String</Password-type>
					<StoredAction>&lt;null&gt;</StoredAction>
					<StoredAction-type>java.lang.String</StoredAction-type>
					<TextToWrite>&lt;null&gt;</TextToWrite>
					<TextToWrite-type>java.lang.String</TextToWrite-type>
					<com.twofortyfouram.locale.intent.extra.BLURB>Type: Text
Value: Daten
Action : Click</com.twofortyfouram.locale.intent.extra.BLURB>
					<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
					<net.dinglisch.android.tasker.RELEVANT_VARIABLES>&lt;StringArray sr=""&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0&gt;%err
Error Code
Only available if you select &amp;lt;b&amp;gt;Continue Task After Error&amp;lt;/b&amp;gt; and the action ends in error&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;%errmsg
Error Message
Only available if you select &amp;lt;b&amp;gt;Continue Task After Error&amp;lt;/b&amp;gt; and the action ends in error&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;&lt;/StringArray&gt;</net.dinglisch.android.tasker.RELEVANT_VARIABLES>
					<net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>[Ljava.lang.String;</net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>
					<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>ActionId FieldSelectionType ActionType plugininstanceid plugintypeid </net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>
					<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>java.lang.String</net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>
					<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
					<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
					<plugininstanceid>906e2fcf-6e52-43cb-901f-b6c2bf9d5837</plugininstanceid>
					<plugininstanceid-type>java.lang.String</plugininstanceid-type>
					<plugintypeid>com.joaomgcd.autoinput.intent.IntentPerformAction</plugintypeid>
					<plugintypeid-type>java.lang.String</plugintypeid-type>
				</Vals>
			</Bundle>
			<Str sr="arg1" ve="3">com.joaomgcd.autoinput</Str>
			<Str sr="arg2" ve="3">com.joaomgcd.autoinput.activity.ActivityConfigPerformAction</Str>
			<Int sr="arg3" val="20"/>
		</Action>
		<Action sr="act10" ve="7">
			<code>35</code>
			<Int sr="arg0" val="0"/>
			<Int sr="arg1" val="10"/>
			<Int sr="arg2" val="0"/>
			<Int sr="arg3" val="0"/>
			<Int sr="arg4" val="0"/>
			<ConditionList sr="if">
				<Condition sr="c0" ve="3">
					<lhs>%WIFII</lhs>
					<op>2</op>
					<rhs>*CONNECTION*</rhs>
				</Condition>
			</ConditionList>
		</Action>
		<Action sr="act11" ve="7">
			<code>135</code>
			<Int sr="arg0" val="1"/>
			<Int sr="arg1" val="18"/>
			<Str sr="arg2" ve="3">success</Str>
			<ConditionList sr="if">
				<Condition sr="c0" ve="3">
					<lhs>%WIFII</lhs>
					<op>2</op>
					<rhs>*luftschleuse-closed*</rhs>
				</Condition>
			</ConditionList>
		</Action>
		<Action sr="act12" ve="7">
			<code>1698386443</code>
			<Bundle sr="arg0">
				<Vals sr="val">
					<com.twofortyfouram.locale.intent.extra.BLURB>"luftschleuse-member"</com.twofortyfouram.locale.intent.extra.BLURB>
					<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
					<jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST>true</jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST>
					<jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST-type>java.lang.Boolean</jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST-type>
					<jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID>"luftschleuse-member"</jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID>
					<jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID-type>java.lang.String</jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID-type>
					<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
					<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
				</Vals>
			</Bundle>
			<Str sr="arg1" ve="3">jp.meridiani.apps.wificonnect</Str>
			<Str sr="arg2" ve="3">jp.meridiani.apps.wificonnect.activity.EditActivity</Str>
			<Int sr="arg3" val="0"/>
		</Action>
		<Action sr="act13" ve="7">
			<code>30</code>
			<Int sr="arg0" val="400"/>
			<Int sr="arg1" val="0"/>
			<Int sr="arg2" val="0"/>
			<Int sr="arg3" val="0"/>
			<Int sr="arg4" val="0"/>
		</Action>
		<Action sr="act14" ve="7">
			<code>35</code>
			<Int sr="arg0" val="0"/>
			<Int sr="arg1" val="10"/>
			<Int sr="arg2" val="0"/>
			<Int sr="arg3" val="0"/>
			<Int sr="arg4" val="0"/>
			<ConditionList sr="if">
				<Condition sr="c0" ve="3">
					<lhs>%WIFII</lhs>
					<op>2</op>
					<rhs>*CONNECTION*</rhs>
				</Condition>
			</ConditionList>
		</Action>
		<Action sr="act15" ve="7">
			<code>135</code>
			<Int sr="arg0" val="1"/>
			<Int sr="arg1" val="18"/>
			<Str sr="arg2" ve="3">success</Str>
			<ConditionList sr="if">
				<Condition sr="c0" ve="3">
					<lhs>%WIFII</lhs>
					<op>2</op>
					<rhs>*luftschleuse-member*</rhs>
				</Condition>
			</ConditionList>
		</Action>
		<Action sr="act16" ve="7">
			<code>135</code>
			<Int sr="arg0" val="1"/>
			<Int sr="arg1" val="1"/>
			<Str sr="arg2" ve="3">fail</Str>
		</Action>
		<Action sr="act17" ve="7">
			<code>300</code>
			<label>success</label>
		</Action>
		<Action sr="act18" ve="7">
			<code>30</code>
			<Int sr="arg0" val="400"/>
			<Int sr="arg1" val="0"/>
			<Int sr="arg2" val="0"/>
			<Int sr="arg3" val="0"/>
			<Int sr="arg4" val="0"/>
		</Action>
		<Action sr="act19" ve="7">
			<code>550</code>
			<Str sr="arg0" ve="3">Wifi</Str>
			<Str sr="arg1" ve="3">%WIFII</Str>
			<Str sr="arg2" ve="3"/>
			<Str sr="arg3" ve="3">Popup</Str>
			<Int sr="arg4" val="5"/>
			<Int sr="arg5" val="1"/>
		</Action>
		<Action sr="act2" ve="7">
			<code>512</code>
			<Int sr="arg0" val="1"/>
		</Action>
		<Action sr="act20" ve="7">
			<code>2057451072</code>
			<Bundle sr="arg0">
				<Vals sr="val">
					<Address>192.168.2.2</Address>
					<Address-type>java.lang.String</Address-type>
					<BUNDLE_EXTRA_INT_VERSION_CODE>1</BUNDLE_EXTRA_INT_VERSION_CODE>
					<BUNDLE_EXTRA_INT_VERSION_CODE-type>java.lang.Integer</BUNDLE_EXTRA_INT_VERSION_CODE-type>
					<Command>true</Command>
					<Command-type>java.lang.String</Command-type>
					<Keypair_File></Keypair_File>
					<Keypair_File-type>java.lang.String</Keypair_File-type>
					<Password></Password>
					<Password-type>java.lang.String</Password-type>
					<Password_Variable>false</Password_Variable>
					<Password_Variable-type>java.lang.Boolean</Password_Variable-type>
					<Port>22</Port>
					<Port-type>java.lang.String</Port-type>
					<Return_Output>false</Return_Output>
					<Return_Output-type>java.lang.Boolean</Return_Output-type>
					<Username>open</Username>
					<Username-type>java.lang.String</Username-type>
					<Variable></Variable>
					<Variable-type>java.lang.String</Variable-type>
					<com.twofortyfouram.locale.intent.extra.BLURB>true</com.twofortyfouram.locale.intent.extra.BLURB>
					<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
					<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>Command Keypair_File Address Port Username Password</net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>
					<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>java.lang.String</net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>
					<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
					<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
				</Vals>
			</Bundle>
			<Str sr="arg1" ve="3">com.laptopfreek0.sshplugin.paid</Str>
			<Str sr="arg2" ve="3">com.laptopfreek0.sshplugin.paid.EditActivity</Str>
			<Int sr="arg3" val="10"/>
		</Action>
		<Action sr="act21" ve="7">
			<code>135</code>
			<Int sr="arg0" val="1"/>
			<Int sr="arg1" val="1"/>
			<Str sr="arg2" ve="3">end</Str>
		</Action>
		<Action sr="act22" ve="7">
			<code>300</code>
			<label>fail</label>
		</Action>
		<Action sr="act23" ve="7">
			<code>550</code>
			<Str sr="arg0" ve="3"/>
			<Str sr="arg1" ve="3">Fehler</Str>
			<Str sr="arg2" ve="3"/>
			<Str sr="arg3" ve="3">Popup</Str>
			<Int sr="arg4" val="5"/>
			<Int sr="arg5" val="1"/>
		</Action>
		<Action sr="act24" ve="7">
			<code>300</code>
			<label>end</label>
		</Action>
		<Action sr="act25" ve="7">
			<code>811079103</code>
			<Bundle sr="arg0">
				<Vals sr="val">
					<GlobalAction>5</GlobalAction>
					<GlobalAction-type>java.lang.String</GlobalAction-type>
					<Password>&lt;null&gt;</Password>
					<Password-type>java.lang.String</Password-type>
					<com.twofortyfouram.locale.intent.extra.BLURB>Action: Quick Settings</com.twofortyfouram.locale.intent.extra.BLURB>
					<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
					<net.dinglisch.android.tasker.RELEVANT_VARIABLES>&lt;StringArray sr=""&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0&gt;%err
Error Code
Only available if you select &amp;lt;b&amp;gt;Continue Task After Error&amp;lt;/b&amp;gt; and the action ends in error&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;%errmsg
Error Message
Only available if you select &amp;lt;b&amp;gt;Continue Task After Error&amp;lt;/b&amp;gt; and the action ends in error&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;&lt;/StringArray&gt;</net.dinglisch.android.tasker.RELEVANT_VARIABLES>
					<net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>[Ljava.lang.String;</net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>
					<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>GlobalAction plugininstanceid plugintypeid </net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>
					<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>java.lang.String</net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>
					<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
					<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
					<plugininstanceid>72a28833-bbf9-475b-88cd-6bb7c00f379e</plugininstanceid>
					<plugininstanceid-type>java.lang.String</plugininstanceid-type>
					<plugintypeid>com.joaomgcd.autoinput.intent.IntentPerformGlobalAction</plugintypeid>
					<plugintypeid-type>java.lang.String</plugintypeid-type>
				</Vals>
			</Bundle>
			<Str sr="arg1" ve="3">com.joaomgcd.autoinput</Str>
			<Str sr="arg2" ve="3">com.joaomgcd.autoinput.activity.ActivityConfigPerformGlobalAction</Str>
			<Int sr="arg3" val="20"/>
		</Action>
		<Action sr="act26" ve="7">
			<code>1732635924</code>
			<Bundle sr="arg0">
				<Vals sr="val">
					<ActionId>Daten</ActionId>
					<ActionId-type>java.lang.String</ActionId-type>
					<ActionType>16</ActionType>
					<ActionType-type>java.lang.String</ActionType-type>
					<FieldSelectionType>0</FieldSelectionType>
					<FieldSelectionType-type>java.lang.String</FieldSelectionType-type>
					<IsFirstAction>false</IsFirstAction>
					<IsFirstAction-type>java.lang.Boolean</IsFirstAction-type>
					<IsTaskerAction>false</IsTaskerAction>
					<IsTaskerAction-type>java.lang.Boolean</IsTaskerAction-type>
					<NearbyText>&lt;null&gt;</NearbyText>
					<NearbyText-type>java.lang.String</NearbyText-type>
					<Password>&lt;null&gt;</Password>
					<Password-type>java.lang.String</Password-type>
					<StoredAction>&lt;null&gt;</StoredAction>
					<StoredAction-type>java.lang.String</StoredAction-type>
					<TextToWrite>&lt;null&gt;</TextToWrite>
					<TextToWrite-type>java.lang.String</TextToWrite-type>
					<com.twofortyfouram.locale.intent.extra.BLURB>Type: Text
Value: Daten
Action : Click</com.twofortyfouram.locale.intent.extra.BLURB>
					<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
					<net.dinglisch.android.tasker.RELEVANT_VARIABLES>&lt;StringArray sr=""&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0&gt;%err
Error Code
Only available if you select &amp;lt;b&amp;gt;Continue Task After Error&amp;lt;/b&amp;gt; and the action ends in error&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;%errmsg
Error Message
Only available if you select &amp;lt;b&amp;gt;Continue Task After Error&amp;lt;/b&amp;gt; and the action ends in error&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;&lt;/StringArray&gt;</net.dinglisch.android.tasker.RELEVANT_VARIABLES>
					<net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>[Ljava.lang.String;</net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>
					<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>ActionId FieldSelectionType ActionType plugininstanceid plugintypeid </net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS>
					<net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>java.lang.String</net.dinglisch.android.tasker.extras.VARIABLE_REPLACE_KEYS-type>
					<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
					<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
					<plugininstanceid>906e2fcf-6e52-43cb-901f-b6c2bf9d5837</plugininstanceid>
					<plugininstanceid-type>java.lang.String</plugininstanceid-type>
					<plugintypeid>com.joaomgcd.autoinput.intent.IntentPerformAction</plugintypeid>
					<plugintypeid-type>java.lang.String</plugintypeid-type>
				</Vals>
			</Bundle>
			<Str sr="arg1" ve="3">com.joaomgcd.autoinput</Str>
			<Str sr="arg2" ve="3">com.joaomgcd.autoinput.activity.ActivityConfigPerformAction</Str>
			<Int sr="arg3" val="20"/>
		</Action>
		<Action sr="act27" ve="7">
			<code>512</code>
			<Int sr="arg0" val="1"/>
		</Action>
		<Action sr="act28" ve="7">
			<code>1698386443</code>
			<Bundle sr="arg0">
				<Vals sr="val">
					<com.twofortyfouram.locale.intent.extra.BLURB>"muccc.legacy-5GHz"</com.twofortyfouram.locale.intent.extra.BLURB>
					<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
					<jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST>true</jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST>
					<jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST-type>java.lang.Boolean</jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST-type>
					<jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID>"muccc.legacy-5GHz"</jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID>
					<jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID-type>java.lang.String</jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID-type>
					<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
					<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
				</Vals>
			</Bundle>
			<Str sr="arg1" ve="3">jp.meridiani.apps.wificonnect</Str>
			<Str sr="arg2" ve="3">jp.meridiani.apps.wificonnect.activity.EditActivity</Str>
			<Int sr="arg3" val="0"/>
		</Action>
		<Action sr="act3" ve="7">
			<code>30</code>
			<Int sr="arg0" val="500"/>
			<Int sr="arg1" val="0"/>
			<Int sr="arg2" val="0"/>
			<Int sr="arg3" val="0"/>
			<Int sr="arg4" val="0"/>
		</Action>
		<Action sr="act4" ve="7">
			<code>1698386443</code>
			<Bundle sr="arg0">
				<Vals sr="val">
					<com.twofortyfouram.locale.intent.extra.BLURB>"luftschleuse-down"</com.twofortyfouram.locale.intent.extra.BLURB>
					<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
					<jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST>true</jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST>
					<jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST-type>java.lang.Boolean</jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST-type>
					<jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID>"luftschleuse-down"</jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID>
					<jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID-type>java.lang.String</jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID-type>
					<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
					<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
				</Vals>
			</Bundle>
			<Str sr="arg1" ve="3">jp.meridiani.apps.wificonnect</Str>
			<Str sr="arg2" ve="3">jp.meridiani.apps.wificonnect.activity.EditActivity</Str>
			<Int sr="arg3" val="0"/>
		</Action>
		<Action sr="act5" ve="7">
			<code>30</code>
			<Int sr="arg0" val="400"/>
			<Int sr="arg1" val="0"/>
			<Int sr="arg2" val="0"/>
			<Int sr="arg3" val="0"/>
			<Int sr="arg4" val="0"/>
		</Action>
		<Action sr="act6" ve="7">
			<code>35</code>
			<Int sr="arg0" val="0"/>
			<Int sr="arg1" val="10"/>
			<Int sr="arg2" val="0"/>
			<Int sr="arg3" val="0"/>
			<Int sr="arg4" val="0"/>
			<ConditionList sr="if">
				<Condition sr="c0" ve="3">
					<lhs>%WIFII</lhs>
					<op>2</op>
					<rhs>*CONNECTION*</rhs>
				</Condition>
			</ConditionList>
		</Action>
		<Action sr="act7" ve="7">
			<code>135</code>
			<Int sr="arg0" val="1"/>
			<Int sr="arg1" val="18"/>
			<Str sr="arg2" ve="3">success</Str>
			<ConditionList sr="if">
				<Condition sr="c0" ve="3">
					<lhs>%WIFII</lhs>
					<op>2</op>
					<rhs>*luftschleuse-down*</rhs>
				</Condition>
			</ConditionList>
		</Action>
		<Action sr="act8" ve="7">
			<code>1698386443</code>
			<Bundle sr="arg0">
				<Vals sr="val">
					<com.twofortyfouram.locale.intent.extra.BLURB>"luftschleuse-closed"</com.twofortyfouram.locale.intent.extra.BLURB>
					<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
					<jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST>true</jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST>
					<jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST-type>java.lang.Boolean</jp.meridiani.apps.wificonnect.extra.BOOLEAN_SHOWTOAST-type>
					<jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID>"luftschleuse-closed"</jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID>
					<jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID-type>java.lang.String</jp.meridiani.apps.wificonnect.extra.STRING_AP_SSID-type>
					<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
					<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
				</Vals>
			</Bundle>
			<Str sr="arg1" ve="3">jp.meridiani.apps.wificonnect</Str>
			<Str sr="arg2" ve="3">jp.meridiani.apps.wificonnect.activity.EditActivity</Str>
			<Int sr="arg3" val="0"/>
		</Action>
		<Action sr="act9" ve="7">
			<code>30</code>
			<Int sr="arg0" val="400"/>
			<Int sr="arg1" val="0"/>
			<Int sr="arg2" val="0"/>
			<Int sr="arg3" val="0"/>
			<Int sr="arg4" val="0"/>
		</Action>
	</Task>
</TaskerData>
  • luftschleuse2.1531340386.txt.gz
  • Last modified: 2021/04/18 12:32
  • (external edit)