+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 17
  1. #1
    Registriert seit
    Jun 2020
    Ort
    Wachau, Österreich
    Beiträge
    207

    Standard HS100 über die Cloud steuern

    Ich würde gerne versuchen, meine HS100 nicht direkt, sondern über die Cloud steuern. Es gibt da viele Ansätze, meine PHP-Kenntnisse sind aber sehr eingeschränkt und Beispiele transferieren ist nicht ganz einfach.
    Ich hab da aber jetzt einen Ansatz gefunden, der vielversprechend aussieht, leider ist der Code für Windows.


    Die UUID wird hier generiert https://www.uuidgenerator.net/version4
    Token ermitteln
    Code:
    curl -X POST -H "Content-Type: application/json" 
    -d "{ \"method\" : \"login\", \"params\" : {\"appType\" : \"Kasa_Android\", 
    \"cloudPassword\" : \"OUR PASSWORD HERE\", \"cloudUserName\" : \"OUR USER NAME HERE\", 
    \"terminalUUID\" : \"YOUR JUST ACQUIRED UUID HERE\" }}" https://eu-wap.tplinkcloud.com
    Device ID ermitteln
    Code:
    curl -X POST -H "Content-Type: application/json" -d "{ \"method\" : \"getDeviceList\" }" 
    https://eu-wap.tplinkcloud.com?token=YOUR JUST ACQUIRED TOKEN HERE
    Ein- und Ausschalten
    Code:
    curl -X POST -H "Content-Type: application/json" -d 
    "{ \"method\" : \"passthrough\", \"params\" : { \"deviceId\" : \"OUR DEVICE ID HERE\", 
    \"requestData\" : '{ \"system\" : { \"set_relay_state\" : { \"state\" : 1}}}'}}" 
    https://eu-wap.tplinkcloud.com/?token=OUR TOKEN HERE
    Code:
    curl -X POST -H "Content-Type: application/json" 
    -d "{ \"method\" : \"passthrough\", \"params\" : { \"deviceId\" : \"OUR DEVICE ID HERE\", 
    \"requestData\" : '{ \"system\" : { \"set_relay_state\" : { \"state\" : 0}}}'}}" 
    https://eu-wap.tplinkcloud.com/?token=OUR TOKEN HERE
    Den aktuellen Status bekommt man sicher auch noch eirgendwie raus, da such ich noch.



    Meine finale Version

    Token ermitteln
    PHP-Code:
    <?php

    $username
    ="";
    $password="";

    //Token ermitteln
    $url 'https://eu-wap.tplinkcloud.com';
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_POSTtrue);
    $content = array (
    'method' => 'login',
    'params' => array (
    'appType' => 'Kasa_Android',
    'cloudUserName' => $username,
    'cloudPassword' => $password,
    'terminalUUID' => ''
    )
    );
    curl_setopt($chCURLOPT_HTTPHEADER,array("Content-type: application/json"));
    curl_setopt($chCURLOPT_POSTFIELDSjson_encode($content));
    $result curl_exec($ch);
    $token=json_decode($result,true)["result"]["token"];
    setvalue(28026/*IPS Variable die den Wert von Token aufnimmt*/,$token);
    Instanzen pro Schalter erstellen
    PHP-Code:
    <?php
    //Token ermitteln
    include(IPS_GetScriptFile(18209/*Skript für die Ermittlung des Tokens*/));

    $url 'https://eu-wap.tplinkcloud.com?token='.GetValue(28026/*Token*/);
    $devicelist="";
    $InsID=0;
    $VarID=0;
    $root=getvalue(37924/*ID der Kategorie wo die Instanzen erstellt werden sollen*/);
    $GUIDDummy=getvalue(39342/*UID der Dummy Instanz*/);
    $ActionScriptID=getvalue(50777); /*ID des Skripts füs Schalten */
    if ($root>and $GUIDDummy != ""/*nur zur Sicherheit, sollten die Werte mal verloren gehen */
    {
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    curl_setopt($chCURLOPT_POSTtrue);
        
    $content = array (
        
    'method' => 'getDeviceList'
        
    );
        
    curl_setopt($chCURLOPT_HTTPHEADER,array("Content-type: application/json"));
        
    curl_setopt($chCURLOPT_POSTFIELDSjson_encode($content));
        
    $result curl_exec($ch);
        
    $devicelist=json_decode($result,true)["result"]["deviceList"];

        foreach (
    $devicelist as $device)
        {
            
    $instanceID=@IPS_GetInstanceIDByName($device["alias"],$root); /*Prüfen ob die Instanz schon vorhanden ist*/
            
    if ($instanceID == false)
            {
                
    //Schalterinstanz
                
    $InsID IPS_CreateInstance($GUIDDummy);
                
    IPS_SetName($InsID$device["alias"]);
                
    IPS_SetParent($InsID$root);

                
    //Schaltervariable
                
    $VarID IPS_CreateVariable(0);
                
    IPS_SetName($VarID,$device["alias"]); 
                
    IPS_SetParent($VarID,$InsID); 
                
    IPS_SetVariableCustomProfile($VarID,"~Switch");
                
    IPS_SetVariableCustomAction($VarID,$ActionScriptID);

                
    //DeviceID Variable
                
    $VarID IPS_CreateVariable(3);
                
    IPS_SetName($VarID,$device["alias"]."ID");
                
    IPS_SetParent($VarID,$InsID); 
                
    setvalue($VarID,$device["deviceId"]);
            }
        }
    }
    /* Instanz anlegen eindeutig mit deviceMac
    varialbe boolean für ein aus
    variable string mit deviceId string*/
    Schalten
    PHP-Code:
    <?php
    $DeviceID
    ="";
    $newStatus 0;
    $SchalterID=0;
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    $SchalterID=$_IPS['VARIABLE'];
    include(
    IPS_GetScriptFile(18209/*Skript für die Ermittlung des Tokens*/));

    $Variablen=IPS_GetChildrenIDs(IPS_GetParent($SchalterID));
    foreach (
    $Variablen as $Variable)
    {
        if(
    IPS_GetVariable($Variable)["VariableType"]==3$DeviceID=getvalue($Variable);
    }
    //Ein- und Ausschalten
    $url 'https://eu-wap.tplinkcloud.com?token='.$token;
    if (
    getvalue($SchalterID)==true){
        
    $newStatus=1;
    }
    else
    {
        
    $newStatus=0;
    }
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_POSTtrue);
    $content = array ( 'method' => 'passthrough',
    "params" => array( "deviceId" => $DeviceID,
    "requestData" => "{\"system\":{\"set_relay_state\":{\"state\": $newStatus }}}" ) );

    curl_setopt($chCURLOPT_HTTPHEADER,array("Content-type: application/json"));
    curl_setopt($chCURLOPT_POSTFIELDSjson_encode($content));
    $result curl_exec($ch);
    if (
    json_decode($result,true)["error_code"] == 0){

        
    //Gerätestatus abfragen
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    curl_setopt($chCURLOPT_POSTtrue);
        
    $content = array ( 'method' => 'passthrough',
        
    "params" => array( "deviceId" => $DeviceID,
        
    "requestData" => json_encode(array("system" => array("get_sysinfo" => null,),))));

        
    curl_setopt($chCURLOPT_HTTPHEADER,array("Content-type: application/json"));
        
    curl_setopt($chCURLOPT_POSTFIELDSjson_encode($content));
        
    $result curl_exec($ch);
        
    $result=json_decode(json_decode($result,true)["result"]["responseData"],true);
        
    setvalue($SchalterID,$result["system"]["get_sysinfo"]["relay_state"]==1);
    }
    else{
            
    setvalue($SchalterID,false);
    }
    Statusaktualisierung
    PHP-Code:
    <?php
    $Kategorie
    getvalue(37924);
    $Instanzen=IPS_GetChildrenIDs($Kategorie);
    $IDSchalter=0;
    $IDDeviceID=0;
    include(
    IPS_GetScriptFile(18209/*Skript für die Ermittlung des Tokens*/)); /*Kategorie wo die Intanzen für die Schalter liegen*/
    /*Es werden die Instanzen, also die Schalter, und dann die Variablen der jeweiligen Instanz durchlaufen*/
    foreach ($Instanzen as $Instanz)
    {
        
    $Variablen IPS_GetChildrenIDs($Instanz);
        foreach (
    $Variablen as $Variable)
        {
            if(
    IPS_GetVariable($Variable)["VariableType"]==0)
            {
                
    $IDSchalter=$Variable;
            }
            else
            {
                
    $IDDeviceID=$Variable;
            }
        }
        
    //Gerätestatus abfragen
        
    $url 'https://eu-wap.tplinkcloud.com?token='.$token;
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL$url);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    curl_setopt($chCURLOPT_POSTtrue);
        
    $content = array ( 'method' => 'passthrough',
        
    "params" => array( "deviceId" => getvalue($IDDeviceID),
        
    "requestData" => json_encode(array("system" => array("get_sysinfo" => null,),))));

        
    curl_setopt($chCURLOPT_HTTPHEADER,array("Content-type: application/json"));
        
    curl_setopt($chCURLOPT_POSTFIELDSjson_encode($content));
        
    $result curl_exec($ch);
        if (
    json_decode($result,true)["error_code"] == 0){
            
    $result=json_decode(json_decode($result,true)["result"]["responseData"],true);
            
    setvalue($IDSchalter,$result["system"]["get_sysinfo"]["relay_state"]==1);
        }
        else
        {
            
    setvalue($IDSchalter,false);
        }
    }
    Anbei noch ein paar Screenshots von den Skripten und Instanzen im Objektbaum
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	hs1001.png 
Hits:	11 
Größe:	32.9 KB 
ID:	54836   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	hs1002.png 
Hits:	8 
Größe:	11.2 KB 
ID:	54837  
    Geändert von hfichtinger (23.07.20 um 14:25 Uhr)

  2. #2
    Registriert seit
    Aug 2016
    Beiträge
    3,768

    Versuch mal ob du so den Token ermitteln kannst:

    PHP-Code:
    $ch curl_init();
    curl_setopt($chCURLOPT_URL'https://eu-wap.tplinkcloud.com');
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_POSTtrue);
    curl_setopt($chCURLOPT_HTTPHEADER, [
        
    'Content-Type: application/json',
    ]);
    curl_setopt($chCURLOPT_POSTFIELDSjson_encode([
        
    'method'       => 'login',
        
    'params'       =>  json_encode([
            
    'appType'       => 'Kasa_Android',
            
    'cloudPassword'       => 'OUR PASSWORD HERE',
            
    'cloudUserName'       => 'OUR USER NAME HERE',
            
    'terminalUUID'        => 'YOUR JUST ACQUIRED UUID HERE',
        ])
    ]));
    $result curl_exec($ch); 
    Grüße,
    Kai
    IPS 5.2, auf Tinkerboard und RPI, piVCCU, Homematic & Homematic IP, diverse Tasmota Geräte, Shelly, GHoma, LG HomBot, Sonos, Tvheadend, HomeKit, AppleTV
    Einfach mal rein schauen: IP-Symcon Discord Channel

  3. #3
    Registriert seit
    Jun 2020
    Ort
    Wachau, Österreich
    Beiträge
    207

    Damit bekomm ich einen Fehler.
    Hab aber in der Zwischenzeit fleißig gesucht und das gefunden
    PHP-Code:
    $url 'https://eu-wap.tplinkcloud.com';
    $curl curl_init$url );
    $content = array (
    'method' => 'login',
    'params' => array (
    'appType' => 'Kasa_Android',
    'cloudUserName' => $username,
    'cloudPassword' => $password,
    'terminalUUID' => ''
    )
    );
    curl_setopt$curlCURLOPT_POSTFIELDSjson_encode($content) );
    curl_setopt$curlCURLOPT_HTTPHEADER,
    array(
    "Content-type: application/json") );
    ...
    $json_response curl_exec($curl);
    $response json_decode($json_responsetrue);
    $token $response['result']['token']; 
    PHP-Code:
    $content = array ( $content = array ( 'method' => 'getDeviceList' );
    .....
    $response json_decode($json_responsetrue);
    $deviceList $response['result']['deviceList']; 
    PHP-Code:
    How to get the device status (on/off)
    $content = array ( 'method' => 'passthrough',
    "params" => array( "deviceId" => $deviceID,
    "requestData" => json_encode(array("system" => array("get_sysinfo" => null,),))));

    there are two issues herefirstlythe returned JSON is malformed so the php json_decode won’t worksecondlythe status for a plug comes in the “relay_state” field while the status for a light bulb comes in the “on_off” fieldRegular expressions can do the job.

    $found preg_match'/"relay_state":([0-9])/i'$response['result']['responseData'], $matches );
    if( 
    $found == )
    $found preg_match'/"on_off":([0-9])/i'$response['result']['responseData'], $matches );
    $status $matches[1];

    How to set the status of a plug and a bulb
    For plugs
    $content 
    = array ( 'method' => 'passthrough',
    "params" => array( "deviceId" => $deviceID,
    "requestData" => "{\"system\":{\"set_relay_state\":{\"state\": $newStatus }}}" ) );

    for 
    light bulbs
    $content 
    = array ( 'method' => 'passthrough'"params" => array( "deviceId" => $deviceID"requestData" => "{\"smartlife.iot.smartbulb.lightingservice\":{ \"transition_light_state\" : {\"on_off\": $newStatus, \"transition_period\": 0} } }" ) ); 

    Quelle: TP-Link API : same hacks on PHP – SmartHome stuff by mblaya
    Damit bekomm ich den Token zuürck. Beim Anderen bin ich noch am basteln ;-)

  4. #4
    Registriert seit
    Aug 2016
    Beiträge
    3,768

    Was gab es denn für einen Fehler?
    Dann hast du ja jetzt einen Ansatz gefunden, mit dem du weiter machen kannst.

    Grüße,
    Kai
    IPS 5.2, auf Tinkerboard und RPI, piVCCU, Homematic & Homematic IP, diverse Tasmota Geräte, Shelly, GHoma, LG HomBot, Sonos, Tvheadend, HomeKit, AppleTV
    Einfach mal rein schauen: IP-Symcon Discord Channel

  5. #5
    Registriert seit
    Jun 2020
    Ort
    Wachau, Österreich
    Beiträge
    207

    Zitat Zitat von KaiS Beitrag anzeigen
    Was gab es denn für einen Fehler?
    Dann hast du ja jetzt einen Ansatz gefunden, mit dem du weiter machen kannst.

    Grüße,
    Kai
    Sorry, das war unhöflich.

    Fehler ist:string(69) "{"error_code":-20105,"msg":"Parameter has different type with value"}"

  6. #6
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    7,412

    Zitat Zitat von hfichtinger Beitrag anzeigen
    Ich würde gerne versuchen, meine HS100 nicht direkt, sondern über die Cloud steuern
    Ich bin zwar kein Cloud Freund und verstehe immer noch nicht warum ich einem Server in China oder sonst wo sagen muss das ich meine Steckdose, die sich im gleichen Netzwerk und im gleichen Haus befindet, anschalten will.
    Wenn das bei Dir aber so weit funktionieren sollte und Du das ausprobiert hast, kann man ja optional einen Auswahlschalter im Modul ergänzen und das dann auswählen lassen. Vielleicht lassen sich ja die neueren Steckdosen einwandfrei über die Cloud steuern das wäre dann ein Vorteil. Ich bin mal gespannt auf Rückmeldung von Dir was auf dem Weg funktioniert.

  7. #7
    Registriert seit
    Jun 2020
    Ort
    Wachau, Österreich
    Beiträge
    207

    Aufgegeben wird ein Brief
    Den Token bekomme ich jetzt fehlerfrei zurück, und auch das json Format dürfte jetzt passen. Dieser Ansatz ist eine Mischung aus beiden. Bei dem einen hat das eine, beim anderen das andere funktioniert.
    PHP-Code:
    $url 'https://eu-wap.tplinkcloud.com';
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_POSTtrue);
    $content = array (
    'method' => 'login',
    'params' => array (
    'appType' => 'Kasa_Android',
    'cloudUserName' => $username,
    'cloudPassword' => $password,
    'terminalUUID' => ''
    )
    );
    curl_setopt($chCURLOPT_HTTPHEADER,array("Content-type: application/json"));
    curl_setopt($chCURLOPT_POSTFIELDSjson_encode($content));
    $result curl_exec($ch);
    $token=json_decode($result,true)["result"]["token"];
    var_dump($token); 
    Ich mache mal weiter. Wenn ich Fragen habe ....

  8. #8
    Registriert seit
    Aug 2016
    Beiträge
    3,768

    Zitat Zitat von hfichtinger Beitrag anzeigen
    Sorry, das war unhöflich.

    Fehler ist:string(69) "{"error_code":-20105,"msg":"Parameter has different type with value"}"

    Dann passt das mit dem "params" nicht, denke liegt am doppelten json_encode.

    PHP-Code:
    $ch curl_init();
    curl_setopt($chCURLOPT_URL'https://eu-wap.tplinkcloud.com');
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_POSTtrue);
    curl_setopt($chCURLOPT_HTTPHEADER, [
        
    'Content-Type: application/json',
    ]);
    curl_setopt($chCURLOPT_POSTFIELDSjson_encode([
        
    'method'       => 'login',
        
    'params'       =>  [
            
    'appType'       => 'Kasa_Android',
            
    'cloudPassword'       => 'OUR PASSWORD HERE',
            
    'cloudUserName'       => 'OUR USER NAME HERE',
            
    'terminalUUID'        => 'YOUR JUST ACQUIRED UUID HERE',
        ]
    ]));
    $result curl_exec($ch); 
    Kannst du es mal so probieren, würde gerne wissen ob es daran lag.

    Grüße,
    Kai
    IPS 5.2, auf Tinkerboard und RPI, piVCCU, Homematic & Homematic IP, diverse Tasmota Geräte, Shelly, GHoma, LG HomBot, Sonos, Tvheadend, HomeKit, AppleTV
    Einfach mal rein schauen: IP-Symcon Discord Channel

  9. #9
    Registriert seit
    Jun 2020
    Ort
    Wachau, Österreich
    Beiträge
    207

    Zitat Zitat von KaiS Beitrag anzeigen
    Dann passt das mit dem "params" nicht, denke liegt am doppelten json_encode.
    Kannst du es mal so probieren, würde gerne wissen ob es daran lag.

    Grüße,
    Kai
    Hab ich gemacht und es funktioniert. Bekomme das richtige Ergebnis zurück.

    Ich bin auch schon einen Schritt weiter. Nächster Schritt war die Liste der Geräte. Das geht auch schonl.Bekomme ein großes Array mit allen Informationen zurück.

  10. #10
    Registriert seit
    Jun 2020
    Ort
    Wachau, Österreich
    Beiträge
    207

    So, der Rumpf funktioniert. Inklusive ein und ausschlaten. Deviceist kann abgefragt werden, Status und Änderung Status. Mein Skript ist ein Anfang. Daher ist z.b. Device ID derzeit fix zum testen eingetragen und auch der neue Status.
    Was mir damit vorschwebt ist
    * Neuerstellung von Variablen aufgrund der Gerteliste. Sollte ein neues hinzukommen, dann soll dafür eine neue Variable erstellt werden (ich glaube das geht)
    *Abfrage des Status für alle Geräte in regelmßigen Abständen.
    * und natürich das ein und Ausschalten.

    hier mal mein Rumpfskript
    PHP-Code:
    <?php
    $username
    ="";
    $password="";

    //Token ermitteln
    $url 'https://eu-wap.tplinkcloud.com';
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_POSTtrue);
    $content = array (
    'method' => 'login',
    'params' => array (
    'appType' => 'Kasa_Android',
    'cloudUserName' => $username,
    'cloudPassword' => $password,
    'terminalUUID' => ''
    )
    );
    curl_setopt($chCURLOPT_HTTPHEADER,array("Content-type: application/json"));
    curl_setopt($chCURLOPT_POSTFIELDSjson_encode($content));
    $result curl_exec($ch);
    $token=json_decode($result,true)["result"]["token"];
    //var_dump($token);

    //Geräteliste
    /*
    $url = 'https://eu-wap.tplinkcloud.com?token='.$token;
    $devicelist="";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);
    $content = array (
    'method' => 'getDeviceList'
    );
    curl_setopt($ch, CURLOPT_HTTPHEADER,array("Content-type: application/json"));
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($content));
    $result = curl_exec($ch);
    $devicelist=json_decode($result,true)["result"]["deviceList"];
    var_dump($devicelist);
    */

    //Gerätestatus abfragen
    /*$url = 'https://eu-wap.tplinkcloud.com?token='.$token;
    $status="";
    $deviceID = ""; /*die DeviceID ist im Array $devicelist enthalten*/
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_POSTtrue);
    $content = array ( 'method' => 'passthrough',
    "params" => array( "deviceId" => $deviceID,
    "requestData" => json_encode(array("system" => array("get_sysinfo" => null,),))));

    curl_setopt($chCURLOPT_HTTPHEADER,array("Content-type: application/json"));
    curl_setopt($chCURLOPT_POSTFIELDSjson_encode($content));
    $result curl_exec($ch);
    //$status=json_decode($result,true)["result"]["deviceList"];
    $result=json_decode(json_decode($result,true)["result"]["responseData"],true);
    $status $result["system"]["get_sysinfo"]["relay_state"];*/

    //Ein- und Ausschalten
    $url 'https://eu-wap.tplinkcloud.com?token='.$token;
    $deviceID "";
    $newStatus 0;
    $ch curl_init();
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_POSTtrue);
    $content = array ( 'method' => 'passthrough',
    "params" => array( "deviceId" => $deviceID,
    "requestData" => "{\"system\":{\"set_relay_state\":{\"state\": $newStatus }}}" ) );

    curl_setopt($chCURLOPT_HTTPHEADER,array("Content-type: application/json"));
    curl_setopt($chCURLOPT_POSTFIELDSjson_encode($content));
    $result curl_exec($ch);/' Man bekommt hier das Ergenis zurück, ob es erfolgreich war oder nicht*/
    Kosmetische Unzulänglichkeiten bitte ich zu entschuldigen. Ich hab mir das alles zusammengesucht. Learning by doing

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 12.07.20, 10:21
  2. Befehle TP-Link HS100
    Von hfichtinger im Forum Skripte, PHP, SQL
    Antworten: 4
    Letzter Beitrag: 29.06.20, 13:43
  3. Antworten: 34
    Letzter Beitrag: 17.03.20, 15:48
  4. ESP8266 Geräte und die Cloud
    Von tomgr im Forum Bastel-Ecke
    Antworten: 18
    Letzter Beitrag: 29.01.19, 09:30
  5. Automatisches IPS Backup in die Cloud (copy.com)
    Von drapple im Forum Allgemeine Diskussion
    Antworten: 13
    Letzter Beitrag: 31.12.15, 12:13