NEWS
Mitsubishi Klimaanlage einbinden
-
Schau doch mal die bestehenden Adapter requests durch unter https://github.com/ioBroker/AdapterRequests/issues
Gesendet vom Handy …
-
-
Hallo zusammen,
noch habe ich keine Klima aber das wird sich bald ändern.
Wäre dann auch sehr interessiert an einem Adapter.
Hier mal ein paar Infos aus einem anderen Forum - vielleicht hilft das jemanden der wirklich Ahnung hat.
Über das Wlan-Modul wird wohl immer mit der MELcloud geredet.
Hier hat sich jemand mühe gemacht und das ganze mal per Script abgefragt.
Anbei einmal Curl und PHP - da gibts doch hier sicher ein paar Profis die daraus was machen können.
CURL
//Parameters $username = 'email@email.com'; $password = 'password123'; $loginurl = 'https://app.melcloud.com/Mitsubishi.Wifi.Client/Login/ClientLogin'; $url = 'https://app.melcloud.com/Mitsubishi.Wifi.Client/User/ListDevices/'; $appversion = "1.7.1.0"; $ch = curl_init(); //Curl options curl_setopt($ch, CURLOPT_URL, $loginurl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, 'Email='.$username.'&password='.$password.'&AppVersion='.$appversion); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //execute the the login $login = curl_exec($ch); $data = json_decode($login); $token = $data->LoginData->ContextKey; //print_r($token); //execute the request (get info) $ch = curl_init(); //Curl options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_BINARYTRANSFER,true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLINFO_HEADER_OUT, true); curl_setopt($ch, CURLOPT_VERBOSE, true); //Add the token in the request $headers = array( 'X-MitsContextKey: ' . $token, ); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //Execute $response = curl_exec($ch); curl_close($ch); //Print the result in output $response_json = json_decode($response); var_dump($response_json); Direkt antworten Antworten Zitieren ZitierenPHP
LoginData->ContextKey; //print_r($token); //execute the request (get info) $ch = curl_init(); //Curl options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_BINARYTRANSFER,true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLINFO_HEADER_OUT, true); curl_setopt($ch, CURLOPT_VERBOSE, true); //Add the token in the request $headers = array( 'X-MitsContextKey: ' . $token, ); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //Execute $response = curl_exec($ch); curl_close($ch); //Print the result in output $response_json = json_decode($response, true); print_r($response_json); //Create variables from recieved output // 1.OG //OperationMode $OperationMode = $response_json[0]['Structure']['Floors'][0]['Devices'][0]['Device']['OperationMode']; setValueInteger (22705 /*[Geräte\Klimaanlage\Klima1OG\Anlagenstatus]*/, "$OperationMode"); //Power status $power = $response_json[0]['Structure']['Floors'][0]['Devices'][0]['Device']['Power']; if (preg_match('/\b1\b/',$power)){ SetValueBoolean(30423 /*[Geräte\Klimaanlage\Klima1OG\Power]*/, true); } else{ SetValueBoolean(30423 /*[Geräte\Klimaanlage\Klima1OG\Power]*/, false); } //Room temperature $romtemperatur = $response_json[0]['Structure']['Floors'][0]['Devices'][0]['Device']['RoomTemperature']; setValueFloat (10149 /*[Geräte\Klimaanlage\Klima1OG\Raumtemperatur]*/, "$romtemperatur"); //Set temperature $settemperatur = $response_json[0]['Structure']['Floors'][0]['Devices'][0]['Device']['SetTemperature']; setValueFloat (30426 /*[Geräte\Klimaanlage\Klima1OG\Settemperatur]*/, "$settemperatur"); //Fan speed $fanspeed = $response_json[0]['Structure']['Floors'][0]['Devices'][0]['Device']['FanSpeed']; setValueInteger (17082 /*[Geräte\Klimaanlage\Klima1OG\FanSpeed]*/, "$fanspeed"); //Automatic fanspeed $autofan = $response_json[0]['Structure']['Floors'][0]['Devices'][0]['Device']['AutomaticFanSpeed']; if (preg_match('/\b1\b/',$autofan)){ SetValueBoolean(10148 /*[Geräte\Klimaanlage\Klima1OG\autofan]*/, true); } else{ SetValueBoolean(10148 /*[Geräte\Klimaanlage\Klima1OG\autofan]*/, false); } //WiFi status $Wifistatus = $response_json[0]['Structure']['Floors'][0]['Devices'][0]['Device']['WifiAdapterStatus']; setValueString (17084 /*[Geräte\Klimaanlage\Klima1OG\WIFIstatus]*/, "$Wifistatus"); // Dachgeschoss //OperationMode $OperationMode = $response_json[0]['Structure']['Floors'][0]['Devices'][1]['Device']['OperationMode']; setValueInteger (37111 /*[Geräte\Klimaanlage\Klima DG\Anlagenstatus]*/, "$OperationMode"); //Power status $power = $response_json[0]['Structure']['Floors'][0]['Devices'][1]['Device']['Power']; if (preg_match('/\b1\b/',$power)){ SetValueBoolean(27387 /*[Geräte\Klimaanlage\Klima DG\Power]*/, true); } else{ SetValueBoolean(27387 /*[Geräte\Klimaanlage\Klima DG\Power]*/, false); } //Room temperature $romtemperatur = $response_json[0]['Structure']['Floors'][0]['Devices'][1]['Device']['RoomTemperature']; setValueFloat (22702 /*[Geräte\Klimaanlage\Klima DG\Raumtemperatur]*/, "$romtemperatur"); //Set temperature $settemperatur = $response_json[0]['Structure']['Floors'][0]['Devices'][1]['Device']['SetTemperature']; setValueFloat (42529 /*[Geräte\Klimaanlage\Klima DG\Settemperatur]*/, "$settemperatur"); //Fan speed $fanspeed = $response_json[0]['Structure']['Floors'][0]['Devices'][1]['Device']['FanSpeed']; setValueInteger (31246 /*[Geräte\Klimaanlage\Klima DG\FanSpeed]*/, "$fanspeed"); //Automatic fanspeed $autofan = $response_json[0]['Structure']['Floors'][0]['Devices'][1]['Device']['AutomaticFanSpeed']; if (preg_match('/\b1\b/',$autofan)){ SetValueBoolean(16361 /*[Geräte\Klimaanlage\Klima DG\autofan]*/, true); } else{ SetValueBoolean(16361 /*[Geräte\Klimaanlage\Klima DG\autofan]*/, false); } //WiFi status $Wifistatus = $response_json[0]['Structure']['Floors'][0]['Devices'][1]['Device']['WifiAdapterStatus']; setValueString (39891 /*[Geräte\Klimaanlage\Klima DG\WIFIstatus]*/, "$Wifistatus"); ?> -
wenn Du das hier meinst dann ja
https://www.npmjs.com/package/homebridge-melcloud
;-)
Hier ist auch noch etwas interesantes - falls das hilft:
-
Gib es zu dem Thema schon etwas neues?
-
Guten Abend zusammen :)
ich muss hier jetzt Mal genauer fragen und zwar hab ich vorhin das Thema Klima Anbindung daikin gelesen.
Jetzt wollte ich Mal fragen ob man das auch für eine Mitsubishi Split Klimaanlage machen kann oder ob es eventuell schon jemand von euch gemacht hat.
Natürlich gibt es auch einen WiFi Adapter bei der Anlage.
Ich hoffe ihr könnt mir dabei helfen :)
Danke im voraus :)
@Michi2404
Hi,
ja ich habe meine Klimaanlage eingebunden.Aber!!!
Erstmal unterscheiden muss man ob die Mitsubishi eine "Elektrik" oder eine "Heavy" ist.
Meine Anlage ist eine Heavy und dazu kann ich gleich weiteres sagen.
Sie ist natürlich über ein WLAN-Modul über die Cloud erreichbar und in meinem WLAN-Netzwerk.Jetzt gibt es keinen Adapter, der die ganze Geschichte mit meinem ioBroker verbindet.
Gelöst habe ich es über ein separates (Java)Skript (irgendwo aus dem Internet gediebt),
sorry wenn ich jetzt den Ursprünglichen Developper vergesse, bitte mir bescheid geben und ich korregiere das dann,
welches in einem (bei mir Linux) Verzeichnis wo auch der ioBroker zugriff hat zur Ausführung gebracht habe.
Dann habe ich mir die IP der Anlage rausgesucht und diese in meinem Skript angepasst.
Jetzt gibt es viele Möglichkeiten zu erweitern und anzupassen.
vorher ist jedoch noch zu sagen, das ich mir die dementsprechenden Datenpunkte angelegt habe, wohin auch immer ihr wollt , müsst ihr das dann natürlich auch tun und das Skript danach anpassen.
Ich habe bewusst hier als Antwort gepostet, da das Skript noch keine Datenpunkte selber erzeugen kann...
Viel Spass, und bei Fragen .... immer Fragen ;)
Hier mein Blockly...
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="on_ext" id=",I/1#d[ckg_#O0.:_MBh" x="13" y="13"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="]i-`+-Y%aeBk~x!AxW40"> <field name="oid">0_userdata.0.Heizung.MH-Daten.trigger1</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="wM|$;P7kq6Xw_b05mmCT"> <mutation elseif="7"></mutation> <value name="IF0"> <block type="logic_compare" id="@`nlPz|[C^$x1i$;I2[!"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="(UQSLz4HK+:z:#e`0y1["> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="M3[:d8}Uw)yjb}gVoNs1"> <field name="NUM">1</field> </block> </value> </block> </value> <statement name="DO0"> <block type="procedures_callcustomnoreturn" id="yd14gs2i*^f6x:I}wC]."> <mutation name="get_power"></mutation> <next> <block type="control" id="@Z`.^jqpLe`b|0ykRU?0"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">0_userdata.0.Heizung.MH-Daten.trigger1</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">2000</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="math_number" id="2JeG;zF7s3hG$~id}F-b"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_compare" id="yiP5yDbe-vd^[L^j?vjR"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="A5XE6?qnn5KxnzNvQKo8"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="nR9jFzCmY8``~Mymt+Y9"> <field name="NUM">2</field> </block> </value> </block> </value> <statement name="DO1"> <block type="procedures_callcustomnoreturn" id="b8_OV(dMiDP{+A(/qK-y"> <mutation name="get_mode"></mutation> <next> <block type="control" id=":OYr-W#mT~L_l)GI1P43"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">0_userdata.0.Heizung.MH-Daten.trigger1</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">2000</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="math_number" id="f_hSB7![x:vMdg=v`Ci|"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> <value name="IF2"> <block type="logic_compare" id="vVGMHm#-$Vy`h?Rvg,Je"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="ksHpJxBSmR?55O#gX-Df"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="AqzPMg3:v7roWu7S%2q("> <field name="NUM">3</field> </block> </value> </block> </value> <statement name="DO2"> <block type="procedures_callcustomnoreturn" id="g;%5noIa^Q3Qjo1+uMx%"> <mutation name="get_speed"></mutation> <next> <block type="control" id="ePh69Q=0ymr1Wu[$5mvh"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">0_userdata.0.Heizung.MH-Daten.trigger1</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">2000</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="math_number" id="ID_Q|(;,O-t6kH53EsEn"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> <value name="IF3"> <block type="logic_compare" id="G_2!f|2_Qee8]ILfAFjP"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="%RLI!]y%#]%YLUD8#^]5"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="}*h1E.Zk9.47kl(nzY*5"> <field name="NUM">4</field> </block> </value> </block> </value> <statement name="DO3"> <block type="procedures_callcustomnoreturn" id="1XfuIZGjB@%co?~VlqcE"> <mutation name="get_outside"></mutation> <next> <block type="control" id=",,J/qeO*E-GsCB55uD6I"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">0_userdata.0.Heizung.MH-Daten.trigger1</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">2000</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="math_number" id="|2Ei{a*b.[1zA1bteu_q"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> <value name="IF4"> <block type="logic_compare" id="Q3%u:D`-2A$W~bdmC}oQ"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="F4Hf!RN^P:Cgp}eOb0rM"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="wIXulxmO::s|G[c!Y_zY"> <field name="NUM">5</field> </block> </value> </block> </value> <statement name="DO4"> <block type="procedures_callcustomnoreturn" id="/mAK{$d1hIX6R-CgxpNg"> <mutation name="get_setpoint"></mutation> <next> <block type="control" id="S`I8w}i=[MY4=hU3]P1y"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">0_userdata.0.Heizung.MH-Daten.trigger1</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">2000</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="math_number" id="U?v[#Kgjx].X%p(uuRh_"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> <value name="IF5"> <block type="logic_compare" id="3Dzxnd!eluv,EmtDa/]z"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="F|9y3lb__(#GHxmJnI9)"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="KUSl1d2%!%)Ja;IzR0R!"> <field name="NUM">6</field> </block> </value> </block> </value> <statement name="DO5"> <block type="procedures_callcustomnoreturn" id="G9PPdk,={:ETQ~nd@Zt2"> <mutation name="get_roomtemp"></mutation> <next> <block type="control" id="p$hn1X`nsA.z4(~9MA2f"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">0_userdata.0.Heizung.MH-Daten.trigger1</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">2000</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="math_number" id="N`Qo^q8!,)eDuZ5/Q#qQ"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> <value name="IF6"> <block type="logic_compare" id="`@`b|`7+6Mi/5eXO)|U["> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="iZxwSRB}$koe77weUzjN"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="N!10qdK@5/PpSQSI8OEm"> <field name="NUM">7</field> </block> </value> </block> </value> <statement name="DO6"> <block type="procedures_callcustomnoreturn" id="JFl+qhMgOe:~~8m_RY#x"> <mutation name="get_hvane"></mutation> <next> <block type="control" id="w7}ck)7t.5,IOKtE]Ud$"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">0_userdata.0.Heizung.MH-Daten.trigger1</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">2000</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="math_number" id="PIb3,3+n+pK*DX*wfRIw"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> <value name="IF7"> <block type="logic_compare" id="eku/|rN3^?Y0X2{J3nT)"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="{9P$*RGT8!Q!Bzj=*%zi"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="(/=-]{Jc(zy8vq#]uUQK"> <field name="NUM">8</field> </block> </value> </block> </value> <statement name="DO7"> <block type="procedures_callcustomnoreturn" id="0-l*WBye-3kUi5jqpmN{"> <mutation name="get_vvane"></mutation> <next> <block type="control" id="F0B_pV*OQ@;f.5Y1;]t:"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">0_userdata.0.Heizung.MH-Daten.trigger1</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">2000</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="math_number" id="blL.go7vkTpg~/:{9j-q"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> </block> </statement> </block> <block type="procedures_defcustomnoreturn" id="6%^mFvfQojEh]Gkt,Y[3" x="13" y="963"> <mutation statements="false"></mutation> <field name="NAME">get_power</field> <field name="SCRIPT">dmFyIHJlc3VsdDsNCnJlc3VsdCA9IDA7DQpleGVjKCdiYXNoIC9vcHQvaW9icm9rZXIvYWlyY29uL2FjLnNoIDE5Mi4xNjguMS4xNzkgZ2V0IHBvd2VyJywgZnVuY3Rpb24gKGVycm9yLCByZXN1bHQsIHN0ZGVycikgew0KICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7DQogIHNldFN0YXRlKCIwX3VzZXJkYXRhLjAuSGVpenVuZy5NSC1EYXRlbi5Qb3dlciIvKlBvd2VyKi8sIHBhcnNlRmxvYXQocmVzdWx0KSwgdHJ1ZSk7DQogIHJlc3VsdCA9IDA7DQp9KTsNCmNvbnNvbGUubG9nKCJleGVjOiAiICsgJ2Jhc2ggL29wdC9pb2Jyb2tlci9haXJjb24vYWMuc2ggMTkyLjE2OC4xLjE3OSBnZXQgcG93ZXInKTs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id=")fjde3zlgv7b:Anw/=cZ" x="13" y="1013"> <mutation statements="false"></mutation> <field name="NAME">get_mode</field> <field name="SCRIPT">dmFyIHJlc3VsdDsNCmV4ZWMoJ2Jhc2ggL29wdC9pb2Jyb2tlci9haXJjb24vYWMuc2ggMTkyLjE2OC4xLjE3OSBnZXQgbW9kZScsIGZ1bmN0aW9uIChlcnJvciwgcmVzdWx0LCBzdGRlcnIpIHsNCiAgICBjb25zb2xlLmxvZyhyZXN1bHQpOw0KICBzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLkhlaXp1bmcuTUgtRGF0ZW4uTW9kZSIvKk1vZGUqLywgcGFyc2VGbG9hdChyZXN1bHQpLCB0cnVlKTsNCiAgcmVzdWx0ID0gMDsNCn0pOw0KY29uc29sZS5sb2coImV4ZWM6ICIgKyAnYmFzaCAvb3B0L2lvYnJva2VyL2FpcmNvbi9hYy5zaCAxOTIuMTY4LjEuMTc5IGdldCBtb2RlJyk7</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id="TQ*aHUZ^$6Iku9$Y{Ve." x="13" y="1063"> <mutation statements="false"></mutation> <field name="NAME">get_speed</field> <field name="SCRIPT">dmFyIHJlc3VsdDsNCmV4ZWMoJ2Jhc2ggL29wdC9pb2Jyb2tlci9haXJjb24vYWMuc2ggMTkyLjE2OC4xLjE3OSBnZXQgc3BlZWQnLCBmdW5jdGlvbiAoZXJyb3IsIHJlc3VsdCwgc3RkZXJyKSB7DQogICAgY29uc29sZS5sb2cocmVzdWx0KTsNCiAgc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5IZWl6dW5nLk1ILURhdGVuLlNwZWVkIi8qU3BlZWQqLywgcGFyc2VGbG9hdChyZXN1bHQpLCB0cnVlKTsNCiAgcmVzdWx0ID0gMDsNCn0pOw0KY29uc29sZS5sb2coImV4ZWM6ICIgKyAnYmFzaCAvb3B0L2lvYnJva2VyL2FpcmNvbi9hYy5zaCAxOTIuMTY4LjEuMTc5IGdldCBzcGVlZCcpOw==</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id="btE-7[nRTo__JsHig{j5" x="13" y="1113"> <mutation statements="false"></mutation> <field name="NAME">get_outside</field> <field name="SCRIPT">dmFyIHJlc3VsdDsNCmV4ZWMoJ2Jhc2ggL29wdC9pb2Jyb2tlci9haXJjb24vYWMuc2ggMTkyLjE2OC4xLjE3OSBnZXQgb3V0c2lkZScsIGZ1bmN0aW9uIChlcnJvciwgcmVzdWx0LCBzdGRlcnIpIHsNCiAgICBjb25zb2xlLmxvZyhyZXN1bHQpOw0KICBzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLkhlaXp1bmcuTUgtRGF0ZW4uQXXfZW50ZW1wZXJhdHVyIi8qQXXfZW50ZW1wZXJhdHVyKi8sIChwYXJzZUZsb2F0KHJlc3VsdCkgLyAxMCksIHRydWUpOw0KICByZXN1bHQgPSAwOw0KfSk7DQpjb25zb2xlLmxvZygiZXhlYzogIiArICdiYXNoIC9vcHQvaW9icm9rZXIvYWlyY29uL2FjLnNoIDE5Mi4xNjguMS4xNzkgZ2V0IG91dHNpZGUnKTs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id="9nSL8+#J;dmi~$i}3d/S" x="13" y="1163"> <mutation statements="false"></mutation> <field name="NAME">get_setpoint</field> <field name="SCRIPT">dmFyIHJlc3VsdDsNCmV4ZWMoJ2Jhc2ggL29wdC9pb2Jyb2tlci9haXJjb24vYWMuc2ggMTkyLjE2OC4xLjE3OSBnZXQgc2V0cG9pbnQnLCBmdW5jdGlvbiAoZXJyb3IsIHJlc3VsdCwgc3RkZXJyKSB7DQogICAgY29uc29sZS5sb2cocmVzdWx0KTsNCiAgc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5IZWl6dW5nLk1ILURhdGVuLlNldHBvaW50Ii8qU2V0cG9pbnQqLywgKHBhcnNlRmxvYXQocmVzdWx0KSAvIDEwKSwgdHJ1ZSk7DQogIHJlc3VsdCA9IDA7DQp9KTsNCmNvbnNvbGUubG9nKCJleGVjOiAiICsgJ2Jhc2ggL29wdC9pb2Jyb2tlci9haXJjb24vYWMuc2ggMTkyLjE2OC4xLjE3OSBnZXQgc2V0cG9pbnQnKTs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id="DB[XdC3(2ftKjn)7,z,," x="13" y="1213"> <mutation statements="false"></mutation> <field name="NAME">get_roomtemp</field> <field name="SCRIPT">dmFyIHJlc3VsdDsNCmV4ZWMoJ2Jhc2ggL29wdC9pb2Jyb2tlci9haXJjb24vYWMuc2ggMTkyLjE2OC4xLjE3OSBnZXQgcmV0dXJuJywgZnVuY3Rpb24gKGVycm9yLCByZXN1bHQsIHN0ZGVycikgew0KICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7DQogIHNldFN0YXRlKCIwX3VzZXJkYXRhLjAuSGVpenVuZy5NSC1EYXRlbi5Sb29tdGVtcCIvKlJvb210ZW1wKi8sIChwYXJzZUZsb2F0KHJlc3VsdCkgLyAxMCksIHRydWUpOw0KICByZXN1bHQgPSAwOw0KfSk7DQpjb25zb2xlLmxvZygiZXhlYzogIiArICdiYXNoIC9vcHQvaW9icm9rZXIvYWlyY29uL2FjLnNoIDE5Mi4xNjguMS4xNzkgZ2V0IHJldHVybicpOw==</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id="X8bGVs?|9dV,QOw:;#Of" x="13" y="1263"> <mutation statements="false"></mutation> <field name="NAME">get_hvane</field> <field name="SCRIPT">dmFyIHJlc3VsdDsNCmV4ZWMoJ2Jhc2ggL29wdC9pb2Jyb2tlci9haXJjb24vYWMuc2ggMTkyLjE2OC4xLjE3OSBnZXQgaHZhbmUnLCBmdW5jdGlvbiAoZXJyb3IsIHJlc3VsdCwgc3RkZXJyKSB7DQogICAgY29uc29sZS5sb2cocmVzdWx0KTsNCiAgc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5IZWl6dW5nLk1ILURhdGVuLkxhbWVsbGVuX0hvcml6b250YWwiLypMYW1lbGxlbl9Ib3Jpem9udGFsKi8sIHBhcnNlRmxvYXQocmVzdWx0KSwgdHJ1ZSk7DQogIHJlc3VsdCA9IDA7DQp9KTsNCmNvbnNvbGUubG9nKCJleGVjOiAiICsgJ2Jhc2ggL29wdC9pb2Jyb2tlci9haXJjb24vYWMuc2ggMTkyLjE2OC4xLjE3OSBnZXQgaHZhbmUnKTs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id="dbp*%q],o6o-v:LB`q,Q" x="13" y="1313"> <mutation statements="false"></mutation> <field name="NAME">get_vvane</field> <field name="SCRIPT">dmFyIHJlc3VsdDsNCmV4ZWMoJ2Jhc2ggL29wdC9pb2Jyb2tlci9haXJjb24vYWMuc2ggMTkyLjE2OC4xLjE3OSBnZXQgdnZhbmUnLCBmdW5jdGlvbiAoZXJyb3IsIHJlc3VsdCwgc3RkZXJyKSB7DQogICAgY29uc29sZS5sb2cocmVzdWx0KTsNCiAgc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5IZWl6dW5nLk1ILURhdGVuLlZlcnRpa2FsX1ZhbmUiLypWZXJ0aWthbF9WYW5lKi8sIHBhcnNlRmxvYXQocmVzdWx0KSwgdHJ1ZSk7DQogIHJlc3VsdCA9IDA7DQp9KTsNCmNvbnNvbGUubG9nKCJleGVjOiAiICsgJ2Jhc2ggL29wdC9pb2Jyb2tlci9haXJjb24vYWMuc2ggMTkyLjE2OC4xLjE3OSBnZXQgdnZhbmUnKTs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> </xml>Hier der Export in Java....
/** * Beschreibe diese Funktion … */ function get_power() { var result; result = 0; exec('bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get power', function (error, result, stderr) { console.log(result); setState("0_userdata.0.Heizung.MH-Daten.Power"/*Power*/, parseFloat(result), true); result = 0; }); console.log("exec: " + 'bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get power'); } /** * Beschreibe diese Funktion … */ function get_mode() { var result; exec('bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get mode', function (error, result, stderr) { console.log(result); setState("0_userdata.0.Heizung.MH-Daten.Mode"/*Mode*/, parseFloat(result), true); result = 0; }); console.log("exec: " + 'bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get mode'); } /** * Beschreibe diese Funktion … */ function get_speed() { var result; exec('bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get speed', function (error, result, stderr) { console.log(result); setState("0_userdata.0.Heizung.MH-Daten.Speed"/*Speed*/, parseFloat(result), true); result = 0; }); console.log("exec: " + 'bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get speed'); } /** * Beschreibe diese Funktion … */ function get_outside() { var result; exec('bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get outside', function (error, result, stderr) { console.log(result); setState("0_userdata.0.Heizung.MH-Daten.Außentemperatur"/*Außentemperatur*/, (parseFloat(result) / 10), true); result = 0; }); console.log("exec: " + 'bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get outside'); } /** * Beschreibe diese Funktion … */ function get_setpoint() { var result; exec('bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get setpoint', function (error, result, stderr) { console.log(result); setState("0_userdata.0.Heizung.MH-Daten.Setpoint"/*Setpoint*/, (parseFloat(result) / 10), true); result = 0; }); console.log("exec: " + 'bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get setpoint'); } /** * Beschreibe diese Funktion … */ function get_roomtemp() { var result; exec('bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get return', function (error, result, stderr) { console.log(result); setState("0_userdata.0.Heizung.MH-Daten.Roomtemp"/*Roomtemp*/, (parseFloat(result) / 10), true); result = 0; }); console.log("exec: " + 'bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get return'); } /** * Beschreibe diese Funktion … */ function get_hvane() { var result; exec('bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get hvane', function (error, result, stderr) { console.log(result); setState("0_userdata.0.Heizung.MH-Daten.Lamellen_Horizontal"/*Lamellen_Horizontal*/, parseFloat(result), true); result = 0; }); console.log("exec: " + 'bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get hvane'); } /** * Beschreibe diese Funktion … */ function get_vvane() { var result; exec('bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get vvane', function (error, result, stderr) { console.log(result); setState("0_userdata.0.Heizung.MH-Daten.Vertikal_Vane"/*Vertikal_Vane*/, parseFloat(result), true); result = 0; }); console.log("exec: " + 'bash /opt/iobroker/aircon/ac.sh 192.168.1.179 get vvane'); } on({id: '0_userdata.0.Heizung.MH-Daten.trigger1', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") == 1) { get_power(); setStateDelayed("0_userdata.0.Heizung.MH-Daten.trigger1"/*trigger1*/, 0, 2000, false); } else if ((obj.state ? obj.state.val : "") == 2) { get_mode(); setStateDelayed("0_userdata.0.Heizung.MH-Daten.trigger1"/*trigger1*/, 0, 2000, false); } else if ((obj.state ? obj.state.val : "") == 3) { get_speed(); setStateDelayed("0_userdata.0.Heizung.MH-Daten.trigger1"/*trigger1*/, 0, 2000, false); } else if ((obj.state ? obj.state.val : "") == 4) { get_outside(); setStateDelayed("0_userdata.0.Heizung.MH-Daten.trigger1"/*trigger1*/, 0, 2000, false); } else if ((obj.state ? obj.state.val : "") == 5) { get_setpoint(); setStateDelayed("0_userdata.0.Heizung.MH-Daten.trigger1"/*trigger1*/, 0, 2000, false); } else if ((obj.state ? obj.state.val : "") == 6) { get_roomtemp(); setStateDelayed("0_userdata.0.Heizung.MH-Daten.trigger1"/*trigger1*/, 0, 2000, false); } else if ((obj.state ? obj.state.val : "") == 7) { get_hvane(); setStateDelayed("0_userdata.0.Heizung.MH-Daten.trigger1"/*trigger1*/, 0, 2000, false); } else if ((obj.state ? obj.state.val : "") == 8) { get_vvane(); setStateDelayed("0_userdata.0.Heizung.MH-Daten.trigger1"/*trigger1*/, 0, 2000, false); } }); //JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4aHRtbCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm9uX2V4dCUyMiUyMGlkJTNEJTIyJTJDSSUyRjElMjNkJTVCY2tnXyUyM08wLiUzQV9NQmglMjIlMjB4JTNEJTIyMTMlMjIlMjB5JTNEJTIyMTMlMjIlM0UlM0NtdXRhdGlvbiUyMGl0ZW1zJTNEJTIyMSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ09ORElUSU9OJTIyJTNFbmUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFDS19DT05ESVRJT04lMjIlM0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMk9JRDAlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIyZmllbGRfb2lkJTIyJTIwaWQlM0QlMjIlNURpLSU2MCUyQi1ZJTI1YWVCa354IUF4VzQwJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyb2lkJTIyJTNFMF91c2VyZGF0YS4wLkhlaXp1bmcuTUgtRGF0ZW4udHJpZ2dlcjElM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMlNUQVRFTUVOVCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX2lmJTIyJTIwaWQlM0QlMjJ3TSU3QyUyNCUzQlA3a3E2WHdfYjA1bW1DVCUyMiUzRSUzQ211dGF0aW9uJTIwZWxzZWlmJTNEJTIyNyUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIySUYwJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIyJTQwJTYwbmxQeiU3QyU1QkMlNUUlMjR4MWklMjQlM0JJMiU1QiElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyb25fc291cmNlJTIyJTIwaWQlM0QlMjIoVVFTTHo0SEslMkIlM0F6JTNBJTIzZSU2MDB5MSU1QiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0VzdGF0ZS52YWwlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMk0zJTVCJTNBZDglN0RVdyl5amIlN0RnVm9OczElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOVU0lMjIlM0UxJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyeWQxNGdzMmkqJTVFZjZ4JTNBSSU3RHdDJTVELiUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMmdldF9wb3dlciUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2wlMjIlMjBpZCUzRCUyMiU0MFolNjAuJTVFanFwTGUlNjBiJTdDMHlrUlUlM0YwJTIyJTNFJTNDbXV0YXRpb24lMjBkZWxheV9pbnB1dCUzRCUyMnRydWUlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRTBfdXNlcmRhdGEuMC5IZWl6dW5nLk1ILURhdGVuLnRyaWdnZXIxJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSVRIX0RFTEFZJTIyJTNFVFJVRSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyREVMQVlfTVMlMjIlM0UyMDAwJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJVTklUJTIyJTNFbXMlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNMRUFSX1JVTk5JTkclMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJtYXRoX251bWJlciUyMiUyMGlkJTNEJTIyMkplRyUzQnpGN3MzaEclMjR+aWQlN0RGLWIlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOVU0lMjIlM0UwJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjJ5aVA1eURiZS12ZCU1RSU1QkwlNUVqJTNGdmpSJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VFUSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm9uX3NvdXJjZSUyMiUyMGlkJTNEJTIyQTVYRTYlM0Zxbm41S3huek52UUtvOCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0VzdGF0ZS52YWwlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMm5SOWpGekNtWTglNjAlNjB+TXltdCUyQlk5JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTlVNJTIyJTNFMiUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8xJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19jYWxsY3VzdG9tbm9yZXR1cm4lMjIlMjBpZCUzRCUyMmI4X09WKGRNaURQJTdCJTJCQSglMkZxSy15JTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIyZ2V0X21vZGUlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sJTIyJTIwaWQlM0QlMjIlM0FPWXItVyUyM21UfkxfbClHSTFQNDMlMjIlM0UlM0NtdXRhdGlvbiUyMGRlbGF5X2lucHV0JTNEJTIydHJ1ZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFMF91c2VyZGF0YS4wLkhlaXp1bmcuTUgtRGF0ZW4udHJpZ2dlcjElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VUUlVFJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWV9NUyUyMiUzRTIwMDAlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VtcyUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ0xFQVJfUlVOTklORyUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjJmX2hTQjchJTVCeCUzQXZNZGclM0R2JTYwQ2klN0MlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOVU0lMjIlM0UwJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjJ2VkdNSG0lMjMtJTI0VnklNjBoJTNGUnZnJTJDSmUlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyb25fc291cmNlJTIyJTIwaWQlM0QlMjJrc0hwSnhCU21SJTNGNTVPJTIzZ1gtRGYlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFc3RhdGUudmFsJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjJBcXpQTWczJTNBdjdyb1d1N1MlMjUycSglMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOVU0lMjIlM0UzJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETzIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyZyUzQiUyNTVub0lhJTVFUTNRam8xJTJCdU14JTI1JTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIyZ2V0X3NwZWVkJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbCUyMiUyMGlkJTNEJTIyZVBoNjlRJTNEMHltcjFXdSU1QiUyNDVtdmglMjIlM0UlM0NtdXRhdGlvbiUyMGRlbGF5X2lucHV0JTNEJTIydHJ1ZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFMF91c2VyZGF0YS4wLkhlaXp1bmcuTUgtRGF0ZW4udHJpZ2dlcjElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VUUlVFJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWV9NUyUyMiUzRTIwMDAlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VtcyUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ0xFQVJfUlVOTklORyUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjJJRF9RJTdDKCUzQiUyQ08tdDZrSDUzRXNFbiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTAlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMyUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMkdfMiFmJTdDMl9RZWU4JTVESUxmQUZqUCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9QJTIyJTNFRVElM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJvbl9zb3VyY2UlMjIlMjBpZCUzRCUyMiUyNVJMSSElNUR5JTI1JTIzJTVEJTI1WUxVRDglMjMlNUUlNUQ1JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXN0YXRlLnZhbCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJtYXRoX251bWJlciUyMiUyMGlkJTNEJTIyJTdEKmgxRS5aazkuNDdrbChuelkqNSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMyUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjIxWGZ1SVpHakIlNDAlMjVjbyUzRn5WbHFjRSUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMmdldF9vdXRzaWRlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbCUyMiUyMGlkJTNEJTIyJTJDJTJDSiUyRnFlTypFLUdzQ0I1NXVENkklMjIlM0UlM0NtdXRhdGlvbiUyMGRlbGF5X2lucHV0JTNEJTIydHJ1ZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFMF91c2VyZGF0YS4wLkhlaXp1bmcuTUgtRGF0ZW4udHJpZ2dlcjElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VUUlVFJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWV9NUyUyMiUzRTIwMDAlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VtcyUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ0xFQVJfUlVOTklORyUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjIlN0MyRWklN0JhKmIuJTVCMXpBMWJ0ZXVfcSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTAlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGNCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMlEzJTI1dSUzQUQlNjAtMkElMjRXfmJkbUMlN0RvUSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9QJTIyJTNFRVElM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJvbl9zb3VyY2UlMjIlMjBpZCUzRCUyMkY0SGYhUk4lNUVQJTNBQ2dwJTdEZU9iMHJNJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXN0YXRlLnZhbCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJtYXRoX251bWJlciUyMiUyMGlkJTNEJTIyd0lYdWx4bU8lM0ElM0FzJTdDRyU1QmMhWV96WSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPNCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjIlMkZtQUslN0IlMjRkMWhJWDZSLUNneHBOZyUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMmdldF9zZXRwb2ludCUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2wlMjIlMjBpZCUzRCUyMlMlNjBJOHclN0RpJTNEJTVCTVk0JTNEaFUzJTVEUDF5JTIyJTNFJTNDbXV0YXRpb24lMjBkZWxheV9pbnB1dCUzRCUyMnRydWUlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRTBfdXNlcmRhdGEuMC5IZWl6dW5nLk1ILURhdGVuLnRyaWdnZXIxJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSVRIX0RFTEFZJTIyJTNFVFJVRSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyREVMQVlfTVMlMjIlM0UyMDAwJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJVTklUJTIyJTNFbXMlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNMRUFSX1JVTk5JTkclMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJtYXRoX251bWJlciUyMiUyMGlkJTNEJTIyVSUzRnYlNUIlMjNLZ2p4JTVELlglMjVwKHV1UmhfJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTlVNJTIyJTNFMCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIySUY1JTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIyM0R6eG5kIWVsdXYlMkNFbXREYSUyRiU1RHolMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyb25fc291cmNlJTIyJTIwaWQlM0QlMjJGJTdDOXkzbGJfXyglMjNHSHhtSm5JOSklMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFc3RhdGUudmFsJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjJLVVNsMWQyJTI1ISUyNSlKYSUzQkl6UjBSISUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTYlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPNSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjJHOVBQZGslMkMlM0QlN0IlM0FFVFF+bmQlNDBadDIlMjIlM0UlM0NtdXRhdGlvbiUyMG5hbWUlM0QlMjJnZXRfcm9vbXRlbXAlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sJTIyJTIwaWQlM0QlMjJwJTI0aG4xWCU2MG5zQS56NCh+OU1BMmYlMjIlM0UlM0NtdXRhdGlvbiUyMGRlbGF5X2lucHV0JTNEJTIydHJ1ZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFMF91c2VyZGF0YS4wLkhlaXp1bmcuTUgtRGF0ZW4udHJpZ2dlcjElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VUUlVFJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWV9NUyUyMiUzRTIwMDAlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VtcyUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ0xFQVJfUlVOTklORyUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjJOJTYwUW8lNUVxOCElMkMpZUR1WjUlMkZRJTIzcVElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOVU0lMjIlM0UwJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjYlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjIlNjAlNDAlNjBiJTdDJTYwNyUyQjZNaSUyRjVlWE8pJTdDVSU1QiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9QJTIyJTNFRVElM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJvbl9zb3VyY2UlMjIlMjBpZCUzRCUyMmlaeHdTUkIlN0QlMjRrb2U3N3dlVXpqTiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFUVFIlMjIlM0VzdGF0ZS52YWwlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMk4hMTBxZEslNDA1JTJGUHBTUVNJOE9FbSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTclM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPNiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjJKRmwlMkJxaE1nT2UlM0F+fjhtX1JZJTIzeCUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMmdldF9odmFuZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2wlMjIlMjBpZCUzRCUyMnc3JTdEY2spN3QuNSUyQ0lPS3RFJTVEVWQlMjQlMjIlM0UlM0NtdXRhdGlvbiUyMGRlbGF5X2lucHV0JTNEJTIydHJ1ZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFMF91c2VyZGF0YS4wLkhlaXp1bmcuTUgtRGF0ZW4udHJpZ2dlcjElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VUUlVFJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWV9NUyUyMiUzRTIwMDAlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VtcyUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ0xFQVJfUlVOTklORyUyMiUzRUZBTFNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjJQSWIzJTJDMyUyQm4lMkJwSypEWCp3ZlJJdyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTAlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGNyUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMmVrdSUyRiU3Q3JOMyU1RSUzRlkwWDIlN0JKM25UKSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9QJTIyJTNFRVElM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJvbl9zb3VyY2UlMjIlMjBpZCUzRCUyMiU3QjlQJTI0KlJHVDghUSFCemolM0QqJTI1emklMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFc3RhdGUudmFsJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjIoJTJGJTNELSU1RCU3QkpjKHp5OHZxJTIzJTVEdVVRSyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTglM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPNyUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjIwLWwqV0J5ZS0za1VpNWpxcG1OJTdCJTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIyZ2V0X3Z2YW5lJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbCUyMiUyMGlkJTNEJTIyRjBCX3BWKk9RJTQwJTNCZi41WTElM0IlNUR0JTNBJTIyJTNFJTNDbXV0YXRpb24lMjBkZWxheV9pbnB1dCUzRCUyMnRydWUlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9JRCUyMiUzRTBfdXNlcmRhdGEuMC5IZWl6dW5nLk1ILURhdGVuLnRyaWdnZXIxJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSVRIX0RFTEFZJTIyJTNFVFJVRSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyREVMQVlfTVMlMjIlM0UyMDAwJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJVTklUJTIyJTNFbXMlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNMRUFSX1JVTk5JTkclMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJtYXRoX251bWJlciUyMiUyMGlkJTNEJTIyYmxMLmdvN3ZrVHBnfiUyRiUzQSU3QjlqLXElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOVU0lMjIlM0UwJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyNiUyNSU1RW1GdmZRb2pFaCU1REdrdCUyQ1klNUIzJTIyJTIweCUzRCUyMjEzJTIyJTIweSUzRCUyMjk2MyUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFZ2V0X3Bvd2VyJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTQ1JJUFQlMjIlM0VkbUZ5SUhKbGMzVnNkRHNOQ25KbGMzVnNkQ0E5SURBN0RRcGxlR1ZqS0NkaVlYTm9JQzl2Y0hRdmFXOWljbTlyWlhJdllXbHlZMjl1TDJGakxuTm9JREU1TWk0eE5qZ3VNUzR4TnprZ1oyVjBJSEJ2ZDJWeUp5d2dablZ1WTNScGIyNGdLR1Z5Y205eUxDQnlaWE4xYkhRc0lITjBaR1Z5Y2lrZ2V3MEtJQ0FnSUdOdmJuTnZiR1V1Ykc5bktISmxjM1ZzZENrN0RRb2dJSE5sZEZOMFlYUmxLQ0l3WDNWelpYSmtZWFJoTGpBdVNHVnBlblZ1Wnk1TlNDMUVZWFJsYmk1UWIzZGxjaUl2S2xCdmQyVnlLaThzSUhCaGNuTmxSbXh2WVhRb2NtVnpkV3gwS1N3Z2RISjFaU2s3RFFvZ0lISmxjM1ZzZENBOUlEQTdEUXA5S1RzTkNtTnZibk52YkdVdWJHOW5LQ0psZUdWak9pQWlJQ3NnSjJKaGMyZ2dMMjl3ZEM5cGIySnliMnRsY2k5aGFYSmpiMjR2WVdNdWMyZ2dNVGt5TGpFMk9DNHhMakUzT1NCblpYUWdjRzkzWlhJbktUcyUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyKWZqZGUzemxndjdiJTNBQW53JTJGJTNEY1olMjIlMjB4JTNEJTIyMTMlMjIlMjB5JTNEJTIyMTAxMyUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFZ2V0X21vZGUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRWRtRnlJSEpsYzNWc2REc05DbVY0WldNb0oySmhjMmdnTDI5d2RDOXBiMkp5YjJ0bGNpOWhhWEpqYjI0dllXTXVjMmdnTVRreUxqRTJPQzR4TGpFM09TQm5aWFFnYlc5a1pTY3NJR1oxYm1OMGFXOXVJQ2hsY25KdmNpd2djbVZ6ZFd4MExDQnpkR1JsY25JcElIc05DaUFnSUNCamIyNXpiMnhsTG14dlp5aHlaWE4xYkhRcE93MEtJQ0J6WlhSVGRHRjBaU2dpTUY5MWMyVnlaR0YwWVM0d0xraGxhWHAxYm1jdVRVZ3RSR0YwWlc0dVRXOWtaU0l2S2sxdlpHVXFMeXdnY0dGeWMyVkdiRzloZENoeVpYTjFiSFFwTENCMGNuVmxLVHNOQ2lBZ2NtVnpkV3gwSUQwZ01Ec05DbjBwT3cwS1kyOXVjMjlzWlM1c2IyY29JbVY0WldNNklDSWdLeUFuWW1GemFDQXZiM0IwTDJsdlluSnZhMlZ5TDJGcGNtTnZiaTloWXk1emFDQXhPVEl1TVRZNExqRXVNVGM1SUdkbGRDQnRiMlJsSnlrNyUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyVFEqYUhVWiU1RSUyNDZJa3U5JTI0WSU3QlZlLiUyMiUyMHglM0QlMjIxMyUyMiUyMHklM0QlMjIxMDYzJTIyJTNFJTNDbXV0YXRpb24lMjBzdGF0ZW1lbnRzJTNEJTIyZmFsc2UlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5BTUUlMjIlM0VnZXRfc3BlZWQlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRWRtRnlJSEpsYzNWc2REc05DbVY0WldNb0oySmhjMmdnTDI5d2RDOXBiMkp5YjJ0bGNpOWhhWEpqYjI0dllXTXVjMmdnTVRreUxqRTJPQzR4TGpFM09TQm5aWFFnYzNCbFpXUW5MQ0JtZFc1amRHbHZiaUFvWlhKeWIzSXNJSEpsYzNWc2RDd2djM1JrWlhKeUtTQjdEUW9nSUNBZ1kyOXVjMjlzWlM1c2IyY29jbVZ6ZFd4MEtUc05DaUFnYzJWMFUzUmhkR1VvSWpCZmRYTmxjbVJoZEdFdU1DNUlaV2w2ZFc1bkxrMUlMVVJoZEdWdUxsTndaV1ZrSWk4cVUzQmxaV1FxTHl3Z2NHRnljMlZHYkc5aGRDaHlaWE4xYkhRcExDQjBjblZsS1RzTkNpQWdjbVZ6ZFd4MElEMGdNRHNOQ24wcE93MEtZMjl1YzI5c1pTNXNiMmNvSW1WNFpXTTZJQ0lnS3lBblltRnphQ0F2YjNCMEwybHZZbkp2YTJWeUwyRnBjbU52Ymk5aFl5NXphQ0F4T1RJdU1UWTRMakV1TVRjNUlHZGxkQ0J6Y0dWbFpDY3BPdyUzRCUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyYnRFLTclNUJuUlRvX19Kc0hpZyU3Qmo1JTIyJTIweCUzRCUyMjEzJTIyJTIweSUzRCUyMjExMTMlMjIlM0UlM0NtdXRhdGlvbiUyMHN0YXRlbWVudHMlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRWdldF9vdXRzaWRlJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTQ1JJUFQlMjIlM0VkbUZ5SUhKbGMzVnNkRHNOQ21WNFpXTW9KMkpoYzJnZ0wyOXdkQzlwYjJKeWIydGxjaTloYVhKamIyNHZZV011YzJnZ01Ua3lMakUyT0M0eExqRTNPU0JuWlhRZ2IzVjBjMmxrWlNjc0lHWjFibU4wYVc5dUlDaGxjbkp2Y2l3Z2NtVnpkV3gwTENCemRHUmxjbklwSUhzTkNpQWdJQ0JqYjI1emIyeGxMbXh2WnloeVpYTjFiSFFwT3cwS0lDQnpaWFJUZEdGMFpTZ2lNRjkxYzJWeVpHRjBZUzR3TGtobGFYcDFibWN1VFVndFJHRjBaVzR1UVhYZlpXNTBaVzF3WlhKaGRIVnlJaThxUVhYZlpXNTBaVzF3WlhKaGRIVnlLaThzSUNod1lYSnpaVVpzYjJGMEtISmxjM1ZzZENrZ0x5QXhNQ2tzSUhSeWRXVXBPdzBLSUNCeVpYTjFiSFFnUFNBd093MEtmU2s3RFFwamIyNXpiMnhsTG14dlp5Z2laWGhsWXpvZ0lpQXJJQ2RpWVhOb0lDOXZjSFF2YVc5aWNtOXJaWEl2WVdseVkyOXVMMkZqTG5Ob0lERTVNaTR4TmpndU1TNHhOemtnWjJWMElHOTFkSE5wWkdVbktUcyUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyOW5TTDglMkIlMjNKJTNCZG1pfiUyNGklN0QzZCUyRlMlMjIlMjB4JTNEJTIyMTMlMjIlMjB5JTNEJTIyMTE2MyUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFZ2V0X3NldHBvaW50JTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTQ1JJUFQlMjIlM0VkbUZ5SUhKbGMzVnNkRHNOQ21WNFpXTW9KMkpoYzJnZ0wyOXdkQzlwYjJKeWIydGxjaTloYVhKamIyNHZZV011YzJnZ01Ua3lMakUyT0M0eExqRTNPU0JuWlhRZ2MyVjBjRzlwYm5RbkxDQm1kVzVqZEdsdmJpQW9aWEp5YjNJc0lISmxjM1ZzZEN3Z2MzUmtaWEp5S1NCN0RRb2dJQ0FnWTI5dWMyOXNaUzVzYjJjb2NtVnpkV3gwS1RzTkNpQWdjMlYwVTNSaGRHVW9JakJmZFhObGNtUmhkR0V1TUM1SVpXbDZkVzVuTGsxSUxVUmhkR1Z1TGxObGRIQnZhVzUwSWk4cVUyVjBjRzlwYm5RcUx5d2dLSEJoY25ObFJteHZZWFFvY21WemRXeDBLU0F2SURFd0tTd2dkSEoxWlNrN0RRb2dJSEpsYzNWc2RDQTlJREE3RFFwOUtUc05DbU52Ym5OdmJHVXViRzluS0NKbGVHVmpPaUFpSUNzZ0oySmhjMmdnTDI5d2RDOXBiMkp5YjJ0bGNpOWhhWEpqYjI0dllXTXVjMmdnTVRreUxqRTJPQzR4TGpFM09TQm5aWFFnYzJWMGNHOXBiblFuS1RzJTNEJTNDJTJGZmllbGQlM0UlM0Njb21tZW50JTIwcGlubmVkJTNEJTIyZmFsc2UlMjIlMjBoJTNEJTIyODAlMjIlMjB3JTNEJTIyMTYwJTIyJTNFQmVzY2hyZWliZSUyMGRpZXNlJTIwRnVua3Rpb24lMjAlRTIlODAlQTYlM0MlMkZjb21tZW50JTNFJTNDJTJGYmxvY2slM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2RlZmN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjJEQiU1QlhkQzMoMmZ0S2puKTclMkN6JTJDJTJDJTIyJTIweCUzRCUyMjEzJTIyJTIweSUzRCUyMjEyMTMlMjIlM0UlM0NtdXRhdGlvbiUyMHN0YXRlbWVudHMlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRWdldF9yb29tdGVtcCUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU0NSSVBUJTIyJTNFZG1GeUlISmxjM1ZzZERzTkNtVjRaV01vSjJKaGMyZ2dMMjl3ZEM5cGIySnliMnRsY2k5aGFYSmpiMjR2WVdNdWMyZ2dNVGt5TGpFMk9DNHhMakUzT1NCblpYUWdjbVYwZFhKdUp5d2dablZ1WTNScGIyNGdLR1Z5Y205eUxDQnlaWE4xYkhRc0lITjBaR1Z5Y2lrZ2V3MEtJQ0FnSUdOdmJuTnZiR1V1Ykc5bktISmxjM1ZzZENrN0RRb2dJSE5sZEZOMFlYUmxLQ0l3WDNWelpYSmtZWFJoTGpBdVNHVnBlblZ1Wnk1TlNDMUVZWFJsYmk1U2IyOXRkR1Z0Y0NJdktsSnZiMjEwWlcxd0tpOHNJQ2h3WVhKelpVWnNiMkYwS0hKbGMzVnNkQ2tnTHlBeE1Da3NJSFJ5ZFdVcE93MEtJQ0J5WlhOMWJIUWdQU0F3T3cwS2ZTazdEUXBqYjI1emIyeGxMbXh2WnlnaVpYaGxZem9nSWlBcklDZGlZWE5vSUM5dmNIUXZhVzlpY205clpYSXZZV2x5WTI5dUwyRmpMbk5vSURFNU1pNHhOamd1TVM0eE56a2daMlYwSUhKbGRIVnliaWNwT3clM0QlM0QlM0MlMkZmaWVsZCUzRSUzQ2NvbW1lbnQlMjBwaW5uZWQlM0QlMjJmYWxzZSUyMiUyMGglM0QlMjI4MCUyMiUyMHclM0QlMjIxNjAlMjIlM0VCZXNjaHJlaWJlJTIwZGllc2UlMjBGdW5rdGlvbiUyMCVFMiU4MCVBNiUzQyUyRmNvbW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfZGVmY3VzdG9tbm9yZXR1cm4lMjIlMjBpZCUzRCUyMlg4YkdWcyUzRiU3QzlkViUyQ1FPdyUzQSUzQiUyM09mJTIyJTIweCUzRCUyMjEzJTIyJTIweSUzRCUyMjEyNjMlMjIlM0UlM0NtdXRhdGlvbiUyMHN0YXRlbWVudHMlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRWdldF9odmFuZSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU0NSSVBUJTIyJTNFZG1GeUlISmxjM1ZzZERzTkNtVjRaV01vSjJKaGMyZ2dMMjl3ZEM5cGIySnliMnRsY2k5aGFYSmpiMjR2WVdNdWMyZ2dNVGt5TGpFMk9DNHhMakUzT1NCblpYUWdhSFpoYm1VbkxDQm1kVzVqZEdsdmJpQW9aWEp5YjNJc0lISmxjM1ZzZEN3Z2MzUmtaWEp5S1NCN0RRb2dJQ0FnWTI5dWMyOXNaUzVzYjJjb2NtVnpkV3gwS1RzTkNpQWdjMlYwVTNSaGRHVW9JakJmZFhObGNtUmhkR0V1TUM1SVpXbDZkVzVuTGsxSUxVUmhkR1Z1TGt4aGJXVnNiR1Z1WDBodmNtbDZiMjUwWVd3aUx5cE1ZVzFsYkd4bGJsOUliM0pwZW05dWRHRnNLaThzSUhCaGNuTmxSbXh2WVhRb2NtVnpkV3gwS1N3Z2RISjFaU2s3RFFvZ0lISmxjM1ZzZENBOUlEQTdEUXA5S1RzTkNtTnZibk52YkdVdWJHOW5LQ0psZUdWak9pQWlJQ3NnSjJKaGMyZ2dMMjl3ZEM5cGIySnliMnRsY2k5aGFYSmpiMjR2WVdNdWMyZ2dNVGt5TGpFMk9DNHhMakUzT1NCblpYUWdhSFpoYm1VbktUcyUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyZGJwKiUyNXElNUQlMkNvNm8tdiUzQUxCJTYwcSUyQ1ElMjIlMjB4JTNEJTIyMTMlMjIlMjB5JTNEJTIyMTMxMyUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFZ2V0X3Z2YW5lJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTQ1JJUFQlMjIlM0VkbUZ5SUhKbGMzVnNkRHNOQ21WNFpXTW9KMkpoYzJnZ0wyOXdkQzlwYjJKeWIydGxjaTloYVhKamIyNHZZV011YzJnZ01Ua3lMakUyT0M0eExqRTNPU0JuWlhRZ2RuWmhibVVuTENCbWRXNWpkR2x2YmlBb1pYSnliM0lzSUhKbGMzVnNkQ3dnYzNSa1pYSnlLU0I3RFFvZ0lDQWdZMjl1YzI5c1pTNXNiMmNvY21WemRXeDBLVHNOQ2lBZ2MyVjBVM1JoZEdVb0lqQmZkWE5sY21SaGRHRXVNQzVJWldsNmRXNW5MazFJTFVSaGRHVnVMbFpsY25ScGEyRnNYMVpoYm1VaUx5cFdaWEowYVd0aGJGOVdZVzVsS2k4c0lIQmhjbk5sUm14dllYUW9jbVZ6ZFd4MEtTd2dkSEoxWlNrN0RRb2dJSEpsYzNWc2RDQTlJREE3RFFwOUtUc05DbU52Ym5OdmJHVXViRzluS0NKbGVHVmpPaUFpSUNzZ0oySmhjMmdnTDI5d2RDOXBiMkp5YjJ0bGNpOWhhWEpqYjI0dllXTXVjMmdnTVRreUxqRTJPQzR4TGpFM09TQm5aWFFnZG5aaGJtVW5LVHMlM0QlM0MlMkZmaWVsZCUzRSUzQ2NvbW1lbnQlMjBwaW5uZWQlM0QlMjJmYWxzZSUyMiUyMGglM0QlMjI4MCUyMiUyMHclM0QlMjIxNjAlMjIlM0VCZXNjaHJlaWJlJTIwZGllc2UlMjBGdW5rdGlvbiUyMCVFMiU4MCVBNiUzQyUyRmNvbW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnhtbCUzRQ==Und hier das Skript was vorher zun laufen gebracht werden muss...
#!/usr/bin/env bash #Airconwithme script (airconwithme.com) #Written by KingOfDois. BSD 3-clause license. USAGE="usage: ${0} ip set|get option [value]" #pseudo: login credentials. #security note: wget leaks user/password in process list if [ -z "${AIRCO_PASSWORD}" ]; then AIRCO_PASSWORD=operator fi if [ -z "${AIRCO_USER}" ]; then AIRCO_USER=operator fi #pseudo: 1st argument is IP if [ -z "${1}" ]; then echo ${USAGE} exit 1 else AIRCO_IP="${1}" fi #pseudo: 2nd argument is set|get if [ "${2}" != "set" ] && [ "${2}" != "get" ]; then echo ${USAGE} exit 1 fi DIRECTION=${2} #pseudo: more variables ACTION=${3} DO=${4} VALUE=0 EXIT=0 #------------------------------------- #pseudo: functions function stderr () { cat - 1>&2 } #------------------------------------- #pseudo: action table ACTIONS=(power mode speed vvane hvane setpoint return alarm outside) UIDS=(1 2 4 5 6 9 10 14 37) #pseudo: select uid from action FOUND=0 for i in "${!ACTIONS[@]}" do if [ "${ACTIONS[${i}]}" == "${ACTION}" ]; then FOUND=1 WORK_UID=${UIDS[${i}]} fi done if [ ${FOUND} -eq 0 ]; then echo "available actions: ${ACTIONS[@]}" exit 1 fi #------------------------------------- #pseudo: work the $ACTION / $VALUE with $uid available if [[ "${DIRECTION}" == "set" ]]; then if [[ "${ACTION}" == "power" ]]; then OPTIONS=(on off); VALUES=(1 0); fi if [[ "${ACTION}" == "mode" ]]; then OPTIONS=(auto heat dry fan cool); VALUES=(0 1 2 3 4); fi if [[ "${ACTION}" == "speed" ]]; then OPTIONS=(1 2 3 4); VALUES=(1 2 3 4); fi if [[ "${ACTION}" == "vvane" ]]; then OPTIONS=(1 2 3 4 swing); VALUES=(1 2 3 4 10); fi if [[ "${ACTION}" == "hvane" ]]; then OPTIONS=(1 2 3 4 swing); VALUES=(1 2 3 4 10); fi if [[ "${ACTION}" == "setpoint" ]]; then if [ "${DO}" == "" ]; then echo "value: 180 till 300 (18.0 till 30.0 degree C)" exit 1 else VALUE=$DO; fi fi fi #pseudo: now select the proper value based on the action if [ "${OPTIONS}" != "" ]; then FOUND=0 for i in "${!OPTIONS[@]}" do if [ "${OPTIONS[${i}]}" == "${DO}" ]; then FOUND=1 VALUE=${VALUES[${i}]} fi done if [ ${FOUND} -eq 0 ]; then echo "available [${ACTION}] options: ${OPTIONS[@]}" exit 1 fi fi #------------------------------------- COOKIE=$(mktemp) #pseudo: login LOGIN_RESPONSE=$(mktemp) LOGIN_ERROR=$(mktemp) wget --save-cookies=${COOKIE} \ --keep-session-cookies \ --post-data="{\"command\":\"login\",\"data\":{\"username\":\"${AIRCO_USER}\",\"password\":\"${AIRCO_PASSWORD}\"}}" \ --output-document=${LOGIN_RESPONSE} \ --header="Content-Type: application/json" \ --header="Accept: application/json" \ --tries=3 \ --timeout=30 \ http://${AIRCO_IP}/api.cgi 2> ${LOGIN_ERROR} LOGIN_RC=$? if [ "${LOGIN_RC}" -ne 0 ]; then cat ${LOGIN_ERROR}|stderr EXIT=1 fi if [ "$(grep -c '"success":true' ${LOGIN_RESPONSE})" -ne 1 ]; then echo "something went wrong while logging in"|stderr echo "response: $(cat ${LOGIN_RESPONSE})"|stderr EXIT=1 fi #pseudo: get sessionID from login SESSION_ID=$(awk -F '"sessionID":"' '{print $2}' ${LOGIN_RESPONSE}|awk -F '"' '{print $1}') #--------------------------------- if [ "${SESSION_ID}" != "" ]; then ACTION_RESPONSE=$(mktemp) ACTION_ERROR=$(mktemp) if [ "${DIRECTION}" == "set" ]; then POST_DATA="{\"command\":\"setdatapointvalue\",\"data\":{\"sessionID\":\"${SESSION_ID}\",\"uid\":${WORK_UID},\"value\":${VALUE}}}" else POST_DATA="{\"command\":\"getdatapointvalue\",\"data\":{\"sessionID\":\"${SESSION_ID}\",\"uid\":${WORK_UID}}}" fi wget --load-cookies=${COOKIE} \ --post-data="${POST_DATA}" \ --output-document=${ACTION_RESPONSE} \ --header="Content-Type: application/json" \ --header="Accept: application/json" \ --tries=3 \ --timeout=30 \ http://${AIRCO_IP}/api.cgi 2> ${ACTION_ERROR} ACTION_RC=$? if [ "${ACTION_RC}" -ne 0 ]; then cat ${ACTION_ERROR}|stderr EXIT=1 fi if [ "$(grep -c '"success":true' ${ACTION_RESPONSE})" -eq 1 ]; then if [ "${DIRECTION}" == "set" ]; then echo "saved"; else RESPONSE_VALUE=$(awk -F ',"value":' '{print $2}' ${ACTION_RESPONSE}|awk -F ',"status"' '{print $1}') #sed 's/\"//g' echo "${RESPONSE_VALUE}" fi else echo "${DIRECTION} failed"|stderr echo "response: $(cat ${ACTION_RESPONSE})"|stderr EXIT=1 fi #end if SESSION_ID fi #--------------------------------------------- #cleanup if [ -f "${COOKIE}" ]; then rm ${COOKIE}; fi if [ -f "${LOGIN_RESPONSE}" ]; then rm ${LOGIN_RESPONSE}; fi if [ -f "${LOGIN_ERROR}" ]; then rm ${LOGIN_ERROR}; fi if [ -f "${ACTION_RESPONSE}" ]; then rm ${ACTION_RESPONSE}; fi if [ -f "${ACTION_ERROR}" ]; then rm ${ACTION_ERROR}; fi exit ${EXIT}...