Hallo,
ich kann zwar den Adapter nicht umprogrammieren, hab aber die neue Remote Execution API als Blockly gebaut. Wenn ihr also die Remote Funktionen nutzen wollt, könnt ihr das hier gern kopieren. Habe die API bei IPSymcom gefunden und mal quick&dirty in Javascript umgebaut.
Es sind zwei Blocklys. Das erste legt die Datenpunkte an und holt stündlich einen neuen Token, das zweite Blockly stellt die Befehle zur Verfügung.
Hier das erste Blockly "Login"
Ihr müsst hier euer Zugangsdaten user/pass in die Javascriptfunktion "Token abfragen" eingeben.
Die Felder dazu sind gekennzeichnet:
<xml xmlns="https://developers.google.com/blockly/xml">
<block type="procedures_defcustomnoreturn" id="C|Hc:`b-c/c[Tgs1y:IM" x="12" y="-338">
<mutation statements="false"></mutation>
<field name="NAME">Token abfragen</field>
<field name="SCRIPT">dmFyIGh0dHBzID0gcmVxdWlyZSgiaHR0cHMiKTsKdmFyIHJlcXVlc3QgPSByZXF1aXJlKCJyZXF1ZXN0Iik7CnZhciBkZXRhaWxzID0gewogICAgJ3VzZXJuYW1lJzogJ01BSUxBRFJFU1NFIEVJTkdFQkVOJywgLypIaWVyIGRpZSBNYWlsYWRyZXNzZSBlaW5nZWJlbiovCiAgICAncGFzc3dvcmQnOiAnUEFTU1dPUlQgRUlOR0VCRU4nLCAvKkhpZXIgZGFzIFBhc3N3b3J0IGVpbmdlYmVuKi8KICAgICdncmFudF90eXBlJzogJ3Bhc3N3b3JkJywKICAgICdzY29wZSc6J2F1dGhlbnRpY2F0ZV91c2VyIHZlaGljbGVfZGF0YSByZW1vdGVfc2VydmljZXMnCn07CiAKdmFyIGZvcm1Cb2R5ID0gW107CmZvciAodmFyIHByb3BlcnR5IGluIGRldGFpbHMpIHsKICB2YXIgZW5jb2RlZEtleSA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wZXJ0eSk7CiAgdmFyIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZXRhaWxzW3Byb3BlcnR5XSk7CiAgZm9ybUJvZHkucHVzaChlbmNvZGVkS2V5ICsgIj0iICsgZW5jb2RlZFZhbHVlKTsKfQpmb3JtQm9keSA9IGZvcm1Cb2R5LmpvaW4oIiYiKTsKCgogdmFyIG9wdGlvbnMgPSB7CiAgdXJsOiAnaHR0cHM6Ly9iMnZhcGkuYm13Z3JvdXAuY29tL2djZG0vb2F1dGgvdG9rZW4nLAogIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsICdBdXRob3JpemF0aW9uJzogJ0Jhc2ljIFpEYzJObUkxTXpjdFlUWTFOQzAwWTJKa0xXRXpaR010TUdOaE5UWTNNbVEzWmpoa09qRTFaalk1TjJZMkxXRTFaRFV0TkdOaFpDMDVPV1E1TFROaE1UVmlZemRtTXprM013PT0nLCAnQ3JlZGVudGlhbHMnOiAnblF2NkNxdHhKdVhXUDc0eGYzQ0p3VUVQOjF6REh4NnVuNGNEanliTEVOTjNreWZ1bVgya0VZaWdXUGNRcGR2RFJwSUJrN3JPSid9LAogIGJvZHk6IGZvcm1Cb2R5Cn07CiAKZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlLCBib2R5KSB7CnZhciByZXN1bHQgPSBKU09OLnBhcnNlKGJvZHkpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLkJNVy5Ub2tlbiIvKlRva2VuKi8sICgnJyArIHJlc3VsdC5hY2Nlc3NfdG9rZW4pKTsKfQogIApyZXF1ZXN0LnBvc3Qob3B0aW9ucywgY2FsbGJhY2spOw==</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="create" id="!Bqw.`_nnd;$sm~A@{Q3" x="437" y="-338">
<field name="NAME">0_userdata.0.BMW.NeuerToken</field>
<value name="COMMON">
<block type="text" id="!:1H2(OE_?WjY60~:*g0">
<field name="TEXT">{"name": "NeuerToken","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
</block>
</value>
<next>
<block type="create" id="13]PXp{s02GRS^2rU@5p">
<field name="NAME">0_userdata.0.BMW.Token</field>
<value name="COMMON">
<block type="text" id="{i=WwB;}YuxwEcmD6j)/">
<field name="TEXT">{"name": "Token","role": "","type": "string","desc": "Manuell erzeugt","def": "","read": true,"write": true}</field>
</block>
</value>
<next>
<block type="create" id="+F7.+]A.3oWYgBO;o3l@">
<field name="NAME">0_userdata.0.BMW.Klimatisieren</field>
<value name="COMMON">
<block type="text" id="/Ls,.mwrB1gtt4n,OtP?">
<field name="TEXT">{"name": "Klimatisieren","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
</block>
</value>
<next>
<block type="create" id="9+lYiXoKcCC}@ra33swp">
<field name="NAME">0_userdata.0.BMW.Hupen</field>
<value name="COMMON">
<block type="text" id="u:n1k-I|L=F=8?JMe!(l">
<field name="TEXT">{"name": "Hupen","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
</block>
</value>
<next>
<block type="create" id="5x9-eg*nuFpH[i2~aI4g">
<field name="NAME">0_userdata.0.BMW.Aufsperren</field>
<value name="COMMON">
<block type="text" id="vGXV2B#+A==u5HFC!tRT">
<field name="TEXT">{"name": "Aufsperren","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
</block>
</value>
<next>
<block type="create" id="qfuj7fsIN;X0S`.s~:/1">
<field name="NAME">0_userdata.0.BMW.Zusperren</field>
<value name="COMMON">
<block type="text" id="lG?k08n8yap6EBCwv;kF">
<field name="TEXT">{"name": "Zusperren","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
</block>
</value>
<next>
<block type="create" id="g27XDJ5cUzQMp;IDa?0V">
<field name="NAME">0_userdata.0.BMW.Lichthupe</field>
<value name="COMMON">
<block type="text" id="%#XQ;ro0{u(B56z26$C@">
<field name="TEXT">{"name": "Lichthupe","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
<block type="on" id=")QODy$[H-(7lc9HPc%Xx" x="12" y="-263">
<field name="OID">0_userdata.0.BMW.NeuerToken</field>
<field name="CONDITION">any</field>
<field name="ACK_CONDITION">false</field>
<statement name="STATEMENT">
<block type="controls_if" id="qi2OU5y9AjO|pE1=!(W`">
<value name="IF0">
<block type="on_source" id="]6?RDB6_qbNs}FH@FT/5">
<field name="ATTR">state.val</field>
</block>
</value>
<statement name="DO0">
<block type="procedures_callcustomnoreturn" id="DC)Em1Ehbz1LW6fj[K!7">
<mutation name="Token abfragen"></mutation>
</block>
</statement>
</block>
</statement>
<next>
<block type="schedule" id="6.1-pU|?K[LZXvgI}cvN">
<field name="SCHEDULE">*/60 * * * *</field>
<statement name="STATEMENT">
<block type="procedures_callcustomnoreturn" id="S_QWZ%P:XPQ1H8HWO%9)">
<mutation name="Token abfragen"></mutation>
</block>
</statement>
<next>
<block type="procedures_callcustomnoreturn" id="sCCxQw~6kxo3.d^m)Pp-">
<mutation name="Token abfragen"></mutation>
</block>
</next>
</block>
</next>
</block>
</xml>
Und hier das zweite Blockly "Befehle"
Hier müsst ihr eure VIN (Fahrgestellnummer) in ALLE Javascriptfunktionen eintragen.
Bei "Aufsperren" müsst ihr ganz oben zusätzlich die Sicherheitsantwort aus dem BMW Portal angeben.
<xml xmlns="https://developers.google.com/blockly/xml">
<block type="on" id=")QODy$[H-(7lc9HPc%Xx" x="13" y="-287">
<field name="OID">0_userdata.0.BMW.Klimatisieren</field>
<field name="CONDITION">any</field>
<field name="ACK_CONDITION">false</field>
<statement name="STATEMENT">
<block type="controls_if" id="qi2OU5y9AjO|pE1=!(W`">
<value name="IF0">
<block type="on_source" id="]6?RDB6_qbNs}FH@FT/5">
<field name="ATTR">state.val</field>
</block>
</value>
<statement name="DO0">
<block type="procedures_callcustomnoreturn" id="DC)Em1Ehbz1LW6fj[K!7">
<mutation name="Klimatisieren"></mutation>
<next>
<block type="update" id="?@kSoXR52NIAnmTbP@is">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
<field name="OID">0_userdata.0.BMW.Klimatisieren</field>
<field name="WITH_DELAY">TRUE</field>
<field name="DELAY_MS">1000</field>
<field name="UNIT">ms</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="VALUE">
<block type="logic_boolean" id="K/F}wA*$n:5CnQHpYr@$">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</statement>
<next>
<block type="on" id="DO.4#e50zzBReVkXk5yb">
<field name="OID">0_userdata.0.BMW.Zusperren</field>
<field name="CONDITION">any</field>
<field name="ACK_CONDITION">false</field>
<statement name="STATEMENT">
<block type="controls_if" id="OiM7;RsdIpMs*67U$W1}">
<value name="IF0">
<block type="on_source" id="DUggLU3jpKTMWDwchY@Q">
<field name="ATTR">state.val</field>
</block>
</value>
<statement name="DO0">
<block type="procedures_callcustomnoreturn" id="hY^fO{SGL}0AzHm[W~Fl">
<mutation name="Zusperren"></mutation>
<next>
<block type="update" id="9rlPG|IAAhKHcZ|+99|z">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
<field name="OID">0_userdata.0.BMW.Zusperren</field>
<field name="WITH_DELAY">TRUE</field>
<field name="DELAY_MS">1000</field>
<field name="UNIT">ms</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="VALUE">
<block type="logic_boolean" id="0,a9ZN|M|PkAi}n*T19O">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</statement>
<next>
<block type="on" id="Mt2*}WFoiR5--row2T8H">
<field name="OID">0_userdata.0.BMW.Aufsperren</field>
<field name="CONDITION">any</field>
<field name="ACK_CONDITION">false</field>
<statement name="STATEMENT">
<block type="controls_if" id="1tfzyj?EGI~c[$sfM,=H">
<value name="IF0">
<block type="on_source" id="L-qx[QjgE7YK^@QoxL?s">
<field name="ATTR">state.val</field>
</block>
</value>
<statement name="DO0">
<block type="procedures_callcustomnoreturn" id="n,S8U%3H3QzLAxik#m6U">
<mutation name="Aufsperren"></mutation>
<next>
<block type="update" id="!W;+jZdtO4Z$.N{oZ!~u">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
<field name="OID">0_userdata.0.BMW.Aufsperren</field>
<field name="WITH_DELAY">TRUE</field>
<field name="DELAY_MS">1000</field>
<field name="UNIT">ms</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="VALUE">
<block type="logic_boolean" id="i7H=1Q%)]bTWwtb,mZL^">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</statement>
<next>
<block type="on" id="x3sA~Bo,9#W8+0QQ4?Mk">
<field name="OID">0_userdata.0.BMW.Lichthupe</field>
<field name="CONDITION">any</field>
<field name="ACK_CONDITION">false</field>
<statement name="STATEMENT">
<block type="controls_if" id="g^t/])A_OBmH:}D:7hx1">
<value name="IF0">
<block type="on_source" id="Qk9]ZT(6`yuT9IJ1mS#h">
<field name="ATTR">state.val</field>
</block>
</value>
<statement name="DO0">
<block type="procedures_callcustomnoreturn" id="KVXZu3,oTqe$DHeLgS{e">
<mutation name="Lichthupe"></mutation>
<next>
<block type="update" id="8viE(:=_WA,IPGi~+0MV">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
<field name="OID">0_userdata.0.BMW.Lichthupe</field>
<field name="WITH_DELAY">TRUE</field>
<field name="DELAY_MS">1000</field>
<field name="UNIT">ms</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="VALUE">
<block type="logic_boolean" id="3KW3b{O(!n=5:mg(M_Wv">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</statement>
<next>
<block type="on" id=".`HU#5P7{T)o:1xn*a/?">
<field name="OID">0_userdata.0.BMW.Hupen</field>
<field name="CONDITION">any</field>
<field name="ACK_CONDITION">false</field>
<statement name="STATEMENT">
<block type="controls_if" id="Qrr/!E+TuG7Gq66FQA;5">
<value name="IF0">
<block type="on_source" id="mvXJMfS$OdG+L~5/z^rY">
<field name="ATTR">state.val</field>
</block>
</value>
<statement name="DO0">
<block type="procedures_callcustomnoreturn" id="Gi$6[_*-6XPaypdt!S%S">
<mutation name="Hupen"></mutation>
<next>
<block type="update" id="GWaADA}?}4ONL*[A[7Fi">
<mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
<field name="OID">0_userdata.0.BMW.Hupen</field>
<field name="WITH_DELAY">TRUE</field>
<field name="DELAY_MS">1000</field>
<field name="UNIT">ms</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="VALUE">
<block type="logic_boolean" id="f^.-6^1JVE#^ag9aE_/X">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
<block type="procedures_defcustomnoreturn" id="C|Hc:`b-c/c[Tgs1y:IM" x="263" y="-287">
<mutation statements="false"></mutation>
<field name="NAME">Klimatisieren</field>
<field name="SCRIPT">dmFyIGh0dHBzID0gcmVxdWlyZSgiaHR0cHMiKTsKdmFyIHJlcXVlc3QgPSByZXF1aXJlKCJyZXF1ZXN0Iik7CnZhciBkZXRhaWxzID0gewogICAgJ3NlcnZpY2VUeXBlJzogJ0NMSU1BVEVfTk9XJwp9OwogCnZhciBmb3JtQm9keSA9IFtdOwpmb3IgKHZhciBwcm9wZXJ0eSBpbiBkZXRhaWxzKSB7CiAgdmFyIGVuY29kZWRLZXkgPSBlbmNvZGVVUklDb21wb25lbnQocHJvcGVydHkpOwogIHZhciBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGV0YWlsc1twcm9wZXJ0eV0pOwogIGZvcm1Cb2R5LnB1c2goZW5jb2RlZEtleSArICI9IiArIGVuY29kZWRWYWx1ZSk7Cn0KZm9ybUJvZHkgPSBmb3JtQm9keS5qb2luKCImIik7CgoKIHZhciBvcHRpb25zID0gewogIHVybDogJ2h0dHBzOi8vYjJ2YXBpLmJtd2dyb3VwLmNvbS93ZWJhcGkvdjEvdXNlci92ZWhpY2xlcy9WSU4vZXhlY3V0ZVNlcnZpY2UnLCAvKkhpZXIgVklOIG1pdCBldXJlciBWSU4gZXJzZXR6dGVuKi8KICBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfSwKICBhdXRoOiB7CiAgICBiZWFyZXI6IChnZXRTdGF0ZSgiMF91c2VyZGF0YS4wLkJNVy5Ub2tlbiIpLnZhbCl9LAogIGJvZHk6IGZvcm1Cb2R5Cn07CgpmdW5jdGlvbiBjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UsIGJvZHkpIHsKdmFyIHJlc3VsdCA9IEpTT04ucGFyc2UoYm9keSk7Ci8qY29uc29sZS5sb2cocmVzdWx0KSovCn0KCgpyZXF1ZXN0LnBvc3Qob3B0aW9ucywgY2FsbGJhY2spOw==</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="procedures_defcustomnoreturn" id="[nCTA52$4Wk}$Z+;/Ybc" x="263" y="-62">
<mutation statements="false"></mutation>
<field name="NAME">Zusperren</field>
<field name="SCRIPT">dmFyIGh0dHBzID0gcmVxdWlyZSgiaHR0cHMiKTsKdmFyIHJlcXVlc3QgPSByZXF1aXJlKCJyZXF1ZXN0Iik7CnZhciBkZXRhaWxzID0gewogICAgJ3NlcnZpY2VUeXBlJzogJ0RPT1JfTE9DSycKfTsKIAp2YXIgZm9ybUJvZHkgPSBbXTsKZm9yICh2YXIgcHJvcGVydHkgaW4gZGV0YWlscykgewogIHZhciBlbmNvZGVkS2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KHByb3BlcnR5KTsKICB2YXIgZW5jb2RlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KGRldGFpbHNbcHJvcGVydHldKTsKICBmb3JtQm9keS5wdXNoKGVuY29kZWRLZXkgKyAiPSIgKyBlbmNvZGVkVmFsdWUpOwp9CmZvcm1Cb2R5ID0gZm9ybUJvZHkuam9pbigiJiIpOwoKCiB2YXIgb3B0aW9ucyA9IHsKICB1cmw6ICdodHRwczovL2IydmFwaS5ibXdncm91cC5jb20vd2ViYXBpL3YxL3VzZXIvdmVoaWNsZXMvVklOL2V4ZWN1dGVTZXJ2aWNlJywgLypIaWVyIFZJTiBtaXQgZXVyZXIgVklOIGVyc2V0enRlbiovCiAgaGVhZGVyczogeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sCiAgYXV0aDogewogICAgYmVhcmVyOiAoZ2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5CTVcuVG9rZW4iKS52YWwpfSwKICBib2R5OiBmb3JtQm9keQp9OwoKZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlLCBib2R5KSB7CnZhciByZXN1bHQgPSBKU09OLnBhcnNlKGJvZHkpOwovKmNvbnNvbGUubG9nKHJlc3VsdCkqLwp9CgoKcmVxdWVzdC5wb3N0KG9wdGlvbnMsIGNhbGxiYWNrKTs=</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="procedures_defcustomnoreturn" id="J)0OO1_$ZW[Tc_/ko95F" x="263" y="188">
<mutation statements="false"></mutation>
<field name="NAME">Aufsperren</field>
<field name="SCRIPT">dmFyIGh0dHBzID0gcmVxdWlyZSgiaHR0cHMiKTsKdmFyIHJlcXVlc3QgPSByZXF1aXJlKCJyZXF1ZXN0Iik7CnZhciBkZXRhaWxzID0gewogICAgJ3NlcnZpY2VUeXBlJzogJ0RPT1JfVU5MT0NLJywKICAgICdibXdTa0Fuc3dlcic6ICdTaWNoZXJoZWl0c2FudHdvcnQnIC8qSGllciBldXJlIFNpY2hlcmhlaXRzYW50d29ydCBlaW5nZWJlbiovCn07CiAKdmFyIGZvcm1Cb2R5ID0gW107CmZvciAodmFyIHByb3BlcnR5IGluIGRldGFpbHMpIHsKICB2YXIgZW5jb2RlZEtleSA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wZXJ0eSk7CiAgdmFyIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZXRhaWxzW3Byb3BlcnR5XSk7CiAgZm9ybUJvZHkucHVzaChlbmNvZGVkS2V5ICsgIj0iICsgZW5jb2RlZFZhbHVlKTsKfQpmb3JtQm9keSA9IGZvcm1Cb2R5LmpvaW4oIiYiKTsKCgogdmFyIG9wdGlvbnMgPSB7CiAgIHVybDogJ2h0dHBzOi8vYjJ2YXBpLmJtd2dyb3VwLmNvbS93ZWJhcGkvdjEvdXNlci92ZWhpY2xlcy9WSU4vZXhlY3V0ZVNlcnZpY2UnLCAvKkhpZXIgVklOIG1pdCBldXJlciBWSU4gZXJzZXR6dGVuKi8KICBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfSwKICBhdXRoOiB7CiAgICBiZWFyZXI6IChnZXRTdGF0ZSgiMF91c2VyZGF0YS4wLkJNVy5Ub2tlbiIpLnZhbCl9LAogIGJvZHk6IGZvcm1Cb2R5Cn07CgpmdW5jdGlvbiBjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UsIGJvZHkpIHsKdmFyIHJlc3VsdCA9IEpTT04ucGFyc2UoYm9keSk7Ci8qY29uc29sZS5sb2cocmVzdWx0KSovCn0KCgpyZXF1ZXN0LnBvc3Qob3B0aW9ucywgY2FsbGJhY2spOw==</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="procedures_defcustomnoreturn" id=",hTkY9![0|J~J!B_c8t+" x="263" y="413">
<mutation statements="false"></mutation>
<field name="NAME">Lichthupe</field>
<field name="SCRIPT">dmFyIGh0dHBzID0gcmVxdWlyZSgiaHR0cHMiKTsKdmFyIHJlcXVlc3QgPSByZXF1aXJlKCJyZXF1ZXN0Iik7CnZhciBkZXRhaWxzID0gewogICAgJ3NlcnZpY2VUeXBlJzogJ0xJR0hUX0ZMQVNIJwp9OwogCnZhciBmb3JtQm9keSA9IFtdOwpmb3IgKHZhciBwcm9wZXJ0eSBpbiBkZXRhaWxzKSB7CiAgdmFyIGVuY29kZWRLZXkgPSBlbmNvZGVVUklDb21wb25lbnQocHJvcGVydHkpOwogIHZhciBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGV0YWlsc1twcm9wZXJ0eV0pOwogIGZvcm1Cb2R5LnB1c2goZW5jb2RlZEtleSArICI9IiArIGVuY29kZWRWYWx1ZSk7Cn0KZm9ybUJvZHkgPSBmb3JtQm9keS5qb2luKCImIik7CgoKIHZhciBvcHRpb25zID0gewogICB1cmw6ICdodHRwczovL2IydmFwaS5ibXdncm91cC5jb20vd2ViYXBpL3YxL3VzZXIvdmVoaWNsZXMvVklOL2V4ZWN1dGVTZXJ2aWNlJywgLypIaWVyIFZJTiBtaXQgZXVyZXIgVklOIGVyc2V0enRlbiovCiAgaGVhZGVyczogeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sCiAgYXV0aDogewogICAgYmVhcmVyOiAoZ2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5CTVcuVG9rZW4iKS52YWwpfSwKICBib2R5OiBmb3JtQm9keQp9OwoKZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlLCBib2R5KSB7CnZhciByZXN1bHQgPSBKU09OLnBhcnNlKGJvZHkpOwovKmNvbnNvbGUubG9nKHJlc3VsdCkqLwp9CgoKcmVxdWVzdC5wb3N0KG9wdGlvbnMsIGNhbGxiYWNrKTs=</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="procedures_defcustomnoreturn" id=".](occ0C^rIaxJ7Qge8!" x="263" y="663">
<mutation statements="false"></mutation>
<field name="NAME">Hupen</field>
<field name="SCRIPT">dmFyIGh0dHBzID0gcmVxdWlyZSgiaHR0cHMiKTsKdmFyIHJlcXVlc3QgPSByZXF1aXJlKCJyZXF1ZXN0Iik7CnZhciBkZXRhaWxzID0gewogICAgJ3NlcnZpY2VUeXBlJzogJ0hPUk5fQkxPVycKfTsKIAp2YXIgZm9ybUJvZHkgPSBbXTsKZm9yICh2YXIgcHJvcGVydHkgaW4gZGV0YWlscykgewogIHZhciBlbmNvZGVkS2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KHByb3BlcnR5KTsKICB2YXIgZW5jb2RlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KGRldGFpbHNbcHJvcGVydHldKTsKICBmb3JtQm9keS5wdXNoKGVuY29kZWRLZXkgKyAiPSIgKyBlbmNvZGVkVmFsdWUpOwp9CmZvcm1Cb2R5ID0gZm9ybUJvZHkuam9pbigiJiIpOwoKCiB2YXIgb3B0aW9ucyA9IHsKICB1cmw6ICdodHRwczovL2IydmFwaS5ibXdncm91cC5jb20vd2ViYXBpL3YxL3VzZXIvdmVoaWNsZXMvVklOL2V4ZWN1dGVTZXJ2aWNlJywgLypIaWVyIFZJTiBtaXQgZXVyZXIgVklOIGVyc2V0enRlbiovCiAgaGVhZGVyczogeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sCiAgYXV0aDogewogICAgYmVhcmVyOiAoZ2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5CTVcuVG9rZW4iKS52YWwpfSwKICBib2R5OiBmb3JtQm9keQp9OwoKZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlLCBib2R5KSB7CnZhciByZXN1bHQgPSBKU09OLnBhcnNlKGJvZHkpOwovKmNvbnNvbGUubG9nKHJlc3VsdCkqLwp9CgoKcmVxdWVzdC5wb3N0KG9wdGlvbnMsIGNhbGxiYWNrKTs=</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
</xml>