I use this, for example, to switch on a string of lights on the day of arrival or to charge the night storage heating if a certain info code is set in the booking on the day before arrival.
Create an autoaction and enter the PHP script ‘beds24-shelly-steuern.php’ under ‘Webhook’. The parameters for the control are transferred under ‘Data in body’:
Code: Select all
id:b0b21c1xxxxx
shelly_server:shelly-123-eu.shelly.cloud
auth_key:ABCDEFGHIJKLMNPQRSTUVWXYZABCDEFGHIJKLMNPQRSTUVWXYZABCDEFGHIJKLMNPQRSTUVWXYZ
shelly_url:device/relay/control
parameter:channel=0&turn=on
email_result:[email protected]
remarks:Text, z.B. mit Template Variablen [GUESTFULLNAME] und [BOOKID]
Weitere Infos & Doku direkt im Script.
Code: Select all
<?php
/*
* - Anschalten der Lichterkette aus beds24 mit einem PHP Skript über die Shelly Cloud -
* Version 0.1 27.09.2024
*
* https://domain.de/pfade/beds24-shelly-steuern.php
*
* curl -X POST https://shelly-123-eu.shelly.cloud/device/relay/control -d "channel=0&turn=on&id=b0b21c123456&auth_key=Ksdj4ssvEDd38sdckjhsdf834kjsdj3DJSDKSDLDSDFKSD5ks84jfh3Jj4Sfj443sksch3$3fjfjsSGSftS4fksk4ss"
* Einstellungen in beds24
* - in einer Autoaction unter 'Webhook' das Script eintragen: https://domainname.de/pfad_zum_script/shelly-plug-einschalten.php
* - unter 'Daten im Body' die Parameter zur Steuerung eintragen:
* - id:<Shelly Geräte-Id>
* - shelly_server:<Shelly Cloud Server>
* - auth_key:<Shelly Cloud-Autorisierungs-Schlüssel>
* - parameter:<Shelly Befehle>
* - email_result:<*optional* e-mail für Empfänger des Schaltergebnisses>
* - remarks:<*optional* beliebige Anmerkungen für E-Mail>
*
* Beispiel:
* id:b0b21c123456
* shelly_server:shelly-123-eu.shelly.cloud
* auth_key:Ksdj4ssvEDd38sdckjhsdf834kjsdj3DJSDKSDLDSDFKSD5ks84jfh3Jj4Sfj443sksch3$3fjfjsSGSftS4fksk4ss
* shelly_url:device/relay/control
* parameter:channel=0&turn=on
* email_result:[email protected]
* remarks:Text, auch mit Template Variablen [GUESTFULLNAME] und [BOOKID] möglich
*/
/* ----------------------------------------------------------- */
/* Parameter & Einstellungen */
/* ----------------------------------------------------------- */
$p_test = false; /* im Testmodus kommen die Parameter direkt aus dem Script statt über beds24 */
/* Body Daten zum direkten Testen d.h. Direktaufruf des Scripts ohne Autoaction */
$test_body = array( /* zum direkten Aufruf des Scripts die Parameter hier testweise eintragen */
/* https://shelly-api-docs.shelly.cloud/cloud-control-api/communication */
"id" => "b0b21c1xxxxx",
"shelly_server" => "shelly-123-eu.shelly.cloud",
"auth_key" => "ABCDEFGHIJKLMNPQRSTUVWXYZABCDEFGHIJKLMNPQRSTUVWXYZABCDEFGHIJKLMNPQRSTUVWXYZABCDEFGHIJKLMNPQRSTUVWXYZ",
"shelly_url" => "device/relay/control",
"parameter" => "channel=0&turn=on",
"email_result" => "[email protected]",
"remarks" => "Text, z.B. mit Template Variablen [GUESTFULLNAME] und [BOOKID]"
);
/* ----------------------------------------------------------- */
/* ab hier normalerweise keine Änderungen mehr vornehmen
/* ----------------------------------------------------------- */
/* Body aus Post message lesen und in Variablen $body[keyname] einlesen */
if ($p_test == false ) {
$hf_body = explode( "\n", file_get_contents('php://input') );
$body = array();
foreach ($hf_body as $v) {
list($body_key,$body_value) = explode( ':', $v );
$body[$body_key] = $body_value;
}
}
else {
$body = $test_body; /* im Testmodus Parameter direkt aus dem Script nehmen */
}
ob_start(); /* Bildschirmausgabe buffern */
/* Prüfen ob wichtige Argumente übergeben */
if ( isset($body["shelly_server"]) == false ) { echo("Argument shelly_server fehlt, z.B.: shelly_server:servername<br>"); $body["shelly_server"] = "fehlt";}
if ( isset($body["shelly_url"]) == false ) { echo("Argument shelly_url fehlt, z.B. : shelly_url:device/relay/control<br>"); $body["shelly_url"] = "fehlt";}
if ( isset($body["parameter"]) == false ) { echo("Argument parameter fehlt, z.B.: parameter:channel=0&turn=on><br>"); $body["parameter"] = "fehlt";}
if ( isset($body["auth_key"]) == false ) { echo("Argument auth_key fehlt, z.B.: auth_key:Ksdj4ssvEDd38sdckjhsdf834kjsdj3DJSDKSDLDSDFKSD5ks84jfh3Jj4Sfj443sksch3$3fjfjsSGSftS4fksk4ss<br>"); $body["auth_key"] = "fehlt";}
$url = 'https://'.$body["shelly_server"].'/'.trim($body["shelly_url"], " /");
$ch=curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); /* Zertifikatswarnung übergehen */
curl_setopt($ch, CURLOPT_SSL_VERIFYSTATUS, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_PROXY_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,
$body["parameter"]."&id=".$body["id"]."&auth_key=".$body["auth_key"]);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
curl_close ($ch);
if ( $body["remarks"] ) { /* Anmerkungen fürs Protokoll/E-Mail ausgeben */
echo ("<br>".$body["remarks"]."<br>");
};
$output = ob_get_contents(); /* Bildschirmausgabe aus Buffer lesen */
ob_end_clean();
echo $output;
if ( $body["email_result"] ) {
mail($body["email_result"], 'Ergebnis Shelly Skript - Device: '.$body["id"], $output, 'From: beds24 Shelly Script <'.$body["email_result"].'>');
echo ("<br>Mail an: ".$body["email_result"]);
}
?>