+ Antworten
Seite 2 von 2 ErsteErste 1 2
Ergebnis 11 bis 12 von 12
  1. #11
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    7,288

    Zitat Zitat von doctee Beitrag anzeigen
    ...Klasse, danke. Probiere ich morgen gleich mal aus!
    Und konntest Du schon testen ob es funktioniert?

  2. #12
    Registriert seit
    Mar 2009
    Ort
    München + 1 more
    Beiträge
    71

    Red face läuft!

    Update wegen ID-Länge!!!

    ...also nochmals danke, Fonzo! Bin beeindruckt - das Skript hat sofort funktioniert!

    Zwei Dinge noch als kurzer Hinweis für alle Nutzer:

    - Die IDs vom Gateway und den TapLinkern darf man nicht mit den in der App angezeigten Bindestrichen in die u.g. Variablen eintragen, da sonst Fehlermeldung
    - App/Webportal zeigen die IDs anonymisiert an (letzten 4 Stellen mit xxxx); Achtung: Die IDs sind auch auf den Geräten mit 20 Digits angegeben, aber die API verträgt nur die ersten 16 Digits! Also nur die ersten 16 Stellen (ohne Bindestrich) im Script eintragen. Die API-Funktion getWateringStatus reagiert in der V1.1 dummerweise bei einer zu langen ID mit dem falschen Status...

    Hier noch eine um einige weitere Funktionen ergänzte Version, die restlichen Funktionen baue ich bei Bedarf ein.

    PHP-Code:
    $gatewayID 'xxx'// ohne Bindestriche, 16 Digits
    $taplinker1 'xxx'// ohne Bindestriche, 16 Digits

    $link_tap = new LinkTap('xxx''xxx'$gatewayID$taplinker1); 
    // $result = $link_tap->Watering_On(20);
    // echo $result.PHP_EOL;
    // var_dump($result);
    $result $link_tap->Get_All_Devices();
    $status json_decode($result);
    print_r($status);

    class 
    LinkTap 

        private const 
    LINK_TAP_BASE_URL 'https://www.link-tap.com/api/'
        private const 
    ACTIVATE_INSTANT_MODE 'activateInstantMode'
        private const 
    ACTIVATE_INTERVAL_MODE 'activateIntervalMode'
        private const 
    QUERY_WATERING_STATUS 'getWateringStatus';
        private const 
    GET_ALL_DEVICES 'getAllDevices';

        public 
    $username// String type. Your LinkTap account's username 
        
    public $apiKey// String type. Your API key 
        
    public $gatewayId// String type. Your LinkTap Gateway's first 16-digits/letters ID, case insensitive, no dash symbol, e,g, 3F7A23FE004B1200 
        
    public $taplinkerId// String type. Your LinkTap Taplinker's first 16-digits/letters ID, case insensitive, no dash symbol, e,g, 67ABCDEF004B1200 

        
    function __construct(string $usernamestring $api_keystring $gatewayIdstring $taplinkerId
        { 
            
    $this->username $username
            
    $this->apiKey $api_key
            
    $this->gatewayId $gatewayId
            
    $this->taplinkerId $taplinkerId
        } 

        
    /** Watering On 
         * @param int $duration The watering duration (unit is minute) the range is from 1 minute to 1439 minutes. 
         * @return string 
         */ 
        
    public function Watering_On(int $duration
        { 
            
    $url self::LINK_TAP_BASE_URL self::ACTIVATE_INSTANT_MODE
            
    $data json_encode([ 
                
    'username' => $this->username
                
    'apiKey' => $this->apiKey
                
    'gatewayId' => $this->gatewayId
                
    'taplinkerId' => $this->taplinkerId
                
    'action' => true
                
    'duration' => $duration
                
    'eco' => true
                
    'ecoOn' => 1
                
    'ecoOff' => 
            
    ]); 
            
    $response $this->PostData($url$data); 
            return 
    $response
        } 

        
    /** Watering Off 
         * @param int $duration 
         * @return string 
         */ 
        
    public function Watering_Off() 
        { 
            
    $url self::LINK_TAP_BASE_URL self::ACTIVATE_INSTANT_MODE
            
    $data json_encode([ 
                
    'username' => $this->username
                
    'apiKey' => $this->apiKey
                
    'gatewayId' => $this->gatewayId
                
    'taplinkerId' => $this->taplinkerId
                
    'action' => false
                
    'duration' => 
            
    ]); 
            
    $response $this->PostData($url$data); 
            return 
    $response
        } 

        
    /** Watering Status of a single Taplinker
         * @param (string $taplinkerId)
         * @return string 
         */ 
        
    public function Watering_Status() 
        { 
            
    $url self::LINK_TAP_BASE_URL self::QUERY_WATERING_STATUS
            
    $data json_encode([ 
                
    'username' => $this->username
                
    'apiKey' => $this->apiKey,
                
    'taplinkerId' => $this->taplinkerId 
            
    ]); 
            
    $response $this->PostData($url$data); 
            return 
    $response
        } 

        
    /** Get All Devices 
         * @param  (string $gatewayId)
         * @return string 
         */ 
        
    public function Get_All_Devices() 
        { 
            
    $url self::LINK_TAP_BASE_URL self::GET_ALL_DEVICES
            
    $data json_encode([ 
                
    'username' => $this->username
                
    'apiKey' => $this->apiKey
                
    'gatewayId' => $this->gatewayId
            ]); 
            
    $response $this->PostData($url$data); 
            return 
    $response
        } 


        protected function 
    PostData($url$data
        { 
            
    $ch curl_init(); 

            
    curl_setopt($chCURLOPT_POST1); 
            
    curl_setopt($chCURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
            
    curl_setopt($chCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_1); 
            
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue); 
            
    curl_setopt($chCURLOPT_HEADERfalse); // geändert von true damit json_decode() von result funkioniert; falls Header von Interesse, dann curl_getinfo($ch, CURLINFO_HTTP_CODE)
            
    curl_setopt($chCURLOPT_POSTFIELDS$data); 
            
    curl_setopt($chCURLOPT_URL$url); 

            
    $result curl_exec($ch); 
            if (
    curl_errno($ch)) { 
                
    trigger_error('Error:' curl_error($ch)); 
            } 
            
    $info curl_getinfo($ch); 
            
    // var_dump($info); 
            
    $header_out curl_getinfo($chCURLINFO_HEADER_OUT); 
            
    // var_dump($header_out); 
            
    curl_close($ch); 
            return 
    $result
        } 

    Geändert von doctee (20.06.20 um 19:20 Uhr)
    Viele Grüße!
    NUC6CAYH - Homematic - Tasmota - Windows 10 - IPS 5.4 - HighCharts

Ähnliche Themen

  1. IPSWatering - eine Bewässerungssteuerung
    Von Brownson im Forum IPSLibrary
    Antworten: 320
    Letzter Beitrag: 30.06.20, 15:15
  2. Antworten: 3
    Letzter Beitrag: 08.09.16, 11:21
  3. Antworten: 5
    Letzter Beitrag: 06.10.12, 18:37
  4. Bewässerungssteuerung & IPS
    Von jwka im Forum Haustechnik
    Antworten: 3
    Letzter Beitrag: 15.06.12, 18:40